[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