From: Wenbo Wang <wenbo.wang@xxxxxxxxxxxx>
[v3] Do request irq in nvme_init_queue() to handle request irq failures
There is one problem with the original patch. Since init queue happens
before request irq, online_queue might be left increased if request irq
fails. This version merges request irq into nvme_init_queue() because:
1. It solves the online_queue counting issue if request irq fails.
2. nvme_init_queue() is always followed by request irq, this change
simplifies code.
This version also solves another possible race condition by moving
adminq free irq before iounmap.
[v2] Remove duplicate init code in nvme_alloc_queue()
During reset process, the nvme_dev->bar (ioremapped) may change,
so nvmeq->q_db shall be also updated by nvme_init_queue().
[v1]
Currently nvmeq irq is enabled before queue init, so a spurious
interrupt triggered nvme_process_cq may access nvmeq->q_db just
before it is updated, this could cause kernel panic.
Signed-off-by: Wenbo Wang <wenbo.wang@xxxxxxxxxxxx>
Reviewed-by: Wenwei Tao <wenwei.tao@xxxxxxxxxxxx>
CC: stable@xxxxxxxxxxxxxxx
---