From f0b4cffe4d1813305f783d208f260747ecc56c50 Mon Sep 17 00:00:00 2001 From: "Kevin.xie" Date: Thu, 24 Nov 2022 16:59:12 +0800 Subject: [PATCH 072/116] drivers: nvme: Add precheck and delay for CQE pending status. To workaroud the NVMe I/O timeout problem in bootup S10udev case which caused by the CQE update lantancy. Signed-off-by: Kevin.xie --- drivers/nvme/host/pci.c | 10 ++++++++++ 1 file changed, 10 insertions(+) --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c @@ -28,6 +28,7 @@ #include #include #include +#include #include "trace.h" #include "nvme.h" @@ -1058,6 +1059,15 @@ static inline int nvme_poll_cq(struct nv { int found = 0; + /* + * In some cases, such as udev trigger, cqe status may update + * a little bit later than MSI, which cause an irq handle missing. + * To workaound, here we will prefetch the status first, and wait + * 1us if we get nothing. + */ + if (!nvme_cqe_pending(nvmeq)) + udelay(1); + while (nvme_cqe_pending(nvmeq)) { found++; /*