svn commit: r355313 - in head/sys: compat/cloudabi compat/linux kern
Jeff Roberson
jeff at FreeBSD.org
Mon Dec 2 22:38:26 UTC 2019
Author: jeff
Date: Mon Dec 2 22:38:25 2019
New Revision: 355313
URL: https://svnweb.freebsd.org/changeset/base/355313
Log:
Fix the last few cases that grab without busy or valid. The grab functions must
return the page in some held state for consistency elsewhere.
Reviewed by: alc, kib, markj
Differential Revision: https://reviews.freebsd.org/D22610
Modified:
head/sys/compat/cloudabi/cloudabi_vdso.c
head/sys/compat/linux/linux_vdso.c
head/sys/kern/kern_sharedpage.c
Modified: head/sys/compat/cloudabi/cloudabi_vdso.c
==============================================================================
--- head/sys/compat/cloudabi/cloudabi_vdso.c Mon Dec 2 22:35:45 2019 (r355312)
+++ head/sys/compat/cloudabi/cloudabi_vdso.c Mon Dec 2 22:38:25 2019 (r355313)
@@ -59,9 +59,10 @@ cloudabi_vdso_init(struct sysentvec *sv, char *begin,
addr = kva_alloc(PAGE_SIZE);
for (i = 0; i < pages; ++i) {
VM_OBJECT_WLOCK(obj);
- m = vm_page_grab(obj, i, VM_ALLOC_NOBUSY | VM_ALLOC_ZERO);
- m->valid = VM_PAGE_BITS_ALL;
+ m = vm_page_grab(obj, i, VM_ALLOC_ZERO);
VM_OBJECT_WUNLOCK(obj);
+ vm_page_valid(m);
+ vm_page_xunbusy(m);
pmap_qenter(addr, &m, 1);
memcpy((void *)addr, begin + i * PAGE_SIZE,
Modified: head/sys/compat/linux/linux_vdso.c
==============================================================================
--- head/sys/compat/linux/linux_vdso.c Mon Dec 2 22:35:45 2019 (r355312)
+++ head/sys/compat/linux/linux_vdso.c Mon Dec 2 22:38:25 2019 (r355313)
@@ -83,9 +83,10 @@ __elfN(linux_shared_page_init)(char **mapping)
obj = vm_pager_allocate(OBJT_PHYS, 0, PAGE_SIZE,
VM_PROT_DEFAULT, 0, NULL);
VM_OBJECT_WLOCK(obj);
- m = vm_page_grab(obj, 0, VM_ALLOC_NOBUSY | VM_ALLOC_ZERO);
- m->valid = VM_PAGE_BITS_ALL;
+ m = vm_page_grab(obj, 0, VM_ALLOC_ZERO);
VM_OBJECT_WUNLOCK(obj);
+ vm_page_valid(m);
+ vm_page_xunbusy(m);
addr = kva_alloc(PAGE_SIZE);
pmap_qenter(addr, &m, 1);
*mapping = (char *)addr;
Modified: head/sys/kern/kern_sharedpage.c
==============================================================================
--- head/sys/kern/kern_sharedpage.c Mon Dec 2 22:35:45 2019 (r355312)
+++ head/sys/kern/kern_sharedpage.c Mon Dec 2 22:38:25 2019 (r355313)
@@ -114,9 +114,10 @@ shared_page_init(void *dummy __unused)
shared_page_obj = vm_pager_allocate(OBJT_PHYS, 0, PAGE_SIZE,
VM_PROT_DEFAULT, 0, NULL);
VM_OBJECT_WLOCK(shared_page_obj);
- m = vm_page_grab(shared_page_obj, 0, VM_ALLOC_NOBUSY | VM_ALLOC_ZERO);
- m->valid = VM_PAGE_BITS_ALL;
+ m = vm_page_grab(shared_page_obj, 0, VM_ALLOC_ZERO);
VM_OBJECT_WUNLOCK(shared_page_obj);
+ vm_page_valid(m);
+ vm_page_xunbusy(m);
addr = kva_alloc(PAGE_SIZE);
pmap_qenter(addr, &m, 1);
shared_page_mapping = (char *)addr;
More information about the svn-src-all
mailing list