Messages in this thread | | | Date | Thu, 17 Mar 2022 14:19:33 +0000 | From | Lee Jones <> | Subject | Re: [PATCH 1/1] drm/amdkfd: Protect the Client whilst it is being operated on |
| |
On Thu, 17 Mar 2022, Lee Jones wrote:
> Presently the Client can be freed whilst still in use. > > Use the already provided lock to prevent this. > > Cc: Felix Kuehling <Felix.Kuehling@amd.com> > Cc: Alex Deucher <alexander.deucher@amd.com> > Cc: "Christian König" <christian.koenig@amd.com> > Cc: "Pan, Xinhui" <Xinhui.Pan@amd.com> > Cc: David Airlie <airlied@linux.ie> > Cc: Daniel Vetter <daniel@ffwll.ch> > Cc: amd-gfx@lists.freedesktop.org > Cc: dri-devel@lists.freedesktop.org > Signed-off-by: Lee Jones <lee.jones@linaro.org> > ---
I should have clarified here, that:
This patch has only been *build* tested.
Since I have no way to run this on real H/W.
Please ensure this is tested on real H/W before it gets applied, since it *may* have some undesired side-effects. For instance, I have no idea if client->lock plays nicely with dev->smi_lock or whether this may well end up in deadlock.
TIA.
> drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c b/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c > index e4beebb1c80a2..3b9ac1e87231f 100644 > --- a/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c > @@ -145,8 +145,11 @@ static int kfd_smi_ev_release(struct inode *inode, struct file *filep) > spin_unlock(&dev->smi_lock); > > synchronize_rcu(); > + > + spin_lock(&client->lock); > kfifo_free(&client->fifo); > kfree(client); > + spin_unlock(&client->lock); > > return 0; > } > @@ -247,11 +250,13 @@ int kfd_smi_event_open(struct kfd_dev *dev, uint32_t *fd) > return ret; > } > > + spin_lock(&client->lock); > ret = anon_inode_getfd(kfd_smi_name, &kfd_smi_ev_fops, (void *)client, > O_RDWR); > if (ret < 0) { > kfifo_free(&client->fifo); > kfree(client); > + spin_unlock(&client->lock); > return ret; > } > *fd = ret; > @@ -264,6 +269,7 @@ int kfd_smi_event_open(struct kfd_dev *dev, uint32_t *fd) > spin_lock(&dev->smi_lock); > list_add_rcu(&client->list, &dev->smi_clients); > spin_unlock(&dev->smi_lock); > + spin_unlock(&client->lock); > > return 0; > }
-- Lee Jones [李琼斯] Principal Technical Lead - Developer Services Linaro.org │ Open source software for Arm SoCs Follow Linaro: Facebook | Twitter | Blog
| |