AMD General Reviewed-by: David Yat Sin <[email protected]>
> -----Original Message----- > From: Lin, Amber <[email protected]> > Sent: Tuesday, July 28, 2026 2:26 PM > To: [email protected]; Yat Sin, David <[email protected]>; > Huang, JinHuiEric <[email protected]> > Cc: Lin, Amber <[email protected]> > Subject: [PATCH] drm/amdkfd: Fix signal reset event > > When a mode reset happens, driver needs to notify the process on that GPU a > reset event is happening. The existing code assumes the process is using the > GPU > that is getting mode reset, which is not always true. For example, on a 8G > system, > the process may be only using GPU 0~4 but a mode 2 reset is resetting the all > 8 > GPUs connected by XGMI. Trying to find a process on GPU 5~7 will fail, which > is > fine and should skip the event signal. > > Signed-off-by: Amber Lin <[email protected]> > --- > drivers/gpu/drm/amd/amdkfd/kfd_events.c | 17 ++++++++--------- > 1 file changed, 8 insertions(+), 9 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.c > b/drivers/gpu/drm/amd/amdkfd/kfd_events.c > index 5fa156e89a73..6e32a892d56f 100644 > --- a/drivers/gpu/drm/amd/amdkfd/kfd_events.c > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.c > @@ -1164,6 +1164,8 @@ void kfd_signal_reset_event(struct kfd_node *dev) > struct kfd_event *ev; > unsigned int temp; > uint32_t id, idx; > + int user_gpu_id; > + struct kfd_process_device *pdd; > int reset_cause = atomic_read(&dev->sram_ecc_flag) ? > KFD_HW_EXCEPTION_ECC : > KFD_HW_EXCEPTION_GPU_HANG; > @@ -1179,17 +1181,14 @@ void kfd_signal_reset_event(struct kfd_node *dev) > > idx = srcu_read_lock(&kfd_processes_srcu); > hash_for_each_rcu(kfd_processes_table, temp, p, kfd_processes) { > - int user_gpu_id = kfd_process_get_user_gpu_id(p, dev->id); > - struct kfd_process_device *pdd = > kfd_get_process_device_data(dev, > p); > - > - if (unlikely(user_gpu_id == -EINVAL)) { > - WARN_ONCE(1, "Could not get user_gpu_id from dev- > >id:%x\n", dev->id); > + pdd = kfd_get_process_device_data(dev, p); > + if (!pdd) > + /* no process is using this device */ > continue; > - } > + user_gpu_id = kfd_process_get_user_gpu_id(p, dev->id); > > - if (unlikely(!pdd)) { > - WARN_ONCE(1, "Could not get device data from process > pid:%d\n", > - p->lead_thread->pid); > + if (unlikely(user_gpu_id == -EINVAL)) { > + WARN_ONCE(1, "Could not get user_gpu_id from dev- > >id:%d\n", > +dev->id); > continue; > } > > -- > 2.43.0
