git: ec21f85ab5f0 - main - riscv: Handle invalid L2 entries in pmap_extract()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 29 Sep 2022 17:24:32 UTC
The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=ec21f85ab5f03a803884cc7bafa88621c613f4ca commit ec21f85ab5f03a803884cc7bafa88621c613f4ca Author: Mark Johnston <markj@FreeBSD.org> AuthorDate: 2022-09-29 17:07:26 +0000 Commit: Mark Johnston <markj@FreeBSD.org> CommitDate: 2022-09-29 17:11:26 +0000 riscv: Handle invalid L2 entries in pmap_extract() While here, eliminate a single-use local variable. PR: 266103 Reviewed by: mhorne MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D36395 --- sys/riscv/riscv/pmap.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/sys/riscv/riscv/pmap.c b/sys/riscv/riscv/pmap.c index 6aec89faf860..ddbeb9039c51 100644 --- a/sys/riscv/riscv/pmap.c +++ b/sys/riscv/riscv/pmap.c @@ -903,27 +903,25 @@ vm_paddr_t pmap_extract(pmap_t pmap, vm_offset_t va) { pd_entry_t *l2p, l2; - pt_entry_t *l3p, l3; + pt_entry_t *l3p; vm_paddr_t pa; pa = 0; - PMAP_LOCK(pmap); + /* - * Start with the l2 tabel. We are unable to allocate - * pages in the l1 table. + * Start with an L2 lookup, L1 superpages are currently not implemented. */ + PMAP_LOCK(pmap); l2p = pmap_l2(pmap, va); - if (l2p != NULL) { - l2 = pmap_load(l2p); - if ((l2 & PTE_RX) == 0) { + if (l2p != NULL && ((l2 = pmap_load(l2p)) & PTE_V) != 0) { + if ((l2 & PTE_RWX) == 0) { l3p = pmap_l2_to_l3(l2p, va); if (l3p != NULL) { - l3 = pmap_load(l3p); - pa = PTE_TO_PHYS(l3); + pa = PTE_TO_PHYS(pmap_load(l3p)); pa |= (va & L3_OFFSET); } } else { - /* L2 is superpages */ + /* L2 is a superpage mapping. */ pa = L2PTE_TO_PHYS(l2); pa |= (va & L2_OFFSET); }