diff options
author | alc <alc@FreeBSD.org> | 2013-03-12 03:48:05 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2013-03-12 03:48:05 +0000 |
commit | 65dfab20537928bf598183f6e9646c0789efcead (patch) | |
tree | db94e65b84e13f4e65493b5e692642075ff32858 /sys/i386/include/pmap.h | |
parent | 7c12a136b676a1bb8b9f1e7b36218bdc122cf2a7 (diff) | |
download | FreeBSD-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.h | 18 |
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; |