Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 1 Feb 2018 19:07:21 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r328703 - in stable/11/sys: cam/nvme dev/nvme
Message-ID:  <201802011907.w11J7L44007895@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Thu Feb  1 19:07:21 2018
New Revision: 328703
URL: https://svnweb.freebsd.org/changeset/base/328703

Log:
  MFC r324644 (by imp):
  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().

Modified:
  stable/11/sys/cam/nvme/nvme_da.c
  stable/11/sys/dev/nvme/nvme.h
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/cam/nvme/nvme_da.c
==============================================================================
--- stable/11/sys/cam/nvme/nvme_da.c	Thu Feb  1 19:06:42 2018	(r328702)
+++ stable/11/sys/cam/nvme/nvme_da.c	Thu Feb  1 19:07:21 2018	(r328703)
@@ -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(&ccb.ccb_h, periph->path, CAM_PRIORITY_NORMAL);
 		ccb.ccb_h.ccb_state = NDA_CCB_DUMP;

Modified: stable/11/sys/dev/nvme/nvme.h
==============================================================================
--- stable/11/sys/dev/nvme/nvme.h	Thu Feb  1 19:06:42 2018	(r328702)
+++ stable/11/sys/dev/nvme/nvme.h	Thu Feb  1 19:07:21 2018	(r328703)
@@ -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?201802011907.w11J7L44007895>