Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 15 Oct 2017 23:53:56 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r324644 - in head/sys: cam/nvme dev/nvme
Message-ID:  <201710152353.v9FNruu1088169@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: imp
Date: Sun Oct 15 23:53:55 2017
New Revision: 324644
URL: https://svnweb.freebsd.org/changeset/base/324644

Log:
  Closer examination shows that nvme and CAM both normally zero-fill
  allocations (for req and ccb, which ultimately contain the
  nvme_cmd). As such, we can micro-optimize these routines. Add a
  comment to this effect, and bzero the ccb used to make the requests
  for the nda dump rotuine so it more closely matches a ccb allocated
  with xpt_get_ccb().
  
  Sponsored by: Netflix

Modified:
  head/sys/cam/nvme/nvme_da.c
  head/sys/dev/nvme/nvme.h

Modified: head/sys/cam/nvme/nvme_da.c
==============================================================================
--- head/sys/cam/nvme/nvme_da.c	Sun Oct 15 22:45:25 2017	(r324643)
+++ head/sys/cam/nvme/nvme_da.c	Sun Oct 15 23:53:55 2017	(r324644)
@@ -398,6 +398,8 @@ ndadump(void *arg, void *virtual, vm_offset_t physical
 		return (ENXIO);
 	}
 
+	/* xpt_get_ccb returns a zero'd allocation for the ccb, mimic that here */
+	memset(&nvmeio, 0, sizeof(nvmeio));
 	if (length > 0) {
 		xpt_setup_ccb(&nvmeio.ccb_h, periph->path, CAM_PRIORITY_NORMAL);
 		nvmeio.ccb_h.ccb_state = NDA_CCB_DUMP;

Modified: head/sys/dev/nvme/nvme.h
==============================================================================
--- head/sys/dev/nvme/nvme.h	Sun Oct 15 22:45:25 2017	(r324643)
+++ head/sys/dev/nvme/nvme.h	Sun Oct 15 23:53:55 2017	(r324644)
@@ -1068,7 +1068,12 @@ uint32_t	nvme_ns_get_stripesize(struct nvme_namespace 
 int	nvme_ns_bio_process(struct nvme_namespace *ns, struct bio *bp,
 			    nvme_cb_fn_t cb_fn);
 
-/* Command building helper functions -- shared with CAM */
+/*
+ * Command building helper functions -- shared with CAM
+ * These functions assume allocator zeros out cmd structure
+ * CAM's xpt_get_ccb and the request allocator for nvme both
+ * do zero'd allocations.
+ */
 static inline
 void	nvme_ns_flush_cmd(struct nvme_command *cmd, uint32_t nsid)
 {
@@ -1082,17 +1087,10 @@ void	nvme_ns_rw_cmd(struct nvme_command *cmd, uint32_t
     uint64_t lba, uint32_t count)
 {
 	cmd->opc = rwcmd;
-	cmd->fuse = 0;
-	cmd->rsvd1 = 0;
 	cmd->nsid = nsid;
-	cmd->rsvd2 = 0;
-	cmd->rsvd3 = 0;
 	cmd->cdw10 = lba & 0xffffffffu;
 	cmd->cdw11 = lba >> 32;
 	cmd->cdw12 = count-1;
-	cmd->cdw13 = 0;
-	cmd->cdw14 = 0;
-	cmd->cdw15 = 0;
 }
 
 static inline



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