Currently we have no mechanism for adding device-specific quirks to the SPDK NVMe driver. We'd certainly consider adding quirks in the same fashion as the Linux kernel driver though, and would welcome patches that improved the applicability of SPDK to a wider range of (potentially out of spec) devices. I'm sure over time the team at Intel working on SPDK will add this, but it is not on our immediate roadmap, so patches from the community would be the best way to get this going.


On Thu, 2016-09-08 at 14:25 +0800, Wang Weber wrote:



In online FW upgrade process, the memblaze Pblaze4 NVMe device requires an extra delay during controller reset process. The following patch email from HGST describes the similar issue in detail.



Subject: [PATCH v3] nvme/quirk: Add a delay before checking for adapter readiness


When disabling the controller, the specification says the register NVME_REG_CC should be written and then driver needs to wait the adapter to be ready, which is checked by reading another register bit (NVME_CSTS_RDY). There's a timeout validation in this checking, so in case this timeout is reached the driver gives up and removes the adapter from the system.


After a firmware activation procedure, the PCI_DEVICE(0x1c58, 0x0003) (HGST adapter) end up being removed if we issue a reset_controller, because driver keeps verifying the NVME_REG_CSTS until the timeout is reached. This patch adds a necessary quirk for this adapter, by introducing a delay before nvme_wait_ready(), so the reset procedure is able to be completed. This quirk is needed because just increasing the timeout is not enough in case of this adapter - the driver must wait before start reading NVME_REG_CSTS register on this specific device.



The standard Linux NVMe driver now has quirk “NVME_QUIRK_DELAY_BEFORE_CHK_RDY” for HGST and memblaze devices. Is there any plan to add this to SPDK?





SPDK mailing list