Page MenuHomeFreeBSD

D19676.id55846.diff
No OneTemporary

D19676.id55846.diff

Index: head/usr.sbin/bhyve/pci_nvme.c
===================================================================
--- head/usr.sbin/bhyve/pci_nvme.c
+++ head/usr.sbin/bhyve/pci_nvme.c
@@ -85,6 +85,9 @@
#define NVME_IOSLOTS 8
+/* The NVMe spec defines bits 13:4 in BAR0 as reserved */
+#define NVME_MMIO_SPACE_MIN (1 << 14)
+
#define NVME_QUEUES 16
#define NVME_MAX_QENTRIES 2048
@@ -1847,9 +1850,16 @@
pci_set_cfgdata8(pi, PCIR_PROGIF,
PCIP_STORAGE_NVM_ENTERPRISE_NVMHCI_1_0);
- /* allocate size of nvme registers + doorbell space for all queues */
+ /*
+ * Allocate size of NVMe registers + doorbell space for all queues.
+ *
+ * The specification requires a minimum memory I/O window size of 16K.
+ * The Windows driver will refuse to start a device with a smaller
+ * window.
+ */
pci_membar_sz = sizeof(struct nvme_registers) +
- 2*sizeof(uint32_t)*(sc->max_queues + 1);
+ 2 * sizeof(uint32_t) * (sc->max_queues + 1);
+ pci_membar_sz = MAX(pci_membar_sz, NVME_MMIO_SPACE_MIN);
DPRINTF(("nvme membar size: %u\r\n", pci_membar_sz));

File Metadata

Mime Type
text/plain
Expires
Sat, Apr 25, 1:26 PM (3 h, 35 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
32082918
Default Alt Text
D19676.id55846.diff (1 KB)

Event Timeline