summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2020-10-24 22:35:20 +0100
committerThomas Gleixner <tglx@linutronix.de>2020-10-28 20:26:27 +0100
commit341b4a7211b6ba3a7089e1dc09ac4bd576dfb05f (patch)
treeb426a1bb19d527d4ea4da146a4d38789507a2d65 /drivers
parenta27dca645d2c0f31abb7858aa0e10b2fa0f2f659 (diff)
x86/ioapic: Cleanup IO/APIC route entry structs
Having two seperate structs for the I/O-APIC RTE entries (non-remapped and DMAR remapped) requires type casts and makes it hard to map. Combine them in IO_APIC_routing_entry by defining a union of two 64bit bitfields. Use naming which reflects which bits are shared and which bits are actually different for the operating modes. [dwmw2: Fix it up and finish the job, pulling the 32-bit w1,w2 words for register access into the same union and eliminating a few more places where bits were accessed through masks and shifts.] Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/r/20201024213535.443185-21-dwmw2@infradead.org
Diffstat (limited to 'drivers')
-rw-r--r--drivers/iommu/amd/iommu.c8
-rw-r--r--drivers/iommu/hyperv-iommu.c4
-rw-r--r--drivers/iommu/intel/irq_remapping.c19
3 files changed, 15 insertions, 16 deletions
diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c
index b0e5210e53b2..3d72ec7bbbf8 100644
--- a/drivers/iommu/amd/iommu.c
+++ b/drivers/iommu/amd/iommu.c
@@ -3687,11 +3687,11 @@ static void irq_remapping_prepare_irte(struct amd_ir_data *data,
entry = info->ioapic.entry;
info->ioapic.entry = NULL;
memset(entry, 0, sizeof(*entry));
- entry->vector = index;
- entry->trigger = info->ioapic.is_level;
- entry->polarity = info->ioapic.active_low;
+ entry->vector = index;
+ entry->is_level = info->ioapic.is_level;
+ entry->active_low = info->ioapic.active_low;
/* Mask level triggered irqs. */
- entry->mask = info->ioapic.is_level;
+ entry->masked = info->ioapic.is_level;
break;
case X86_IRQ_ALLOC_TYPE_HPET:
diff --git a/drivers/iommu/hyperv-iommu.c b/drivers/iommu/hyperv-iommu.c
index e09e2d734c57..1ab7eb918a5c 100644
--- a/drivers/iommu/hyperv-iommu.c
+++ b/drivers/iommu/hyperv-iommu.c
@@ -52,7 +52,7 @@ static int hyperv_ir_set_affinity(struct irq_data *data,
return ret;
entry = data->chip_data;
- entry->dest = cfg->dest_apicid;
+ entry->destid_0_7 = cfg->dest_apicid;
entry->vector = cfg->vector;
send_cleanup_vector(cfg);
@@ -125,7 +125,7 @@ static int hyperv_irq_remapping_activate(struct irq_domain *domain,
struct irq_cfg *cfg = irqd_cfg(irq_data);
struct IO_APIC_route_entry *entry = irq_data->chip_data;
- entry->dest = cfg->dest_apicid;
+ entry->destid_0_7 = cfg->dest_apicid;
entry->vector = cfg->vector;
return 0;
diff --git a/drivers/iommu/intel/irq_remapping.c b/drivers/iommu/intel/irq_remapping.c
index 54ca69333445..625bdb9f1627 100644
--- a/drivers/iommu/intel/irq_remapping.c
+++ b/drivers/iommu/intel/irq_remapping.c
@@ -1279,8 +1279,8 @@ static void intel_irq_remapping_prepare_irte(struct intel_ir_data *data,
struct irq_alloc_info *info,
int index, int sub_handle)
{
- struct IR_IO_APIC_route_entry *entry;
struct irte *irte = &data->irte_entry;
+ struct IO_APIC_route_entry *entry;
prepare_irte(irte, irq_cfg->vector, irq_cfg->dest_apicid);
switch (info->type) {
@@ -1294,22 +1294,21 @@ static void intel_irq_remapping_prepare_irte(struct intel_ir_data *data,
irte->avail, irte->vector, irte->dest_id,
irte->sid, irte->sq, irte->svt);
- entry = (struct IR_IO_APIC_route_entry *)info->ioapic.entry;
+ entry = info->ioapic.entry;
info->ioapic.entry = NULL;
memset(entry, 0, sizeof(*entry));
- entry->index2 = (index >> 15) & 0x1;
- entry->zero = 0;
- entry->format = 1;
- entry->index = (index & 0x7fff);
+ entry->ir_index_15 = !!(index & 0x8000);
+ entry->ir_format = true;
+ entry->ir_index_0_14 = index & 0x7fff;
/*
* IO-APIC RTE will be configured with virtual vector.
* irq handler will do the explicit EOI to the io-apic.
*/
- entry->vector = info->ioapic.pin;
- entry->trigger = info->ioapic.is_level;
- entry->polarity = info->ioapic.active_low;
+ entry->vector = info->ioapic.pin;
+ entry->is_level = info->ioapic.is_level;
+ entry->active_low = info->ioapic.active_low;
/* Mask level triggered irqs. */
- entry->mask = info->ioapic.is_level;
+ entry->masked = info->ioapic.is_level;
break;
case X86_IRQ_ALLOC_TYPE_HPET: