Messages in this thread | | | Date | Fri, 22 May 2015 17:47:55 +0000 (UTC) | From | Keith Busch <> | Subject | Re: [PATCH] NVMe: Avoid interrupt disable during queue init. |
| |
On Fri, 22 May 2015, Parav Pandit wrote: > I agree to it that nvmeq won't be null after mb(); That alone is not sufficient. > > What I have proposed in previous email is, > > Converting, > > struct nvme_queue *nvmeq = dev->queues[i]; > if (!nvmeq) > continue; > spin_lock_irq(nvmeq->q_lock); > > to replace with, > > struct nvme_queue *nvmeq = rcu_dereference(dev->queues[i]); > if (!nvmeq) > continue; > spin_lock_irq(nvmeq->q_lock); > > This will prevent fetching content of q_lock before checking for NULL > condition. Classic usage or RCU.
What the heck are you talking about? The value of dev->queue_count won't even let the thread iterate an nvmeq before q_lock is initialized.
We used to rcu protect queue access, but that was to make nvme's make_request_fn safe to surprise removal, not for the polling thread.
| |