Page MenuHomeFreeBSD

D45851.diff
No OneTemporary

D45851.diff

diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c
--- a/sys/arm64/arm64/pmap.c
+++ b/sys/arm64/arm64/pmap.c
@@ -4403,8 +4403,22 @@
va = va_next;
}
if ((l3 & ATTR_CONTIGUOUS) != 0) {
- l3p += L3C_ENTRIES - 1;
- sva += L3C_SIZE - L3_SIZE;
+ /*
+ * Does this L3C page extend beyond
+ * the requested range? Handle the
+ * possibility that "va_next" is zero.
+ */
+ if ((sva | L3C_OFFSET) > va_next - 1)
+ break;
+
+ /*
+ * Skip ahead to the last L3_PAGE
+ * within this L3C page.
+ */
+ l3p = (pt_entry_t *)((uintptr_t)l3p |
+ ((L3C_ENTRIES - 1) *
+ sizeof(pt_entry_t)));
+ sva |= L3C_SIZE - L3_SIZE;
}
continue;
}

File Metadata

Mime Type
text/plain
Expires
Sun, Nov 17, 2:46 PM (21 h, 57 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14680388
Default Alt Text
D45851.diff (739 B)

Event Timeline