x86/apic: Sanitize 32/64bit APIC callbacks
The 32bit and the 64bit implementation of default_cpu_present_to_apicid() and default_check_phys_apicid_present() are exactly the same, but implemented and located differently. Move them to common apic code and get rid of the pointless difference. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Tested-by: Juergen Gross <jgross@suse.com> Tested-by: Yu Chen <yu.c.chen@intel.com> Acked-by: Juergen Gross <jgross@suse.com> Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com> Cc: Tony Luck <tony.luck@intel.com> Cc: Marc Zyngier <marc.zyngier@arm.com> Cc: Alok Kataria <akataria@vmware.com> Cc: Joerg Roedel <joro@8bytes.org> Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Christoph Hellwig <hch@lst.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Rui Zhang <rui.zhang@intel.com> Cc: "K. Y. Srinivasan" <kys@microsoft.com> Cc: Arjan van de Ven <arjan@linux.intel.com> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Len Brown <lenb@kernel.org> Link: https://lkml.kernel.org/r/20170913213153.757329991@linutronix.de
This commit is contained in:
parent
1da91779e1
commit
6406350583
|
@ -472,9 +472,6 @@ static inline unsigned default_get_apic_id(unsigned long x)
|
||||||
extern void apic_send_IPI_self(int vector);
|
extern void apic_send_IPI_self(int vector);
|
||||||
|
|
||||||
DECLARE_PER_CPU(int, x2apic_extra_bits);
|
DECLARE_PER_CPU(int, x2apic_extra_bits);
|
||||||
|
|
||||||
extern int default_cpu_present_to_apicid(int mps_cpu);
|
|
||||||
extern int default_check_phys_apicid_present(int phys_apicid);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void generic_bigsmp_probe(void);
|
extern void generic_bigsmp_probe(void);
|
||||||
|
@ -563,35 +560,8 @@ static inline void default_ioapic_phys_id_map(physid_mask_t *phys_map, physid_ma
|
||||||
*retmap = *phys_map;
|
*retmap = *phys_map;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int __default_cpu_present_to_apicid(int mps_cpu)
|
|
||||||
{
|
|
||||||
if (mps_cpu < nr_cpu_ids && cpu_present(mps_cpu))
|
|
||||||
return (int)per_cpu(x86_bios_cpu_apicid, mps_cpu);
|
|
||||||
else
|
|
||||||
return BAD_APICID;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
__default_check_phys_apicid_present(int phys_apicid)
|
|
||||||
{
|
|
||||||
return physid_isset(phys_apicid, phys_cpu_present_map);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_X86_32
|
|
||||||
static inline int default_cpu_present_to_apicid(int mps_cpu)
|
|
||||||
{
|
|
||||||
return __default_cpu_present_to_apicid(mps_cpu);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
default_check_phys_apicid_present(int phys_apicid)
|
|
||||||
{
|
|
||||||
return __default_check_phys_apicid_present(phys_apicid);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
extern int default_cpu_present_to_apicid(int mps_cpu);
|
extern int default_cpu_present_to_apicid(int mps_cpu);
|
||||||
extern int default_check_phys_apicid_present(int phys_apicid);
|
extern int default_check_phys_apicid_present(int phys_apicid);
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* CONFIG_X86_LOCAL_APIC */
|
#endif /* CONFIG_X86_LOCAL_APIC */
|
||||||
extern void irq_enter(void);
|
extern void irq_enter(void);
|
||||||
|
|
|
@ -1419,7 +1419,7 @@ static inline void kvm_arch_vcpu_block_finish(struct kvm_vcpu *vcpu) {}
|
||||||
static inline int kvm_cpu_get_apicid(int mps_cpu)
|
static inline int kvm_cpu_get_apicid(int mps_cpu)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_X86_LOCAL_APIC
|
#ifdef CONFIG_X86_LOCAL_APIC
|
||||||
return __default_cpu_present_to_apicid(mps_cpu);
|
return default_cpu_present_to_apicid(mps_cpu);
|
||||||
#else
|
#else
|
||||||
WARN_ON_ONCE(1);
|
WARN_ON_ONCE(1);
|
||||||
return BAD_APICID;
|
return BAD_APICID;
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
# In particualr, smp_apic_timer_interrupt() is called in random places.
|
# In particualr, smp_apic_timer_interrupt() is called in random places.
|
||||||
KCOV_INSTRUMENT := n
|
KCOV_INSTRUMENT := n
|
||||||
|
|
||||||
obj-$(CONFIG_X86_LOCAL_APIC) += apic.o apic_noop.o ipi.o vector.o
|
obj-$(CONFIG_X86_LOCAL_APIC) += apic.o apic_common.o apic_noop.o ipi.o vector.o
|
||||||
obj-y += hw_nmi.o
|
obj-y += hw_nmi.o
|
||||||
|
|
||||||
obj-$(CONFIG_X86_IO_APIC) += io_apic.o
|
obj-$(CONFIG_X86_IO_APIC) += io_apic.o
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Common functions shared between the various APIC flavours
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0
|
||||||
|
*/
|
||||||
|
#include <linux/irq.h>
|
||||||
|
#include <asm/apic.h>
|
||||||
|
|
||||||
|
int default_cpu_present_to_apicid(int mps_cpu)
|
||||||
|
{
|
||||||
|
if (mps_cpu < nr_cpu_ids && cpu_present(mps_cpu))
|
||||||
|
return (int)per_cpu(x86_bios_cpu_apicid, mps_cpu);
|
||||||
|
else
|
||||||
|
return BAD_APICID;
|
||||||
|
}
|
||||||
|
|
||||||
|
int default_check_phys_apicid_present(int phys_apicid)
|
||||||
|
{
|
||||||
|
return physid_isset(phys_apicid, phys_cpu_present_map);
|
||||||
|
}
|
|
@ -136,18 +136,6 @@ RESERVE_BRK(dmi_alloc, 65536);
|
||||||
static __initdata unsigned long _brk_start = (unsigned long)__brk_base;
|
static __initdata unsigned long _brk_start = (unsigned long)__brk_base;
|
||||||
unsigned long _brk_end = (unsigned long)__brk_base;
|
unsigned long _brk_end = (unsigned long)__brk_base;
|
||||||
|
|
||||||
#ifdef CONFIG_X86_64
|
|
||||||
int default_cpu_present_to_apicid(int mps_cpu)
|
|
||||||
{
|
|
||||||
return __default_cpu_present_to_apicid(mps_cpu);
|
|
||||||
}
|
|
||||||
|
|
||||||
int default_check_phys_apicid_present(int phys_apicid)
|
|
||||||
{
|
|
||||||
return __default_check_phys_apicid_present(phys_apicid);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct boot_params boot_params;
|
struct boot_params boot_params;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue