summaryrefslogtreecommitdiff
path: root/usr
diff options
context:
space:
mode:
authorJerry Jelinek <jerry.jelinek@joyent.com>2017-06-28 11:55:26 +0000
committerJerry Jelinek <jerry.jelinek@joyent.com>2017-06-28 11:55:26 +0000
commitdbeef7f762c59b1461e27146a764182be5eab8cb (patch)
tree9f0ef909e6adb3797b4ab9455208ad2b9d0d380e /usr
parent710e454edbf75c28f50414fc34b6f6c5c75d10bd (diff)
parent621738e24ed094c80643e1cd8d545241ae1978b1 (diff)
downloadillumos-joyent-dbeef7f762c59b1461e27146a764182be5eab8cb.tar.gz
[illumos-gate merge]
commit 621738e24ed094c80643e1cd8d545241ae1978b1 8268 NVMe driver needs to ignore namespaces that specify an unused LBA Format commit 0b466603bce1aab6133ee3b3c8fb941d5c83bf16 8427 update nvme theory statement for 7296
Diffstat (limited to 'usr')
-rw-r--r--usr/src/uts/common/io/nvme/nvme.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/usr/src/uts/common/io/nvme/nvme.c b/usr/src/uts/common/io/nvme/nvme.c
index bc9dec3a5a..107a7abbe9 100644
--- a/usr/src/uts/common/io/nvme/nvme.c
+++ b/usr/src/uts/common/io/nvme/nvme.c
@@ -30,15 +30,16 @@
*
* Interrupt Usage:
*
- * The driver will use a FIXED interrupt while configuring the device as the
- * specification requires. Later in the attach process it will switch to MSI-X
- * or MSI if supported. The driver wants to have one interrupt vector per CPU,
- * but it will work correctly if less are available. Interrupts can be shared
- * by queues, the interrupt handler will iterate through the I/O queue array by
- * steps of n_intr_cnt. Usually only the admin queue will share an interrupt
- * with one I/O queue. The interrupt handler will retrieve completed commands
- * from all queues sharing an interrupt vector and will post them to a taskq
- * for completion processing.
+ * The driver will use a single interrupt while configuring the device as the
+ * specification requires, but contrary to the specification it will try to use
+ * a single-message MSI(-X) or FIXED interrupt. Later in the attach process it
+ * will switch to multiple-message MSI(-X) if supported. The driver wants to
+ * have one interrupt vector per CPU, but it will work correctly if less are
+ * available. Interrupts can be shared by queues, the interrupt handler will
+ * iterate through the I/O queue array by steps of n_intr_cnt. Usually only
+ * the admin queue will share an interrupt with one I/O queue. The interrupt
+ * handler will retrieve completed commands from all queues sharing an interrupt
+ * vector and will post them to a taskq for completion processing.
*
*
* Command Processing:
@@ -2179,6 +2180,7 @@ nvme_init_ns(nvme_t *nvme, int nsid)
* We currently don't support namespaces that use either:
* - thin provisioning
* - protection information
+ * - illegal block size (< 512)
*/
if (idns->id_nsfeat.f_thin ||
idns->id_dps.dp_pinfo) {
@@ -2187,6 +2189,10 @@ nvme_init_ns(nvme_t *nvme, int nsid)
"thin = %d, pinfo = %d", nsid,
idns->id_nsfeat.f_thin, idns->id_dps.dp_pinfo);
ns->ns_ignore = B_TRUE;
+ } else if (ns->ns_block_size < 512) {
+ dev_err(nvme->n_dip, CE_WARN,
+ "!ignoring namespace %d, unsupported block size %"PRIu64,
+ nsid, (uint64_t)ns->ns_block_size);
} else {
ns->ns_ignore = B_FALSE;
}