Module Name:    src
Committed By:   jdolecek
Date:           Sun Sep 18 21:19:39 UTC 2016

Modified Files:
        src/sys/dev/ic: ld_nvme.c nvme.c nvmevar.h
        src/sys/dev/pci: nvme_pci.c

Log Message:
fix several bugs, make nvme(4) MPSAFE by default and also bump default
number of ioq from 128 to 1024; tested with VirtualBox and QEMU

* remove NVME_INTMC/NVME_INTMS writes in hw intr handler as this is not MPSAFE,
  fortunately they don't seem to be necessary; shaves two register writes
* need to use full mutex_enter() in nvme_q_complete(), to avoid small
  race between one handler exiting the loop and another entering
* for MSI, handover the command result processing to softintr; unfortunately
  can't easily do that for INTx interrupts as they require doorbell write
  to deassert
* unlock/relock q->q_cq_mtx before calling ccb_done to avoid potential deadlocks
* make sure to destroy queue mutexes when destroying the queue (LOCKDEBUG)
* make ns ctx pool per-device, so that it's deallocated properly on module
* handle ctx allocation failure in ld_nvme_dobio()
* remove splbio() calls in ld_nvme_dobio() and sync, the paths are exercised
  only for dump/shutdown, and that already disables interrupts
* free the ns ctx in ld_nvme_biodone() before calling lddone() to avoid
  memory starvation, as lddone() can trigger another i/o request
* be more careful with using PR_WAITOK, the paths are called from interrupt
  context and there we can't wait

To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/dev/ic/ld_nvme.c
cvs rdiff -u -r1.8 -r1.9 src/sys/dev/ic/nvme.c
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/ic/nvmevar.h
cvs rdiff -u -r1.13 -r1.14 src/sys/dev/pci/nvme_pci.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Reply via email to