Commit ae72f315 authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

PCI/MSI: Make arch_restore_msi_irqs() less horrible.



Make arch_restore_msi_irqs() return a boolean which indicates whether the
core code should restore the MSI message or not. Get rid of the indirection
in x86.

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Tested-by: default avatarJuergen Gross <jgross@suse.com>
Reviewed-by: default avatarJason Gunthorpe <jgg@nvidia.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>	# PCI
Link: https://lore.kernel.org/r/20211206210224.485668098@linutronix.de
parent 1982afd6
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -387,13 +387,13 @@ void arch_teardown_msi_irqs(struct pci_dev *pdev)
		airq_iv_free(zpci_ibv[0], zdev->msi_first_bit, zdev->msi_nr_irqs);
}

void arch_restore_msi_irqs(struct pci_dev *pdev)
bool arch_restore_msi_irqs(struct pci_dev *pdev)
{
	struct zpci_dev *zdev = to_zpci(pdev);

	if (!zdev->irqs_registered)
		zpci_set_irq(zdev);
	default_restore_msi_irqs(pdev);
	return true;
}

static struct airq_struct zpci_airq = {
+0 −6
Original line number Diff line number Diff line
@@ -289,12 +289,6 @@ struct x86_platform_ops {
	struct x86_hyper_runtime hyper;
};

struct pci_dev;

struct x86_msi_ops {
	void (*restore_msi_irqs)(struct pci_dev *dev);
};

struct x86_apic_ops {
	unsigned int	(*io_apic_read)   (unsigned int apic, unsigned int reg);
	void		(*restore)(void);
+8 −0
Original line number Diff line number Diff line
@@ -57,6 +57,14 @@ static inline bool __init xen_x2apic_para_available(void)
}
#endif

struct pci_dev;

#ifdef CONFIG_XEN_DOM0
bool xen_initdom_restore_msi(struct pci_dev *dev);
#else
static inline bool xen_initdom_restore_msi(struct pci_dev *dev) { return true; }
#endif

#ifdef CONFIG_HOTPLUG_CPU
void xen_arch_register_cpu(int num);
void xen_arch_unregister_cpu(int num);
+6 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include <asm/hw_irq.h>
#include <asm/apic.h>
#include <asm/irq_remapping.h>
#include <asm/xen/hypervisor.h>

struct irq_domain *x86_pci_msi_default_domain __ro_after_init;

@@ -345,3 +346,8 @@ void dmar_free_hwirq(int irq)
	irq_domain_free_irqs(irq, 1);
}
#endif

bool arch_restore_msi_irqs(struct pci_dev *dev)
{
	return xen_initdom_restore_msi(dev);
}
+0 −12
Original line number Diff line number Diff line
@@ -145,18 +145,6 @@ struct x86_platform_ops x86_platform __ro_after_init = {

EXPORT_SYMBOL_GPL(x86_platform);

#if defined(CONFIG_PCI_MSI)
struct x86_msi_ops x86_msi __ro_after_init = {
	.restore_msi_irqs	= default_restore_msi_irqs,
};

/* MSI arch specific hooks */
void arch_restore_msi_irqs(struct pci_dev *dev)
{
	x86_msi.restore_msi_irqs(dev);
}
#endif

struct x86_apic_ops x86_apic_ops __ro_after_init = {
	.io_apic_read	= native_io_apic_read,
	.restore	= native_restore_boot_irq_mode,
Loading