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
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to