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
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to