Page MenuHomeFreeBSD

D21097.id60223.diff
No OneTemporary

D21097.id60223.diff

Index: sys/arm64/arm64/pmap.c
===================================================================
--- sys/arm64/arm64/pmap.c
+++ sys/arm64/arm64/pmap.c
@@ -5743,7 +5743,7 @@
int
pmap_fault(pmap_t pmap, uint64_t esr, uint64_t far)
{
- pt_entry_t *pte;
+ pt_entry_t pte, *ptep;
register_t intr;
uint64_t ec, par;
int lvl, rv;
@@ -5767,9 +5767,9 @@
case ISS_DATA_DFSC_AFF_L2:
case ISS_DATA_DFSC_AFF_L3:
PMAP_LOCK(pmap);
- pte = pmap_pte(pmap, far, &lvl);
- if (pte != NULL) {
- pmap_set_bits(pte, ATTR_AF);
+ ptep = pmap_pte(pmap, far, &lvl);
+ if (ptep != NULL) {
+ pmap_set_bits(ptep, ATTR_AF);
rv = KERN_SUCCESS;
/*
* XXXMJ as an optimization we could mark the entry
@@ -5785,12 +5785,13 @@
(esr & ISS_DATA_WnR) == 0)
return (rv);
PMAP_LOCK(pmap);
- pte = pmap_pte(pmap, far, &lvl);
- if (pte != NULL &&
- (pmap_load(pte) & (ATTR_AP_RW_BIT | ATTR_SW_DBM)) ==
- (ATTR_AP(ATTR_AP_RO) | ATTR_SW_DBM)) {
- pmap_clear_bits(pte, ATTR_AP_RW_BIT);
- pmap_invalidate_page(pmap, trunc_page(far));
+ ptep = pmap_pte(pmap, far, &lvl);
+ if (ptep != NULL &&
+ ((pte = pmap_load(ptep)) & ATTR_SW_DBM) != 0) {
+ if ((pte & ATTR_AP_RW_BIT) == ATTR_AP(ATTR_AP_RO)) {
+ pmap_clear_bits(ptep, ATTR_AP_RW_BIT);
+ pmap_invalidate_page(pmap, trunc_page(far));
+ }
rv = KERN_SUCCESS;
}
PMAP_UNLOCK(pmap);

File Metadata

Mime Type
text/plain
Expires
Thu, Jan 9, 12:22 AM (2 h, 50 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15727636
Default Alt Text
D21097.id60223.diff (1 KB)

Event Timeline