[PATCH] drm/amdgpu: improve MSI-X handling (v3)

Tom St Denis tstdenis82 at gmail.com
Thu Oct 3 17:33:40 UTC 2019


Tested-by: Tom St Denis <tom.stdenis at amd.com>

Cheers,
Tom

On Thu, Oct 3, 2019 at 1:30 PM Alex Deucher <alexdeucher at gmail.com> wrote:

> Check the number of supported vectors and fall back to MSI if
> we return or error or 0 MSI-X vectors.
>
> v2: only allocate one vector.  We can't currently use more than
> one anyway.
>
> v3: install the irq on vector 0.
>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 17 +++++++++++++----
>  1 file changed, 13 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> index 50771b2757dc..6f3b03f6224f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> @@ -245,11 +245,19 @@ int amdgpu_irq_init(struct amdgpu_device *adev)
>         adev->irq.msi_enabled = false;
>
>         if (amdgpu_msi_ok(adev)) {
> -               int nvec = pci_alloc_irq_vectors(adev->pdev, 1,
> pci_msix_vec_count(adev->pdev),
> -                                       PCI_IRQ_MSI | PCI_IRQ_MSIX);
> +               int nvec = pci_msix_vec_count(adev->pdev);
> +               unsigned int flags;
> +
> +               if (nvec <= 0) {
> +                       flags = PCI_IRQ_MSI;
> +               } else {
> +                       flags = PCI_IRQ_MSI | PCI_IRQ_MSIX;
> +               }
> +               /* we only need one vector */
> +               nvec = pci_alloc_irq_vectors(adev->pdev, 1, 1, flags);
>                 if (nvec > 0) {
>                         adev->irq.msi_enabled = true;
> -                       dev_dbg(adev->dev, "amdgpu: using MSI.\n");
> +                       dev_dbg(adev->dev, "amdgpu: using MSI/MSI-X.\n");
>                 }
>         }
>
> @@ -272,7 +280,8 @@ int amdgpu_irq_init(struct amdgpu_device *adev)
>         INIT_WORK(&adev->irq.ih2_work, amdgpu_irq_handle_ih2);
>
>         adev->irq.installed = true;
> -       r = drm_irq_install(adev->ddev, adev->ddev->pdev->irq);
> +       /* Use vector 0 for MSI-X */
> +       r = drm_irq_install(adev->ddev, pci_irq_vector(adev->pdev, 0));
>         if (r) {
>                 adev->irq.installed = false;
>                 if (!amdgpu_device_has_dc_support(adev))
> --
> 2.20.1
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20191003/cc0d9b6c/attachment.html>


More information about the amd-gfx mailing list