Date: Sat, 10 Feb 2018 22:34:46 +0000 (UTC) From: Jeff Roberson <jeff@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r329110 - user/jeff/numa/sys/vm Message-ID: <201802102234.w1AMYkR2075750@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jeff Date: Sat Feb 10 22:34:46 2018 New Revision: 329110 URL: https://svnweb.freebsd.org/changeset/base/329110 Log: If a segment includes regions that don't produce full reservations due to alignment or size we may find valid rv structures that are not initialized. Don't assert about their contents before we check for a valid object or we will falsely panic when the domain is 0. Thanks to kib for pointing this out to me. Found by: pho Modified: user/jeff/numa/sys/vm/vm_reserv.c Modified: user/jeff/numa/sys/vm/vm_reserv.c ============================================================================== --- user/jeff/numa/sys/vm/vm_reserv.c Sat Feb 10 20:34:09 2018 (r329109) +++ user/jeff/numa/sys/vm/vm_reserv.c Sat Feb 10 22:34:46 2018 (r329110) @@ -1056,9 +1056,9 @@ vm_reserv_free_page(vm_page_t m) vm_reserv_t rv; rv = vm_reserv_from_page(m); - vm_domain_free_assert_locked(VM_DOMAIN(rv->domain)); if (rv->object == NULL) return (FALSE); + vm_domain_free_assert_locked(VM_DOMAIN(rv->domain)); vm_reserv_depopulate(rv, m - rv->pages); return (TRUE); } @@ -1105,9 +1105,9 @@ vm_reserv_is_page_free(vm_page_t m) vm_reserv_t rv; rv = vm_reserv_from_page(m); - vm_domain_free_assert_locked(VM_DOMAIN(rv->domain)); if (rv->object == NULL) return (false); + vm_domain_free_assert_locked(VM_DOMAIN(rv->domain)); return (popmap_is_clear(rv->popmap, m - rv->pages)); } @@ -1364,18 +1364,14 @@ vm_reserv_startup(vm_offset_t *vaddr, vm_paddr_t end, vm_page_t vm_reserv_to_superpage(vm_page_t m) { - struct vm_domain *vmd; vm_reserv_t rv; VM_OBJECT_ASSERT_LOCKED(m->object); rv = vm_reserv_from_page(m); - vmd = VM_DOMAIN(rv->domain); - vm_domain_free_lock(vmd); if (rv->object == m->object && rv->popcnt == VM_LEVEL_0_NPAGES) m = rv->pages; else m = NULL; - vm_domain_free_unlock(vmd); return (m); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201802102234.w1AMYkR2075750>