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 unload * 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.