From owner-svn-src-head@freebsd.org Tue Nov 14 20:41:12 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 608DADDD44E; Tue, 14 Nov 2017 20:41:12 +0000 (UTC) (envelope-from rpokala@mac.com) Received: from mr11p00im-asmtp003.me.com (mr11p00im-asmtp003.me.com [17.110.69.254]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 42E0A6E9BD; Tue, 14 Nov 2017 20:41:12 +0000 (UTC) (envelope-from rpokala@mac.com) Received: from process-dkim-sign-daemon.mr11p00im-asmtp003.me.com by mr11p00im-asmtp003.me.com (Oracle Communications Messaging Server 8.0.1.2.20170607 64bit (built Jun 7 2017)) id <0OZF00F00CAH0X00@mr11p00im-asmtp003.me.com>; Tue, 14 Nov 2017 20:41:06 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mac.com; s=04042017; t=1510692066; bh=DC/jhoer2z5mUExk1CziC44WyLWkVE27m5uSbssYXk8=; h=Date:Subject:From:To:Message-id:MIME-version:Content-type; b=fF3qxRvQOuyHYCK9LyxscAjUX4gccoafBWLk6r7K/SnxILhi++leJfc4Q6EuIqqik G40jOgMdkSbvcULRsBIrfJbD6EZJ8JldTyZWqmR+d+Tmpu+kCGeIGUfYiVaeagJf95 bmBPWcHdQ5ZK9lco8ghzv+v5mvWajcEcKAv5oMKiBywuWZ50nfwJ5mcBS7Y53Osh5x jrTpcr2Wz9JDdUKG90OhPL/pyvpTn4SSnb9XM7aYvpI32awgshusgJG5XLEOd3AyTn vUadvCyBoZBkQCMORsXgff8EBme1ogKjazmqHBcacbUdXgDu7c69lXyhSzesmluNIS A1GqtsZgdDiXA== Received: from icloud.com ([127.0.0.1]) by mr11p00im-asmtp003.me.com (Oracle Communications Messaging Server 8.0.1.2.20170607 64bit (built Jun 7 2017)) with ESMTPSA id <0OZF0073DDGFC130@mr11p00im-asmtp003.me.com>; Tue, 14 Nov 2017 20:41:04 +0000 (GMT) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-11-14_10:,, signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 clxscore=1015 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000 definitions=main-1711140274 User-Agent: Microsoft-MacOutlook/f.27.0.171010 Date: Tue, 14 Nov 2017 12:41:02 -0800 Subject: Re: svn commit: r325796 - head/sys/cam/nvme From: Ravi Pokala To: Warner Losh Cc: Warner Losh , src-committers , "svn-src-all@freebsd.org" , "svn-src-head@freebsd.org" Message-id: <9AAC3E2D-851F-4382-A803-3B4C4C6D12C9@mac.com> Thread-topic: svn commit: r325796 - head/sys/cam/nvme References: <201711140505.vAE55Qaw042726@repo.freebsd.org> <50ACB3CA-9F18-4033-8D0F-F02363BA5B37@mac.com> In-reply-to: MIME-version: 1.0 Content-type: text/plain; charset=UTF-8 Content-transfer-encoding: 7bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Nov 2017 20:41:12 -0000 Well that's wonderfully ambiguous... :-p Okay, thanks for clearing that up. -Ravi (rpokala@) -----Original Message----- From: on behalf of Warner Losh Date: 2017-11-14, Tuesday at 12:38 To: Ravi Pokala Cc: Warner Losh , src-committers , "svn-src-all@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 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: on behalf of Warner Losh Date: 2017-11-13, Monday at 21:05 To: , , 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