Never export data; modules have no business being able to change tlb state.
Signed-off-by: Peter Zijlstra (Intel) <pet...@infradead.org> --- arch/x86/hyperv/mmu.c | 9 ++------- arch/x86/include/asm/tlbflush.h | 2 ++ arch/x86/mm/tlb.c | 7 ++++++- 3 files changed, 10 insertions(+), 8 deletions(-) --- a/arch/x86/hyperv/mmu.c +++ b/arch/x86/hyperv/mmu.c @@ -51,11 +51,6 @@ static inline int fill_gva_list(u64 gva_ return gva_n - offset; } -static bool cpu_is_lazy(int cpu) -{ - return per_cpu(cpu_tlbstate_shared.is_lazy, cpu); -} - static void hyperv_flush_tlb_multi(const struct cpumask *cpus, const struct flush_tlb_info *info) { @@ -113,7 +108,7 @@ static void hyperv_flush_tlb_multi(const goto do_ex_hypercall; for_each_cpu(cpu, cpus) { - if (do_lazy && cpu_is_lazy(cpu)) + if (do_lazy && cpu_tlbstate_is_lazy(cpu)) continue; vcpu = hv_cpu_number_to_vp_number(cpu); if (vcpu == VP_INVAL) { @@ -198,7 +193,7 @@ static u64 hyperv_flush_tlb_others_ex(co flush->hv_vp_set.format = HV_GENERIC_SET_SPARSE_4K; nr_bank = cpumask_to_vpset_skip(&flush->hv_vp_set, cpus, - info->freed_tables ? NULL : cpu_is_lazy); + info->freed_tables ? NULL : cpu_tlbstate_is_lazy); if (nr_bank < 0) return HV_STATUS_INVALID_PARAMETER; --- a/arch/x86/include/asm/tlbflush.h +++ b/arch/x86/include/asm/tlbflush.h @@ -172,6 +172,8 @@ struct tlb_state_shared { }; DECLARE_PER_CPU_SHARED_ALIGNED(struct tlb_state_shared, cpu_tlbstate_shared); +bool cpu_tlbstate_is_lazy(int cpu); + bool nmi_uaccess_okay(void); #define nmi_uaccess_okay nmi_uaccess_okay --- a/arch/x86/mm/tlb.c +++ b/arch/x86/mm/tlb.c @@ -1322,7 +1322,12 @@ static bool should_trim_cpumask(struct m } DEFINE_PER_CPU_SHARED_ALIGNED(struct tlb_state_shared, cpu_tlbstate_shared); -EXPORT_PER_CPU_SYMBOL(cpu_tlbstate_shared); + +bool cpu_tlbstate_is_lazy(int cpu) +{ + return per_cpu(cpu_tlbstate_shared.is_lazy, cpu); +} +EXPORT_SYMBOL_GPL(cpu_tlbstate_is_lazy); STATIC_NOPV void native_flush_tlb_multi(const struct cpumask *cpumask, const struct flush_tlb_info *info)