RE: [PATCH] drm/amdkfd: fix vmfault signalling with additional data.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[AMD Official Use Only - General]

Reviewed-by: Mukul Joshi <mukul.joshi@xxxxxxx>

> -----Original Message-----
> From: Kim, Jonathan <Jonathan.Kim@xxxxxxx>
> Sent: Wednesday, June 7, 2023 10:39 AM
> To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx
> Cc: Joshi, Mukul <Mukul.Joshi@xxxxxxx>; Kuehling, Felix
> <Felix.Kuehling@xxxxxxx>; Kim, Jonathan <Jonathan.Kim@xxxxxxx>;
> Joshi, Mukul <Mukul.Joshi@xxxxxxx>
> 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@xxxxxxx>
> Signed-off-by: Jonathan Kim <jonathan.kim@xxxxxxx>
> ---
>  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





[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux