Messages in this thread | | | Date | Tue, 30 Mar 2021 08:16:20 -0300 | From | Jason Gunthorpe <> | Subject | Re: [PATCH v2 2/4] cxl/mem: Fix synchronization mechanism for device removal vs ioctl operations |
| |
On Mon, Mar 29, 2021 at 07:47:49PM -0700, Dan Williams wrote:
> @@ -1155,21 +1175,12 @@ static void cxlmdev_unregister(void *_cxlmd) > struct cxl_memdev *cxlmd = _cxlmd; > struct device *dev = &cxlmd->dev; > > - percpu_ref_kill(&cxlmd->ops_active); > cdev_device_del(&cxlmd->cdev, dev); > - wait_for_completion(&cxlmd->ops_dead); > + synchronize_srcu(&cxl_memdev_srcu);
This needs some kind of rcu protected pointer for SRCU to to work.. The write side has to null the pointer and the read side has to copy the pointer to the stack and check for NULL.
Otherwise the read side can't detect when the write side is shutting down.
Basically you must use rcu_derference(), rcu_assign_pointer(), etc when working with RCU.
Something like 'ops' is usually a reasonable choice
This really can't just be a simple rwsem?
Jason
| |