Loading...
iokit/Kernel/IOKitDebug.cpp xnu-4570.71.2 xnu-3789.41.3
--- xnu/xnu-4570.71.2/iokit/Kernel/IOKitDebug.cpp
+++ xnu/xnu-3789.41.3/iokit/Kernel/IOKitDebug.cpp
@@ -62,23 +62,9 @@
 #define IODEBUG_CTLFLAGS        CTLFLAG_RD
 #endif
 
+SYSCTL_QUAD(_debug, OID_AUTO, iokit, IODEBUG_CTLFLAGS | CTLFLAG_LOCKED, &gIOKitDebug, "boot_arg io");
 SYSCTL_QUAD(_debug, OID_AUTO, iotrace, CTLFLAG_RW | CTLFLAG_LOCKED, &gIOKitTrace, "trace io");
 
-static int
-sysctl_debug_iokit
-(__unused struct sysctl_oid *oidp, __unused void *arg1, __unused int arg2, struct sysctl_req *req)
-{
-    SInt64 newValue;
-    int changed, error = sysctl_io_number(req, gIOKitDebug, sizeof(gIOKitDebug), &newValue, &changed);
-    if (changed) {
-        gIOKitDebug = ((gIOKitDebug & ~kIOKitDebugUserOptions) | (newValue & kIOKitDebugUserOptions));
-    }
-    return (error);
-}
-
-SYSCTL_PROC(_debug, OID_AUTO, iokit,
-        CTLTYPE_QUAD | IODEBUG_CTLFLAGS | CTLFLAG_NOAUTO | CTLFLAG_KERN | CTLFLAG_LOCKED,
-        &gIOKitDebug, 0, sysctl_debug_iokit, "Q", "boot_arg io");
 
 int             debug_malloc_size;
 int             debug_iomalloc_size;
@@ -259,7 +245,6 @@
     IOTrackingQueue *      queue;
     uint32_t               crc;
 
-    vm_tag_t      tag;
     uint32_t      count;
     size_t        size[2];
     uintptr_t     bt[kIOTrackingCallSiteBTs];
@@ -274,7 +259,6 @@
     uint32_t    zoneSize;
     uint32_t    count;
     uint32_t    found;
-    uint32_t    foundzlen;
     size_t      bytes;
 };
 
@@ -516,7 +500,7 @@
 uint64_t gIOTrackingAddTime;
 
 void
-IOTrackingAdd(IOTrackingQueue * queue, IOTracking * mem, size_t size, bool address, vm_tag_t tag)
+IOTrackingAdd(IOTrackingQueue * queue, IOTracking * mem, size_t size, bool address)
 {
     IOTrackingCallSite * site;
     uint32_t             crc, num;
@@ -538,7 +522,6 @@
     que = &queue->sites[crc % queue->numSiteQs];
     queue_iterate(que, site, IOTrackingCallSite *, link)
     {
-        if (tag != site->tag) continue;
         if (crc == site->crc) break;
     }
 
@@ -551,7 +534,6 @@
         site->queue      = queue;
         site->crc        = crc;
         site->count      = 0;
-        site->tag        = tag;
         memset(&site->size[0], 0, sizeof(site->size));
         bcopy(&bt[1], &site->bt[0], num * sizeof(site->bt[0]));
         assert(num <= kIOTrackingCallSiteBTs);
@@ -605,7 +587,6 @@
             queue->siteCount--;
             kfree(mem->site, sizeof(IOTrackingCallSite));
         }
-        mem->site = NULL;
     }
     IOTRecursiveLockUnlock(&queue->lock);
 }
@@ -627,7 +608,7 @@
     tracking->address = address;
     tracking->size    = size;
 
-    IOTrackingAdd(queue, &tracking->tracking, size, true, VM_KERN_MEMORY_NONE);
+    IOTrackingAdd(queue, &tracking->tracking, size, true);
 }
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
@@ -809,14 +790,14 @@
     uint64_t             vaddr, vincr;
     ppnum_t              ppn;
     uintptr_t            ptr, addr, vphysaddr, inst;
-    size_t               size, origsize;
+    size_t               size;
     uint32_t             baseIdx, lim, ptrIdx, count;
     boolean_t            is;
     AbsoluteTime         deadline;
 
-    instances       = ref->instances;
-    count           = ref->count;
-    size = origsize = ref->zoneSize;
+    instances = ref->instances;
+    count     = ref->count;
+    size      = ref->zoneSize;
 
     for (deadline = 0, vaddr = VM_MIN_KERNEL_AND_KEXT_ADDRESS;
          ;
@@ -854,14 +835,13 @@
                 }
                 else if (kInstanceFlagAddress & inst)
                 {
-                    addr            = ~((IOTrackingAddress *)instance)->address;
-                    origsize = size = ((IOTrackingAddress *)instance)->size;
-                    if (!size) size = 1;
+                    addr = ~((IOTrackingAddress *)instance)->address;
+                    size = ((IOTrackingAddress *)instance)->size;
                 }
                 else
                 {
-                    addr            = (uintptr_t) (instance + 1);
-                    origsize = size = instance->site->queue->allocSize;
+                    addr = (uintptr_t) (instance + 1);
+                    size = instance->site->queue->allocSize;
                 }
                 if ((ptr >= addr) && (ptr < (addr + size))
 
@@ -873,7 +853,6 @@
                         inst |= kInstanceFlagReferenced;
                         instances[baseIdx + (lim >> 1)] = inst;
                         ref->found++;
-                        if (!origsize) ref->foundzlen++;
                     }
                     break;
                 }
@@ -969,7 +948,7 @@
     {
         ref.bytes = 0;
         IOTrackingLeakScan(&ref);
-        IOLog("leaks(%d) scanned %ld MB, instance count %d, found %d (zlen %d)\n", idx, ref.bytes / 1024 / 1024, count, ref.found, ref.foundzlen);
+        IOLog("leaks(%d) scanned %ld MB, instance count %d, found %d\n", idx, ref.bytes / 1024 / 1024, count, ref.found);
         if (count <= ref.found) break;
     }
 
@@ -1043,9 +1022,8 @@
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
-static kern_return_t
+kern_return_t
 IOTrackingDebug(uint32_t selector, uint32_t options, uint64_t value,
-                uint32_t intag, uint32_t inzsize,
                 const char * names, size_t namesLen, 
                 size_t size, OSObject ** result)
 {
@@ -1141,7 +1119,6 @@
                 break;
             }
 
-
             case kIOTrackingGetTracking:
             {
                 if (kIOTrackingQueueTypeMap & queue->type) break;
@@ -1158,51 +1135,11 @@
                         assert(idx < num);
                         idx++;
 
-                        size_t tsize[2];
-                        uint32_t count = site->count;
-                        tsize[0] = site->size[0];
-                        tsize[1] = site->size[1];
-
-                        if (intag || inzsize)
-                        {
-                            uintptr_t addr;
-                            vm_size_t size, zoneSize;
-                            vm_tag_t  tag;
-
-                            if (kIOTrackingQueueTypeAlloc & queue->type)
-                            {
-                                addresses = false;
-                                count = 0;
-                                tsize[0] = tsize[1] = 0;
-                                queue_iterate(&site->instances, instance, IOTracking *, link)
-                                {
-                                    if (instance == site->addresses) addresses = true;
-
-                                    if (addresses) addr = ~((IOTrackingAddress *)instance)->address;
-                                    else           addr = (uintptr_t) (instance + 1);
-
-                                    kr = vm_kern_allocation_info(addr, &size, &tag, &zoneSize);
-                                    if (KERN_SUCCESS != kr) continue;
-
-                                    if ((VM_KERN_MEMORY_NONE != intag) && (intag != tag)) continue;
-                                    if (inzsize && (inzsize != zoneSize))                 continue;
-
-                                    count++;
-                                    tsize[0] += size;
-                                }
-                            }
-                            else
-                            {
-                                if (!intag || inzsize || (intag != site->tag))            continue;
-                            }
-                        }
-
-                        if (!count) continue;
-                        if (size && ((tsize[0] + tsize[1]) < size)) continue;
-
-                        siteInfo.count   = count;
-                        siteInfo.size[0] = tsize[0];
-                        siteInfo.size[1] = tsize[1];
+                        if (size && ((site->size[0] + site->size[1]) < size)) continue;
+
+                        siteInfo.count   = site->count;
+                        siteInfo.size[0] = site->size[0];
+                        siteInfo.size[1] = site->size[1];
 
                         CopyOutKernelBacktrace(site, &siteInfo);
                         data->appendBytes(&siteInfo, sizeof(siteInfo));
@@ -1383,7 +1320,7 @@
     namesLen = args->structureInputSize - sizeof(IOKitDiagnosticsParameters);
     if (namesLen) names = (typeof(names))(params + 1);
 
-    ret = IOTrackingDebug(selector, params->options, params->value, params->tag, params->zsize, names, namesLen, params->size, &result);
+    ret = IOTrackingDebug(selector, params->options, params->value, names, namesLen, params->size, &result);
 
     if ((kIOReturnSuccess == ret) && args->structureVariableOutputData) *args->structureVariableOutputData = result;
     else if (result) result->release();