On Tue, Nov 21, 2023 at 08:43:13AM -0000, tip-bot2 for Andrew Cooper wrote:
> The following commit has been merged into the x86/apic branch of tip:
>
> Commit-ID: b5148dfe66f5b04fdf85fbd3d0954e83792fa36c
> Gitweb: https://git.kernel.org/tip/b5148dfe66f5b04fdf85fbd3d0954e83792fa36c
> Author: Andrew Cooper <andrew.cooper3@citrix.com>
> AuthorDate: Thu, 02 Nov 2023 12:26:19
> Committer: Thomas Gleixner <tglx@linutronix.de>
> CommitterDate: Tue, 21 Nov 2023 09:37:30 +01:00
>
> 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.
Looks like you folks missed a spot or three:
drivers/iommu/amd/iommu.c: In function ‘irq_remapping_prepare_irte’:
drivers/iommu/amd/iommu.c:3360:51: error: ‘struct apic’ has no member named ‘delivery_mode’
3360 | iommu->irte_ops->prepare(data->entry, apic->delivery_mode,
| ^~
drivers/iommu/amd/iommu.c: In function ‘amd_iommu_deactivate_guest_mode’:
drivers/iommu/amd/iommu.c:3637:50: error: ‘struct apic’ has no member named ‘delivery_mode’
3637 | entry->lo.fields_remap.int_type = apic->delivery_mode;
| ^~
make[5]: *** [scripts/Makefile.build:243: drivers/iommu/amd/iommu.o] Error 1
make[4]: *** [scripts/Makefile.build:480: drivers/iommu/amd] Error 2
make[4]: *** Waiting for unfinished jobs....
drivers/iommu/intel/irq_remapping.c: In function ‘prepare_irte’:
drivers/iommu/intel/irq_remapping.c:1115:32: error: ‘struct apic’ has no member named ‘delivery_mode’
1115 | irte->dlvry_mode = apic->delivery_mode;
| ^~
make[5]: *** [scripts/Makefile.build:243: drivers/iommu/intel/irq_remapping.o] Error 1
make[4]: *** [scripts/Makefile.build:480: drivers/iommu/intel] Error 2
make[3]: *** [scripts/Makefile.build:480: drivers/iommu] Error 2
make[3]: *** Waiting for unfinished jobs....
make[2]: *** [scripts/Makefile.build:480: drivers] Error 2
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [/mnt/kernel/kernel/3rd/linux/Makefile:1911: .] Error 2
make: *** [Makefile:234: __sub-make] Error 2
@@ -272,8 +272,6 @@ struct apic {
void (*send_IPI_all)(int vector);
void (*send_IPI_self)(int vector);
- enum apic_delivery_modes delivery_mode;
-
u32 disable_esr : 1,
dest_mode_logical : 1,
x2apic_set_max_apicid : 1,
@@ -82,7 +82,6 @@ static struct apic apic_flat __ro_after_init = {
.acpi_madt_oem_check = flat_acpi_madt_oem_check,
.apic_id_registered = default_apic_id_registered,
- .delivery_mode = APIC_DELIVERY_MODE_FIXED,
.dest_mode_logical = true,
.disable_esr = 0,
@@ -154,7 +153,6 @@ static struct apic apic_physflat __ro_after_init = {
.acpi_madt_oem_check = physflat_acpi_madt_oem_check,
.apic_id_registered = default_apic_id_registered,
- .delivery_mode = APIC_DELIVERY_MODE_FIXED,
.dest_mode_logical = false,
.disable_esr = 0,
@@ -47,7 +47,6 @@ static void noop_apic_write(u32 reg, u32 val)
struct apic apic_noop __ro_after_init = {
.name = "noop",
- .delivery_mode = APIC_DELIVERY_MODE_FIXED,
.dest_mode_logical = true,
.disable_esr = 0,
@@ -222,7 +222,6 @@ static const struct apic apic_numachip1 __refconst = {
.probe = numachip1_probe,
.acpi_madt_oem_check = numachip1_acpi_madt_oem_check,
- .delivery_mode = APIC_DELIVERY_MODE_FIXED,
.dest_mode_logical = false,
.disable_esr = 0,
@@ -259,7 +258,6 @@ static const struct apic apic_numachip2 __refconst = {
.probe = numachip2_probe,
.acpi_madt_oem_check = numachip2_acpi_madt_oem_check,
- .delivery_mode = APIC_DELIVERY_MODE_FIXED,
.dest_mode_logical = false,
.disable_esr = 0,
@@ -80,7 +80,6 @@ static struct apic apic_bigsmp __ro_after_init = {
.name = "bigsmp",
.probe = probe_bigsmp,
- .delivery_mode = APIC_DELIVERY_MODE_FIXED,
.dest_mode_logical = false,
.disable_esr = 1,
@@ -45,7 +45,6 @@ static struct apic apic_default __ro_after_init = {
.probe = probe_default,
.apic_id_registered = default_apic_id_registered,
- .delivery_mode = APIC_DELIVERY_MODE_FIXED,
.dest_mode_logical = true,
.disable_esr = 0,
@@ -227,7 +227,6 @@ static struct apic apic_x2apic_cluster __ro_after_init = {
.probe = x2apic_cluster_probe,
.acpi_madt_oem_check = x2apic_acpi_madt_oem_check,
- .delivery_mode = APIC_DELIVERY_MODE_FIXED,
.dest_mode_logical = true,
.disable_esr = 0,
@@ -145,7 +145,6 @@ static struct apic apic_x2apic_phys __ro_after_init = {
.probe = x2apic_phys_probe,
.acpi_madt_oem_check = x2apic_acpi_madt_oem_check,
- .delivery_mode = APIC_DELIVERY_MODE_FIXED,
.dest_mode_logical = false,
.disable_esr = 0,
@@ -805,7 +805,6 @@ static struct apic apic_x2apic_uv_x __ro_after_init = {
.probe = uv_probe,
.acpi_madt_oem_check = uv_acpi_madt_oem_check,
- .delivery_mode = APIC_DELIVERY_MODE_FIXED,
.dest_mode_logical = false,
.disable_esr = 0,
@@ -35,7 +35,7 @@ static void uv_program_mmr(struct irq_cfg *cfg, struct uv_irq_2_mmr_pnode *info)
mmr_value = 0;
entry = (struct uv_IO_APIC_route_entry *)&mmr_value;
entry->vector = cfg->vector;
- entry->delivery_mode = apic->delivery_mode;
+ entry->delivery_mode = APIC_DELIVERY_MODE_FIXED;
entry->dest_mode = apic->dest_mode_logical;
entry->polarity = 0;
entry->trigger = 0;
@@ -650,13 +650,6 @@ static void hv_arch_irq_unmask(struct irq_data *data)
PCI_FUNC(pdev->devfn);
params->int_target.vector = hv_msi_get_int_vector(data);
- /*
- * Honoring apic->delivery_mode set to APIC_DELIVERY_MODE_FIXED by
- * setting the HV_DEVICE_INTERRUPT_TARGET_MULTICAST flag results in a
- * spurious interrupt storm. Not doing so does not seem to have a
- * negative effect (yet?).
- */
-
if (hbus->protocol_version >= PCI_PROTOCOL_VERSION_1_2) {
/*
* PCI_PROTOCOL_VERSION_1_2 supports the VP_SET version of the