Loading...
libkern/c++/OSMetaClass.cpp xnu-7195.141.2 xnu-8792.61.2
--- xnu/xnu-7195.141.2/libkern/c++/OSMetaClass.cpp
+++ xnu/xnu-8792.61.2/libkern/c++/OSMetaClass.cpp
@@ -580,8 +580,7 @@
 	classSize = inClassSize;
 	superClassLink = inSuperClass;
 
-	reserved = IONew(ExpansionData, 1);
-	bzero(reserved, sizeof(ExpansionData));
+	reserved = IOMallocType(ExpansionData);
 #if IOTRACKING
 	uint32_t numSiteQs = 0;
 	if ((this == &OSSymbol    ::gMetaClass)
@@ -618,21 +617,22 @@
 		// Grow stalled array if neccessary
 		if (sStalled->count >= sStalled->capacity) {
 			OSMetaClass **oldStalled = sStalled->classes;
-			int oldSize = sStalled->capacity * sizeof(OSMetaClass *);
-			int newSize = oldSize
-			    + kKModCapacityIncrement * sizeof(OSMetaClass *);
-
-			sStalled->classes = (OSMetaClass **)kalloc_tag(newSize, VM_KERN_MEMORY_OSKEXT);
+			int oldCount = sStalled->capacity;
+			int newCount = oldCount + kKModCapacityIncrement;
+
+			sStalled->classes = kalloc_type_tag(OSMetaClass *, newCount,
+			    Z_WAITOK_ZERO, VM_KERN_MEMORY_OSKEXT);
 			if (!sStalled->classes) {
 				sStalled->classes = oldStalled;
 				sStalled->result = kOSMetaClassNoTempData;
 				return;
 			}
 
-			sStalled->capacity += kKModCapacityIncrement;
-			memmove(sStalled->classes, oldStalled, oldSize);
-			kfree(oldStalled, oldSize);
-			OSMETA_ACCUMSIZE(((size_t)newSize) - ((size_t)oldSize));
+			sStalled->capacity = newCount;
+			memmove(sStalled->classes, oldStalled,
+			    sizeof(OSMetaClass *) * oldCount);
+			kfree_type(OSMetaClass *, oldCount, oldStalled);
+			OSMETA_ACCUMSIZE(sizeof(OSMetaClass *) * (newCount - oldCount));
 		}
 
 		sStalled->classes[sStalled->count++] = this;
@@ -713,7 +713,7 @@
 #if IOTRACKING
 	IOTrackingQueueFree(reserved->tracking);
 #endif
-	IODelete(reserved, ExpansionData, 1);
+	IOFreeType(reserved, ExpansionData);
 }
 
 /*********************************************************************
@@ -782,23 +782,21 @@
 	IOLockLock(sStalledClassesLock);
 
 	assert(sStalled == NULL);
-	sStalled = (StalledData *)kalloc_tag(sizeof(*sStalled), VM_KERN_MEMORY_OSKEXT);
-	if (sStalled) {
-		sStalled->classes = (OSMetaClass **)
-		    kalloc_tag(kKModCapacityIncrement * sizeof(OSMetaClass *), VM_KERN_MEMORY_OSKEXT);
-		if (!sStalled->classes) {
-			kfree(sStalled, sizeof(*sStalled));
-			return NULL;
-		}
-		OSMETA_ACCUMSIZE((kKModCapacityIncrement * sizeof(OSMetaClass *)) +
-		    sizeof(*sStalled));
-
-		sStalled->result   = kOSReturnSuccess;
-		sStalled->capacity = kKModCapacityIncrement;
-		sStalled->count    = 0;
-		sStalled->kextIdentifier = kextIdentifier;
-		bzero(sStalled->classes, kKModCapacityIncrement * sizeof(OSMetaClass *));
-	}
+	sStalled = kalloc_type(StalledData, Z_WAITOK_ZERO_NOFAIL);
+
+	sStalled->classes = kalloc_type_tag(OSMetaClass *,
+	    kKModCapacityIncrement, Z_WAITOK_ZERO, VM_KERN_MEMORY_OSKEXT);
+	if (!sStalled->classes) {
+		kfree_type(StalledData, sStalled);
+		return NULL;
+	}
+	OSMETA_ACCUMSIZE((kKModCapacityIncrement * sizeof(OSMetaClass *)) +
+	    sizeof(*sStalled));
+
+	sStalled->result   = kOSReturnSuccess;
+	sStalled->capacity = kKModCapacityIncrement;
+	sStalled->count    = 0;
+	sStalled->kextIdentifier = kextIdentifier;
 
 	// keep sStalledClassesLock locked until postModLoad
 
@@ -970,8 +968,8 @@
 	if (sStalled) {
 	        OSMETA_ACCUMSIZE(-(sStalled->capacity * sizeof(OSMetaClass *) +
 	            sizeof(*sStalled)));
-	        kfree(sStalled->classes, sStalled->capacity * sizeof(OSMetaClass *));
-	        kfree(sStalled, sizeof(*sStalled));
+	        kfree_type(OSMetaClass *, sStalled->capacity, sStalled->classes);
+	        kfree_type(StalledData, sStalled);
 	        sStalled = NULL;
 	}
 
@@ -1107,7 +1105,7 @@
 
         maxDepth = sDeepestClass;
         if (maxDepth > kLocalDepth) {
-                nextIndex = IONew(typeof(nextIndex[0]), maxDepth);
+                nextIndex = IONewData(typeof(nextIndex[0]), maxDepth);
                 sets      = IONew(typeof(sets[0]), maxDepth);
 	}
         done = false;
@@ -1139,7 +1137,7 @@
 		}
 	}while (!done);
         if (maxDepth > kLocalDepth) {
-                IODelete(nextIndex, typeof(nextIndex[0]), maxDepth);
+                IODeleteData(nextIndex, typeof(nextIndex[0]), maxDepth);
                 IODelete(sets, typeof(sets[0]), maxDepth);
 	}
 }
@@ -1480,7 +1478,7 @@
 OSDictionary *
 OSMetaClass::getClassDictionary()
 {
-        panic("OSMetaClass::getClassDictionary() is obsoleted.\n");
+        panic("OSMetaClass::getClassDictionary() is obsoleted.");
         return NULL;
 }
 
@@ -1489,7 +1487,7 @@
 bool
 OSMetaClass::serialize(__unused OSSerialize * s) const
 {
-        panic("OSMetaClass::serialize(): Obsoleted\n");
+        panic("OSMetaClass::serialize(): Obsoleted");
         return false;
 }
 
@@ -1547,12 +1545,15 @@
 
 #if IOTRACKING
 
+__typed_allocators_ignore_push
+
 void *
 OSMetaClass::trackedNew(size_t size)
 {
         IOTracking * mem;
 
-        mem = (typeof(mem))kalloc_tag_bt(size + sizeof(IOTracking), VM_KERN_MEMORY_LIBKERN);
+        mem = (typeof(mem))kheap_alloc(KHEAP_DEFAULT, size + sizeof(IOTracking),
+            Z_VM_TAG_BT(Z_WAITOK, VM_KERN_MEMORY_LIBKERN));
         assert(mem);
         if (!mem) {
                 return mem;
@@ -1571,9 +1572,11 @@
 {
         IOTracking * mem = (typeof(mem))instance; mem--;
 
-        kfree(mem, size + sizeof(IOTracking));
+        kheap_free(KHEAP_DEFAULT, mem, size + sizeof(IOTracking));
         OSIVAR_ACCUMSIZE(-size);
 }
+
+__typed_allocators_ignore_pop
 
 void
 OSMetaClass::trackedInstance(OSObject * instance) const