Messages in this thread | | | Date | Fri, 22 May 2015 16:23:30 +0000 (UTC) | From | Keith Busch <> | Subject | Re: [PATCH] NVMe: Avoid interrupt disable during queue init. |
| |
On Fri, 22 May 2015, Parav Pandit wrote: > During normal positive path probe, > (a) device is added to dev_list in nvme_dev_start() > (b) nvme_kthread got created, which will eventually refers to > dev->queues[qid] to check for NULL. > (c) dev_start() worker thread has started probing device and creating > the queue using nvme_alloc_queue > This is is assigning the dev->queue[qid] new pointer. > If this is done out of order, nvme_kthread will pickup uninitialized > q_lock, cq_phase, q_db.
A memory barrier before incrementing the dev->queue_count (and assigning the pointer in the array before that) should address this concern.
> Other thoughts to not create nvme_kthread until all the queues are active.
No good, we want to poll during queue creation to detect controller errors and broken interrupts.
| |