Page MenuHomeFreeBSD

D20282.id58375.diff
No OneTemporary

D20282.id58375.diff

Index: head/sys/cam/nvme/nvme_xpt.c
===================================================================
--- head/sys/cam/nvme/nvme_xpt.c
+++ head/sys/cam/nvme/nvme_xpt.c
@@ -722,6 +722,8 @@
struct ccb_trans_settings cts;
struct cam_path *path = periph->path;
struct ccb_trans_settings_nvme *nvmex;
+ struct sbuf sb;
+ char buffer[120];
cam_periph_assert(periph, MA_OWNED);
@@ -736,13 +738,18 @@
/* Ask the SIM for its base transfer speed */
xpt_path_inq(&cpi, periph->path);
- printf("%s%d: nvme version %d.%d x%d (max x%d) lanes PCIe Gen%d (max Gen%d) link",
+ sbuf_new(&sb, buffer, sizeof(buffer), SBUF_FIXEDLEN);
+ sbuf_printf(&sb, "%s%d: nvme version %d.%d",
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");
+ NVME_MINOR(nvmex->spec));
+ if (nvmex->valid & CTS_NVME_VALID_LINK)
+ sbuf_printf(&sb, " x%d (max x%d) lanes PCIe Gen%d (max Gen%d) link",
+ nvmex->lanes, nvmex->max_lanes,
+ nvmex->speed, nvmex->max_speed);
+ sbuf_printf(&sb, "\n");
+ sbuf_finish(&sb);
+ sbuf_putbuf(&sb);
}
static void
Index: head/sys/dev/nvme/nvme_sim.c
===================================================================
--- head/sys/dev/nvme/nvme_sim.c
+++ head/sys/dev/nvme/nvme_sim.c
@@ -212,7 +212,7 @@
struct ccb_trans_settings_nvme *nvmep;
struct ccb_trans_settings_nvme *nvmex;
device_t dev;
- uint32_t status, caps;
+ uint32_t status, caps, flags;
dev = ctrlr->dev;
cts = &ccb->cts;
@@ -221,12 +221,16 @@
status = pcie_read_config(dev, PCIER_LINK_STA, 2);
caps = pcie_read_config(dev, PCIER_LINK_CAP, 2);
- nvmex->valid = CTS_NVME_VALID_SPEC | CTS_NVME_VALID_LINK;
+ flags = pcie_read_config(dev, PCIER_FLAGS, 2);
nvmex->spec = nvme_mmio_read_4(ctrlr, vs);
- nvmex->speed = status & PCIEM_LINK_STA_SPEED;
- nvmex->lanes = (status & PCIEM_LINK_STA_WIDTH) >> 4;
- nvmex->max_speed = caps & PCIEM_LINK_CAP_MAX_SPEED;
- nvmex->max_lanes = (caps & PCIEM_LINK_CAP_MAX_WIDTH) >> 4;
+ nvmex->valid = CTS_NVME_VALID_SPEC;
+ if ((flags & PCIEM_FLAGS_TYPE) == PCIEM_TYPE_ENDPOINT) {
+ nvmex->valid |= CTS_NVME_VALID_LINK;
+ nvmex->speed = status & PCIEM_LINK_STA_SPEED;
+ nvmex->lanes = (status & PCIEM_LINK_STA_WIDTH) >> 4;
+ nvmex->max_speed = caps & PCIEM_LINK_CAP_MAX_SPEED;
+ nvmex->max_lanes = (caps & PCIEM_LINK_CAP_MAX_WIDTH) >> 4;
+ }
/* XXX these should be something else maybe ? */
nvmep->valid = 1;

File Metadata

Mime Type
text/plain
Expires
Fri, Jan 30, 6:59 PM (16 h, 34 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28103603
Default Alt Text
D20282.id58375.diff (2 KB)

Event Timeline