mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

Switch them over to apic_update_callback() and remove the code. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com> Reviewed-by: Wei Liu <wei.liu@kernel.org> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Tested-by: Michael Kelley <mikelley@microsoft.com> Tested-by: Sohil Mehta <sohil.mehta@intel.com> Tested-by: Juergen Gross <jgross@suse.com> # Xen PV (dom0 and unpriv. guest)
57 lines
1.4 KiB
C
57 lines
1.4 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
#define pr_fmt(fmt) "APIC: " fmt
|
|
|
|
#include <asm/apic.h>
|
|
|
|
#include "local.h"
|
|
|
|
/* The container for function call overrides */
|
|
struct apic_override __x86_apic_override __initdata;
|
|
|
|
#define apply_override(__cb) \
|
|
if (__x86_apic_override.__cb) \
|
|
apic->__cb = __x86_apic_override.__cb
|
|
|
|
static __init void restore_override_callbacks(void)
|
|
{
|
|
apply_override(eoi);
|
|
apply_override(native_eoi);
|
|
apply_override(write);
|
|
apply_override(read);
|
|
apply_override(send_IPI);
|
|
apply_override(send_IPI_mask);
|
|
apply_override(send_IPI_mask_allbutself);
|
|
apply_override(send_IPI_allbutself);
|
|
apply_override(send_IPI_all);
|
|
apply_override(send_IPI_self);
|
|
apply_override(icr_read);
|
|
apply_override(icr_write);
|
|
apply_override(wakeup_secondary_cpu);
|
|
apply_override(wakeup_secondary_cpu_64);
|
|
}
|
|
|
|
void __init apic_setup_apic_calls(void)
|
|
{
|
|
/* Ensure that the default APIC has native_eoi populated */
|
|
apic->native_eoi = apic->eoi;
|
|
}
|
|
|
|
void __init apic_install_driver(struct apic *driver)
|
|
{
|
|
if (apic == driver)
|
|
return;
|
|
|
|
apic = driver;
|
|
|
|
if (IS_ENABLED(CONFIG_X86_X2APIC) && apic->x2apic_set_max_apicid)
|
|
apic->max_apic_id = x2apic_max_apicid;
|
|
|
|
/* Copy the original eoi() callback as KVM/HyperV might overwrite it */
|
|
if (!apic->native_eoi)
|
|
apic->native_eoi = apic->eoi;
|
|
|
|
/* Apply any already installed callback overrides */
|
|
restore_override_callbacks();
|
|
|
|
pr_info("Switched APIC routing to: %s\n", driver->name);
|
|
}
|