Changeset View
Changeset View
Standalone View
Standalone View
sys/arm/nvidia/drm2/tegra_bo.c
Show First 20 Lines • Show All 91 Lines • ▼ Show 20 Lines | tegra_bo_free_object(struct drm_gem_object *gem_obj) | ||||
free(bo, DRM_MEM_DRIVER); | free(bo, DRM_MEM_DRIVER); | ||||
} | } | ||||
static int | static int | ||||
tegra_bo_alloc_contig(size_t npages, u_long alignment, vm_memattr_t memattr, | tegra_bo_alloc_contig(size_t npages, u_long alignment, vm_memattr_t memattr, | ||||
vm_page_t **ret_page) | vm_page_t **ret_page) | ||||
{ | { | ||||
vm_page_t m; | vm_page_t m; | ||||
int pflags, tries, i; | int tries, i; | ||||
vm_paddr_t low, high, boundary; | vm_paddr_t low, high, boundary; | ||||
low = 0; | low = 0; | ||||
high = -1UL; | high = -1UL; | ||||
boundary = 0; | boundary = 0; | ||||
pflags = VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ | VM_ALLOC_NOBUSY | | |||||
VM_ALLOC_WIRED | VM_ALLOC_ZERO; | |||||
tries = 0; | tries = 0; | ||||
kib: The variable becomes somewhat pointless. You can directly pass _WIRED|_ALLOC_ZERO to… | |||||
retry: | retry: | ||||
m = vm_page_alloc_contig(NULL, 0, pflags, npages, low, high, alignment, | m = vm_page_alloc_noobj_contig(VM_ALLOC_WIRE | VM_ALLOC_ZERO, npages, | ||||
boundary, memattr); | low, high, alignment, boundary, memattr); | ||||
if (m == NULL) { | if (m == NULL) { | ||||
if (tries < 3) { | if (tries < 3) { | ||||
if (!vm_page_reclaim_contig(pflags, npages, low, high, | if (!vm_page_reclaim_contig(0, npages, low, high, | ||||
alignment, boundary)) | alignment, boundary)) | ||||
vm_wait(NULL); | vm_wait(NULL); | ||||
tries++; | tries++; | ||||
goto retry; | goto retry; | ||||
} | } | ||||
return (ENOMEM); | return (ENOMEM); | ||||
} | } | ||||
for (i = 0; i < npages; i++, m++) { | for (i = 0; i < npages; i++, m++) { | ||||
if ((m->flags & PG_ZERO) == 0) | |||||
pmap_zero_page(m); | |||||
m->valid = VM_PAGE_BITS_ALL; | m->valid = VM_PAGE_BITS_ALL; | ||||
(*ret_page)[i] = m; | (*ret_page)[i] = m; | ||||
} | } | ||||
return (0); | return (0); | ||||
} | } | ||||
/* Initialize pager and insert all object pages to it*/ | /* Initialize pager and insert all object pages to it*/ | ||||
▲ Show 20 Lines • Show All 233 Lines • Show Last 20 Lines |
The variable becomes somewhat pointless. You can directly pass _WIRED|_ALLOC_ZERO to vm_page_alloc_noobj_contig(), and vm_page_reclaim_contig() is fine with 0 instead pflags.