[PATCH v3] drm/xe/irq: allocate all possible msix interrupts
Lucas De Marchi
lucas.demarchi at intel.com
Thu Feb 8 21:13:02 UTC 2024
On Wed, Jan 24, 2024 at 09:50:58AM +0200, Dani Liberman wrote:
>If platform supports MSIX, driver needs to allocate all possible
>interrupts.
>
>v2:
> - drop msix_cap and use the api return code instead.
> - fix commit message.
>
>v3:
> - pass specific type in irq flags.
>
>Cc: Ohad Sharabi <osharabi at habana.ai>
>Cc: Lucas De Marchi <lucas.demarchi at intel.com>
>Signed-off-by: Dani Liberman <dliberman at habana.ai>
Reviewed-by: Lucas De Marchi <lucas.demarchi at intel.com>
thanks
Lucas De Marchi
>---
> drivers/gpu/drm/xe/xe_irq.c | 17 +++++++++++++++--
> 1 file changed, 15 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
>index 2fd8cc26fc9f..d9e23aae9e7a 100644
>--- a/drivers/gpu/drm/xe/xe_irq.c
>+++ b/drivers/gpu/drm/xe/xe_irq.c
>@@ -683,8 +683,9 @@ static void irq_uninstall(struct drm_device *drm, void *arg)
> int xe_irq_install(struct xe_device *xe)
> {
> struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
>+ unsigned int irq_flags = PCI_IRQ_MSIX;
> irq_handler_t irq_handler;
>- int err, irq;
>+ int err, irq, nvec;
>
> irq_handler = xe_irq_handler(xe);
> if (!irq_handler) {
>@@ -694,7 +695,19 @@ int xe_irq_install(struct xe_device *xe)
>
> xe_irq_reset(xe);
>
>- err = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSI | PCI_IRQ_MSIX);
>+ nvec = pci_msix_vec_count(pdev);
>+ if (nvec <= 0) {
>+ if (nvec == -EINVAL) {
>+ /* MSIX capability is not supported in the device, using MSI */
>+ irq_flags = PCI_IRQ_MSI;
>+ nvec = 1;
>+ } else {
>+ drm_err(&xe->drm, "MSIX: Failed getting count\n");
>+ return nvec;
>+ }
>+ }
>+
>+ err = pci_alloc_irq_vectors(pdev, nvec, nvec, irq_flags);
> if (err < 0) {
> drm_err(&xe->drm, "MSI/MSIX: Failed to enable support %d\n", err);
> return err;
>--
>2.34.1
>
More information about the Intel-xe
mailing list