Some checks failed
Build Kernel / Build all affected Kernels (push) Has been cancelled
Build all core packages / Build all core packages for selected target (push) Has been cancelled
Build and Push prebuilt tools container / Build and Push all prebuilt containers (push) Has been cancelled
Build Toolchains / Build Toolchains for each target (push) Has been cancelled
Build host tools / Build host tools for linux and macos based systems (push) Has been cancelled
Coverity scan build / Coverity x86/64 build (push) Has been cancelled
41 lines
1.1 KiB
Diff
41 lines
1.1 KiB
Diff
From f0b4cffe4d1813305f783d208f260747ecc56c50 Mon Sep 17 00:00:00 2001
|
|
From: "Kevin.xie" <kevin.xie@starfivetech.com>
|
|
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 <kevin.xie@starfivetech.com>
|
|
---
|
|
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 <linux/io-64-nonatomic-hi-lo.h>
|
|
#include <linux/sed-opal.h>
|
|
#include <linux/pci-p2pdma.h>
|
|
+#include <linux/delay.h>
|
|
|
|
#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++;
|
|
/*
|