summaryrefslogtreecommitdiffstats
path: root/sys/i386/include/pmap.h
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2013-03-12 03:48:05 +0000
committeralc <alc@FreeBSD.org>2013-03-12 03:48:05 +0000
commit65dfab20537928bf598183f6e9646c0789efcead (patch)
treedb94e65b84e13f4e65493b5e692642075ff32858 /sys/i386/include/pmap.h
parent7c12a136b676a1bb8b9f1e7b36218bdc122cf2a7 (diff)
downloadFreeBSD-src-65dfab20537928bf598183f6e9646c0789efcead.zip
FreeBSD-src-65dfab20537928bf598183f6e9646c0789efcead.tar.gz
MFamd64
When a superpage promotion occurs, the page table page that the superpage mapping replaces is added to an ordered collection of page table pages. Rather than preserving the code that implements the splay tree of pages in the pmap for just this one purpose, use the new MI radix tree. The extra overhead of using a radix tree for this purpose is small enough, about 4% added run-time to pmap_promote_pde(), that I don't see the point of preserving the splay tree code. Sponsored by: EMC / Isilon Storage Division
Diffstat (limited to 'sys/i386/include/pmap.h')
-rw-r--r--sys/i386/include/pmap.h18
1 files changed, 5 insertions, 13 deletions
diff --git a/sys/i386/include/pmap.h b/sys/i386/include/pmap.h
index 9ba2752..8c20e1b 100644
--- a/sys/i386/include/pmap.h
+++ b/sys/i386/include/pmap.h
@@ -159,6 +159,8 @@
#include <sys/_lock.h>
#include <sys/_mutex.h>
+#include <vm/_vm_radix.h>
+
#ifdef PAE
typedef uint64_t pdpt_entry_t;
@@ -426,20 +428,10 @@ struct pv_entry;
struct pv_chunk;
struct md_page {
- union {
- TAILQ_HEAD(,pv_entry) pvi_list;
- struct {
- vm_page_t pii_left;
- vm_page_t pii_right;
- } pvi_siters;
- } pv_structs;
- int pat_mode;
+ TAILQ_HEAD(,pv_entry) pv_list;
+ int pat_mode;
};
-#define pv_list pv_structs.pvi_list
-#define pv_left pv_structs.pvi_siters.pii_left
-#define pv_right pv_structs.pvi_siters.pii_right
-
struct pmap {
struct mtx pm_mtx;
pd_entry_t *pm_pdir; /* KVA of page directory */
@@ -451,7 +443,7 @@ struct pmap {
pdpt_entry_t *pm_pdpt; /* KVA of page director pointer
table */
#endif
- vm_page_t pm_root; /* spare page table pages */
+ struct vm_radix pm_root; /* spare page table pages */
};
typedef struct pmap *pmap_t;
OpenPOWER on IntegriCloud