mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 14:12:06 +00:00
x86/cpufeature: Replace cpu_has_apic with boot_cpu_has() usage
Signed-off-by: Borislav Petkov <bp@suse.de> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Borislav Petkov <bp@alien8.de> Cc: Brian Gerst <brgerst@gmail.com> Cc: Denys Vlasenko <dvlasenk@redhat.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: iommu@lists.linux-foundation.org Cc: linux-pm@vger.kernel.org Cc: oprofile-list@lists.sf.net Link: http://lkml.kernel.org/r/1459801503-15600-8-git-send-email-bp@alien8.de Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
59e21e3d00
commit
93984fbd4e
@ -1518,7 +1518,7 @@ x86_pmu_notifier(struct notifier_block *self, unsigned long action, void *hcpu)
|
|||||||
|
|
||||||
static void __init pmu_check_apic(void)
|
static void __init pmu_check_apic(void)
|
||||||
{
|
{
|
||||||
if (cpu_has_apic)
|
if (boot_cpu_has(X86_FEATURE_APIC))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
x86_pmu.apic = 0;
|
x86_pmu.apic = 0;
|
||||||
|
@ -118,7 +118,6 @@ extern const char * const x86_bug_flags[NBUGINTS*32];
|
|||||||
set_bit(bit, (unsigned long *)cpu_caps_set); \
|
set_bit(bit, (unsigned long *)cpu_caps_set); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define cpu_has_apic boot_cpu_has(X86_FEATURE_APIC)
|
|
||||||
#define cpu_has_fxsr boot_cpu_has(X86_FEATURE_FXSR)
|
#define cpu_has_fxsr boot_cpu_has(X86_FEATURE_FXSR)
|
||||||
#define cpu_has_xsave boot_cpu_has(X86_FEATURE_XSAVE)
|
#define cpu_has_xsave boot_cpu_has(X86_FEATURE_XSAVE)
|
||||||
#define cpu_has_xsaves boot_cpu_has(X86_FEATURE_XSAVES)
|
#define cpu_has_xsaves boot_cpu_has(X86_FEATURE_XSAVES)
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
static inline bool arch_irq_work_has_interrupt(void)
|
static inline bool arch_irq_work_has_interrupt(void)
|
||||||
{
|
{
|
||||||
return cpu_has_apic;
|
return boot_cpu_has(X86_FEATURE_APIC);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* _ASM_IRQ_WORK_H */
|
#endif /* _ASM_IRQ_WORK_H */
|
||||||
|
@ -136,7 +136,7 @@ static int __init acpi_parse_madt(struct acpi_table_header *table)
|
|||||||
{
|
{
|
||||||
struct acpi_table_madt *madt = NULL;
|
struct acpi_table_madt *madt = NULL;
|
||||||
|
|
||||||
if (!cpu_has_apic)
|
if (!boot_cpu_has(X86_FEATURE_APIC))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
madt = (struct acpi_table_madt *)table;
|
madt = (struct acpi_table_madt *)table;
|
||||||
@ -951,7 +951,7 @@ static int __init early_acpi_parse_madt_lapic_addr_ovr(void)
|
|||||||
{
|
{
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
if (!cpu_has_apic)
|
if (!boot_cpu_has(X86_FEATURE_APIC))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -979,7 +979,7 @@ static int __init acpi_parse_madt_lapic_entries(void)
|
|||||||
int ret;
|
int ret;
|
||||||
struct acpi_subtable_proc madt_proc[2];
|
struct acpi_subtable_proc madt_proc[2];
|
||||||
|
|
||||||
if (!cpu_has_apic)
|
if (!boot_cpu_has(X86_FEATURE_APIC))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1125,7 +1125,7 @@ static int __init acpi_parse_madt_ioapic_entries(void)
|
|||||||
if (acpi_disabled || acpi_noirq)
|
if (acpi_disabled || acpi_noirq)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
if (!cpu_has_apic)
|
if (!boot_cpu_has(X86_FEATURE_APIC))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1085,7 +1085,7 @@ void lapic_shutdown(void)
|
|||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
if (!cpu_has_apic && !apic_from_smp_config())
|
if (!boot_cpu_has(X86_FEATURE_APIC) && !apic_from_smp_config())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
@ -1134,7 +1134,7 @@ void __init init_bsp_APIC(void)
|
|||||||
* Don't do the setup now if we have a SMP BIOS as the
|
* Don't do the setup now if we have a SMP BIOS as the
|
||||||
* through-I/O-APIC virtual wire mode might be active.
|
* through-I/O-APIC virtual wire mode might be active.
|
||||||
*/
|
*/
|
||||||
if (smp_found_config || !cpu_has_apic)
|
if (smp_found_config || !boot_cpu_has(X86_FEATURE_APIC))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1445,7 +1445,7 @@ static void __x2apic_disable(void)
|
|||||||
{
|
{
|
||||||
u64 msr;
|
u64 msr;
|
||||||
|
|
||||||
if (!cpu_has_apic)
|
if (!boot_cpu_has(X86_FEATURE_APIC))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
rdmsrl(MSR_IA32_APICBASE, msr);
|
rdmsrl(MSR_IA32_APICBASE, msr);
|
||||||
@ -1632,7 +1632,7 @@ void __init enable_IR_x2apic(void)
|
|||||||
*/
|
*/
|
||||||
static int __init detect_init_APIC(void)
|
static int __init detect_init_APIC(void)
|
||||||
{
|
{
|
||||||
if (!cpu_has_apic) {
|
if (!boot_cpu_has(X86_FEATURE_APIC)) {
|
||||||
pr_info("No local APIC present\n");
|
pr_info("No local APIC present\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1711,14 +1711,14 @@ static int __init detect_init_APIC(void)
|
|||||||
goto no_apic;
|
goto no_apic;
|
||||||
case X86_VENDOR_INTEL:
|
case X86_VENDOR_INTEL:
|
||||||
if (boot_cpu_data.x86 == 6 || boot_cpu_data.x86 == 15 ||
|
if (boot_cpu_data.x86 == 6 || boot_cpu_data.x86 == 15 ||
|
||||||
(boot_cpu_data.x86 == 5 && cpu_has_apic))
|
(boot_cpu_data.x86 == 5 && boot_cpu_has(X86_FEATURE_APIC)))
|
||||||
break;
|
break;
|
||||||
goto no_apic;
|
goto no_apic;
|
||||||
default:
|
default:
|
||||||
goto no_apic;
|
goto no_apic;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cpu_has_apic) {
|
if (!boot_cpu_has(X86_FEATURE_APIC)) {
|
||||||
/*
|
/*
|
||||||
* Over-ride BIOS and try to enable the local APIC only if
|
* Over-ride BIOS and try to enable the local APIC only if
|
||||||
* "lapic" specified.
|
* "lapic" specified.
|
||||||
@ -2233,19 +2233,19 @@ int __init APIC_init_uniprocessor(void)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
if (!cpu_has_apic) {
|
if (!boot_cpu_has(X86_FEATURE_APIC)) {
|
||||||
disable_apic = 1;
|
disable_apic = 1;
|
||||||
pr_info("Apic disabled by BIOS\n");
|
pr_info("Apic disabled by BIOS\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (!smp_found_config && !cpu_has_apic)
|
if (!smp_found_config && !boot_cpu_has(X86_FEATURE_APIC))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Complain if the BIOS pretends there is one.
|
* Complain if the BIOS pretends there is one.
|
||||||
*/
|
*/
|
||||||
if (!cpu_has_apic &&
|
if (!boot_cpu_has(X86_FEATURE_APIC) &&
|
||||||
APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) {
|
APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) {
|
||||||
pr_err("BIOS bug, local APIC 0x%x not detected!...\n",
|
pr_err("BIOS bug, local APIC 0x%x not detected!...\n",
|
||||||
boot_cpu_physical_apicid);
|
boot_cpu_physical_apicid);
|
||||||
@ -2426,7 +2426,7 @@ static void apic_pm_activate(void)
|
|||||||
static int __init init_lapic_sysfs(void)
|
static int __init init_lapic_sysfs(void)
|
||||||
{
|
{
|
||||||
/* XXX: remove suspend/resume procs if !apic_pm_state.active? */
|
/* XXX: remove suspend/resume procs if !apic_pm_state.active? */
|
||||||
if (cpu_has_apic)
|
if (boot_cpu_has(X86_FEATURE_APIC))
|
||||||
register_syscore_ops(&lapic_syscore_ops);
|
register_syscore_ops(&lapic_syscore_ops);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -100,13 +100,13 @@ static void noop_vector_allocation_domain(int cpu, struct cpumask *retmask,
|
|||||||
|
|
||||||
static u32 noop_apic_read(u32 reg)
|
static u32 noop_apic_read(u32 reg)
|
||||||
{
|
{
|
||||||
WARN_ON_ONCE((cpu_has_apic && !disable_apic));
|
WARN_ON_ONCE(boot_cpu_has(X86_FEATURE_APIC) && !disable_apic);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void noop_apic_write(u32 reg, u32 v)
|
static void noop_apic_write(u32 reg, u32 v)
|
||||||
{
|
{
|
||||||
WARN_ON_ONCE(cpu_has_apic && !disable_apic);
|
WARN_ON_ONCE(boot_cpu_has(X86_FEATURE_APIC) && !disable_apic);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct apic apic_noop = {
|
struct apic apic_noop = {
|
||||||
|
@ -1454,7 +1454,7 @@ void native_disable_io_apic(void)
|
|||||||
ioapic_write_entry(ioapic_i8259.apic, ioapic_i8259.pin, entry);
|
ioapic_write_entry(ioapic_i8259.apic, ioapic_i8259.pin, entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cpu_has_apic || apic_from_smp_config())
|
if (boot_cpu_has(X86_FEATURE_APIC) || apic_from_smp_config())
|
||||||
disconnect_bsp_APIC(ioapic_i8259.pin != -1);
|
disconnect_bsp_APIC(ioapic_i8259.pin != -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -230,7 +230,7 @@ int safe_smp_processor_id(void)
|
|||||||
{
|
{
|
||||||
int apicid, cpuid;
|
int apicid, cpuid;
|
||||||
|
|
||||||
if (!cpu_has_apic)
|
if (!boot_cpu_has(X86_FEATURE_APIC))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
apicid = hard_smp_processor_id();
|
apicid = hard_smp_processor_id();
|
||||||
|
@ -943,7 +943,7 @@ static int __init print_ICs(void)
|
|||||||
print_PIC();
|
print_PIC();
|
||||||
|
|
||||||
/* don't print out if apic is not there */
|
/* don't print out if apic is not there */
|
||||||
if (!cpu_has_apic && !apic_from_smp_config())
|
if (!boot_cpu_has(X86_FEATURE_APIC) && !apic_from_smp_config())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
print_local_APICs(show_lapic);
|
print_local_APICs(show_lapic);
|
||||||
|
@ -565,9 +565,9 @@ static void early_init_amd(struct cpuinfo_x86 *c)
|
|||||||
* can safely set X86_FEATURE_EXTD_APICID unconditionally for families
|
* can safely set X86_FEATURE_EXTD_APICID unconditionally for families
|
||||||
* after 16h.
|
* after 16h.
|
||||||
*/
|
*/
|
||||||
if (cpu_has_apic && c->x86 > 0x16) {
|
if (boot_cpu_has(X86_FEATURE_APIC) && c->x86 > 0x16) {
|
||||||
set_cpu_cap(c, X86_FEATURE_EXTD_APICID);
|
set_cpu_cap(c, X86_FEATURE_EXTD_APICID);
|
||||||
} else if (cpu_has_apic && c->x86 >= 0xf) {
|
} else if (boot_cpu_has(X86_FEATURE_APIC) && c->x86 >= 0xf) {
|
||||||
/* check CPU config space for extended APIC ID */
|
/* check CPU config space for extended APIC ID */
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
val = read_pci_config(0, 24, 0, 0x68);
|
val = read_pci_config(0, 24, 0, 0x68);
|
||||||
|
@ -281,7 +281,7 @@ static void intel_workarounds(struct cpuinfo_x86 *c)
|
|||||||
* integrated APIC (see 11AP erratum in "Pentium Processor
|
* integrated APIC (see 11AP erratum in "Pentium Processor
|
||||||
* Specification Update").
|
* Specification Update").
|
||||||
*/
|
*/
|
||||||
if (cpu_has_apic && (c->x86<<8 | c->x86_model<<4) == 0x520 &&
|
if (boot_cpu_has(X86_FEATURE_APIC) && (c->x86<<8 | c->x86_model<<4) == 0x520 &&
|
||||||
(c->x86_mask < 0x6 || c->x86_mask == 0xb))
|
(c->x86_mask < 0x6 || c->x86_mask == 0xb))
|
||||||
set_cpu_bug(c, X86_BUG_11AP);
|
set_cpu_bug(c, X86_BUG_11AP);
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ static int cmci_supported(int *banks)
|
|||||||
*/
|
*/
|
||||||
if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL)
|
if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL)
|
||||||
return 0;
|
return 0;
|
||||||
if (!cpu_has_apic || lapic_get_maxlvt() < 6)
|
if (!boot_cpu_has(X86_FEATURE_APIC) || lapic_get_maxlvt() < 6)
|
||||||
return 0;
|
return 0;
|
||||||
rdmsrl(MSR_IA32_MCG_CAP, cap);
|
rdmsrl(MSR_IA32_MCG_CAP, cap);
|
||||||
*banks = min_t(unsigned, MAX_NR_BANKS, cap & 0xff);
|
*banks = min_t(unsigned, MAX_NR_BANKS, cap & 0xff);
|
||||||
|
@ -447,7 +447,7 @@ asmlinkage __visible void smp_trace_thermal_interrupt(struct pt_regs *regs)
|
|||||||
/* Thermal monitoring depends on APIC, ACPI and clock modulation */
|
/* Thermal monitoring depends on APIC, ACPI and clock modulation */
|
||||||
static int intel_thermal_supported(struct cpuinfo_x86 *c)
|
static int intel_thermal_supported(struct cpuinfo_x86 *c)
|
||||||
{
|
{
|
||||||
if (!cpu_has_apic)
|
if (!boot_cpu_has(X86_FEATURE_APIC))
|
||||||
return 0;
|
return 0;
|
||||||
if (!cpu_has(c, X86_FEATURE_ACPI) || !cpu_has(c, X86_FEATURE_ACC))
|
if (!cpu_has(c, X86_FEATURE_ACPI) || !cpu_has(c, X86_FEATURE_ACC))
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -151,7 +151,7 @@ static void __init dtb_lapic_setup(void)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* Did the boot loader setup the local APIC ? */
|
/* Did the boot loader setup the local APIC ? */
|
||||||
if (!cpu_has_apic) {
|
if (!boot_cpu_has(X86_FEATURE_APIC)) {
|
||||||
if (apic_force_enable(r.start))
|
if (apic_force_enable(r.start))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1231,7 +1231,7 @@ static int __init smp_sanity_check(unsigned max_cpus)
|
|||||||
* If we couldn't find a local APIC, then get out of here now!
|
* If we couldn't find a local APIC, then get out of here now!
|
||||||
*/
|
*/
|
||||||
if (APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid]) &&
|
if (APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid]) &&
|
||||||
!cpu_has_apic) {
|
!boot_cpu_has(X86_FEATURE_APIC)) {
|
||||||
if (!disable_apic) {
|
if (!disable_apic) {
|
||||||
pr_err("BIOS bug, local APIC #%d not detected!...\n",
|
pr_err("BIOS bug, local APIC #%d not detected!...\n",
|
||||||
boot_cpu_physical_apicid);
|
boot_cpu_physical_apicid);
|
||||||
|
@ -700,7 +700,7 @@ int __init op_nmi_init(struct oprofile_operations *ops)
|
|||||||
char *cpu_type = NULL;
|
char *cpu_type = NULL;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (!cpu_has_apic)
|
if (!boot_cpu_has(X86_FEATURE_APIC))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
if (force_cpu_type == timer)
|
if (force_cpu_type == timer)
|
||||||
|
@ -445,7 +445,7 @@ void __init xen_msi_init(void)
|
|||||||
uint32_t eax = cpuid_eax(xen_cpuid_base() + 4);
|
uint32_t eax = cpuid_eax(xen_cpuid_base() + 4);
|
||||||
|
|
||||||
if (((eax & XEN_HVM_CPUID_X2APIC_VIRT) && x2apic_mode) ||
|
if (((eax & XEN_HVM_CPUID_X2APIC_VIRT) && x2apic_mode) ||
|
||||||
((eax & XEN_HVM_CPUID_APIC_ACCESS_VIRT) && cpu_has_apic))
|
((eax & XEN_HVM_CPUID_APIC_ACCESS_VIRT) && boot_cpu_has(X86_FEATURE_APIC)))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -945,7 +945,7 @@ static int __init longhaul_init(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_X86_IO_APIC
|
#ifdef CONFIG_X86_IO_APIC
|
||||||
if (cpu_has_apic) {
|
if (boot_cpu_has(X86_FEATURE_APIC)) {
|
||||||
printk(KERN_ERR PFX "APIC detected. Longhaul is currently "
|
printk(KERN_ERR PFX "APIC detected. Longhaul is currently "
|
||||||
"broken in this configuration.\n");
|
"broken in this configuration.\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
@ -36,7 +36,7 @@ static void irq_remapping_disable_io_apic(void)
|
|||||||
* As this gets called during crash dump, keep this simple for
|
* As this gets called during crash dump, keep this simple for
|
||||||
* now.
|
* now.
|
||||||
*/
|
*/
|
||||||
if (cpu_has_apic || apic_from_smp_config())
|
if (boot_cpu_has(X86_FEATURE_APIC) || apic_from_smp_config())
|
||||||
disconnect_bsp_APIC(0);
|
disconnect_bsp_APIC(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user