- Linux 3.0.74.
[opensuse:kernel-source.git] / patches.kabi / revert-x86-mm-Patch-out-arch_flush_lazy_mmu_mode-whe.patch
1 From: Jiri Slaby <jslaby@suse.cz>
2 Subject: Revert "x86, mm: Patch out arch_flush_lazy_mmu_mode() when running on
3  bare metal"
4 Patch-mainline: never, kabi fix
5
6 This reverts commit b1cf3728932d0e6beb0a09812cbc71618939069a from
7 3.0.74, upstream commit 511ba86e1d386f671084b5d0e6f110bb30b8eeb2.
8
9 It is optimisation only and it breaks kABI.
10
11 Signed-off-by: Jiri Slaby <jslaby@suse.cz>
12 ---
13  arch/x86/include/asm/paravirt.h       |  5 +----
14  arch/x86/include/asm/paravirt_types.h |  2 --
15  arch/x86/kernel/paravirt.c            | 25 ++++++++++++-------------
16  arch/x86/lguest/boot.c                |  1 -
17  arch/x86/xen/mmu.c                    |  1 -
18  5 files changed, 13 insertions(+), 21 deletions(-)
19
20 diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
21 index 25e9734..aa0f913 100644
22 --- a/arch/x86/include/asm/paravirt.h
23 +++ b/arch/x86/include/asm/paravirt.h
24 @@ -741,10 +741,7 @@ static inline void arch_leave_lazy_mmu_mode(void)
25         PVOP_VCALL0(pv_mmu_ops.lazy_mode.leave);
26  }
27  
28 -static inline void arch_flush_lazy_mmu_mode(void)
29 -{
30 -       PVOP_VCALL0(pv_mmu_ops.lazy_mode.flush);
31 -}
32 +void arch_flush_lazy_mmu_mode(void);
33  
34  static inline void __set_fixmap(unsigned /* enum fixed_addresses */ idx,
35                                 phys_addr_t phys, pgprot_t flags)
36 diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
37 index faf2c04..8e8b9a4 100644
38 --- a/arch/x86/include/asm/paravirt_types.h
39 +++ b/arch/x86/include/asm/paravirt_types.h
40 @@ -91,7 +91,6 @@ struct pv_lazy_ops {
41         /* Set deferred update mode, used for batching operations. */
42         void (*enter)(void);
43         void (*leave)(void);
44 -       void (*flush)(void);
45  };
46  
47  struct pv_time_ops {
48 @@ -681,7 +680,6 @@ void paravirt_end_context_switch(struct task_struct *next);
49  
50  void paravirt_enter_lazy_mmu(void);
51  void paravirt_leave_lazy_mmu(void);
52 -void paravirt_flush_lazy_mmu(void);
53  
54  void _paravirt_nop(void);
55  u32 _paravirt_ident_32(u32);
56 diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
57 index 128323e..ab13760 100644
58 --- a/arch/x86/kernel/paravirt.c
59 +++ b/arch/x86/kernel/paravirt.c
60 @@ -263,18 +263,6 @@ void paravirt_leave_lazy_mmu(void)
61         leave_lazy(PARAVIRT_LAZY_MMU);
62  }
63  
64 -void paravirt_flush_lazy_mmu(void)
65 -{
66 -       preempt_disable();
67 -
68 -       if (paravirt_get_lazy_mode() == PARAVIRT_LAZY_MMU) {
69 -               arch_leave_lazy_mmu_mode();
70 -               arch_enter_lazy_mmu_mode();
71 -       }
72 -
73 -       preempt_enable();
74 -}
75 -
76  void paravirt_start_context_switch(struct task_struct *prev)
77  {
78         BUG_ON(preemptible());
79 @@ -304,6 +292,18 @@ enum paravirt_lazy_mode paravirt_get_lazy_mode(void)
80         return percpu_read(paravirt_lazy_mode);
81  }
82  
83 +void arch_flush_lazy_mmu_mode(void)
84 +{
85 +       preempt_disable();
86 +
87 +       if (paravirt_get_lazy_mode() == PARAVIRT_LAZY_MMU) {
88 +               arch_leave_lazy_mmu_mode();
89 +               arch_enter_lazy_mmu_mode();
90 +       }
91 +
92 +       preempt_enable();
93 +}
94 +
95  struct pv_info pv_info = {
96         .name = "bare hardware",
97         .paravirt_enabled = 0,
98 @@ -477,7 +477,6 @@ struct pv_mmu_ops pv_mmu_ops = {
99         .lazy_mode = {
100                 .enter = paravirt_nop,
101                 .leave = paravirt_nop,
102 -               .flush = paravirt_nop,
103         },
104  
105         .set_fixmap = native_set_fixmap,
106 diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c
107 index 53272bd..642d880 100644
108 --- a/arch/x86/lguest/boot.c
109 +++ b/arch/x86/lguest/boot.c
110 @@ -1333,7 +1333,6 @@ __init void lguest_init(void)
111         pv_mmu_ops.read_cr3 = lguest_read_cr3;
112         pv_mmu_ops.lazy_mode.enter = paravirt_enter_lazy_mmu;
113         pv_mmu_ops.lazy_mode.leave = lguest_leave_lazy_mmu_mode;
114 -       pv_mmu_ops.lazy_mode.flush = paravirt_flush_lazy_mmu;
115         pv_mmu_ops.pte_update = lguest_pte_update;
116         pv_mmu_ops.pte_update_defer = lguest_pte_update;
117  
118 diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
119 index cf7fe36..5cb8e27 100644
120 --- a/arch/x86/xen/mmu.c
121 +++ b/arch/x86/xen/mmu.c
122 @@ -2076,7 +2076,6 @@ static const struct pv_mmu_ops xen_mmu_ops __initconst = {
123         .lazy_mode = {
124                 .enter = paravirt_enter_lazy_mmu,
125                 .leave = xen_leave_lazy_mmu,
126 -               .flush = paravirt_flush_lazy_mmu,
127         },
128  
129         .set_fixmap = xen_set_fixmap,
130 -- 
131 1.8.2.1
132