From: "Christian König" <ckoenig.leichtzumerken@gmail.com>
To: Mukul Joshi <mukul.joshi@amd.com>, amd-gfx@lists.freedesktop.org
Cc: Felix.Kuehling@amd.com, christian.koenig@amd.com
Subject: Re: [PATCHv4] drm/amdgpu: Update invalid PTE flag setting
Date: Thu, 29 Jun 2023 16:37:03 +0200 [thread overview]
Message-ID: <e72a7ddf-e6b8-0c03-eabe-ba4ce445a061@gmail.com> (raw)
In-Reply-To: <20230619173825.1461932-1-mukul.joshi@amd.com>
Am 19.06.23 um 19:38 schrieb Mukul Joshi:
> Update the invalid PTE flag setting with TF enabled.
> This is to ensure, in addition to transitioning the
> retry fault to a no-retry fault, it also causes the
> wavefront to enter the trap handler. With the current
> setting, the fault only transitions to a no-retry fault.
> Additionally, have 2 sets of invalid PTE settings, one for
> TF enabled, the other for TF disabled. The setting with
> TF disabled, doesn't work with TF enabled.
>
> Signed-off-by: Mukul Joshi <mukul.joshi@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
> ---
> v1->v2:
> - Update handling according to Christian's feedback.
>
> v2->v3:
> - Remove ASIC specific callback (Felix).
>
> v3->v4:
> - Add noretry flag to amdgpu->gmc. This allows to set
> ASIC specific flags.
>
> drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h | 2 ++
> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 2 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 6 +++++
> drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c | 31 +++++++++++++++++++++++
> drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c | 1 +
> drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c | 1 +
> drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 1 +
> drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 1 +
> drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 1 +
> 9 files changed, 45 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h
> index 56d73fade568..fdc25cd559b6 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h
> @@ -331,6 +331,8 @@ struct amdgpu_gmc {
> u64 VM_CONTEXT_PAGE_TABLE_END_ADDR_LO32[16];
> u64 VM_CONTEXT_PAGE_TABLE_END_ADDR_HI32[16];
> u64 MC_VM_MX_L1_TLB_CNTL;
> +
> + u64 noretry_flags;
> };
>
> #define amdgpu_gmc_flush_gpu_tlb(adev, vmid, vmhub, type) ((adev)->gmc.gmc_funcs->flush_gpu_tlb((adev), (vmid), (vmhub), (type)))
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index eff73c428b12..8c7861a4d75d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -2604,7 +2604,7 @@ bool amdgpu_vm_handle_fault(struct amdgpu_device *adev, u32 pasid,
> /* Intentionally setting invalid PTE flag
> * combination to force a no-retry-fault
> */
> - flags = AMDGPU_PTE_SNOOPED | AMDGPU_PTE_PRT;
> + flags = AMDGPU_VM_NORETRY_FLAGS;
> value = 0;
> } else if (amdgpu_vm_fault_stop == AMDGPU_VM_FAULT_STOP_NEVER) {
> /* Redirect the access to the dummy page */
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> index 9c85d494f2a2..b81fcb962d8f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> @@ -84,7 +84,13 @@ struct amdgpu_mem_stats;
> /* PDE Block Fragment Size for VEGA10 */
> #define AMDGPU_PDE_BFS(a) ((uint64_t)a << 59)
>
> +/* Flag combination to set no-retry with TF disabled */
> +#define AMDGPU_VM_NORETRY_FLAGS (AMDGPU_PTE_EXECUTABLE | AMDGPU_PDE_PTE | \
> + AMDGPU_PTE_TF)
>
> +/* Flag combination to set no-retry with TF enabled */
> +#define AMDGPU_VM_NORETRY_FLAGS_TF (AMDGPU_PTE_VALID | AMDGPU_PTE_SYSTEM | \
> + AMDGPU_PTE_PRT)
> /* For GFX9 */
> #define AMDGPU_PTE_MTYPE_VG10(a) ((uint64_t)(a) << 57)
> #define AMDGPU_PTE_MTYPE_VG10_MASK AMDGPU_PTE_MTYPE_VG10(3ULL)
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c
> index dea1a64be44d..24ddf6a0512a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c
> @@ -778,6 +778,27 @@ int amdgpu_vm_pde_update(struct amdgpu_vm_update_params *params,
> 1, 0, flags);
> }
>
> +/**
> + * amdgpu_vm_pte_update_noretry_flags - Update PTE no-retry flags
> + *
> + * @adev - amdgpu_device pointer
> + * @flags: pointer to PTE flags
> + *
> + * Update PTE no-retry flags when TF is enabled.
> + */
> +static void amdgpu_vm_pte_update_noretry_flags(struct amdgpu_device *adev,
> + uint64_t *flags)
> +{
> + /*
> + * Update no-retry flags with the corresponding TF
> + * no-retry combination.
> + */
> + if ((*flags & AMDGPU_VM_NORETRY_FLAGS) == AMDGPU_VM_NORETRY_FLAGS) {
> + *flags &= ~AMDGPU_VM_NORETRY_FLAGS;
> + *flags |= adev->gmc.noretry_flags;
> + }
> +}
> +
> /*
> * amdgpu_vm_pte_update_flags - figure out flags for PTE updates
> *
> @@ -804,6 +825,16 @@ static void amdgpu_vm_pte_update_flags(struct amdgpu_vm_update_params *params,
> flags |= AMDGPU_PTE_EXECUTABLE;
> }
>
> + /*
> + * Update no-retry flags to use the no-retry flag combination
> + * with TF enabled. The AMDGPU_VM_NORETRY_FLAGS flag combination
> + * does not work when TF is enabled. So, replace them with
> + * AMDGPU_VM_NORETRY_FLAGS_TF flag combination which works for
> + * all cases.
> + */
> + if (level == AMDGPU_VM_PTB)
> + amdgpu_vm_pte_update_noretry_flags(adev, &flags);
> +
> /* APUs mapping system memory may need different MTYPEs on different
> * NUMA nodes. Only do this for contiguous ranges that can be assumed
> * to be on the same NUMA node.
> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
> index 0c8a47989576..13b89f78d07d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
> @@ -751,6 +751,7 @@ static int gmc_v10_0_early_init(void *handle)
> adev->gmc.private_aperture_start = 0x1000000000000000ULL;
> adev->gmc.private_aperture_end =
> adev->gmc.private_aperture_start + (4ULL << 30) - 1;
> + adev->gmc.noretry_flags = AMDGPU_VM_NORETRY_FLAGS_TF;
>
> 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 c571f0d95994..c68ecb7dfa39 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
> @@ -651,6 +651,7 @@ static int gmc_v11_0_early_init(void *handle)
> adev->gmc.private_aperture_start = 0x1000000000000000ULL;
> adev->gmc.private_aperture_end =
> adev->gmc.private_aperture_start + (4ULL << 30) - 1;
> + adev->gmc.noretry_flags = AMDGPU_VM_NORETRY_FLAGS_TF;
>
> return 0;
> }
> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
> index acd2b407860f..027b14603037 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
> @@ -942,6 +942,7 @@ static int gmc_v7_0_early_init(void *handle)
> adev->gmc.shared_aperture_end + 1;
> adev->gmc.private_aperture_end =
> adev->gmc.private_aperture_start + (4ULL << 30) - 1;
> + adev->gmc.noretry_flags = AMDGPU_VM_NORETRY_FLAGS_TF;
>
> return 0;
> }
> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
> index 85dead2a5702..581ed922dbe3 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
> @@ -1056,6 +1056,7 @@ static int gmc_v8_0_early_init(void *handle)
> adev->gmc.shared_aperture_end + 1;
> adev->gmc.private_aperture_end =
> adev->gmc.private_aperture_start + (4ULL << 30) - 1;
> + adev->gmc.noretry_flags = AMDGPU_VM_NORETRY_FLAGS_TF;
>
> 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 67e669e0141c..ebdbc823fae3 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> @@ -1622,6 +1622,7 @@ static int gmc_v9_0_early_init(void *handle)
> adev->gmc.private_aperture_start = 0x1000000000000000ULL;
> adev->gmc.private_aperture_end =
> adev->gmc.private_aperture_start + (4ULL << 30) - 1;
> + adev->gmc.noretry_flags = AMDGPU_VM_NORETRY_FLAGS_TF;
>
> return 0;
> }
prev parent reply other threads:[~2023-06-29 14:37 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-19 17:38 [PATCHv4] drm/amdgpu: Update invalid PTE flag setting Mukul Joshi
2023-06-20 19:25 ` Felix Kuehling
2023-06-29 14:37 ` Christian König [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e72a7ddf-e6b8-0c03-eabe-ba4ce445a061@gmail.com \
--to=ckoenig.leichtzumerken@gmail.com \
--cc=Felix.Kuehling@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=christian.koenig@amd.com \
--cc=mukul.joshi@amd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.