nvme shouldn't use ddi_intr_enable/disable to block interrupts
Apparently these functions are intended to be only used attach and detach time to enable or disable the interrupts in the system. As such they are doing a lot of work under the hood thats just wrong to do for temporarily blocking interrupts.
As it turns out VMware gets very confused when nvme does that and powers off the VM. That doesn't really happen by default right now because of the way the interrupts are used by nvme, but it's a time bomb anyway.
Blocking of interrupts happens only once in the code: at attach time when we re-init a semaphore. As there is no way the semaphore could be used by the time it is re-inited we don't need to disable the interrupts.
Updated by Electric Monk almost 6 years ago
- Status changed from New to Closed
- % Done changed from 0 to 100
commit 6afc9eb26c8915821607cde21b0a32addc165a72 Author: Hans Rosenfeld <firstname.lastname@example.org> Date: 2016-08-10T15:04:01.000Z 7275 nvme shouldn't use ddi_intr_enable/disable to block interrupts Reviewed by: Yuri Pankov <email@example.com> Reviewed by: Dan Fields <firstname.lastname@example.org> Reviewed by: Dan McDonald <email@example.com> Reviewed by: Igor Kozhukhov <firstname.lastname@example.org> Approved by: Richard Lowe <email@example.com>