aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/xen/mmu.c
diff options
context:
space:
mode:
authorJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>2009-02-18 02:46:21 -0500
committerJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>2009-03-30 02:36:00 -0400
commitb407fc57b815b2016186220baabc76cc8264206e (patch)
tree29949f727af8b6c19fd689fa10f123ea84c03cb0 /arch/x86/xen/mmu.c
parent7fd7d83d49914f03aefffba6aee09032fcd54cce (diff)
x86/paravirt: flush pending mmu updates on context switch
Impact: allow preemption during lazy mmu updates If we're in lazy mmu mode when context switching, leave lazy mmu mode, but remember the task's state in TIF_LAZY_MMU_UPDATES. When we resume the task, check this flag and re-enter lazy mmu mode if its set. This sets things up for allowing lazy mmu mode while preemptible, though that won't actually be active until the next change. Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Diffstat (limited to 'arch/x86/xen/mmu.c')
-rw-r--r--arch/x86/xen/mmu.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index 6b98f87232ac..f5f8faa4f76c 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -1816,6 +1816,11 @@ __init void xen_post_allocator_init(void)
1816 xen_mark_init_mm_pinned(); 1816 xen_mark_init_mm_pinned();
1817} 1817}
1818 1818
1819static void xen_leave_lazy_mmu(void)
1820{
1821 xen_mc_flush();
1822 paravirt_leave_lazy_mmu();
1823}
1819 1824
1820const struct pv_mmu_ops xen_mmu_ops __initdata = { 1825const struct pv_mmu_ops xen_mmu_ops __initdata = {
1821 .pagetable_setup_start = xen_pagetable_setup_start, 1826 .pagetable_setup_start = xen_pagetable_setup_start,
@@ -1891,7 +1896,7 @@ const struct pv_mmu_ops xen_mmu_ops __initdata = {
1891 1896
1892 .lazy_mode = { 1897 .lazy_mode = {
1893 .enter = paravirt_enter_lazy_mmu, 1898 .enter = paravirt_enter_lazy_mmu,
1894 .leave = xen_leave_lazy, 1899 .leave = xen_leave_lazy_mmu,
1895 }, 1900 },
1896 1901
1897 .set_fixmap = xen_set_fixmap, 1902 .set_fixmap = xen_set_fixmap,