x86/msr: Prepare for including <linux/percpu.h> into <asm/msr.h>
To clean up the per CPU insanity of UP which causes sparse to be rightfully unhappy and prevents the usage of the generic per CPU accessors on cpu_info it is necessary to include <linux/percpu.h> into <asm/msr.h>. Including <linux/percpu.h> into <asm/msr.h> is impossible because it ends up in header dependency hell. The problem is that <asm/processor.h> includes <asm/msr.h>. The inclusion of <linux/percpu.h> results in a compile fail where the compiler cannot longer handle an include in <asm/cpufeature.h> which references boot_cpu_data which is defined in <asm/processor.h>. The only reason why <asm/msr.h> is included in <asm/processor.h> are the set/get_debugctlmsr() inlines. They are defined there because <asm/processor.h> is such a nice dump ground for everything. In fact they belong obviously into <asm/debugreg.h>. Move them to <asm/debugreg.h> and fix up the resulting damage which is just exposing the reliance on random include chains. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@kernel.org> Link: https://lore.kernel.org/r/20240304005104.454678686@linutronix.de
This commit is contained in:
parent
9eae297d5d
commit
154fcf3a78
@ -17,6 +17,7 @@
|
|||||||
#include <linux/kvm_host.h>
|
#include <linux/kvm_host.h>
|
||||||
|
|
||||||
#include <asm/cpufeature.h>
|
#include <asm/cpufeature.h>
|
||||||
|
#include <asm/debugreg.h>
|
||||||
#include <asm/hardirq.h>
|
#include <asm/hardirq.h>
|
||||||
#include <asm/intel-family.h>
|
#include <asm/intel-family.h>
|
||||||
#include <asm/intel_pt.h>
|
#include <asm/intel_pt.h>
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include <linux/sched/clock.h>
|
#include <linux/sched/clock.h>
|
||||||
|
|
||||||
#include <asm/cpu_entry_area.h>
|
#include <asm/cpu_entry_area.h>
|
||||||
|
#include <asm/debugreg.h>
|
||||||
#include <asm/perf_event.h>
|
#include <asm/perf_event.h>
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
#include <asm/insn.h>
|
#include <asm/insn.h>
|
||||||
|
@ -5,7 +5,9 @@
|
|||||||
#include <linux/bug.h>
|
#include <linux/bug.h>
|
||||||
#include <linux/percpu.h>
|
#include <linux/percpu.h>
|
||||||
#include <uapi/asm/debugreg.h>
|
#include <uapi/asm/debugreg.h>
|
||||||
|
|
||||||
#include <asm/cpufeature.h>
|
#include <asm/cpufeature.h>
|
||||||
|
#include <asm/msr.h>
|
||||||
|
|
||||||
DECLARE_PER_CPU(unsigned long, cpu_dr7);
|
DECLARE_PER_CPU(unsigned long, cpu_dr7);
|
||||||
|
|
||||||
@ -159,4 +161,26 @@ static inline unsigned long amd_get_dr_addr_mask(unsigned int dr)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static inline unsigned long get_debugctlmsr(void)
|
||||||
|
{
|
||||||
|
unsigned long debugctlmsr = 0;
|
||||||
|
|
||||||
|
#ifndef CONFIG_X86_DEBUGCTLMSR
|
||||||
|
if (boot_cpu_data.x86 < 6)
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
rdmsrl(MSR_IA32_DEBUGCTLMSR, debugctlmsr);
|
||||||
|
|
||||||
|
return debugctlmsr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void update_debugctlmsr(unsigned long debugctlmsr)
|
||||||
|
{
|
||||||
|
#ifndef CONFIG_X86_DEBUGCTLMSR
|
||||||
|
if (boot_cpu_data.x86 < 6)
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
wrmsrl(MSR_IA32_DEBUGCTLMSR, debugctlmsr);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _ASM_X86_DEBUGREG_H */
|
#endif /* _ASM_X86_DEBUGREG_H */
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
|
|
||||||
#include <asm/msr-index.h>
|
#include <asm/msr.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Read/write a task's FSBASE or GSBASE. This returns the value that
|
* Read/write a task's FSBASE or GSBASE. This returns the value that
|
||||||
|
@ -576,28 +576,6 @@ extern void cpu_init(void);
|
|||||||
extern void cpu_init_exception_handling(void);
|
extern void cpu_init_exception_handling(void);
|
||||||
extern void cr4_init(void);
|
extern void cr4_init(void);
|
||||||
|
|
||||||
static inline unsigned long get_debugctlmsr(void)
|
|
||||||
{
|
|
||||||
unsigned long debugctlmsr = 0;
|
|
||||||
|
|
||||||
#ifndef CONFIG_X86_DEBUGCTLMSR
|
|
||||||
if (boot_cpu_data.x86 < 6)
|
|
||||||
return 0;
|
|
||||||
#endif
|
|
||||||
rdmsrl(MSR_IA32_DEBUGCTLMSR, debugctlmsr);
|
|
||||||
|
|
||||||
return debugctlmsr;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void update_debugctlmsr(unsigned long debugctlmsr)
|
|
||||||
{
|
|
||||||
#ifndef CONFIG_X86_DEBUGCTLMSR
|
|
||||||
if (boot_cpu_data.x86 < 6)
|
|
||||||
return;
|
|
||||||
#endif
|
|
||||||
wrmsrl(MSR_IA32_DEBUGCTLMSR, debugctlmsr);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern void set_task_blockstep(struct task_struct *task, bool on);
|
extern void set_task_blockstep(struct task_struct *task, bool on);
|
||||||
|
|
||||||
/* Boot loader type from the setup header: */
|
/* Boot loader type from the setup header: */
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
#ifndef _ASM_X86_SPECIAL_INSNS_H
|
#ifndef _ASM_X86_SPECIAL_INSNS_H
|
||||||
#define _ASM_X86_SPECIAL_INSNS_H
|
#define _ASM_X86_SPECIAL_INSNS_H
|
||||||
|
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
|
|
||||||
#include <asm/nops.h>
|
#include <asm/nops.h>
|
||||||
#include <asm/processor-flags.h>
|
#include <asm/processor-flags.h>
|
||||||
|
|
||||||
|
#include <linux/errno.h>
|
||||||
#include <linux/irqflags.h>
|
#include <linux/irqflags.h>
|
||||||
#include <linux/jump_label.h>
|
#include <linux/jump_label.h>
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
* Author:
|
* Author:
|
||||||
* Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
|
* Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
|
||||||
*/
|
*/
|
||||||
|
#include <linux/bug.h>
|
||||||
|
#include <linux/limits.h>
|
||||||
|
|
||||||
#include <asm/cpufeature.h>
|
#include <asm/cpufeature.h>
|
||||||
#include <asm/intel_pconfig.h>
|
#include <asm/intel_pconfig.h>
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
* Authors: Fenghua Yu <fenghua.yu@intel.com>,
|
* Authors: Fenghua Yu <fenghua.yu@intel.com>,
|
||||||
* H. Peter Anvin <hpa@linux.intel.com>
|
* H. Peter Anvin <hpa@linux.intel.com>
|
||||||
*/
|
*/
|
||||||
|
#include <linux/printk.h>
|
||||||
|
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
#include <asm/archrandom.h>
|
#include <asm/archrandom.h>
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
/*
|
/*
|
||||||
* x86 FPU bug checks:
|
* x86 FPU bug checks:
|
||||||
*/
|
*/
|
||||||
|
#include <linux/printk.h>
|
||||||
|
|
||||||
#include <asm/cpufeature.h>
|
#include <asm/cpufeature.h>
|
||||||
#include <asm/fpu/api.h>
|
#include <asm/fpu/api.h>
|
||||||
|
|
||||||
|
@ -6,7 +6,9 @@
|
|||||||
#include <linux/sched/task_stack.h>
|
#include <linux/sched/task_stack.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/ptrace.h>
|
#include <linux/ptrace.h>
|
||||||
|
|
||||||
#include <asm/desc.h>
|
#include <asm/desc.h>
|
||||||
|
#include <asm/debugreg.h>
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
|
|
||||||
unsigned long convert_ip_to_linear(struct task_struct *child, struct pt_regs *regs)
|
unsigned long convert_ip_to_linear(struct task_struct *child, struct pt_regs *regs)
|
||||||
|
Loading…
Reference in New Issue
Block a user