mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge tag 'pull-nvme-20250811' of https://gitlab.com/birkelund/qemu into staging
nvme queue # -----BEGIN PGP SIGNATURE----- # # iQEzBAABCgAdFiEEUigzqnXi3OaiR2bATeGvMW1PDekFAmiZmYQACgkQTeGvMW1P # DenI0wf9GPov0a82A2F23UTU+R8NC/NASBovEfPRTz7/J9fGL844ID3G6uT4emFP # wAilGmMbNuPHKAtII4holCximP/7yosVZJIIdjLsRBBP9AZqpMHkr27VBny9rklZ # X7TW6zI8INIjdqvRlIBevH5t5By/qLiaDc6GzRWJ3PoeXE6SKACDi0lNBsn75xah # IbcHi72c96CwYJCEtOHXBs+zECo1yGDhK0OPvs/s7OykuRcOumF21IzuY958bVs/ # 7dJZkTL+oarZHIvKiUrErKK3gWfSrLeaWrR6sW1QNuOhzEeNHk47w86p+CEQ7CrU # w0ioEaZ9awXk7wnZeY//CpUKFbsmwQ== # =Qfvu # -----END PGP SIGNATURE----- # gpg: Signature made Mon 11 Aug 2025 03:19:32 EDT # gpg: using RSA key 522833AA75E2DCE6A24766C04DE1AF316D4F0DE9 # gpg: Good signature from "Klaus Jensen <its@irrelevant.dk>" [unknown] # gpg: aka "Klaus Jensen <k.jensen@samsung.com>" [unknown] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: DDCA 4D9C 9EF9 31CC 3468 4272 63D5 6FC5 E55D A838 # Subkey fingerprint: 5228 33AA 75E2 DCE6 A247 66C0 4DE1 AF31 6D4F 0DE9 * tag 'pull-nvme-20250811' of https://gitlab.com/birkelund/qemu: hw/nvme: cap MDTS value for internal limitation hw/nvme: revert CMIC behavior hw/nvme: fix namespace attachment Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
+28
-15
@@ -6816,7 +6816,7 @@ static uint16_t nvme_ns_attachment(NvmeCtrl *n, NvmeRequest *req)
|
||||
|
||||
switch (sel) {
|
||||
case NVME_NS_ATTACHMENT_ATTACH:
|
||||
if (nvme_ns(n, nsid)) {
|
||||
if (nvme_ns(ctrl, nsid)) {
|
||||
return NVME_NS_ALREADY_ATTACHED | NVME_DNR;
|
||||
}
|
||||
|
||||
@@ -6824,7 +6824,7 @@ static uint16_t nvme_ns_attachment(NvmeCtrl *n, NvmeRequest *req)
|
||||
return NVME_NS_PRIVATE | NVME_DNR;
|
||||
}
|
||||
|
||||
if (!nvme_csi_supported(n, ns->csi)) {
|
||||
if (!nvme_csi_supported(ctrl, ns->csi)) {
|
||||
return NVME_IOCS_NOT_SUPPORTED | NVME_DNR;
|
||||
}
|
||||
|
||||
@@ -6834,6 +6834,10 @@ static uint16_t nvme_ns_attachment(NvmeCtrl *n, NvmeRequest *req)
|
||||
break;
|
||||
|
||||
case NVME_NS_ATTACHMENT_DETACH:
|
||||
if (!nvme_ns(ctrl, nsid)) {
|
||||
return NVME_NS_NOT_ATTACHED | NVME_DNR;
|
||||
}
|
||||
|
||||
nvme_detach_ns(ctrl, ns);
|
||||
nvme_update_dsm_limits(ctrl, NULL);
|
||||
|
||||
@@ -8335,6 +8339,11 @@ static bool nvme_check_params(NvmeCtrl *n, Error **errp)
|
||||
host_memory_backend_set_mapped(n->pmr.dev, true);
|
||||
}
|
||||
|
||||
if (!n->params.mdts || ((1 << n->params.mdts) + 1) > IOV_MAX) {
|
||||
error_setg(errp, "mdts exceeds IOV_MAX");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (n->params.zasl > n->params.mdts) {
|
||||
error_setg(errp, "zoned.zasl (Zone Append Size Limit) must be less "
|
||||
"than or equal to mdts (Maximum Data Transfer Size)");
|
||||
@@ -8776,7 +8785,7 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *pci_dev)
|
||||
uint8_t *pci_conf = pci_dev->config;
|
||||
uint64_t cap = ldq_le_p(&n->bar.cap);
|
||||
NvmeSecCtrlEntry *sctrl = nvme_sctrl(n);
|
||||
uint32_t ctratt;
|
||||
uint32_t ctratt = le32_to_cpu(id->ctratt);
|
||||
uint16_t oacs;
|
||||
|
||||
memcpy(n->cse.acs, nvme_cse_acs_default, sizeof(n->cse.acs));
|
||||
@@ -8794,10 +8803,11 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *pci_dev)
|
||||
|
||||
id->oaes = cpu_to_le32(NVME_OAES_NS_ATTR);
|
||||
|
||||
ctratt = NVME_CTRATT_ELBAS;
|
||||
ctratt |= NVME_CTRATT_ELBAS;
|
||||
if (n->params.ctratt.mem) {
|
||||
ctratt |= NVME_CTRATT_MEM;
|
||||
}
|
||||
id->ctratt = cpu_to_le32(ctratt);
|
||||
|
||||
id->rab = 6;
|
||||
|
||||
@@ -8880,17 +8890,6 @@ static void nvme_init_ctrl(NvmeCtrl *n, PCIDevice *pci_dev)
|
||||
id->psd[0].enlat = cpu_to_le32(0x10);
|
||||
id->psd[0].exlat = cpu_to_le32(0x4);
|
||||
|
||||
id->cmic |= NVME_CMIC_MULTI_CTRL;
|
||||
ctratt |= NVME_CTRATT_ENDGRPS;
|
||||
|
||||
id->endgidmax = cpu_to_le16(0x1);
|
||||
|
||||
if (n->subsys->endgrp.fdp.enabled) {
|
||||
ctratt |= NVME_CTRATT_FDPS;
|
||||
}
|
||||
|
||||
id->ctratt = cpu_to_le32(ctratt);
|
||||
|
||||
NVME_CAP_SET_MQES(cap, n->params.mqes);
|
||||
NVME_CAP_SET_CQR(cap, 1);
|
||||
NVME_CAP_SET_TO(cap, 0xf);
|
||||
@@ -8923,6 +8922,20 @@ static int nvme_init_subsys(NvmeCtrl *n, Error **errp)
|
||||
}
|
||||
|
||||
n->subsys = NVME_SUBSYS(dev);
|
||||
} else {
|
||||
NvmeIdCtrl *id = &n->id_ctrl;
|
||||
uint32_t ctratt = le32_to_cpu(id->ctratt);
|
||||
|
||||
id->cmic |= NVME_CMIC_MULTI_CTRL;
|
||||
ctratt |= NVME_CTRATT_ENDGRPS;
|
||||
|
||||
id->endgidmax = cpu_to_le16(0x1);
|
||||
|
||||
if (n->subsys->endgrp.fdp.enabled) {
|
||||
ctratt |= NVME_CTRATT_FDPS;
|
||||
}
|
||||
|
||||
id->ctratt = cpu_to_le32(ctratt);
|
||||
}
|
||||
|
||||
cntlid = nvme_subsys_register_ctrl(n, errp);
|
||||
|
||||
Reference in New Issue
Block a user