Loading...
--- xnu/xnu-12377.101.15/libkern/c++/OSData.cpp
+++ xnu/xnu-8020.140.41/libkern/c++/OSData.cpp
@@ -78,8 +78,8 @@
if (capacity) {
OSCONTAINER_ACCUMSIZE(-(size_t)capacity);
/* can't use kfree() as we need to pass Z_MAY_COPYINMAP */
- __kheap_realloc(KHEAP_DATA_PRIVATE, data, capacity, 0,
- Z_VM_TAG_BT(Z_WAITOK_ZERO | Z_FULLSIZE | Z_MAY_COPYINMAP,
+ __kheap_realloc(KHEAP_DATA_BUFFERS, data, capacity, 0,
+ Z_VM_TAG_BT(Z_WAITOK_ZERO | Z_MAY_COPYINMAP,
VM_KERN_MEMORY_LIBKERN), (void *)&this->data);
data = nullptr;
capacity = 0;
@@ -89,8 +89,11 @@
* Nothing to change
*/
} else {
- kr = kalloc_ext(KHEAP_DATA_PRIVATE, inCapacity,
- Z_VM_TAG_BT(Z_WAITOK_ZERO | Z_FULLSIZE | Z_MAY_COPYINMAP,
+ if (inCapacity >= PAGE_SIZE) {
+ inCapacity = (uint32_t)round_page(inCapacity);
+ }
+ kr = kalloc_ext(KHEAP_DATA_BUFFERS, inCapacity,
+ Z_VM_TAG_BT(Z_WAITOK_ZERO | Z_MAY_COPYINMAP,
VM_KERN_MEMORY_LIBKERN), (void *)&this->data);
if (kr.addr) {
@@ -225,7 +228,7 @@
{
if ((capacity != EXTERNAL) && data && capacity) {
/* can't use kfree() as we need to pass Z_MAY_COPYINMAP */
- __kheap_realloc(KHEAP_DATA_PRIVATE, data, capacity, 0,
+ __kheap_realloc(KHEAP_DATA_BUFFERS, data, capacity, 0,
Z_VM_TAG_BT(Z_WAITOK_ZERO | Z_FULLSIZE | Z_MAY_COPYINMAP,
VM_KERN_MEMORY_LIBKERN), (void *)&this->data);
OSCONTAINER_ACCUMSIZE( -((size_t)capacity));
@@ -284,8 +287,11 @@
return capacity;
}
- kr = krealloc_ext(KHEAP_DATA_PRIVATE, data, capacity, finalCapacity,
- Z_VM_TAG_BT(Z_WAITOK_ZERO | Z_FULLSIZE | Z_MAY_COPYINMAP,
+ if (finalCapacity >= PAGE_SIZE) {
+ finalCapacity = (uint32_t)round_page(finalCapacity);
+ }
+ kr = krealloc_ext((void *)KHEAP_DATA_BUFFERS, data, capacity, finalCapacity,
+ Z_VM_TAG_BT(Z_WAITOK_ZERO | Z_MAY_COPYINMAP,
VM_KERN_MEMORY_LIBKERN), (void *)&this->data);
if (kr.addr) {
@@ -319,7 +325,7 @@
* address stable.
*/
if (length >= msg_ool_size_small && newCapacity < capacity) {
- kr = krealloc_ext(KHEAP_DATA_PRIVATE,
+ kr = krealloc_ext((void *)KHEAP_DATA_BUFFERS,
data, capacity, newCapacity,
Z_VM_TAG_BT(Z_WAITOK_ZERO | Z_FULLSIZE | Z_MAY_COPYINMAP,
VM_KERN_MEMORY_LIBKERN), (void *)&this->data);