[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210330111620.GK2356281@nvidia.com>
Date: Tue, 30 Mar 2021 08:16:20 -0300
From: Jason Gunthorpe <jgg@...dia.com>
To: Dan Williams <dan.j.williams@...el.com>
Cc: linux-cxl@...r.kernel.org, linux-kernel@...r.kernel.org,
vishal.l.verma@...el.com, ira.weiny@...el.com,
alison.schofield@...el.com
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
Powered by blists - more mailing lists