[PATCH 2/2] drm/amdgpu: disable vm fault irq during prt accessed
Zhou, David(ChunMing)
David1.Zhou at amd.com
Thu Jan 3 09:46:40 UTC 2019
Seems we don't need two page table, we just map every prt range to dummy page, any problem?
-David
> -----Original Message-----
> From: Zhou, David(ChunMing)
> Sent: Thursday, January 03, 2019 5:23 PM
> To: Koenig, Christian <Christian.Koenig at amd.com>; amd-
> gfx at lists.freedesktop.org
> Subject: RE: [PATCH 2/2] drm/amdgpu: disable vm fault irq during prt
> accessed
>
>
>
> > -----Original Message-----
> > From: Christian König <ckoenig.leichtzumerken at gmail.com>
> > Sent: Thursday, January 03, 2019 5:05 PM
> > To: Zhou, David(ChunMing) <David1.Zhou at amd.com>; Koenig, Christian
> > <Christian.Koenig at amd.com>; Zhou, David(ChunMing)
> > <David1.Zhou at amd.com>; amd-gfx at lists.freedesktop.org
> > Subject: Re: [PATCH 2/2] drm/amdgpu: disable vm fault irq during prt
> > accessed
> >
> > Yes, exactly.
> >
> > Problem is that we then probably need two page tables. One for the
> > CB/TC and one for the SDMA.
>
> But when setup page table, how can we know the client is CB/TC or SDMA?
>
> -David
>
> >
> > Christian.
> >
> > Am 03.01.19 um 10:02 schrieb zhoucm1:
> > > need dummy page for that?
> > >
> > >
> > > -David
> > >
> > >
> > > On 2019年01月03日 17:01, Christian König wrote:
> > >> NAK, the problem is not the interrupt.
> > >>
> > >> E.g. causing faults by accessing unmapped pages with the SDMA can
> > >> still crash the MC.
> > >>
> > >> The key point is that SDMA can't work with PRT tiles on pre-gmc9
> > >> and we need to forbid access on the application side.
> > >>
> > >> Regards,
> > >> Christian.
> > >>
> > >> Am 03.01.19 um 09:54 schrieb Chunming Zhou:
> > >>> For pre-gmc9, UMD can only access unmapped PRT tile from CB/TC
> > >>> without firing VM fault. Kernel would still receive the VM fault
> > >>> interrupt and output the error message if SDMA is the mc_client.
> > >>> GMC9 don't need the same since it handle the PRT in different way.
> > >>> We cannot just skip message for SDMA, as Christian pointed, VM
> > >>> fault could crash mc block, so we disable vm fault irq during prt
> > >>> range is accesed.
> > >>> The nagative is normal vm fault could be ignored during that
> > >>> peroid without enabling vm_debug kernel parameter.
> > >>>
> > >>> Change-Id: Ic3c62393768eca90e3e45eaf81e7f26f2e91de84
> > >>> Signed-off-by: Chunming Zhou <david1.zhou at amd.com>
> > >>> ---
> > >>> drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 6 ++++++
> > >>> drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 6 ++++++
> > >>> drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 6 ++++++
> > >>> 3 files changed, 18 insertions(+)
> > >>>
> > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
> > >>> b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
> > >>> index dae73f6768c2..175c4b319559 100644
> > >>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
> > >>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
> > >>> @@ -486,6 +486,10 @@ static void gmc_v6_0_set_prt(struct
> > >>> amdgpu_device *adev, bool enable)
> > >>> WREG32(mmVM_PRT_APERTURE1_HIGH_ADDR, high);
> > >>> WREG32(mmVM_PRT_APERTURE2_HIGH_ADDR, high);
> > >>> WREG32(mmVM_PRT_APERTURE3_HIGH_ADDR, high);
> > >>> + /* Note: when vm_debug enabled, vm fault from SDMAx
> > >>> +accessing
> > >>> + * PRT range is normal. */
> > >>> + if (!amdgpu_vm_debug)
> > >>> + amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
> > >>> } else {
> > >>> WREG32(mmVM_PRT_APERTURE0_LOW_ADDR, 0xfffffff);
> > >>> WREG32(mmVM_PRT_APERTURE1_LOW_ADDR, 0xfffffff); @@ -
> > 495,6
> > >>> +499,8 @@ static void gmc_v6_0_set_prt(struct amdgpu_device
> *adev,
> > >>> bool enable)
> > >>> WREG32(mmVM_PRT_APERTURE1_HIGH_ADDR, 0x0);
> > >>> WREG32(mmVM_PRT_APERTURE2_HIGH_ADDR, 0x0);
> > >>> WREG32(mmVM_PRT_APERTURE3_HIGH_ADDR, 0x0);
> > >>> + if (!amdgpu_vm_debug)
> > >>> + amdgpu_irq_get(adev, &adev->gmc.vm_fault, 0);
> > >>> }
> > >>> }
> > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
> > >>> b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
> > >>> index 5bdeb358bfb5..a4d6d219f4e8 100644
> > >>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
> > >>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
> > >>> @@ -582,6 +582,10 @@ static void gmc_v7_0_set_prt(struct
> > >>> amdgpu_device *adev, bool enable)
> > >>> WREG32(mmVM_PRT_APERTURE1_HIGH_ADDR, high);
> > >>> WREG32(mmVM_PRT_APERTURE2_HIGH_ADDR, high);
> > >>> WREG32(mmVM_PRT_APERTURE3_HIGH_ADDR, high);
> > >>> + /* Note: when vm_debug enabled, vm fault from SDMAx
> > >>> +accessing
> > >>> + * PRT range is normal. */
> > >>> + if (!amdgpu_vm_debug)
> > >>> + amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
> > >>> } else {
> > >>> WREG32(mmVM_PRT_APERTURE0_LOW_ADDR, 0xfffffff);
> > >>> WREG32(mmVM_PRT_APERTURE1_LOW_ADDR, 0xfffffff); @@ -
> > 591,6
> > >>> +595,8 @@ static void gmc_v7_0_set_prt(struct amdgpu_device
> *adev,
> > >>> bool enable)
> > >>> WREG32(mmVM_PRT_APERTURE1_HIGH_ADDR, 0x0);
> > >>> WREG32(mmVM_PRT_APERTURE2_HIGH_ADDR, 0x0);
> > >>> WREG32(mmVM_PRT_APERTURE3_HIGH_ADDR, 0x0);
> > >>> + if (!amdgpu_vm_debug)
> > >>> + amdgpu_irq_get(adev, &adev->gmc.vm_fault, 0);
> > >>> }
> > >>> }
> > >>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
> > >>> b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
> > >>> index 5150ab614eaa..eea2eb7fc2f5 100644
> > >>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
> > >>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
> > >>> @@ -808,6 +808,10 @@ static void gmc_v8_0_set_prt(struct
> > >>> amdgpu_device *adev, bool enable)
> > >>> WREG32(mmVM_PRT_APERTURE1_HIGH_ADDR, high);
> > >>> WREG32(mmVM_PRT_APERTURE2_HIGH_ADDR, high);
> > >>> WREG32(mmVM_PRT_APERTURE3_HIGH_ADDR, high);
> > >>> + /* Note: when vm_debug enabled, vm fault from SDMAx
> > >>> +accessing
> > >>> + * PRT range is normal. */
> > >>> + if (!amdgpu_vm_debug)
> > >>> + amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
> > >>> } else {
> > >>> WREG32(mmVM_PRT_APERTURE0_LOW_ADDR, 0xfffffff);
> > >>> WREG32(mmVM_PRT_APERTURE1_LOW_ADDR, 0xfffffff); @@ -
> > 817,6
> > >>> +821,8 @@ static void gmc_v8_0_set_prt(struct amdgpu_device
> *adev,
> > >>> bool enable)
> > >>> WREG32(mmVM_PRT_APERTURE1_HIGH_ADDR, 0x0);
> > >>> WREG32(mmVM_PRT_APERTURE2_HIGH_ADDR, 0x0);
> > >>> WREG32(mmVM_PRT_APERTURE3_HIGH_ADDR, 0x0);
> > >>> + if (!amdgpu_vm_debug)
> > >>> + amdgpu_irq_get(adev, &adev->gmc.vm_fault, 0);
> > >>> }
> > >>> }
> > >>
> > >
> > > _______________________________________________
> > > amd-gfx mailing list
> > > amd-gfx at lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list