Date: Sat, 29 May 2021 20:15:04 GMT From: Justin Hibbits <jhibbits@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 09947faee84b - main - Apply r350335(5d18382b728) to powerpc64 radix pmap Message-ID: <202105292015.14TKF4Tu080508@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by jhibbits: URL: https://cgit.FreeBSD.org/src/commit/?id=09947faee84b84f8126fd9dcf30ea8fd9a0cae92 commit 09947faee84b84f8126fd9dcf30ea8fd9a0cae92 Author: Justin Hibbits <jhibbits@FreeBSD.org> AuthorDate: 2021-05-09 16:07:28 +0000 Commit: Justin Hibbits <jhibbits@FreeBSD.org> CommitDate: 2021-05-29 20:14:32 +0000 Apply r350335(5d18382b728) to powerpc64 radix pmap Simplify pmap_clear_modify() a bit, by assuming that since the superpage demotion succeeded, all 4k mappings from it are valid. Deindent the surrounding code, as there are no 'else' branches in the code anyway. --- sys/powerpc/aim/mmu_radix.c | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/sys/powerpc/aim/mmu_radix.c b/sys/powerpc/aim/mmu_radix.c index 8f38b57e7852..e86bfa94c7ae 100644 --- a/sys/powerpc/aim/mmu_radix.c +++ b/sys/powerpc/aim/mmu_radix.c @@ -2433,28 +2433,24 @@ restart: va = pv->pv_va; l3e = pmap_pml3e(pmap, va); oldl3e = be64toh(*l3e); - if ((oldl3e & PG_RW) != 0) { - if (pmap_demote_l3e_locked(pmap, l3e, va, &lock)) { - if ((oldl3e & PG_W) == 0) { - /* - * Write protect the mapping to a - * single page so that a subsequent - * write access may repromote. - */ - va += VM_PAGE_TO_PHYS(m) - (oldl3e & - PG_PS_FRAME); - pte = pmap_l3e_to_pte(l3e, va); - oldpte = be64toh(*pte); - if ((oldpte & PG_V) != 0) { - while (!atomic_cmpset_long(pte, - htobe64(oldpte), - htobe64((oldpte | RPTE_EAA_R) & ~(PG_M | PG_RW)))) - oldpte = be64toh(*pte); - vm_page_dirty(m); - pmap_invalidate_page(pmap, va); - } - } - } + if ((oldl3e & PG_RW) != 0 && + pmap_demote_l3e_locked(pmap, l3e, va, &lock) && + (oldl3e & PG_W) == 0) { + /* + * Write protect the mapping to a + * single page so that a subsequent + * write access may repromote. + */ + va += VM_PAGE_TO_PHYS(m) - (oldl3e & + PG_PS_FRAME); + pte = pmap_l3e_to_pte(l3e, va); + oldpte = be64toh(*pte); + while (!atomic_cmpset_long(pte, + htobe64(oldpte), + htobe64((oldpte | RPTE_EAA_R) & ~(PG_M | PG_RW)))) + oldpte = be64toh(*pte); + vm_page_dirty(m); + pmap_invalidate_page(pmap, va); } PMAP_UNLOCK(pmap); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202105292015.14TKF4Tu080508>