Loading...
iokit/Kernel/IOSharedDataQueue.cpp xnu-12377.101.15 xnu-4903.270.47
--- xnu/xnu-12377.101.15/iokit/Kernel/IOSharedDataQueue.cpp
+++ xnu/xnu-4903.270.47/iokit/Kernel/IOSharedDataQueue.cpp
@@ -26,15 +26,10 @@
  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
  */
 
-#define IOKIT_ENABLE_SHARED_PTR
-
 #include <IOKit/IOSharedDataQueue.h>
 #include <IOKit/IODataQueueShared.h>
 #include <IOKit/IOLib.h>
 #include <IOKit/IOMemoryDescriptor.h>
-#include <libkern/c++/OSSharedPtr.h>
-
-#include <vm/vm_kern_xnu.h>
 
 #ifdef enqueue
 #undef enqueue
@@ -48,28 +43,29 @@
 
 OSDefineMetaClassAndStructors(IOSharedDataQueue, IODataQueue)
 
-OSSharedPtr<IOSharedDataQueue>
-IOSharedDataQueue::withCapacity(UInt32 size)
-{
-	OSSharedPtr<IOSharedDataQueue> dataQueue = OSMakeShared<IOSharedDataQueue>();
+IOSharedDataQueue *IOSharedDataQueue::withCapacity(UInt32 size)
+{
+	IOSharedDataQueue *dataQueue = new IOSharedDataQueue;
 
 	if (dataQueue) {
 		if (!dataQueue->initWithCapacity(size)) {
-			return nullptr;
+			dataQueue->release();
+			dataQueue = 0;
 		}
 	}
 
 	return dataQueue;
 }
 
-OSSharedPtr<IOSharedDataQueue>
+IOSharedDataQueue *
 IOSharedDataQueue::withEntries(UInt32 numEntries, UInt32 entrySize)
 {
-	OSSharedPtr<IOSharedDataQueue> dataQueue = OSMakeShared<IOSharedDataQueue>();
+	IOSharedDataQueue *dataQueue = new IOSharedDataQueue;
 
 	if (dataQueue) {
 		if (!dataQueue->initWithEntries(numEntries, entrySize)) {
-			return nullptr;
+			dataQueue->release();
+			dataQueue = 0;
 		}
 	}
 
@@ -81,13 +77,12 @@
 {
 	IODataQueueAppendix *   appendix;
 	vm_size_t               allocSize;
-	kern_return_t           kr;
 
 	if (!super::init()) {
 		return false;
 	}
 
-	_reserved = IOMallocType(ExpansionData);
+	_reserved = (ExpansionData *)IOMalloc(sizeof(struct ExpansionData));
 	if (!_reserved) {
 		return false;
 	}
@@ -102,11 +97,11 @@
 		return false;
 	}
 
-	kr = kmem_alloc(kernel_map, (vm_offset_t *)&dataQueue, allocSize,
-	    (kma_flags_t)(KMA_DATA_SHARED | KMA_ZERO), IOMemoryTag(kernel_map));
-	if (kr != KERN_SUCCESS) {
-		return false;
-	}
+	dataQueue = (IODataQueueMemory *)IOMallocAligned(allocSize, PAGE_SIZE);
+	if (dataQueue == 0) {
+		return false;
+	}
+	bzero(dataQueue, allocSize);
 
 	dataQueue->queueSize    = size;
 //  dataQueue->head         = 0;
@@ -120,7 +115,7 @@
 	appendix->version   = 0;
 
 	if (!notifyMsg) {
-		notifyMsg = IOMallocType(mach_msg_header_t);
+		notifyMsg = IOMalloc(sizeof(mach_msg_header_t));
 		if (!notifyMsg) {
 			return false;
 		}
@@ -136,29 +131,28 @@
 IOSharedDataQueue::free()
 {
 	if (dataQueue) {
-		kmem_free(kernel_map, (vm_offset_t)dataQueue, round_page(getQueueSize() +
-		    DATA_QUEUE_MEMORY_HEADER_SIZE + DATA_QUEUE_MEMORY_APPENDIX_SIZE));
+		IOFreeAligned(dataQueue, round_page(getQueueSize() + DATA_QUEUE_MEMORY_HEADER_SIZE + DATA_QUEUE_MEMORY_APPENDIX_SIZE));
 		dataQueue = NULL;
 		if (notifyMsg) {
-			IOFreeType(notifyMsg, mach_msg_header_t);
+			IOFree(notifyMsg, sizeof(mach_msg_header_t));
 			notifyMsg = NULL;
 		}
 	}
 
 	if (_reserved) {
-		IOFreeType(_reserved, ExpansionData);
+		IOFree(_reserved, sizeof(struct ExpansionData));
 		_reserved = NULL;
 	}
 
 	super::free();
 }
 
-OSSharedPtr<IOMemoryDescriptor>
+IOMemoryDescriptor *
 IOSharedDataQueue::getMemoryDescriptor()
 {
-	OSSharedPtr<IOMemoryDescriptor> descriptor;
-
-	if (dataQueue != NULL) {
+	IOMemoryDescriptor *descriptor = 0;
+
+	if (dataQueue != 0) {
 		descriptor = IOMemoryDescriptor::withAddress(dataQueue, getQueueSize() + DATA_QUEUE_MEMORY_HEADER_SIZE + DATA_QUEUE_MEMORY_APPENDIX_SIZE, kIODirectionOutIn);
 	}
 
@@ -169,7 +163,7 @@
 IODataQueueEntry *
 IOSharedDataQueue::peek()
 {
-	IODataQueueEntry *entry      = NULL;
+	IODataQueueEntry *entry      = 0;
 	UInt32            headOffset;
 	UInt32            tailOffset;
 
@@ -183,12 +177,12 @@
 	tailOffset = __c11_atomic_load((_Atomic UInt32 *)&dataQueue->tail, __ATOMIC_ACQUIRE);
 
 	if (headOffset != tailOffset) {
-		volatile IODataQueueEntry * head = NULL;
+		volatile IODataQueueEntry * head = 0;
 		UInt32              headSize     = 0;
 		UInt32              headOffset   = dataQueue->head;
 		UInt32              queueSize    = getQueueSize();
 
-		if (headOffset > queueSize) {
+		if (headOffset >= queueSize) {
 			return NULL;
 		}
 
@@ -245,7 +239,7 @@
 			entry = (IODataQueueEntry *)((UInt8 *)dataQueue->queue + tail);
 
 			entry->size = dataSize;
-			__nochk_memcpy(&entry->data, data, dataSize);
+			memcpy(&entry->data, data, dataSize);
 
 			// The tail can be out of bound when the size of the new entry
 			// exactly matches the available space at the end of the queue.
@@ -266,7 +260,7 @@
 				((IODataQueueEntry *)((UInt8 *)dataQueue->queue + tail))->size = dataSize;
 			}
 
-			__nochk_memcpy(&dataQueue->queue->data, data, dataSize);
+			memcpy(&dataQueue->queue->data, data, dataSize);
 			newTail = entrySize;
 		} else {
 			return false; // queue is full
@@ -279,7 +273,7 @@
 			entry = (IODataQueueEntry *)((UInt8 *)dataQueue->queue + tail);
 
 			entry->size = dataSize;
-			__nochk_memcpy(&entry->data, data, dataSize);
+			memcpy(&entry->data, data, dataSize);
 			newTail = tail + entrySize;
 		} else {
 			return false; // queue is full
@@ -314,7 +308,7 @@
 IOSharedDataQueue::dequeue(void *data, UInt32 *dataSize)
 {
 	Boolean             retVal          = TRUE;
-	volatile IODataQueueEntry *  entry  = NULL;
+	volatile IODataQueueEntry * entry   = 0;
 	UInt32              entrySize       = 0;
 	UInt32              headOffset      = 0;
 	UInt32              tailOffset      = 0;
@@ -330,7 +324,7 @@
 	tailOffset = __c11_atomic_load((_Atomic UInt32 *)&dataQueue->tail, __ATOMIC_ACQUIRE);
 
 	if (headOffset != tailOffset) {
-		volatile IODataQueueEntry * head = NULL;
+		volatile IODataQueueEntry * head = 0;
 		UInt32              headSize     = 0;
 		UInt32              queueSize    = getQueueSize();
 
@@ -378,7 +372,7 @@
 			// not enough space
 			return false;
 		}
-		__nochk_memcpy(data, (void *)entry->data, entrySize);
+		memcpy(data, (void *)entry->data, entrySize);
 		*dataSize = entrySize;
 	}