Convert consumers to vm_page_alloc_noobj_contig()

Remove now-unneeded page zeroing.  No functional change intended.

Reviewed by:	alc, hselasky, kib
MFC after:	1 week
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D32006
This commit is contained in:
Mark Johnston 2021-10-19 20:25:04 -04:00
parent 92db9f3bb7
commit 84c3922243
12 changed files with 53 additions and 97 deletions

View File

@ -334,8 +334,7 @@ start_all_aps(void)
mtx_init(&ap_boot_mtx, "ap boot", NULL, MTX_SPIN);
MPASS(bootMP_size <= PAGE_SIZE);
m_boottramp = vm_page_alloc_contig(NULL, 0, VM_ALLOC_NORMAL |
VM_ALLOC_NOBUSY | VM_ALLOC_NOOBJ, 1, 0,
m_boottramp = vm_page_alloc_noobj_contig(0, 1, 0,
(1ULL << 20), /* Trampoline should be below 1M for real mode */
PAGE_SIZE, 0, VM_MEMATTR_DEFAULT);
boot_address = VM_PAGE_TO_PHYS(m_boottramp);

View File

@ -2110,14 +2110,8 @@ pmap_init_pat(void)
vm_page_t
pmap_page_alloc_below_4g(bool zeroed)
{
vm_page_t m;
m = vm_page_alloc_contig(NULL, 0, (zeroed ? VM_ALLOC_ZERO : 0) |
VM_ALLOC_NORMAL | VM_ALLOC_NOBUSY | VM_ALLOC_NOOBJ,
1, 0, (1ULL << 32), PAGE_SIZE, 0, VM_MEMATTR_DEFAULT);
if (m != NULL && zeroed && (m->flags & PG_ZERO) == 0)
pmap_zero_page(m);
return (m);
return (vm_page_alloc_noobj_contig((zeroed ? VM_ALLOC_ZERO : 0),
1, 0, (1ULL << 32), PAGE_SIZE, 0, VM_MEMATTR_DEFAULT));
}
extern const char la57_trampoline[], la57_trampoline_gdt_desc[],
@ -11411,13 +11405,8 @@ pmap_kasan_enter_alloc_4k(void)
static vm_page_t
pmap_kasan_enter_alloc_2m(void)
{
vm_page_t m;
m = vm_page_alloc_contig(NULL, 0, VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ |
VM_ALLOC_WIRED, NPTEPG, 0, ~0ul, NBPDR, 0, VM_MEMATTR_DEFAULT);
if (m != NULL)
memset((void *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m)), 0, NBPDR);
return (m);
return (vm_page_alloc_noobj_contig(VM_ALLOC_WIRED | VM_ALLOC_ZERO,
NPTEPG, 0, ~0ul, NBPDR, 0, VM_MEMATTR_DEFAULT));
}
/*
@ -11479,13 +11468,8 @@ pmap_kmsan_enter_alloc_4k(void)
static vm_page_t
pmap_kmsan_enter_alloc_2m(void)
{
vm_page_t m;
m = vm_page_alloc_contig(NULL, 0, VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ |
VM_ALLOC_WIRED, NPTEPG, 0, ~0ul, NBPDR, 0, VM_MEMATTR_DEFAULT);
if (m != NULL)
memset((void *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m)), 0, NBPDR);
return (m);
return (vm_page_alloc_noobj_contig(VM_ALLOC_ZERO | VM_ALLOC_WIRED,
NPTEPG, 0, ~0ul, NBPDR, 0, VM_MEMATTR_DEFAULT));
}
/*

View File

@ -97,21 +97,19 @@ tegra_bo_alloc_contig(size_t npages, u_long alignment, vm_memattr_t memattr,
vm_page_t **ret_page)
{
vm_page_t m;
int pflags, tries, i;
int tries, i;
vm_paddr_t low, high, boundary;
low = 0;
high = -1UL;
boundary = 0;
pflags = VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ | VM_ALLOC_NOBUSY |
VM_ALLOC_WIRED | VM_ALLOC_ZERO;
tries = 0;
retry:
m = vm_page_alloc_contig(NULL, 0, pflags, npages, low, high, alignment,
boundary, memattr);
m = vm_page_alloc_noobj_contig(VM_ALLOC_WIRE | VM_ALLOC_ZERO, npages,
low, high, alignment, boundary, memattr);
if (m == NULL) {
if (tries < 3) {
if (!vm_page_reclaim_contig(pflags, npages, low, high,
if (!vm_page_reclaim_contig(0, npages, low, high,
alignment, boundary))
vm_wait(NULL);
tries++;
@ -121,8 +119,6 @@ tegra_bo_alloc_contig(size_t npages, u_long alignment, vm_memattr_t memattr,
}
for (i = 0; i < npages; i++, m++) {
if ((m->flags & PG_ZERO) == 0)
pmap_zero_page(m);
m->valid = VM_PAGE_BITS_ALL;
(*ret_page)[i] = m;
}

View File

@ -92,7 +92,7 @@ linux_alloc_pages(gfp_t flags, unsigned int order)
if (PMAP_HAS_DMAP) {
unsigned long npages = 1UL << order;
int req = VM_ALLOC_NOOBJ | VM_ALLOC_WIRED | VM_ALLOC_NORMAL;
int req = VM_ALLOC_WIRED;
if ((flags & M_ZERO) != 0)
req |= VM_ALLOC_ZERO;
@ -104,9 +104,8 @@ linux_alloc_pages(gfp_t flags, unsigned int order)
vm_paddr_t pmax = (flags & GFP_DMA32) ?
BUS_SPACE_MAXADDR_32BIT : BUS_SPACE_MAXADDR;
retry:
page = vm_page_alloc_contig(NULL, 0, req,
npages, 0, pmax, PAGE_SIZE, 0, VM_MEMATTR_DEFAULT);
page = vm_page_alloc_noobj_contig(req, npages, 0, pmax,
PAGE_SIZE, 0, VM_MEMATTR_DEFAULT);
if (page == NULL) {
if (flags & M_WAITOK) {
if (!vm_page_reclaim_contig(req,
@ -119,16 +118,6 @@ linux_alloc_pages(gfp_t flags, unsigned int order)
return (NULL);
}
}
if (flags & M_ZERO) {
unsigned long x;
for (x = 0; x != npages; x++) {
vm_page_t pgo = page + x;
if ((pgo->flags & PG_ZERO) == 0)
pmap_zero_page(pgo);
}
}
} else {
vm_offset_t vaddr;

View File

@ -1488,21 +1488,20 @@ int ttm_bo_global_init(struct drm_global_reference *ref)
struct ttm_bo_global_ref *bo_ref =
container_of(ref, struct ttm_bo_global_ref, ref);
struct ttm_bo_global *glob = ref->object;
int req, ret;
int ret;
int tries;
sx_init(&glob->device_list_mutex, "ttmdlm");
mtx_init(&glob->lru_lock, "ttmlru", NULL, MTX_DEF);
glob->mem_glob = bo_ref->mem_glob;
req = VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ;
tries = 0;
retry:
glob->dummy_read_page = vm_page_alloc_contig(NULL, 0, req,
1, 0, VM_MAX_ADDRESS, PAGE_SIZE, 0, VM_MEMATTR_UNCACHEABLE);
glob->dummy_read_page = vm_page_alloc_noobj_contig(0, 1, 0,
VM_MAX_ADDRESS, PAGE_SIZE, 0, VM_MEMATTR_UNCACHEABLE);
if (unlikely(glob->dummy_read_page == NULL)) {
if (tries < 1 && vm_page_reclaim_contig(req, 1,
0, VM_MAX_ADDRESS, PAGE_SIZE, 0)) {
if (tries < 1 && vm_page_reclaim_contig(0, 1, 0,
VM_MAX_ADDRESS, PAGE_SIZE, 0)) {
tries++;
goto retry;
}

View File

@ -163,8 +163,8 @@ ttm_vm_page_alloc_dma32(int req, vm_memattr_t memattr)
int tries;
for (tries = 0; ; tries++) {
p = vm_page_alloc_contig(NULL, 0, req, 1, 0, 0xffffffff,
PAGE_SIZE, 0, memattr);
p = vm_page_alloc_noobj_contig(req, 1, 0, 0xffffffff, PAGE_SIZE,
0, memattr);
if (p != NULL || tries > 2)
return (p);
if (!vm_page_reclaim_contig(req, 1, 0, 0xffffffff,
@ -191,7 +191,7 @@ ttm_vm_page_alloc(int flags, enum ttm_caching_state cstate)
int req;
memattr = ttm_caching_state_to_vm(cstate);
req = VM_ALLOC_NORMAL | VM_ALLOC_WIRED | VM_ALLOC_NOOBJ;
req = VM_ALLOC_WIRED;
if ((flags & TTM_PAGE_FLAG_ZERO_ALLOC) != 0)
req |= VM_ALLOC_ZERO;

View File

@ -341,16 +341,15 @@ static int
ktls_buffer_import(void *arg, void **store, int count, int domain, int flags)
{
vm_page_t m;
int i;
int i, req;
KASSERT((ktls_maxlen & PAGE_MASK) == 0,
("%s: ktls max length %d is not page size-aligned",
__func__, ktls_maxlen));
req = VM_ALLOC_WIRED | VM_ALLOC_NODUMP | malloc2vm_flags(flags);
for (i = 0; i < count; i++) {
m = vm_page_alloc_contig_domain(NULL, 0, domain,
VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ | VM_ALLOC_WIRED |
VM_ALLOC_NODUMP | malloc2vm_flags(flags),
m = vm_page_alloc_noobj_contig_domain(domain, req,
atop(ktls_maxlen), 0, ~0ul, PAGE_SIZE, 0,
VM_MEMATTR_DEFAULT);
if (m == NULL)

View File

@ -3570,14 +3570,14 @@ static int
radix_pgd_import(void *arg __unused, void **store, int count, int domain __unused,
int flags)
{
int req;
req = VM_ALLOC_WIRED | malloc2vm_flags(flags);
for (int i = 0; i < count; i++) {
vm_page_t m = vm_page_alloc_contig(NULL, 0,
VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ | VM_ALLOC_WIRED |
VM_ALLOC_ZERO | VM_ALLOC_WAITOK, RADIX_PGD_SIZE/PAGE_SIZE,
vm_page_t m = vm_page_alloc_noobj_contig(req,
RADIX_PGD_SIZE / PAGE_SIZE,
0, (vm_paddr_t)-1, RADIX_PGD_SIZE, L1_PAGE_SIZE,
VM_MEMATTR_DEFAULT);
/* XXX zero on alloc here so we don't have to later */
store[i] = (void *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m));
}
return (count);

View File

@ -500,9 +500,9 @@ slb_uma_real_alloc(uma_zone_t zone, vm_size_t bytes, int domain,
realmax = platform_real_maxaddr();
*flags = UMA_SLAB_PRIV;
m = vm_page_alloc_contig_domain(NULL, 0, domain,
malloc2vm_flags(wait) | VM_ALLOC_NOOBJ | VM_ALLOC_WIRED,
1, 0, realmax, PAGE_SIZE, PAGE_SIZE, VM_MEMATTR_DEFAULT);
m = vm_page_alloc_noobj_contig_domain(domain, malloc2vm_flags(wait) |
VM_ALLOC_WIRED, 1, 0, realmax, PAGE_SIZE, PAGE_SIZE,
VM_MEMATTR_DEFAULT);
if (m == NULL)
return (NULL);
@ -513,9 +513,6 @@ slb_uma_real_alloc(uma_zone_t zone, vm_size_t bytes, int domain,
pmap_kenter((vm_offset_t)va, VM_PAGE_TO_PHYS(m));
}
if ((wait & M_ZERO) && (m->flags & PG_ZERO) == 0)
bzero(va, PAGE_SIZE);
return (va);
}

View File

@ -2757,8 +2757,6 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot,
VM_ALLOC_ZERO);
if (l3_m == NULL)
panic("pmap_enter: l3 pte_m == NULL");
if ((l3_m->flags & PG_ZERO) == 0)
pmap_zero_page(l3_m);
l3_pa = VM_PAGE_TO_PHYS(l3_m);
l3_pn = (l3_pa / PAGE_SIZE);

View File

@ -1885,17 +1885,15 @@ startup_alloc(uma_zone_t zone, vm_size_t bytes, int domain, uint8_t *pflag,
{
vm_paddr_t pa;
vm_page_t m;
void *mem;
int pages;
int i;
int i, pages;
pages = howmany(bytes, PAGE_SIZE);
KASSERT(pages > 0, ("%s can't reserve 0 pages", __func__));
*pflag = UMA_SLAB_BOOT;
m = vm_page_alloc_contig_domain(NULL, 0, domain,
malloc2vm_flags(wait) | VM_ALLOC_NOOBJ | VM_ALLOC_WIRED, pages,
(vm_paddr_t)0, ~(vm_paddr_t)0, 1, 0, VM_MEMATTR_DEFAULT);
m = vm_page_alloc_noobj_contig_domain(domain, malloc2vm_flags(wait) |
VM_ALLOC_WIRED, pages, (vm_paddr_t)0, ~(vm_paddr_t)0, 1, 0,
VM_MEMATTR_DEFAULT);
if (m == NULL)
return (NULL);
@ -1907,13 +1905,10 @@ startup_alloc(uma_zone_t zone, vm_size_t bytes, int domain, uint8_t *pflag,
dump_add_page(pa);
#endif
}
/* Allocate KVA and indirectly advance bootmem. */
mem = (void *)pmap_map(&bootmem, m->phys_addr,
m->phys_addr + (pages * PAGE_SIZE), VM_PROT_READ | VM_PROT_WRITE);
if ((wait & M_ZERO) != 0)
bzero(mem, pages * PAGE_SIZE);
return (mem);
/* Allocate KVA and indirectly advance bootmem. */
return ((void *)pmap_map(&bootmem, m->phys_addr,
m->phys_addr + (pages * PAGE_SIZE), VM_PROT_READ | VM_PROT_WRITE));
}
static void

View File

@ -2883,32 +2883,32 @@ vm_page_reclaim_run(int req_class, int domain, u_long npages, vm_page_t m_run,
* "m_run" and "high" only as a last
* resort.
*/
req = req_class | VM_ALLOC_NOOBJ;
req = req_class;
if ((m->flags & PG_NODUMP) != 0)
req |= VM_ALLOC_NODUMP;
if (trunc_page(high) !=
~(vm_paddr_t)PAGE_MASK) {
m_new = vm_page_alloc_contig(
NULL, 0, req, 1,
round_page(high),
~(vm_paddr_t)0,
PAGE_SIZE, 0,
VM_MEMATTR_DEFAULT);
m_new =
vm_page_alloc_noobj_contig(
req, 1, round_page(high),
~(vm_paddr_t)0, PAGE_SIZE,
0, VM_MEMATTR_DEFAULT);
} else
m_new = NULL;
if (m_new == NULL) {
pa = VM_PAGE_TO_PHYS(m_run);
m_new = vm_page_alloc_contig(
NULL, 0, req, 1,
0, pa - 1, PAGE_SIZE, 0,
m_new =
vm_page_alloc_noobj_contig(
req, 1, 0, pa - 1,
PAGE_SIZE, 0,
VM_MEMATTR_DEFAULT);
}
if (m_new == NULL) {
pa += ptoa(npages);
m_new = vm_page_alloc_contig(
NULL, 0, req, 1,
pa, high, PAGE_SIZE, 0,
VM_MEMATTR_DEFAULT);
m_new =
vm_page_alloc_noobj_contig(
req, 1, pa, high, PAGE_SIZE,
0, VM_MEMATTR_DEFAULT);
}
if (m_new == NULL) {
vm_page_xunbusy(m);