[PATCH Review 1/1] drm/amdgpu: Fix ecc irq enable/disable unpaired

Yang, Stanley Stanley.Yang at amd.com
Mon Dec 18 14:20:45 UTC 2023


[AMD Official Use Only - General]

Yes, we can only call gfx/sdma ras late init in aldebaran_mode2_restore_ip, will update.

Regards,
Stanley
> -----Original Message-----
> From: Zhang, Hawking <Hawking.Zhang at amd.com>
> Sent: Monday, December 18, 2023 8:37 PM
> To: Yang, Stanley <Stanley.Yang at amd.com>; amd-gfx at lists.freedesktop.org
> Subject: RE: [PATCH Review 1/1] drm/amdgpu: Fix ecc irq enable/disable
> unpaired
>
> [AMD Official Use Only - General]
>
> In such case, can we call amdgpu_gfx_ras_late_init and
> amdgpu_sdma_ras_late_init in aldebaran_mode2_restore_ip?
>
> Regards,
> Hawking
>
> -----Original Message-----
> From: Yang, Stanley <Stanley.Yang at amd.com>
> Sent: Monday, December 18, 2023 17:30
> To: Zhang, Hawking <Hawking.Zhang at amd.com>; amd-
> gfx at lists.freedesktop.org
> Subject: RE: [PATCH Review 1/1] drm/amdgpu: Fix ecc irq enable/disable
> unpaired
>
> [AMD Official Use Only - General]
>
> For mode2 reset, only call SDMA/GFX suspend to disable SDMA/GFX ecc_irq,
> driver just need enable SDMA/GFX ecc_irq during resume process.
> Think about below scenario on aqua vanjaram, user modprobe amdgpu with
> reset_method=3, driver will do GPU recovery if the SDMA uncorrectable error
> is triggered, It's difficult to distinguish whether need resume gmc ecc_irq, nbio
> ras_controller_irq, nbio ras_err_event_athub_irq since driver do full gpu
> reset.
>
> Regards,
> Stanley
> > -----Original Message-----
> > From: Zhang, Hawking <Hawking.Zhang at amd.com>
> > Sent: Monday, December 18, 2023 3:03 PM
> > To: Yang, Stanley <Stanley.Yang at amd.com>;
> > amd-gfx at lists.freedesktop.org
> > Cc: Yang, Stanley <Stanley.Yang at amd.com>
> > Subject: RE: [PATCH Review 1/1] drm/amdgpu: Fix ecc irq enable/disable
> > unpaired
> >
> > [AMD Official Use Only - General]
> >
> > Can we put the irq resume in amdgpu_ras_resume?
> >
> > Regards,
> > Hawking
> >
> > -----Original Message-----
> > From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of
> > Stanley.Yang
> > Sent: Saturday, December 16, 2023 00:50
> > To: amd-gfx at lists.freedesktop.org
> > Cc: Yang, Stanley <Stanley.Yang at amd.com>
> > Subject: [PATCH Review 1/1] drm/amdgpu: Fix ecc irq enable/disable
> > unpaired
> >
> > The ecc_irq is disabled while GPU mode2 reset suspending process, but
> > not be enabled during GPU mode2 reset resume process.
> >
> > Signed-off-by: Stanley.Yang <Stanley.Yang at amd.com>
> > ---
> >  drivers/gpu/drm/amd/amdgpu/aldebaran.c  |  6 ++++
> > drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 37
> > +++++++++++++++++++++++++
> > drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h |  1 +
> > drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c  |  3 ++
> > drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c  |  4 +++
> >  drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c   |  3 ++
> >  6 files changed, 54 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/aldebaran.c
> > b/drivers/gpu/drm/amd/amdgpu/aldebaran.c
> > index 02f4c6f9d4f6..ba9238a93064 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/aldebaran.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/aldebaran.c
> > @@ -358,6 +358,12 @@ aldebaran_mode2_restore_hwcontext(struct
> > amdgpu_reset_control *reset_ctl,
> >                 /* Resume RAS */
> >                 amdgpu_ras_resume(tmp_adev);
> >
> > +               r = amdgpu_ras_late_resume(tmp_adev);
> > +               if (r) {
> > +                       dev_err(tmp_adev->dev, "amdgpu_ras_late_resume
> > failed %d\n", r);
> > +                       goto end;
> > +               }
> > +
> >                 /* Update PSP FW topology after reset */
> >                 if (reset_context->hive &&
> >                     tmp_adev->gmc.xgmi.num_physical_nodes > 1) diff
> > --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
> > index 8a04fb6c7c1f..318e77c493f2 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
> > @@ -3164,6 +3164,43 @@ int amdgpu_ras_late_init(struct amdgpu_device
> > *adev)
> >         return 0;
> >  }
> >
> > +/* Handle mode 2 reset, resume ecc irq state */ int
> > +amdgpu_ras_late_resume(struct amdgpu_device *adev) {
> > +       struct amdgpu_ras_block_list *node, *tmp;
> > +       struct amdgpu_ras_block_object *obj;
> > +       int r;
> > +
> > +       /* Guest side doesn't need init ras feature */
> > +       if (amdgpu_sriov_vf(adev))
> > +               return 0;
> > +
> > +       list_for_each_entry_safe(node, tmp, &adev->ras_list, node) {
> > +               if (!node->ras_obj) {
> > +                       dev_warn(adev->dev, "Warning: abnormal ras list node.\n");
> > +                       continue;
> > +               }
> > +
> > +               obj = node->ras_obj;
> > +
> > +               if (!(obj->ras_comm.block == AMDGPU_RAS_BLOCK__SDMA ||
> > +                         obj->ras_comm.block == AMDGPU_RAS_BLOCK__GFX))
> > +                       continue;
> > +
> > +               if (obj->ras_late_init) {
> > +                       r = obj->ras_late_init(adev, &obj->ras_comm);
> > +                       if (r) {
> > +                               dev_err(adev->dev, "%s failed to execute ras_late_init!
> > ret:%d\n",
> > +                                       obj->ras_comm.name, r);
> > +                               return r;
> > +                       }
> > +               } else
> > +                       amdgpu_ras_block_late_init_default(adev, &obj->ras_comm);
> > +       }
> > +
> > +       return 0;
> > +}
> > +
> >  /* do some fini work before IP fini as dependence */  int
> > amdgpu_ras_pre_fini(struct amdgpu_device *adev)  { diff --git
> > a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h
> > index 6a941eb8fb8f..5c1ffc5a6899 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h
> > @@ -693,6 +693,7 @@ amdgpu_ras_error_to_ta(enum
> amdgpu_ras_error_type
> > error) {
> >  /* called in ip_init and ip_fini */
> >  int amdgpu_ras_init(struct amdgpu_device *adev);  int
> > amdgpu_ras_late_init(struct amdgpu_device *adev);
> > +int amdgpu_ras_late_resume(struct amdgpu_device *adev);
> >  int amdgpu_ras_fini(struct amdgpu_device *adev);  int
> > amdgpu_ras_pre_fini(struct amdgpu_device *adev);
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
> > b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
> > index 09cbca596bb5..b93a0baeb2d3 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
> > @@ -1043,6 +1043,9 @@ static int gmc_v10_0_hw_fini(void *handle)
> >
> >         amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
> >
> > +       if (adev->gmc.ecc_irq.funcs)
> > +               amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
> > +
> >         return 0;
> >  }
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
> > b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
> > index 416f3e4f0438..e633e60850b3 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
> > @@ -941,6 +941,10 @@ static int gmc_v11_0_hw_fini(void *handle)
> >         }
> >
> >         amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
> > +
> > +       if (adev->gmc.ecc_irq.funcs)
> > +               amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
> > +
> >         gmc_v11_0_gart_disable(adev);
> >
> >         return 0;
> > diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> > b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> > index 205db28a9803..8ac4d5b7fb37 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> > @@ -2388,6 +2388,9 @@ static int gmc_v9_0_hw_fini(void *handle)
> >
> >         amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
> >
> > +       if (adev->gmc.ecc_irq.funcs)
> > +               amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
> > +
> >         return 0;
> >  }
> >
> > --
> > 2.25.1
> >
>
>



More information about the amd-gfx mailing list