contigmalloc: handle M_EXEC.
Reviewed by: alc, markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D19092
This commit is contained in:
parent
04d6e324fc
commit
d22ff6e6a2
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=343850
@ -184,6 +184,7 @@ kmem_alloc_attr_domain(int domain, vm_size_t size, int flags, vm_paddr_t low,
|
||||
vm_offset_t addr, i, offset;
|
||||
vm_page_t m;
|
||||
int pflags, tries;
|
||||
vm_prot_t prot;
|
||||
|
||||
size = round_page(size);
|
||||
vmem = vm_dom[domain].vmd_kernel_arena;
|
||||
@ -193,6 +194,7 @@ kmem_alloc_attr_domain(int domain, vm_size_t size, int flags, vm_paddr_t low,
|
||||
pflags = malloc2vm_flags(flags) | VM_ALLOC_NOBUSY | VM_ALLOC_WIRED;
|
||||
pflags &= ~(VM_ALLOC_NOWAIT | VM_ALLOC_WAITOK | VM_ALLOC_WAITFAIL);
|
||||
pflags |= VM_ALLOC_NOWAIT;
|
||||
prot = (flags & M_EXEC) != 0 ? VM_PROT_ALL : VM_PROT_RW;
|
||||
VM_OBJECT_WLOCK(object);
|
||||
for (i = 0; i < size; i += PAGE_SIZE) {
|
||||
tries = 0;
|
||||
@ -220,8 +222,8 @@ kmem_alloc_attr_domain(int domain, vm_size_t size, int flags, vm_paddr_t low,
|
||||
if ((flags & M_ZERO) && (m->flags & PG_ZERO) == 0)
|
||||
pmap_zero_page(m);
|
||||
m->valid = VM_PAGE_BITS_ALL;
|
||||
pmap_enter(kernel_pmap, addr + i, m, VM_PROT_RW,
|
||||
VM_PROT_RW | PMAP_ENTER_WIRED, 0);
|
||||
pmap_enter(kernel_pmap, addr + i, m, prot,
|
||||
prot | PMAP_ENTER_WIRED, 0);
|
||||
}
|
||||
VM_OBJECT_WUNLOCK(object);
|
||||
return (addr);
|
||||
|
Loading…
Reference in New Issue
Block a user