[PATCH] drm/amdkfd: fix vmfault signalling with additional data.
Joshi, Mukul
Mukul.Joshi at amd.com
Wed Jun 7 14:45:34 UTC 2023
[AMD Official Use Only - General]
Reviewed-by: Mukul Joshi <mukul.joshi at amd.com>
> -----Original Message-----
> From: Kim, Jonathan <Jonathan.Kim at amd.com>
> Sent: Wednesday, June 7, 2023 10:39 AM
> To: amd-gfx at lists.freedesktop.org
> Cc: Joshi, Mukul <Mukul.Joshi at amd.com>; Kuehling, Felix
> <Felix.Kuehling at amd.com>; Kim, Jonathan <Jonathan.Kim at amd.com>;
> Joshi, Mukul <Mukul.Joshi at amd.com>
> Subject: [PATCH] drm/amdkfd: fix vmfault signalling with additional data.
>
> Exception handling for vmfaults should be raised with additional data.
>
> Reported-by: Mukul Joshi <mukul.joshi at amd.com>
> Signed-off-by: Jonathan Kim <jonathan.kim at amd.com>
> ---
> drivers/gpu/drm/amd/amdkfd/kfd_events.c | 34 +++++++++++++++--------
> --
> 1 file changed, 20 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.c
> b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
> index 7ff5c4e1b7e2..c069ef77daa5 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_events.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
> @@ -1240,19 +1240,24 @@ void kfd_signal_vm_fault_event(struct kfd_node
> *dev, u32 pasid,
> return;
> }
>
> - memset(&memory_exception_data, 0,
> sizeof(memory_exception_data));
> - memory_exception_data.gpu_id = user_gpu_id;
> - memory_exception_data.failure.imprecise = true;
> - /* Set failure reason */
> - if (info) {
> - memory_exception_data.va = (info->page_addr) <<
> PAGE_SHIFT;
> - memory_exception_data.failure.NotPresent =
> - info->prot_valid ? 1 : 0;
> - memory_exception_data.failure.NoExecute =
> - info->prot_exec ? 1 : 0;
> - memory_exception_data.failure.ReadOnly =
> - info->prot_write ? 1 : 0;
> - memory_exception_data.failure.imprecise = 0;
> + /* SoC15 chips and onwards will pass in data from now on. */
> + if (!data) {
> + memset(&memory_exception_data, 0,
> sizeof(memory_exception_data));
> + memory_exception_data.gpu_id = user_gpu_id;
> + memory_exception_data.failure.imprecise = true;
> +
> + /* Set failure reason */
> + if (info) {
> + memory_exception_data.va = (info->page_addr) <<
> + PAGE_SHIFT;
> + memory_exception_data.failure.NotPresent =
> + info->prot_valid ? 1 : 0;
> + memory_exception_data.failure.NoExecute =
> + info->prot_exec ? 1 : 0;
> + memory_exception_data.failure.ReadOnly =
> + info->prot_write ? 1 : 0;
> + memory_exception_data.failure.imprecise = 0;
> + }
> }
>
> rcu_read_lock();
> @@ -1261,7 +1266,8 @@ void kfd_signal_vm_fault_event(struct kfd_node
> *dev, u32 pasid,
> idr_for_each_entry_continue(&p->event_idr, ev, id)
> if (ev->type == KFD_EVENT_TYPE_MEMORY) {
> spin_lock(&ev->lock);
> - ev->memory_exception_data =
> memory_exception_data;
> + ev->memory_exception_data = data ? *data :
> +
> memory_exception_data;
> set_event(ev);
> spin_unlock(&ev->lock);
> }
> --
> 2.25.1
More information about the amd-gfx
mailing list