mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-28 19:33:35 -05:00
x86/apic/x2apic: Share all common IPI functions
Yet more copy and pasta gone. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com> 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)
This commit is contained in:
committed by
Dave Hansen
parent
194ac70981
commit
96ae35c75b
@@ -19,8 +19,10 @@ void __x2apic_send_IPI_dest(unsigned int apicid, int vector, unsigned int dest);
|
||||
unsigned int x2apic_get_apic_id(unsigned long id);
|
||||
u32 x2apic_set_apic_id(unsigned int id);
|
||||
int x2apic_phys_pkg_id(int initial_apicid, int index_msb);
|
||||
|
||||
void x2apic_send_IPI_all(int vector);
|
||||
void x2apic_send_IPI_allbutself(int vector);
|
||||
void x2apic_send_IPI_self(int vector);
|
||||
void __x2apic_send_IPI_shorthand(int vector, u32 which);
|
||||
|
||||
/* IPI */
|
||||
|
||||
|
||||
@@ -83,16 +83,6 @@ x2apic_send_IPI_mask_allbutself(const struct cpumask *mask, int vector)
|
||||
__x2apic_send_IPI_mask(mask, vector, APIC_DEST_ALLBUT);
|
||||
}
|
||||
|
||||
static void x2apic_send_IPI_allbutself(int vector)
|
||||
{
|
||||
__x2apic_send_IPI_shorthand(vector, APIC_DEST_ALLBUT);
|
||||
}
|
||||
|
||||
static void x2apic_send_IPI_all(int vector)
|
||||
{
|
||||
__x2apic_send_IPI_shorthand(vector, APIC_DEST_ALLINC);
|
||||
}
|
||||
|
||||
static u32 x2apic_calc_apicid(unsigned int cpu)
|
||||
{
|
||||
return x86_cpu_to_logical_apicid[cpu];
|
||||
|
||||
@@ -81,16 +81,36 @@ static void
|
||||
__x2apic_send_IPI_mask(mask, vector, APIC_DEST_ALLBUT);
|
||||
}
|
||||
|
||||
static void x2apic_send_IPI_allbutself(int vector)
|
||||
static void __x2apic_send_IPI_shorthand(int vector, u32 which)
|
||||
{
|
||||
unsigned long cfg = __prepare_ICR(which, vector, 0);
|
||||
|
||||
/* x2apic MSRs are special and need a special fence: */
|
||||
weak_wrmsr_fence();
|
||||
native_x2apic_icr_write(cfg, 0);
|
||||
}
|
||||
|
||||
void x2apic_send_IPI_allbutself(int vector)
|
||||
{
|
||||
__x2apic_send_IPI_shorthand(vector, APIC_DEST_ALLBUT);
|
||||
}
|
||||
|
||||
static void x2apic_send_IPI_all(int vector)
|
||||
void x2apic_send_IPI_all(int vector)
|
||||
{
|
||||
__x2apic_send_IPI_shorthand(vector, APIC_DEST_ALLINC);
|
||||
}
|
||||
|
||||
void x2apic_send_IPI_self(int vector)
|
||||
{
|
||||
apic_write(APIC_SELF_IPI, vector);
|
||||
}
|
||||
|
||||
void __x2apic_send_IPI_dest(unsigned int apicid, int vector, unsigned int dest)
|
||||
{
|
||||
unsigned long cfg = __prepare_ICR(0, vector, dest);
|
||||
native_x2apic_icr_write(cfg, apicid);
|
||||
}
|
||||
|
||||
static int x2apic_phys_probe(void)
|
||||
{
|
||||
if (!x2apic_mode)
|
||||
@@ -111,21 +131,6 @@ int x2apic_apic_id_valid(u32 apicid)
|
||||
return 1;
|
||||
}
|
||||
|
||||
void __x2apic_send_IPI_dest(unsigned int apicid, int vector, unsigned int dest)
|
||||
{
|
||||
unsigned long cfg = __prepare_ICR(0, vector, dest);
|
||||
native_x2apic_icr_write(cfg, apicid);
|
||||
}
|
||||
|
||||
void __x2apic_send_IPI_shorthand(int vector, u32 which)
|
||||
{
|
||||
unsigned long cfg = __prepare_ICR(which, vector, 0);
|
||||
|
||||
/* x2apic MSRs are special and need a special fence: */
|
||||
weak_wrmsr_fence();
|
||||
native_x2apic_icr_write(cfg, 0);
|
||||
}
|
||||
|
||||
unsigned int x2apic_get_apic_id(unsigned long id)
|
||||
{
|
||||
return id;
|
||||
@@ -141,11 +146,6 @@ int x2apic_phys_pkg_id(int initial_apicid, int index_msb)
|
||||
return initial_apicid >> index_msb;
|
||||
}
|
||||
|
||||
void x2apic_send_IPI_self(int vector)
|
||||
{
|
||||
apic_write(APIC_SELF_IPI, vector);
|
||||
}
|
||||
|
||||
static struct apic apic_x2apic_phys __ro_after_init = {
|
||||
|
||||
.name = "physical x2apic",
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
#include <asm/uv/uv.h>
|
||||
#include <asm/apic.h>
|
||||
|
||||
#include "local.h"
|
||||
|
||||
static enum uv_system_type uv_system_type;
|
||||
static int uv_hubbed_system;
|
||||
static int uv_hubless_system;
|
||||
@@ -783,11 +785,6 @@ static int uv_apic_id_valid(u32 apicid)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static unsigned int x2apic_get_apic_id(unsigned long id)
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
static u32 set_apic_id(unsigned int id)
|
||||
{
|
||||
return id;
|
||||
@@ -803,11 +800,6 @@ static int uv_phys_pkg_id(int initial_apicid, int index_msb)
|
||||
return uv_read_apic_id() >> index_msb;
|
||||
}
|
||||
|
||||
static void uv_send_IPI_self(int vector)
|
||||
{
|
||||
apic_write(APIC_SELF_IPI, vector);
|
||||
}
|
||||
|
||||
static int uv_probe(void)
|
||||
{
|
||||
return apic == &apic_x2apic_uv_x;
|
||||
@@ -840,7 +832,7 @@ static struct apic apic_x2apic_uv_x __ro_after_init = {
|
||||
.send_IPI_mask_allbutself = uv_send_IPI_mask_allbutself,
|
||||
.send_IPI_allbutself = uv_send_IPI_allbutself,
|
||||
.send_IPI_all = uv_send_IPI_all,
|
||||
.send_IPI_self = uv_send_IPI_self,
|
||||
.send_IPI_self = x2apic_send_IPI_self,
|
||||
|
||||
.wakeup_secondary_cpu = uv_wakeup_secondary,
|
||||
|
||||
|
||||
Reference in New Issue
Block a user