Skip to content

Commit

Permalink
x86/apic: Use u32 for [gs]et_apic_id()
Browse files Browse the repository at this point in the history
APIC IDs are used with random data types u16, u32, int, unsigned int,
unsigned long.

Make it all consistently use u32 because that reflects the hardware
register width.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Juergen Gross <jgross@suse.com>
Tested-by: Sohil Mehta <sohil.mehta@intel.com>
Tested-by: Michael Kelley <mikelley@microsoft.com>
Tested-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Tested-by: Zhang Rui <rui.zhang@intel.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/20230814085113.172569282@linutronix.de
  • Loading branch information
KAGA-KOKO committed Oct 10, 2023
1 parent 01ccf9b commit 59f7928
Show file tree
Hide file tree
Showing 10 changed files with 27 additions and 27 deletions.
14 changes: 2 additions & 12 deletions arch/x86/include/asm/apic.h
Original file line number Diff line number Diff line change
Expand Up @@ -298,8 +298,8 @@ struct apic {
u32 (*cpu_present_to_apicid)(int mps_cpu);
u32 (*phys_pkg_id)(u32 cpuid_apic, int index_msb);

u32 (*get_apic_id)(unsigned long x);
u32 (*set_apic_id)(unsigned int id);
u32 (*get_apic_id)(u32 id);
u32 (*set_apic_id)(u32 apicid);

/* wakeup_secondary_cpu */
int (*wakeup_secondary_cpu)(int apicid, unsigned long start_eip);
Expand Down Expand Up @@ -493,16 +493,6 @@ static inline bool lapic_vector_set_in_irr(unsigned int vector)
return !!(irr & (1U << (vector % 32)));
}

static inline unsigned default_get_apic_id(unsigned long x)
{
unsigned int ver = GET_APIC_VERSION(apic_read(APIC_LVR));

if (APIC_XAPIC(ver) || boot_cpu_has(X86_FEATURE_EXTD_APICID))
return (x >> 24) & 0xFF;
else
return (x >> 24) & 0x0F;
}

/*
* Warm reset vector position:
*/
Expand Down
4 changes: 2 additions & 2 deletions arch/x86/kernel/apic/apic_flat_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,12 @@ flat_send_IPI_mask_allbutself(const struct cpumask *cpumask, int vector)
_flat_send_IPI_mask(mask, vector);
}

static unsigned int flat_get_apic_id(unsigned long x)
static u32 flat_get_apic_id(u32 x)
{
return (x >> 24) & 0xFF;
}

static u32 set_apic_id(unsigned int id)
static u32 set_apic_id(u32 id)
{
return (id & 0xFF) << 24;
}
Expand Down
2 changes: 1 addition & 1 deletion arch/x86/kernel/apic/apic_noop.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ static void noop_apic_icr_write(u32 low, u32 id) { }
static int noop_wakeup_secondary_cpu(int apicid, unsigned long start_eip) { return -1; }
static u64 noop_apic_icr_read(void) { return 0; }
static u32 noop_phys_pkg_id(u32 cpuid_apic, int index_msb) { return 0; }
static unsigned int noop_get_apic_id(unsigned long x) { return 0; }
static u32 noop_get_apic_id(u32 apicid) { return 0; }
static void noop_apic_eoi(void) { }

static u32 noop_apic_read(u32 reg)
Expand Down
8 changes: 4 additions & 4 deletions arch/x86/kernel/apic/apic_numachip.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ static const struct apic apic_numachip1;
static const struct apic apic_numachip2;
static void (*numachip_apic_icr_write)(int apicid, unsigned int val) __read_mostly;

static unsigned int numachip1_get_apic_id(unsigned long x)
static u32 numachip1_get_apic_id(u32 x)
{
unsigned long value;
unsigned int id = (x >> 24) & 0xff;
Expand All @@ -38,20 +38,20 @@ static unsigned int numachip1_get_apic_id(unsigned long x)
return id;
}

static u32 numachip1_set_apic_id(unsigned int id)
static u32 numachip1_set_apic_id(u32 id)
{
return (id & 0xff) << 24;
}

static unsigned int numachip2_get_apic_id(unsigned long x)
static u32 numachip2_get_apic_id(u32 x)
{
u64 mcfg;

rdmsrl(MSR_FAM10H_MMIO_CONF_BASE, mcfg);
return ((mcfg >> (28 - 8)) & 0xfff00) | (x >> 24);
}

static u32 numachip2_set_apic_id(unsigned int id)
static u32 numachip2_set_apic_id(u32 id)
{
return id << 24;
}
Expand Down
2 changes: 1 addition & 1 deletion arch/x86/kernel/apic/bigsmp_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

#include "local.h"

static unsigned bigsmp_get_apic_id(unsigned long x)
static u32 bigsmp_get_apic_id(u32 x)
{
return (x >> 24) & 0xFF;
}
Expand Down
4 changes: 2 additions & 2 deletions arch/x86/kernel/apic/local.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@

/* X2APIC */
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);
u32 x2apic_get_apic_id(u32 id);
u32 x2apic_set_apic_id(u32 id);
u32 x2apic_phys_pkg_id(u32 initial_apicid, int index_msb);

void x2apic_send_IPI_all(int vector);
Expand Down
10 changes: 10 additions & 0 deletions arch/x86/kernel/apic/probe_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,16 @@ static u32 default_phys_pkg_id(u32 cpuid_apic, int index_msb)
return cpuid_apic >> index_msb;
}

static u32 default_get_apic_id(u32 x)
{
unsigned int ver = GET_APIC_VERSION(apic_read(APIC_LVR));

if (APIC_XAPIC(ver) || boot_cpu_has(X86_FEATURE_EXTD_APICID))
return (x >> 24) & 0xFF;
else
return (x >> 24) & 0x0F;
}

/* should be called last. */
static int probe_default(void)
{
Expand Down
4 changes: 2 additions & 2 deletions arch/x86/kernel/apic/x2apic_phys.c
Original file line number Diff line number Diff line change
Expand Up @@ -124,12 +124,12 @@ static int x2apic_phys_probe(void)
return apic == &apic_x2apic_phys;
}

unsigned int x2apic_get_apic_id(unsigned long id)
u32 x2apic_get_apic_id(u32 id)
{
return id;
}

u32 x2apic_set_apic_id(unsigned int id)
u32 x2apic_set_apic_id(u32 id)
{
return id;
}
Expand Down
2 changes: 1 addition & 1 deletion arch/x86/kernel/apic/x2apic_uv_x.c
Original file line number Diff line number Diff line change
Expand Up @@ -779,7 +779,7 @@ static void uv_send_IPI_all(int vector)
uv_send_IPI_mask(cpu_online_mask, vector);
}

static u32 set_apic_id(unsigned int id)
static u32 set_apic_id(u32 id)
{
return id;
}
Expand Down
4 changes: 2 additions & 2 deletions arch/x86/xen/apic.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,13 @@ static unsigned int xen_io_apic_read(unsigned apic, unsigned reg)
return 0xfd;
}

static u32 xen_set_apic_id(unsigned int x)
static u32 xen_set_apic_id(u32 x)
{
WARN_ON(1);
return x;
}

static unsigned int xen_get_apic_id(unsigned long x)
static u32 xen_get_apic_id(u32 x)
{
return ((x)>>24) & 0xFFu;
}
Expand Down

0 comments on commit 59f7928

Please sign in to comment.