Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F106953355
D21097.id60223.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
1 KB
Referenced Files
None
Subscribers
None
D21097.id60223.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D21097: Have pmap_fault() return success on a PF if the mapping is dirty.
Attached
Detach File
Event Timeline
Log In to Comment