From mboxrd@z Thu Jan 1 00:00:00 1970 From: keith.busch@intel.com (Keith Busch) Date: Fri, 22 May 2015 16:23:30 +0000 (UTC) Subject: [PATCH] NVMe: Avoid interrupt disable during queue init. In-Reply-To: References: <1432253553-17045-1-git-send-email-parav.pandit@avagotech.com> Message-ID: 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.