Loading...
libkern/c++/OSMetaClass.cpp xnu-4570.41.2 xnu-2050.9.2
--- xnu/xnu-4570.41.2/libkern/c++/OSMetaClass.cpp
+++ xnu/xnu-2050.9.2/libkern/c++/OSMetaClass.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2016 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2006 Apple Inc. All rights reserved.
  *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
@@ -46,10 +46,9 @@
 #include <libkern/c++/OSLib.h>
 #include <libkern/OSAtomic.h>
 
+#include <IOKit/pwr_mgt/RootDomain.h>
+#include <IOKit/IOMessage.h>
 #include <IOKit/IOLib.h>
-
-#include <IOKit/IOKitDebug.h>
-
 
 __BEGIN_DECLS
 
@@ -67,6 +66,13 @@
 /*********************************************************************
 * Macros
 *********************************************************************/
+#if OSALLOCDEBUG
+extern int debug_container_malloc_size;
+#define ACCUMSIZE(s) do { debug_container_malloc_size += (s); } while (0)
+#else
+#define ACCUMSIZE(s)
+#endif /* OSALLOCDEBUG */
+
 __END_DECLS
 
 #if PRAGMA_MARK
@@ -107,13 +113,10 @@
 } * sStalled;
 IOLock * sStalledClassesLock = NULL;
 
+
 struct ExpansionData {
-    OSOrderedSet    * instances;
-    OSKext          * kext;
-    uint32_t          retain;
-#if IOTRACKING
-    IOTrackingQueue * tracking;
-#endif
+    OSOrderedSet * instances;
+    OSKext *       kext;
 };
 
 
@@ -392,21 +395,6 @@
 
     reserved = IONew(ExpansionData, 1);
     bzero(reserved, sizeof(ExpansionData));
-#if IOTRACKING
-    uint32_t numSiteQs = 0;
-    if ((this == &OSSymbol    ::gMetaClass)
-     || (this == &OSString    ::gMetaClass)
-     || (this == &OSNumber    ::gMetaClass)
-     || (this == &OSString    ::gMetaClass)
-     || (this == &OSData      ::gMetaClass)
-     || (this == &OSDictionary::gMetaClass)
-     || (this == &OSArray     ::gMetaClass)
-     || (this == &OSSet       ::gMetaClass))                   numSiteQs = 27;
-
-    reserved->tracking = IOTrackingQueueAlloc(inClassName, (uintptr_t) this,
-					      inClassSize, 0, kIOTrackingQueueTypeAlloc,
-					      numSiteQs);
-#endif
 
    /* Hack alert: We are just casting inClassName and storing it in
     * an OSString * instance variable. This may be because you can't
@@ -430,7 +418,7 @@
             int newSize = oldSize
                 + kKModCapacityIncrement * sizeof(OSMetaClass *);
 
-            sStalled->classes = (OSMetaClass **)kalloc_tag(newSize, VM_KERN_MEMORY_OSKEXT);
+            sStalled->classes = (OSMetaClass **)kalloc(newSize);
             if (!sStalled->classes) {
                 sStalled->classes = oldStalled;
                 sStalled->result = kOSMetaClassNoTempData;
@@ -440,7 +428,7 @@
             sStalled->capacity += kKModCapacityIncrement;
             memmove(sStalled->classes, oldStalled, oldSize);
             kfree(oldStalled, oldSize);
-            OSMETA_ACCUMSIZE(((size_t)newSize) - ((size_t)oldSize));
+            ACCUMSIZE(newSize - oldSize);
         }
 
         sStalled->classes[sStalled->count++] = this;
@@ -503,15 +491,12 @@
             }
         }
     }
-#if IOTRACKING
-    IOTrackingQueueFree(reserved->tracking);
-#endif
-    IODelete(reserved, ExpansionData, 1);
 }
 
 /*********************************************************************
 * Empty overrides.
 *********************************************************************/
+void * OSMetaClass::operator new(__unused size_t size) { return 0; }
 void OSMetaClass::retain() const { }
 void OSMetaClass::release() const { }
 void OSMetaClass::release(__unused int when) const { }
@@ -551,15 +536,15 @@
     IOLockLock(sStalledClassesLock);
 
     assert (sStalled == NULL);
-    sStalled = (StalledData *)kalloc_tag(sizeof(* sStalled), VM_KERN_MEMORY_OSKEXT);
+    sStalled = (StalledData *)kalloc(sizeof(* sStalled));
     if (sStalled) {
         sStalled->classes = (OSMetaClass **)
-            kalloc_tag(kKModCapacityIncrement * sizeof(OSMetaClass *), VM_KERN_MEMORY_OSKEXT);
+            kalloc(kKModCapacityIncrement * sizeof(OSMetaClass *));
         if (!sStalled->classes) {
             kfree(sStalled, sizeof(*sStalled));
             return 0;
         }
-        OSMETA_ACCUMSIZE((kKModCapacityIncrement * sizeof(OSMetaClass *)) +
+        ACCUMSIZE((kKModCapacityIncrement * sizeof(OSMetaClass *)) +
             sizeof(*sStalled));
 
         sStalled->result   = kOSReturnSuccess;
@@ -604,7 +589,6 @@
         case kNoDictionaries:
             sBootstrapState = kMakingDictionaries;
             // No break; fall through
-           [[clang::fallthrough]];
             
         case kMakingDictionaries:
             sAllClassesDict = OSDictionary::withCapacity(kClassCapacityIncrement);
@@ -614,8 +598,7 @@
             }
             sAllClassesDict->setOptions(OSCollection::kSort, OSCollection::kSort);
 
-           // No break; fall through
-           [[clang::fallthrough]];
+        // No break; fall through
 
         case kCompletedBootstrap:
         {
@@ -657,11 +640,7 @@
                    /* Log this error here so we can include the class name.
                     * xxx - we should look up the other kext that defines the class
                     */
-#if CONFIG_EMBEDDED
-                    panic(
-#else
                     OSKextLog(myKext, kOSMetaClassLogSpec,
-#endif /* CONFIG_EMBEDDED */
                         "OSMetaClass: Kext %s class %s is a duplicate;"
                         "kext %s already has a class by that name.",
                          sStalled->kextIdentifier, (const char *)me->className,
@@ -730,11 +709,11 @@
         OSMetaClassLogErrorForKext(result, myKext);
     }
 
-    OSSafeReleaseNULL(myKextName);
-    OSSafeReleaseNULL(myKext);
+    OSSafeRelease(myKextName);
+    OSSafeRelease(myKext);
 
     if (sStalled) {
-        OSMETA_ACCUMSIZE(-(sStalled->capacity * sizeof(OSMetaClass *) +
+        ACCUMSIZE(-(sStalled->capacity * sizeof(OSMetaClass *) +
             sizeof(*sStalled)));
         kfree(sStalled->classes, sStalled->capacity * sizeof(OSMetaClass *));
         kfree(sStalled, sizeof(*sStalled));
@@ -793,7 +772,7 @@
     result = theKext->hasOSMetaClassInstances();
 
 finish:
-    OSSafeReleaseNULL(theKext);
+    OSSafeRelease(theKext);
     return result;
 }
 
@@ -836,10 +815,8 @@
 	    if (superClassLink) {
 		superClassLink->removeInstance(reserved->instances, true);
 	    }
-	    IOLockLock(sAllClassesLock);
 	    reserved->instances->release();
 	    reserved->instances = 0;
-	    IOLockUnlock(sAllClassesLock);
 	}
     }
 
@@ -951,43 +928,6 @@
 
 /*********************************************************************
 *********************************************************************/
-bool
-OSMetaClass::removeClasses(OSCollection * metaClasses)
-{
-    OSCollectionIterator * classIterator;
-    OSMetaClass          * checkClass;
-    bool                   result;
-
-    classIterator = OSCollectionIterator::withCollection(metaClasses);
-    if (!classIterator) return (false);
-
-    IOLockLock(sAllClassesLock);
-
-    result = false;
-    do
-    {
-        while ((checkClass = (OSMetaClass *)classIterator->getNextObject())
-            && !checkClass->getInstanceCount()
-            && !checkClass->reserved->retain) {}
-        if (checkClass) break;
-        classIterator->reset();
-        while ((checkClass = (OSMetaClass *)classIterator->getNextObject()))
-        {
-            sAllClassesDict->removeObject(checkClass->className);
-        }
-        result = true;
-    }
-    while (false);
-
-    IOLockUnlock(sAllClassesLock);
-    OSSafeReleaseNULL(classIterator);
-
-    return (result);
-}
-
-
-/*********************************************************************
-*********************************************************************/
 const OSMetaClass *
 OSMetaClass::getMetaClassWithName(const OSSymbol * name)
 {
@@ -1008,46 +948,15 @@
 
 /*********************************************************************
 *********************************************************************/
-const OSMetaClass *
-OSMetaClass::copyMetaClassWithName(const OSSymbol * name)
-{
-    const OSMetaClass * meta;
-
-    if (!name) return (0);
-
-    meta = 0;
-    IOLockLock(sAllClassesLock);
-    if (sAllClassesDict) {
-        meta = (OSMetaClass *) sAllClassesDict->getObject(name);
-        if (meta) OSIncrementAtomic(&meta->reserved->retain);
-    }
-    IOLockUnlock(sAllClassesLock);
-
-    return (meta);
-}
-
-/*********************************************************************
-*********************************************************************/
-void
-OSMetaClass::releaseMetaClass() const
-{
-    OSDecrementAtomic(&reserved->retain);
-}
-
-/*********************************************************************
-*********************************************************************/
 OSObject *
 OSMetaClass::allocClassWithName(const OSSymbol * name)
 {
-    const OSMetaClass * meta;
-    OSObject          * result;
-
-    result = 0;
-    meta = copyMetaClassWithName(name);
-    if (meta)
-    {
+    OSObject * result = 0;
+
+    const OSMetaClass * const meta = getMetaClassWithName(name);
+
+    if (meta) {
         result = meta->alloc();
-        meta->releaseMetaClass();
     }
 
     return result;
@@ -1278,67 +1187,9 @@
     } while (0);
 
 finish:
-    OSSafeReleaseNULL(classDict);
+    OSSafeRelease(classDict);
 
     IOLockUnlock(sAllClassesLock);
 
     return;
 }
-
-
-/*********************************************************************
-*********************************************************************/
-
-#if IOTRACKING
-
-void *OSMetaClass::trackedNew(size_t size)
-{
-    IOTracking * mem;
-
-    mem = (typeof(mem)) kalloc_tag_bt(size + sizeof(IOTracking), VM_KERN_MEMORY_LIBKERN);
-    assert(mem);
-    if (!mem) return (mem);
-
-    memset(mem, 0, size + sizeof(IOTracking));
-    mem++;
-
-    OSIVAR_ACCUMSIZE(size);
-
-    return (mem);
-}
-
-void OSMetaClass::trackedDelete(void * instance, size_t size)
-{
-    IOTracking * mem = (typeof(mem)) instance; mem--;
-
-    kfree(mem, size + sizeof(IOTracking));
-    OSIVAR_ACCUMSIZE(-size);
-}
-
-void OSMetaClass::trackedInstance(OSObject * instance) const
-{
-    IOTracking * mem = (typeof(mem)) instance; mem--;
-
-    return (IOTrackingAdd(reserved->tracking, mem, classSize, false, VM_KERN_MEMORY_NONE));
-}
-
-void OSMetaClass::trackedFree(OSObject * instance) const
-{
-    IOTracking * mem = (typeof(mem)) instance; mem--;
-
-    return (IOTrackingRemove(reserved->tracking, mem, classSize));
-}
-
-void OSMetaClass::trackedAccumSize(OSObject * instance, size_t size) const
-{
-    IOTracking * mem = (typeof(mem)) instance; mem--;
-
-    return (IOTrackingAccumSize(reserved->tracking, mem, size));
-}
-
-IOTrackingQueue * OSMetaClass::getTracking() const
-{
-    return (reserved->tracking);
-}
-
-#endif /* IOTRACKING */