Changeset View
Changeset View
Standalone View
Standalone View
sys/compat/linuxkpi/common/src/linux_page.c
Show First 20 Lines • Show All 85 Lines • ▼ Show 20 Lines | |||||
vm_page_t | vm_page_t | ||||
linux_alloc_pages(gfp_t flags, unsigned int order) | linux_alloc_pages(gfp_t flags, unsigned int order) | ||||
{ | { | ||||
vm_page_t page; | vm_page_t page; | ||||
if (PMAP_HAS_DMAP) { | if (PMAP_HAS_DMAP) { | ||||
unsigned long npages = 1UL << order; | unsigned long npages = 1UL << order; | ||||
int req = (flags & M_ZERO) ? (VM_ALLOC_ZERO | VM_ALLOC_NOOBJ | | int req = VM_ALLOC_NOOBJ | VM_ALLOC_WIRED | VM_ALLOC_NORMAL; | ||||
VM_ALLOC_NORMAL) : (VM_ALLOC_NOOBJ | VM_ALLOC_NORMAL); | |||||
johalun: Any LINUXKPI_VERSION checks would have to go in the header files since drm drivers, who declare… | |||||
Done Inline ActionsI see now, sorry. I implemented a NOTWIRED flag, so that when 50000 support is dropped we can just delete all of the added code. markj: I see now, sorry. I implemented a NOTWIRED flag, so that when 50000 support is dropped we can… | |||||
#ifdef __GFP_NOTWIRED | |||||
if ((flags & __GFP_NOTWIRED) != 0) | |||||
req &= ~VM_ALLOC_WIRED; | |||||
#endif | |||||
if ((flags & M_ZERO) != 0) | |||||
req |= VM_ALLOC_ZERO; | |||||
if (order == 0 && (flags & GFP_DMA32) == 0) { | if (order == 0 && (flags & GFP_DMA32) == 0) { | ||||
page = vm_page_alloc(NULL, 0, req); | page = vm_page_alloc(NULL, 0, req); | ||||
if (page == NULL) | if (page == NULL) | ||||
return (NULL); | return (NULL); | ||||
} else { | } else { | ||||
vm_paddr_t pmax = (flags & GFP_DMA32) ? | vm_paddr_t pmax = (flags & GFP_DMA32) ? | ||||
BUS_SPACE_MAXADDR_32BIT : BUS_SPACE_MAXADDR; | BUS_SPACE_MAXADDR_32BIT : BUS_SPACE_MAXADDR; | ||||
retry: | retry: | ||||
▲ Show 20 Lines • Show All 44 Lines • ▼ Show 20 Lines | linux_free_pages(vm_page_t page, unsigned int order) | ||||
if (PMAP_HAS_DMAP) { | if (PMAP_HAS_DMAP) { | ||||
unsigned long npages = 1UL << order; | unsigned long npages = 1UL << order; | ||||
unsigned long x; | unsigned long x; | ||||
for (x = 0; x != npages; x++) { | for (x = 0; x != npages; x++) { | ||||
vm_page_t pgo = page + x; | vm_page_t pgo = page + x; | ||||
vm_page_lock(pgo); | vm_page_lock(pgo); | ||||
if (vm_page_unwire_noq(pgo)) | |||||
vm_page_free(pgo); | vm_page_free(pgo); | ||||
vm_page_unlock(pgo); | vm_page_unlock(pgo); | ||||
} | } | ||||
} else { | } else { | ||||
vm_offset_t vaddr; | vm_offset_t vaddr; | ||||
vaddr = (vm_offset_t)page_address(page); | vaddr = (vm_offset_t)page_address(page); | ||||
linux_free_kmem(vaddr, order); | linux_free_kmem(vaddr, order); | ||||
▲ Show 20 Lines • Show All 230 Lines • Show Last 20 Lines |
Any LINUXKPI_VERSION checks would have to go in the header files since drm drivers, who declare it, are built from ports... That's why my example was for change in gfp.h.