Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

x86/apic: Drop apic::delivery_mode

This field is set to APIC_DELIVERY_MODE_FIXED in all cases, and is read
exactly once. Fold the constant in uv_program_mmr() and drop the field.

Searching for the origin of the stale HyperV comment reveals commit
a31e58e129f7 ("x86/apic: Switch all APICs to Fixed delivery mode") which
notes:

As a consequence of this change, the apic::irq_delivery_mode field is
now pointless, but this needs to be cleaned up in a separate patch.

6 years is long enough for this technical debt to have survived.

[ bp: Fold in
https://lore.kernel.org/r/20231121123034.1442059-1-andrew.cooper3@citrix.com
]

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Reviewed-by: Steve Wahl <steve.wahl@hpe.com>
Link: https://lore.kernel.org/r/20231102-x86-apic-v1-1-bf049a2a0ed6@citrix.com

authored by

Andrew Cooper and committed by
Borislav Petkov (AMD)
07e8f885 98b1cc82

+4 -23
-2
arch/x86/include/asm/apic.h
··· 272 272 void (*send_IPI_all)(int vector); 273 273 void (*send_IPI_self)(int vector); 274 274 275 - enum apic_delivery_modes delivery_mode; 276 - 277 275 u32 disable_esr : 1, 278 276 dest_mode_logical : 1, 279 277 x2apic_set_max_apicid : 1,
-2
arch/x86/kernel/apic/apic_flat_64.c
··· 82 82 .acpi_madt_oem_check = flat_acpi_madt_oem_check, 83 83 .apic_id_registered = default_apic_id_registered, 84 84 85 - .delivery_mode = APIC_DELIVERY_MODE_FIXED, 86 85 .dest_mode_logical = true, 87 86 88 87 .disable_esr = 0, ··· 153 154 .acpi_madt_oem_check = physflat_acpi_madt_oem_check, 154 155 .apic_id_registered = default_apic_id_registered, 155 156 156 - .delivery_mode = APIC_DELIVERY_MODE_FIXED, 157 157 .dest_mode_logical = false, 158 158 159 159 .disable_esr = 0,
-1
arch/x86/kernel/apic/apic_noop.c
··· 47 47 struct apic apic_noop __ro_after_init = { 48 48 .name = "noop", 49 49 50 - .delivery_mode = APIC_DELIVERY_MODE_FIXED, 51 50 .dest_mode_logical = true, 52 51 53 52 .disable_esr = 0,
-2
arch/x86/kernel/apic/apic_numachip.c
··· 222 222 .probe = numachip1_probe, 223 223 .acpi_madt_oem_check = numachip1_acpi_madt_oem_check, 224 224 225 - .delivery_mode = APIC_DELIVERY_MODE_FIXED, 226 225 .dest_mode_logical = false, 227 226 228 227 .disable_esr = 0, ··· 258 259 .probe = numachip2_probe, 259 260 .acpi_madt_oem_check = numachip2_acpi_madt_oem_check, 260 261 261 - .delivery_mode = APIC_DELIVERY_MODE_FIXED, 262 262 .dest_mode_logical = false, 263 263 264 264 .disable_esr = 0,
-1
arch/x86/kernel/apic/bigsmp_32.c
··· 80 80 .name = "bigsmp", 81 81 .probe = probe_bigsmp, 82 82 83 - .delivery_mode = APIC_DELIVERY_MODE_FIXED, 84 83 .dest_mode_logical = false, 85 84 86 85 .disable_esr = 1,
-1
arch/x86/kernel/apic/probe_32.c
··· 45 45 .probe = probe_default, 46 46 .apic_id_registered = default_apic_id_registered, 47 47 48 - .delivery_mode = APIC_DELIVERY_MODE_FIXED, 49 48 .dest_mode_logical = true, 50 49 51 50 .disable_esr = 0,
-1
arch/x86/kernel/apic/x2apic_cluster.c
··· 227 227 .probe = x2apic_cluster_probe, 228 228 .acpi_madt_oem_check = x2apic_acpi_madt_oem_check, 229 229 230 - .delivery_mode = APIC_DELIVERY_MODE_FIXED, 231 230 .dest_mode_logical = true, 232 231 233 232 .disable_esr = 0,
-1
arch/x86/kernel/apic/x2apic_phys.c
··· 145 145 .probe = x2apic_phys_probe, 146 146 .acpi_madt_oem_check = x2apic_acpi_madt_oem_check, 147 147 148 - .delivery_mode = APIC_DELIVERY_MODE_FIXED, 149 148 .dest_mode_logical = false, 150 149 151 150 .disable_esr = 0,
-1
arch/x86/kernel/apic/x2apic_uv_x.c
··· 805 805 .probe = uv_probe, 806 806 .acpi_madt_oem_check = uv_acpi_madt_oem_check, 807 807 808 - .delivery_mode = APIC_DELIVERY_MODE_FIXED, 809 808 .dest_mode_logical = false, 810 809 811 810 .disable_esr = 0,
+1 -1
arch/x86/platform/uv/uv_irq.c
··· 35 35 mmr_value = 0; 36 36 entry = (struct uv_IO_APIC_route_entry *)&mmr_value; 37 37 entry->vector = cfg->vector; 38 - entry->delivery_mode = apic->delivery_mode; 38 + entry->delivery_mode = APIC_DELIVERY_MODE_FIXED; 39 39 entry->dest_mode = apic->dest_mode_logical; 40 40 entry->polarity = 0; 41 41 entry->trigger = 0;
+2 -2
drivers/iommu/amd/iommu.c
··· 3357 3357 3358 3358 data->irq_2_irte.devid = devid; 3359 3359 data->irq_2_irte.index = index + sub_handle; 3360 - iommu->irte_ops->prepare(data->entry, apic->delivery_mode, 3360 + iommu->irte_ops->prepare(data->entry, APIC_DELIVERY_MODE_FIXED, 3361 3361 apic->dest_mode_logical, irq_cfg->vector, 3362 3362 irq_cfg->dest_apicid, devid); 3363 3363 ··· 3634 3634 3635 3635 entry->lo.fields_remap.valid = valid; 3636 3636 entry->lo.fields_remap.dm = apic->dest_mode_logical; 3637 - entry->lo.fields_remap.int_type = apic->delivery_mode; 3637 + entry->lo.fields_remap.int_type = APIC_DELIVERY_MODE_FIXED; 3638 3638 entry->hi.fields.vector = cfg->vector; 3639 3639 entry->lo.fields_remap.destination = 3640 3640 APICID_TO_IRTE_DEST_LO(cfg->dest_apicid);
+1 -1
drivers/iommu/intel/irq_remapping.c
··· 1112 1112 * irq migration in the presence of interrupt-remapping. 1113 1113 */ 1114 1114 irte->trigger_mode = 0; 1115 - irte->dlvry_mode = apic->delivery_mode; 1115 + irte->dlvry_mode = APIC_DELIVERY_MODE_FIXED; 1116 1116 irte->vector = vector; 1117 1117 irte->dest_id = IRTE_DEST(dest); 1118 1118 irte->redir_hint = 1;
-7
drivers/pci/controller/pci-hyperv.c
··· 650 650 PCI_FUNC(pdev->devfn); 651 651 params->int_target.vector = hv_msi_get_int_vector(data); 652 652 653 - /* 654 - * Honoring apic->delivery_mode set to APIC_DELIVERY_MODE_FIXED by 655 - * setting the HV_DEVICE_INTERRUPT_TARGET_MULTICAST flag results in a 656 - * spurious interrupt storm. Not doing so does not seem to have a 657 - * negative effect (yet?). 658 - */ 659 - 660 653 if (hbus->protocol_version >= PCI_PROTOCOL_VERSION_1_2) { 661 654 /* 662 655 * PCI_PROTOCOL_VERSION_1_2 supports the VP_SET version of the