Page MenuHomeFreeBSD

D46031.id.diff
No OneTemporary

D46031.id.diff

diff --git a/share/man/man4/nvme.4 b/share/man/man4/nvme.4
--- a/share/man/man4/nvme.4
+++ b/share/man/man4/nvme.4
@@ -239,6 +239,15 @@
See
.Xr ahci 4
for more details.
+.Sh DIAGNOSTICS
+.Bl -diag
+.It "nvme%d: System interrupt issues?"
+The driver found a timed-out transaction had a pending completion record,
+indicating an interrupt had not been delivered.
+The system is either not configuring interrupts properly, or the system drops
+them under load.
+This message will appear at most once per boot per controller.
+.El
.Sh SEE ALSO
.Xr nda 4 ,
.Xr nvd 4 ,
diff --git a/sys/dev/nvme/nvme_private.h b/sys/dev/nvme/nvme_private.h
--- a/sys/dev/nvme/nvme_private.h
+++ b/sys/dev/nvme/nvme_private.h
@@ -303,6 +303,7 @@
bool is_failed;
bool is_dying;
+ bool isr_warned;
STAILQ_HEAD(, nvme_request) fail_req;
/* Host Memory Buffer */
diff --git a/sys/dev/nvme/nvme_qpair.c b/sys/dev/nvme/nvme_qpair.c
--- a/sys/dev/nvme/nvme_qpair.c
+++ b/sys/dev/nvme/nvme_qpair.c
@@ -1145,9 +1145,14 @@
/*
* There's a stale transaction at the start of the queue whose
* deadline has passed. Poll the competions as a last-ditch
- * effort in case an interrupt has been missed.
+ * effort in case an interrupt has been missed. Warn the user if
+ * transactions were found of possible interrupt issues, but
+ * just once per controller.
*/
- _nvme_qpair_process_completions(qpair);
+ if (_nvme_qpair_process_completions(qpair) && !ctrlr->isr_warned) {
+ nvme_printf(ctrlr, "System interrupt issues?\n");
+ ctrlr->isr_warned = true;
+ }
/*
* Now that we've run the ISR, re-rheck to see if there's any

File Metadata

Mime Type
text/plain
Expires
Sat, Mar 7, 7:54 PM (5 h, 51 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29311897
Default Alt Text
D46031.id.diff (1 KB)

Event Timeline