svn commit: r350077 - head/usr.sbin/bhyve

Chuck Tuffli chuck at FreeBSD.org
Wed Jul 17 03:19:31 UTC 2019


Author: chuck
Date: Wed Jul 17 03:19:30 2019
New Revision: 350077
URL: https://svnweb.freebsd.org/changeset/base/350077

Log:
  bhyve: update the NVMe CQ based on the status
  
  Instead of skipping the NVMe Completion Queue update based on the
  opcode, define a synthetic status value which indicates the completion
  queue entry is invalid. This will also allow deferred completion queue
  updates for other commands.
  
  Also returns the correct status for unrecognized opcodes ("invalid
  opcode").
  
  Reviewed by:	imp, jhb, araujo
  Approved by:	imp (mentor), jhb (maintainer)
  MFC after:	2 weeks
  Differential Revision: https://reviews.freebsd.org/D20945

Modified:
  head/usr.sbin/bhyve/pci_nvme.c

Modified: head/usr.sbin/bhyve/pci_nvme.c
==============================================================================
--- head/usr.sbin/bhyve/pci_nvme.c	Wed Jul 17 02:24:16 2019	(r350076)
+++ head/usr.sbin/bhyve/pci_nvme.c	Wed Jul 17 03:19:30 2019	(r350077)
@@ -99,6 +99,10 @@ static int nvme_debug = 0;
 #define	NVME_PRP2_ITEMS		(PAGE_SIZE/sizeof(uint64_t))
 #define	NVME_MAX_BLOCKIOVS	512
 
+/* This is a synthetic status code to indicate there is no status */
+#define NVME_NO_STATUS		0xffff
+#define NVME_COMPLETION_VALID(c)	((c).status != NVME_NO_STATUS)
+
 /* helpers */
 
 /* Convert a zero-based value into a one-based value */
@@ -1093,14 +1097,16 @@ pci_nvme_handle_admin_cmd(struct pci_nvme_softc* sc, u
 			/* XXX dont care, unhandled for now
 			do_intr |= nvme_opc_async_event_req(sc, cmd, &compl);
 			*/
+			compl.status = NVME_NO_STATUS;
 			break;
 		default:
 			WPRINTF(("0x%x command is not implemented\r\n",
 			    cmd->opc));
+			pci_nvme_status_genc(&compl.status, NVME_SC_INVALID_OPCODE);
+			do_intr |= 1;
 		}
 	
-		/* for now skip async event generation */
-		if (cmd->opc != NVME_OPC_ASYNC_EVENT_REQUEST) {
+		if (NVME_COMPLETION_VALID(compl)) {
 			struct nvme_completion *cp;
 			int phase;
 


More information about the svn-src-all mailing list