Commit d8666cf7 authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Dave Hansen
Browse files

x86/apic: Sanitize APIC ID range validation



Now that everything has apic::max_apic_id set and the eventual update for
the x2APIC case is in place, switch the apic_id_valid() helper to use
apic::max_apic_id and remove the apic::apic_id_valid() callback.

[ dhansen: Fix subject typo ]

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Tested-by: default avatarMichael Kelley <mikelley@microsoft.com>
Tested-by: default avatarSohil Mehta <sohil.mehta@intel.com>
Tested-by: Juergen Gross <jgross@suse.com> # Xen PV (dom0 and unpriv. guest)
parent b5a5ce58
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -284,7 +284,6 @@ struct apic {
	/* Probe, setup and smpboot functions */
	int	(*probe)(void);
	int	(*acpi_madt_oem_check)(char *oem_id, char *oem_table_id);
	int	(*apic_id_valid)(u32 apicid);
	bool	(*apic_id_registered)(void);

	bool	(*check_apicid_used)(physid_mask_t *map, int apicid);
@@ -378,7 +377,7 @@ static inline u32 safe_apic_wait_icr_idle(void)

static inline bool apic_id_valid(u32 apic_id)
{
	return apic->apic_id_valid(apic_id);
	return apic_id <= apic->max_apic_id;
}

extern void __init apic_set_eoi_write(void (*eoi_write)(u32 reg, u32 v));
+0 −5
Original line number Diff line number Diff line
@@ -37,11 +37,6 @@ int default_cpu_present_to_apicid(int mps_cpu)
}
EXPORT_SYMBOL_GPL(default_cpu_present_to_apicid);

int default_apic_id_valid(u32 apicid)
{
	return (apicid < 255);
}

bool default_apic_id_registered(void)
{
	return physid_isset(read_apic_id(), phys_cpu_present_map);
+0 −2
Original line number Diff line number Diff line
@@ -80,7 +80,6 @@ static struct apic apic_flat __ro_after_init = {
	.name				= "flat",
	.probe				= flat_probe,
	.acpi_madt_oem_check		= flat_acpi_madt_oem_check,
	.apic_id_valid			= default_apic_id_valid,
	.apic_id_registered		= default_apic_id_registered,

	.delivery_mode			= APIC_DELIVERY_MODE_FIXED,
@@ -158,7 +157,6 @@ static struct apic apic_physflat __ro_after_init = {
	.name				= "physical flat",
	.probe				= physflat_probe,
	.acpi_madt_oem_check		= physflat_acpi_madt_oem_check,
	.apic_id_valid			= default_apic_id_valid,
	.apic_id_registered		= default_apic_id_registered,

	.delivery_mode			= APIC_DELIVERY_MODE_FIXED,
+0 −2
Original line number Diff line number Diff line
@@ -67,8 +67,6 @@ struct apic apic_noop __ro_after_init = {
	.probe				= noop_probe,
	.acpi_madt_oem_check		= NULL,

	.apic_id_valid			= default_apic_id_valid,

	.delivery_mode			= APIC_DELIVERY_MODE_FIXED,
	.dest_mode_logical		= true,

+0 −8
Original line number Diff line number Diff line
@@ -56,12 +56,6 @@ static u32 numachip2_set_apic_id(unsigned int id)
	return id << 24;
}

static int numachip_apic_id_valid(u32 apicid)
{
	/* Trust what bootloader passes in MADT */
	return 1;
}

static int numachip_phys_pkg_id(int initial_apic_id, int index_msb)
{
	return initial_apic_id >> index_msb;
@@ -227,7 +221,6 @@ static const struct apic apic_numachip1 __refconst = {
	.name				= "NumaConnect system",
	.probe				= numachip1_probe,
	.acpi_madt_oem_check		= numachip1_acpi_madt_oem_check,
	.apic_id_valid			= numachip_apic_id_valid,

	.delivery_mode			= APIC_DELIVERY_MODE_FIXED,
	.dest_mode_logical		= false,
@@ -267,7 +260,6 @@ static const struct apic apic_numachip2 __refconst = {
	.name				= "NumaConnect2 system",
	.probe				= numachip2_probe,
	.acpi_madt_oem_check		= numachip2_acpi_madt_oem_check,
	.apic_id_valid			= numachip_apic_id_valid,

	.delivery_mode			= APIC_DELIVERY_MODE_FIXED,
	.dest_mode_logical		= false,
Loading