Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 5 Sep 2019 23:12:07 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org
Subject:   svn commit: r351909 - stable/12/sys/dev/nvme
Message-ID:  <201909052312.x85NC7Ea032573@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: imp
Date: Thu Sep  5 23:12:06 2019
New Revision: 351909
URL: https://svnweb.freebsd.org/changeset/base/351909

Log:
  MFC r351704:
  
    Add a brief comment explaining why we can return ETIMEDOUT from the call to
    the polled interface. Normally this would have the potential to corrupt stack
    memory because the completion routines would run after we return. In this
    case, however, we're doing a dump so it's safe for reasons explained in the
    comment.

Modified:
  stable/12/sys/dev/nvme/nvme_ns_cmd.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/dev/nvme/nvme_ns_cmd.c
==============================================================================
--- stable/12/sys/dev/nvme/nvme_ns_cmd.c	Thu Sep  5 23:09:50 2019	(r351908)
+++ stable/12/sys/dev/nvme/nvme_ns_cmd.c	Thu Sep  5 23:12:06 2019	(r351909)
@@ -191,6 +191,14 @@ nvme_ns_dump(struct nvme_namespace *ns, void *virt, of
 		nvme_qpair_process_completions(req->qpair);
 	}
 
+	/*
+	 * Normally, when using the polling interface, we can't return a
+	 * timeout error because we don't know when the completion routines
+	 * will be called if the command later completes. However, in this
+	 * case we're running a system dump, so all interrupts are turned
+	 * off, the scheduler isn't running so there's nothing to complete
+	 * the transaction.
+	 */
 	if (status.done == FALSE)
 		return (ETIMEDOUT);
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201909052312.x85NC7Ea032573>