mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-14 06:35:12 +00:00
powerpc/pseries/pci: Add a domain_free_irqs() handler
The RTAS firmware can not disable one MSI at a time. It's all or nothing. We need a custom free IRQ handler for that. Signed-off-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20210701132750.1475580-9-clg@kaod.org
This commit is contained in:
parent
292145a6e5
commit
07817a578a
1 changed files with 16 additions and 0 deletions
|
@ -529,8 +529,24 @@ static int pseries_msi_ops_prepare(struct irq_domain *domain, struct device *dev
|
|||
return rtas_prepare_msi_irqs(pdev, nvec, type, arg);
|
||||
}
|
||||
|
||||
/*
|
||||
* RTAS can not disable one MSI at a time. It's all or nothing. Do it
|
||||
* at the end after all IRQs have been freed.
|
||||
*/
|
||||
static void pseries_msi_domain_free_irqs(struct irq_domain *domain,
|
||||
struct device *dev)
|
||||
{
|
||||
if (WARN_ON_ONCE(!dev_is_pci(dev)))
|
||||
return;
|
||||
|
||||
__msi_domain_free_irqs(domain, dev);
|
||||
|
||||
rtas_disable_msi(to_pci_dev(dev));
|
||||
}
|
||||
|
||||
static struct msi_domain_ops pseries_pci_msi_domain_ops = {
|
||||
.msi_prepare = pseries_msi_ops_prepare,
|
||||
.domain_free_irqs = pseries_msi_domain_free_irqs,
|
||||
};
|
||||
|
||||
static void pseries_msi_shutdown(struct irq_data *d)
|
||||
|
|
Loading…
Reference in a new issue