Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9d619f65 authored by Joerg Roedel's avatar Joerg Roedel
Browse files

iommu/vt-d: Convert free_irte into a remap_ops callback



The operation for releasing a remapping entry is iommu
specific too.

Signed-off-by: default avatarJoerg Roedel <joerg.roedel@amd.com>
Acked-by: default avatarYinghai Lu <yinghai@kernel.org>
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: default avatarSuresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: default avatarJoerg Roedel <joerg.roedel@amd.com>
parent 4c1bad6a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ extern int intr_setup_ioapic_entry(int irq,
extern int intr_set_affinity(struct irq_data *data,
			     const struct cpumask *mask,
			     bool force);
extern void intr_free_irq(int irq);

#else  /* CONFIG_IRQ_REMAP */

@@ -68,6 +69,7 @@ static inline int intr_set_affinity(struct irq_data *data,
{
	return 0;
}
static inline void intr_free_irq(int irq) { }
#endif /* CONFIG_IRQ_REMAP */

#endif /* __X86_INTR_REMAPPING_H */
+1 −1
Original line number Diff line number Diff line
@@ -3041,7 +3041,7 @@ void destroy_irq(unsigned int irq)
	irq_set_status_flags(irq, IRQ_NOREQUEST|IRQ_NOPROBE);

	if (irq_remapped(cfg))
		free_irte(irq);
		intr_free_irq(irq);
	raw_spin_lock_irqsave(&vector_lock, flags);
	__clear_irq_vector(irq, cfg);
	raw_spin_unlock_irqrestore(&vector_lock, flags);
+2 −1
Original line number Diff line number Diff line
@@ -253,7 +253,7 @@ static int clear_entries(struct irq_2_iommu *irq_iommu)
	return qi_flush_iec(iommu, index, irq_iommu->irte_mask);
}

int free_irte(int irq)
static int free_irte(int irq)
{
	struct irq_2_iommu *irq_iommu = irq_2_iommu(irq);
	unsigned long flags;
@@ -964,4 +964,5 @@ struct irq_remap_ops intel_irq_remap_ops = {
	.enable_faulting	= enable_drhd_fault_handling,
	.setup_ioapic_entry	= intel_setup_ioapic_entry,
	.set_affinity		= intel_ioapic_set_affinity,
	.free_irq		= free_irte,
};
+8 −0
Original line number Diff line number Diff line
@@ -119,3 +119,11 @@ int intr_set_affinity(struct irq_data *data, const struct cpumask *mask,

	return remap_ops->set_affinity(data, mask, force);
}

void intr_free_irq(int irq)
{
	if (!remap_ops || !remap_ops->free_irq)
		return;

	remap_ops->free_irq(irq);
}
+3 −0
Original line number Diff line number Diff line
@@ -60,6 +60,9 @@ struct irq_remap_ops {
	/* Set the CPU affinity of a remapped interrupt */
	int (*set_affinity)(struct irq_data *data, const struct cpumask *mask,
			    bool force);

	/* Free an IRQ */
	int (*free_irq)(int);
};

extern struct irq_remap_ops intel_irq_remap_ops;
Loading