git: 0fd27bcab2f8 - main - arm64: Fix an assertion in pmap_enter_largepage()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 26 Sep 2022 13:03:29 UTC
The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=0fd27bcab2f83ffd28ff9443a343d610cbfba2d7 commit 0fd27bcab2f83ffd28ff9443a343d610cbfba2d7 Author: Mark Johnston <markj@FreeBSD.org> AuthorDate: 2022-09-26 12:56:11 +0000 Commit: Mark Johnston <markj@FreeBSD.org> CommitDate: 2022-09-26 12:56:11 +0000 arm64: Fix an assertion in pmap_enter_largepage() The intent is to assert that either no mapping exists at the given VA, or that the existing L1 block mapping maps the same PA. Fixes: 36f1526a598c ("Add experimental 16k page support on arm64") Reviewed by: alc MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D36698 --- sys/arm64/arm64/pmap.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c index 32cf3dd7636c..83eae8d5791f 100644 --- a/sys/arm64/arm64/pmap.c +++ b/sys/arm64/arm64/pmap.c @@ -3893,6 +3893,8 @@ pmap_enter_largepage(pmap_t pmap, vm_offset_t va, pt_entry_t newpte, int flags, restart: if (psind == 2) { + PMAP_ASSERT_L1_BLOCKS_SUPPORTED; + l0p = pmap_l0(pmap, va); if ((pmap_load(l0p) & ATTR_DESCR_VALID) == 0) { mp = _pmap_alloc_l3(pmap, pmap_l0_pindex(va), NULL); @@ -3917,10 +3919,9 @@ restart: mp->ref_count++; } } - KASSERT((origpte & ~ATTR_MASK) == (newpte & ~ATTR_MASK) || - (L1_BLOCKS_SUPPORTED && - (origpte & ATTR_DESCR_MASK) == L1_BLOCK && - (origpte & ATTR_DESCR_VALID) == 0), + KASSERT(((origpte & ~ATTR_MASK) == (newpte & ~ATTR_MASK) && + (origpte & ATTR_DESCR_MASK) == L1_BLOCK) || + (origpte & ATTR_DESCR_VALID) == 0, ("va %#lx changing 1G phys page l1 %#lx newpte %#lx", va, origpte, newpte)); pmap_store(l1p, newpte);