Message ID | 169602897366.904193.9449207727775648546.stgit@dwillia2-xfh.jf.intel.com |
---|---|
State | Superseded |
Headers | show |
Series | cxl/mem: Fix shutdown order | expand |
Dan Williams wrote: > Given that any particular put_device() could be the final put of the > device, the fact that there are usages of cxlds->dev after > put_device(cxlds->dev) is a red flag. Drop the reference counting since > the device is pinned by being registered and will not be unregistered > without triggering the driver + workqueue to shutdown. > > Signed-off-by: Dan Williams <dan.j.williams@intel.com> Reviewed-by: Ira Weiny <ira.weiny@intel.com>
On Fri, 29 Sep 2023 16:09:33 -0700 Dan Williams <dan.j.williams@intel.com> wrote: > Given that any particular put_device() could be the final put of the > device, the fact that there are usages of cxlds->dev after > put_device(cxlds->dev) is a red flag. Drop the reference counting since > the device is pinned by being registered and will not be unregistered > without triggering the driver + workqueue to shutdown. > > Signed-off-by: Dan Williams <dan.j.williams@intel.com> Makes sense Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > --- > drivers/cxl/pci.c | 5 ----- > 1 file changed, 5 deletions(-) > > diff --git a/drivers/cxl/pci.c b/drivers/cxl/pci.c > index 44a21ab7add5..aa1b3dd9e64c 100644 > --- a/drivers/cxl/pci.c > +++ b/drivers/cxl/pci.c > @@ -152,8 +152,6 @@ static void cxl_mbox_sanitize_work(struct work_struct *work) > mutex_lock(&mds->mbox_mutex); > if (cxl_mbox_background_complete(cxlds)) { > mds->security.poll_tmo_secs = 0; > - put_device(cxlds->dev); > - > if (mds->security.sanitize_node) > sysfs_notify_dirent(mds->security.sanitize_node); > > @@ -296,9 +294,6 @@ static int __cxl_pci_mbox_send_cmd(struct cxl_memdev_state *mds, > */ > if (mbox_cmd->opcode == CXL_MBOX_OP_SANITIZE) { > if (mds->security.poll) { > - /* hold the device throughout */ > - get_device(cxlds->dev); > - > /* give first timeout a second */ > timeout = 1; > mds->security.poll_tmo_secs = timeout; >
On Fri, 29 Sep 2023, Dan Williams wrote: >Given that any particular put_device() could be the final put of the >device, the fact that there are usages of cxlds->dev after >put_device(cxlds->dev) is a red flag. Drop the reference counting since >the device is pinned by being registered and will not be unregistered >without triggering the driver + workqueue to shutdown. > >Signed-off-by: Dan Williams <dan.j.williams@intel.com> If the refcounting is unnecessary, great. Reviewed-by: Davidlohr Bueso <dave@stgolabs.net>
On 9/29/23 16:09, Dan Williams wrote: > Given that any particular put_device() could be the final put of the > device, the fact that there are usages of cxlds->dev after > put_device(cxlds->dev) is a red flag. Drop the reference counting since > the device is pinned by being registered and will not be unregistered > without triggering the driver + workqueue to shutdown. > > Signed-off-by: Dan Williams <dan.j.williams@intel.com> Reviewed-by: Dave Jiang <dave.jiang@intel.com> > --- > drivers/cxl/pci.c | 5 ----- > 1 file changed, 5 deletions(-) > > diff --git a/drivers/cxl/pci.c b/drivers/cxl/pci.c > index 44a21ab7add5..aa1b3dd9e64c 100644 > --- a/drivers/cxl/pci.c > +++ b/drivers/cxl/pci.c > @@ -152,8 +152,6 @@ static void cxl_mbox_sanitize_work(struct work_struct *work) > mutex_lock(&mds->mbox_mutex); > if (cxl_mbox_background_complete(cxlds)) { > mds->security.poll_tmo_secs = 0; > - put_device(cxlds->dev); > - > if (mds->security.sanitize_node) > sysfs_notify_dirent(mds->security.sanitize_node); > > @@ -296,9 +294,6 @@ static int __cxl_pci_mbox_send_cmd(struct cxl_memdev_state *mds, > */ > if (mbox_cmd->opcode == CXL_MBOX_OP_SANITIZE) { > if (mds->security.poll) { > - /* hold the device throughout */ > - get_device(cxlds->dev); > - > /* give first timeout a second */ > timeout = 1; > mds->security.poll_tmo_secs = timeout; >
diff --git a/drivers/cxl/pci.c b/drivers/cxl/pci.c index 44a21ab7add5..aa1b3dd9e64c 100644 --- a/drivers/cxl/pci.c +++ b/drivers/cxl/pci.c @@ -152,8 +152,6 @@ static void cxl_mbox_sanitize_work(struct work_struct *work) mutex_lock(&mds->mbox_mutex); if (cxl_mbox_background_complete(cxlds)) { mds->security.poll_tmo_secs = 0; - put_device(cxlds->dev); - if (mds->security.sanitize_node) sysfs_notify_dirent(mds->security.sanitize_node); @@ -296,9 +294,6 @@ static int __cxl_pci_mbox_send_cmd(struct cxl_memdev_state *mds, */ if (mbox_cmd->opcode == CXL_MBOX_OP_SANITIZE) { if (mds->security.poll) { - /* hold the device throughout */ - get_device(cxlds->dev); - /* give first timeout a second */ timeout = 1; mds->security.poll_tmo_secs = timeout;
Given that any particular put_device() could be the final put of the device, the fact that there are usages of cxlds->dev after put_device(cxlds->dev) is a red flag. Drop the reference counting since the device is pinned by being registered and will not be unregistered without triggering the driver + workqueue to shutdown. Signed-off-by: Dan Williams <dan.j.williams@intel.com> --- drivers/cxl/pci.c | 5 ----- 1 file changed, 5 deletions(-)