Loading...
--- xnu/xnu-12377.101.15/iokit/Kernel/IOSharedDataQueue.cpp
+++ xnu/xnu-6153.121.1/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 = NULL;
}
}
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 = NULL;
}
}
@@ -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 == NULL) {
+ 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,27 +131,26 @@
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;
+ IOMemoryDescriptor *descriptor = NULL;
if (dataQueue != NULL) {
descriptor = IOMemoryDescriptor::withAddress(dataQueue, getQueueSize() + DATA_QUEUE_MEMORY_HEADER_SIZE + DATA_QUEUE_MEMORY_APPENDIX_SIZE, kIODirectionOutIn);
@@ -188,7 +182,7 @@
UInt32 headOffset = dataQueue->head;
UInt32 queueSize = getQueueSize();
- if (headOffset > queueSize) {
+ if (headOffset >= queueSize) {
return NULL;
}