Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 14 Nov 2017 12:41:02 -0800
From:      Ravi Pokala <rpokala@mac.com>
To:        Warner Losh <imp@bsdimp.com>
Cc:        Warner Losh <imp@freebsd.org>, src-committers <src-committers@freebsd.org>, "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>, "svn-src-head@freebsd.org" <svn-src-head@freebsd.org>
Subject:   Re: svn commit: r325796 - head/sys/cam/nvme
Message-ID:  <9AAC3E2D-851F-4382-A803-3B4C4C6D12C9@mac.com>
In-Reply-To: <CANCZdfp1LbpYKg%2Bbia1nD-R_=rk5MR%2BoHzNkjE_V6vAs5Zo34g@mail.gmail.com>
References:  <201711140505.vAE55Qaw042726@repo.freebsd.org> <50ACB3CA-9F18-4033-8D0F-F02363BA5B37@mac.com> <CANCZdfp1LbpYKg%2Bbia1nD-R_=rk5MR%2BoHzNkjE_V6vAs5Zo34g@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Well that's wonderfully ambiguous... :-p

Okay, thanks for clearing that up.

-Ravi (rpokala@)

-----Original Message-----
From: <wlosh@bsdimp.com> on behalf of Warner Losh <imp@bsdimp.com>
Date: 2017-11-14, Tuesday at 12:38
To: Ravi Pokala <rpokala@mac.com>
Cc: Warner Losh <imp@freebsd.org>, src-committers <src-committers@freebsd.org>, "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>, "svn-src-head@freebsd.org" <svn-src-head@freebsd.org>
Subject: Re: svn commit: r325796 - head/sys/cam/nvme



On Mon, Nov 13, 2017 at 10:35 PM, Ravi Pokala <rpokala@mac.com> wrote:

In r325794, you set speed/max_speed to a KBps value; here, you're reporting those values as PCI Generation. That's... not right.



Two different CCBs. The PATH_INQ one returns a general KB/s number. The GET_TRANSPORT one returns the raw numbers.

Warner

 

-Ravi (rpokala@)

-----Original Message-----
From: <owner-src-committers@freebsd.org> on behalf of Warner Losh <imp@FreeBSD.org>
Date: 2017-11-13, Monday at 21:05
To: <src-committers@freebsd.org>, <svn-src-all@freebsd.org>, <svn-src-head@freebsd.org>
Subject: svn commit: r325796 - head/sys/cam/nvme

Author: imp
Date: Tue Nov 14 05:05:26 2017
New Revision: 325796
URL: https://svnweb.freebsd.org/changeset/base/325796

Log:
  Properly decode NVMe state of the drive and print out the information
  in the attach to more closely match what SCSI and ATA attached
  storage provides.

  Sponsored by: Netflix

Modified:
  head/sys/cam/nvme/nvme_all.c
  head/sys/cam/nvme/nvme_all.h
  head/sys/cam/nvme/nvme_xpt.c

Modified: head/sys/cam/nvme/nvme_all.c
==============================================================================
--- head/sys/cam/nvme/nvme_all.c        Tue Nov 14 05:05:21 2017        (r325795)
+++ head/sys/cam/nvme/nvme_all.c        Tue Nov 14 05:05:26 2017        (r325796)
@@ -87,9 +87,16 @@ nvme_identify_match(caddr_t identbuffer, caddr_t table

 void
 nvme_print_ident(const struct nvme_controller_data *cdata,
-    const struct nvme_namespace_data *data)
+    const struct nvme_namespace_data *data, struct sbuf *sb)
 {
-       printf("I'm a pretty NVME drive\n");
+
+       sbuf_printf(sb, "<");
+       cam_strvis_sbuf(sb, cdata->mn, sizeof(cdata->mn), 0);
+       sbuf_printf(sb, " ");
+       cam_strvis_sbuf(sb, cdata->fr, sizeof(cdata->fr), 0);
+       sbuf_printf(sb, " ");
+       cam_strvis_sbuf(sb, cdata->sn, sizeof(cdata->sn), 0);
+       sbuf_printf(sb, ">\n");
 }

 /* XXX need to do nvme admin opcodes too, but those aren't used yet by nda */

Modified: head/sys/cam/nvme/nvme_all.h
==============================================================================
--- head/sys/cam/nvme/nvme_all.h        Tue Nov 14 05:05:21 2017        (r325795)
+++ head/sys/cam/nvme/nvme_all.h        Tue Nov 14 05:05:26 2017        (r325796)
@@ -39,7 +39,8 @@ void  nvme_ns_cmd(struct ccb_nvmeio *nvmeio, uint8_t cm

 int    nvme_identify_match(caddr_t identbuffer, caddr_t table_entry);

-void   nvme_print_ident(const struct nvme_controller_data *, const struct nvme_namespace_data *);
+struct sbuf;
+void   nvme_print_ident(const struct nvme_controller_data *, const struct nvme_namespace_data *, struct sbuf *);
 const char *nvme_op_string(const struct nvme_command *);
 const char *nvme_cmd_string(const struct nvme_command *, char *, size_t);
 const void *nvme_get_identify_cntrl(struct cam_periph *);

Modified: head/sys/cam/nvme/nvme_xpt.c
==============================================================================
--- head/sys/cam/nvme/nvme_xpt.c        Tue Nov 14 05:05:21 2017        (r325795)
+++ head/sys/cam/nvme/nvme_xpt.c        Tue Nov 14 05:05:26 2017        (r325796)
@@ -619,35 +619,49 @@ nvme_announce_periph(struct cam_periph *periph)
        struct  ccb_pathinq cpi;
        struct  ccb_trans_settings cts;
        struct  cam_path *path = periph->path;
+       struct ccb_trans_settings_nvme  *nvmex;

        cam_periph_assert(periph, MA_OWNED);

+       /* Ask the SIM for connection details */
        xpt_setup_ccb(&cts.ccb_h, path, CAM_PRIORITY_NORMAL);
        cts.ccb_h.func_code = XPT_GET_TRAN_SETTINGS;
        cts.type = CTS_TYPE_CURRENT_SETTINGS;
        xpt_action((union ccb*)&cts);
        if ((cts.ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP)
                return;
+       nvmex = &cts.xport_specific.nvme;
+
        /* Ask the SIM for its base transfer speed */
        xpt_setup_ccb(&cpi.ccb_h, path, CAM_PRIORITY_NORMAL);
        cpi.ccb_h.func_code = XPT_PATH_INQ;
        xpt_action((union ccb *)&cpi);
-       /* XXX NVME STUFF HERE */
+       printf("%s%d: nvme version %d.%d x%d (max x%d) lanes PCIe Gen%d (max Gen%d) link",
+           periph->periph_name, periph->unit_number,
+           NVME_MAJOR(nvmex->spec),
+           NVME_MINOR(nvmex->spec),
+           nvmex->lanes, nvmex->max_lanes,
+           nvmex->speed, nvmex->max_speed);
        printf("\n");
 }

 static void
 nvme_proto_announce(struct cam_ed *device)
 {
+       struct sbuf     sb;
+       char            buffer[120];

-       nvme_print_ident(device->nvme_cdata, device->nvme_data);
+       sbuf_new(&sb, buffer, sizeof(buffer), SBUF_FIXEDLEN);
+       nvme_print_ident(device->nvme_cdata, device->nvme_data, &sb);
+       sbuf_finish(&sb);
+       sbuf_putbuf(&sb);
 }

 static void
 nvme_proto_denounce(struct cam_ed *device)
 {

-       nvme_print_ident(device->nvme_cdata, device->nvme_data);
+       nvme_proto_announce(device);
 }

 static void


















Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?9AAC3E2D-851F-4382-A803-3B4C4C6D12C9>