diff options
author | Christoph Lameter <clameter@sgi.com> | 2007-07-21 11:10:30 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-21 21:37:09 -0400 |
commit | 34feb2c83beb3bdf13535a36770f7e50b47ef299 (patch) | |
tree | 4abc3b0fe31495315f414677dcb5198967caa333 /arch | |
parent | f0a7a5c93dfd1c0348dbbdb6f22cb82d99079c93 (diff) |
x86_64: Quicklist support for x86_64
This adds caching of pgds and puds, pmds, pte. That way we can avoid costly
zeroing and initialization of special mappings in the pgd.
A second quicklist is useful to separate out PGD handling. We can carry the
initialized pgds over to the next process needing them.
Also clean up the pgd_list handling to use regular list macros. There is no
need anymore to avoid the lru field.
Move the add/removal of the pgds to the pgdlist into the constructor /
destructor. That way the implementation is congruent with i386.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: "Luck, Tony" <tony.luck@intel.com>
Acked-by: William Lee Irwin III <wli@holomorphy.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86_64/Kconfig | 8 | ||||
-rw-r--r-- | arch/x86_64/kernel/process.c | 1 | ||||
-rw-r--r-- | arch/x86_64/kernel/smp.c | 2 |
3 files changed, 10 insertions, 1 deletions
diff --git a/arch/x86_64/Kconfig b/arch/x86_64/Kconfig index fca1a85042ea..45f82ae6d389 100644 --- a/arch/x86_64/Kconfig +++ b/arch/x86_64/Kconfig | |||
@@ -60,6 +60,14 @@ config ZONE_DMA | |||
60 | bool | 60 | bool |
61 | default y | 61 | default y |
62 | 62 | ||
63 | config QUICKLIST | ||
64 | bool | ||
65 | default y | ||
66 | |||
67 | config NR_QUICK | ||
68 | int | ||
69 | default 2 | ||
70 | |||
63 | config ISA | 71 | config ISA |
64 | bool | 72 | bool |
65 | 73 | ||
diff --git a/arch/x86_64/kernel/process.c b/arch/x86_64/kernel/process.c index 5909039f37aa..180f4c0fcbc4 100644 --- a/arch/x86_64/kernel/process.c +++ b/arch/x86_64/kernel/process.c | |||
@@ -207,6 +207,7 @@ void cpu_idle (void) | |||
207 | if (__get_cpu_var(cpu_idle_state)) | 207 | if (__get_cpu_var(cpu_idle_state)) |
208 | __get_cpu_var(cpu_idle_state) = 0; | 208 | __get_cpu_var(cpu_idle_state) = 0; |
209 | 209 | ||
210 | check_pgt_cache(); | ||
210 | rmb(); | 211 | rmb(); |
211 | idle = pm_idle; | 212 | idle = pm_idle; |
212 | if (!idle) | 213 | if (!idle) |
diff --git a/arch/x86_64/kernel/smp.c b/arch/x86_64/kernel/smp.c index df4a82812adb..673a300b5944 100644 --- a/arch/x86_64/kernel/smp.c +++ b/arch/x86_64/kernel/smp.c | |||
@@ -241,7 +241,7 @@ void flush_tlb_mm (struct mm_struct * mm) | |||
241 | } | 241 | } |
242 | if (!cpus_empty(cpu_mask)) | 242 | if (!cpus_empty(cpu_mask)) |
243 | flush_tlb_others(cpu_mask, mm, FLUSH_ALL); | 243 | flush_tlb_others(cpu_mask, mm, FLUSH_ALL); |
244 | 244 | check_pgt_cache(); | |
245 | preempt_enable(); | 245 | preempt_enable(); |
246 | } | 246 | } |
247 | EXPORT_SYMBOL(flush_tlb_mm); | 247 | EXPORT_SYMBOL(flush_tlb_mm); |