Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F145438970
D39556.1777909179.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D39556.1777909179.diff
View Options
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -6280,14 +6280,8 @@
return (anyvalid);
}
-/*
- * Remove the given range of addresses from the specified map.
- *
- * It is assumed that the start and end are properly
- * rounded to the page size.
- */
-void
-pmap_remove(pmap_t pmap, vm_offset_t sva, vm_offset_t eva)
+static void
+pmap_remove1(pmap_t pmap, vm_offset_t sva, vm_offset_t eva, bool map_delete)
{
struct rwlock *lock;
vm_page_t mt;
@@ -6319,7 +6313,8 @@
pmap_delayed_invl_start();
PMAP_LOCK(pmap);
- pmap_pkru_on_remove(pmap, sva, eva);
+ if (map_delete)
+ pmap_pkru_on_remove(pmap, sva, eva);
/*
* special handling of removing one page. a very
@@ -6441,6 +6436,24 @@
vm_page_free_pages_toq(&free, true);
}
+/*
+ * Remove the given range of addresses from the specified map.
+ *
+ * It is assumed that the start and end are properly
+ * rounded to the page size.
+ */
+void
+pmap_remove(pmap_t pmap, vm_offset_t sva, vm_offset_t eva)
+{
+ pmap_remove1(pmap, sva, eva, false);
+}
+
+void
+pmap_map_delete(pmap_t pmap, vm_offset_t sva, vm_offset_t eva)
+{
+ pmap_remove1(pmap, sva, eva, true);
+}
+
/*
* Routine: pmap_remove_all
* Function:
diff --git a/sys/amd64/include/pmap.h b/sys/amd64/include/pmap.h
--- a/sys/amd64/include/pmap.h
+++ b/sys/amd64/include/pmap.h
@@ -486,6 +486,7 @@
void pmap_get_mapping(pmap_t pmap, vm_offset_t va, uint64_t *ptr, int *num);
boolean_t pmap_map_io_transient(vm_page_t *, vm_offset_t *, int, boolean_t);
void pmap_unmap_io_transient(vm_page_t *, vm_offset_t *, int, boolean_t);
+void pmap_map_delete(pmap_t, vm_offset_t, vm_offset_t);
void pmap_pti_add_kva(vm_offset_t sva, vm_offset_t eva, bool exec);
void pmap_pti_remove_kva(vm_offset_t sva, vm_offset_t eva);
void pmap_pti_pcid_invalidate(uint64_t ucr3, uint64_t kcr3);
diff --git a/sys/arm/include/pmap.h b/sys/arm/include/pmap.h
--- a/sys/arm/include/pmap.h
+++ b/sys/arm/include/pmap.h
@@ -45,6 +45,7 @@
void *pmap_kenter_temporary(vm_paddr_t, int);
#define pmap_page_is_write_mapped(m) (((m)->a.flags & PGA_WRITEABLE) != 0)
void pmap_page_set_memattr(vm_page_t, vm_memattr_t);
+#define pmap_map_delete(pmap, sva, eva) pmap_remove(pmap, sva, eva)
void *pmap_mapdev(vm_paddr_t, vm_size_t);
void pmap_unmapdev(void *, vm_size_t);
diff --git a/sys/arm64/include/pmap.h b/sys/arm64/include/pmap.h
--- a/sys/arm64/include/pmap.h
+++ b/sys/arm64/include/pmap.h
@@ -154,6 +154,7 @@
bool pmap_ps_enabled(pmap_t pmap);
uint64_t pmap_to_ttbr0(pmap_t pmap);
void pmap_disable_promotion(vm_offset_t sva, vm_size_t size);
+#define pmap_map_delete(pmap, sva, eva) pmap_remove(pmap, sva, eva)
void *pmap_mapdev(vm_paddr_t, vm_size_t);
void *pmap_mapbios(vm_paddr_t, vm_size_t);
diff --git a/sys/i386/include/pmap.h b/sys/i386/include/pmap.h
--- a/sys/i386/include/pmap.h
+++ b/sys/i386/include/pmap.h
@@ -258,6 +258,7 @@
void pmap_force_invalidate_cache_range(vm_offset_t sva, vm_offset_t eva);
void *pmap_trm_alloc(size_t size, int flags);
void pmap_trm_free(void *addr, size_t size);
+#define pmap_map_delete(pmap, sva, eva) pmap_remove(pmap, sva, eva)
void invltlb_glob(void);
diff --git a/sys/powerpc/include/pmap.h b/sys/powerpc/include/pmap.h
--- a/sys/powerpc/include/pmap.h
+++ b/sys/powerpc/include/pmap.h
@@ -326,6 +326,7 @@
bool pmap_ps_enabled(pmap_t pmap);
int pmap_nofault(pmap_t pmap, vm_offset_t va, vm_prot_t flags);
boolean_t pmap_page_is_mapped(vm_page_t m);
+#define pmap_map_delete(pmap, sva, eva) pmap_remove(pmap, sva, eva)
void pmap_page_array_startup(long count);
diff --git a/sys/riscv/include/pmap.h b/sys/riscv/include/pmap.h
--- a/sys/riscv/include/pmap.h
+++ b/sys/riscv/include/pmap.h
@@ -57,6 +57,7 @@
#define pmap_page_get_memattr(m) ((m)->md.pv_memattr)
#define pmap_page_is_write_mapped(m) (((m)->a.flags & PGA_WRITEABLE) != 0)
void pmap_page_set_memattr(vm_page_t m, vm_memattr_t ma);
+#define pmap_map_delete(pmap, sva, eva) pmap_remove(pmap, sva, eva)
/*
* Pmap stuff
diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c
--- a/sys/vm/vm_map.c
+++ b/sys/vm/vm_map.c
@@ -3964,7 +3964,7 @@
*/
if ((entry->eflags & MAP_ENTRY_IS_SUB_MAP) != 0 ||
entry->object.vm_object != NULL)
- pmap_remove(map->pmap, entry->start, entry->end);
+ pmap_map_delete(map->pmap, entry->start, entry->end);
if (entry->end == map->anon_loc)
map->anon_loc = entry->start;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, May 4, 3:39 PM (10 h, 15 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28555151
Default Alt Text
D39556.1777909179.diff (4 KB)
Attached To
Mode
D39556: amd64: fix PKRU and swapout interaction
Attached
Detach File
Event Timeline
Log In to Comment