[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 03/23] hw/nvme: fix lbaf formats initialization
From: |
Klaus Jensen |
Subject: |
[PULL 03/23] hw/nvme: fix lbaf formats initialization |
Date: |
Tue, 29 Jun 2021 20:47:23 +0200 |
From: Gollu Appalanaidu <anaidu.gollu@samsung.com>
Currently LBAF formats are being intialized based on metadata
size if and only if nvme-ns "ms" parameter is non-zero value.
Since FormatNVM command being supported device parameter "ms"
may not be the criteria to initialize the supported LBAFs.
And make LBAF array as read-only.
Signed-off-by: Gollu Appalanaidu <anaidu.gollu@samsung.com>
Reviewed-by: Klaus Jensen <k.jensen@samsung.com>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
hw/nvme/ns.c | 53 +++++++++++++++++++++++-----------------------------
1 file changed, 23 insertions(+), 30 deletions(-)
diff --git a/hw/nvme/ns.c b/hw/nvme/ns.c
index 8066e311d1a2..3fec9c627321 100644
--- a/hw/nvme/ns.c
+++ b/hw/nvme/ns.c
@@ -81,39 +81,32 @@ static int nvme_ns_init(NvmeNamespace *ns, Error **errp)
ds = 31 - clz32(ns->blkconf.logical_block_size);
ms = ns->params.ms;
- if (ns->params.ms) {
- id_ns->mc = NVME_ID_NS_MC_EXTENDED | NVME_ID_NS_MC_SEPARATE;
+ id_ns->mc = NVME_ID_NS_MC_EXTENDED | NVME_ID_NS_MC_SEPARATE;
- if (ns->params.mset) {
- id_ns->flbas |= NVME_ID_NS_FLBAS_EXTENDED;
- }
-
- id_ns->dpc = 0x1f;
- id_ns->dps = ((ns->params.pil & 0x1) << 3) | ns->params.pi;
-
- NvmeLBAF lbaf[16] = {
- [0] = { .ds = 9 },
- [1] = { .ds = 9, .ms = 8 },
- [2] = { .ds = 9, .ms = 16 },
- [3] = { .ds = 9, .ms = 64 },
- [4] = { .ds = 12 },
- [5] = { .ds = 12, .ms = 8 },
- [6] = { .ds = 12, .ms = 16 },
- [7] = { .ds = 12, .ms = 64 },
- };
-
- memcpy(&id_ns->lbaf, &lbaf, sizeof(lbaf));
- id_ns->nlbaf = 7;
- } else {
- NvmeLBAF lbaf[16] = {
- [0] = { .ds = 9 },
- [1] = { .ds = 12 },
- };
-
- memcpy(&id_ns->lbaf, &lbaf, sizeof(lbaf));
- id_ns->nlbaf = 1;
+ if (ms && ns->params.mset) {
+ id_ns->flbas |= NVME_ID_NS_FLBAS_EXTENDED;
}
+ id_ns->dpc = 0x1f;
+ id_ns->dps = ns->params.pi;
+ if (ns->params.pi && ns->params.pil) {
+ id_ns->dps |= NVME_ID_NS_DPS_FIRST_EIGHT;
+ }
+
+ static const NvmeLBAF lbaf[16] = {
+ [0] = { .ds = 9 },
+ [1] = { .ds = 9, .ms = 8 },
+ [2] = { .ds = 9, .ms = 16 },
+ [3] = { .ds = 9, .ms = 64 },
+ [4] = { .ds = 12 },
+ [5] = { .ds = 12, .ms = 8 },
+ [6] = { .ds = 12, .ms = 16 },
+ [7] = { .ds = 12, .ms = 64 },
+ };
+
+ memcpy(&id_ns->lbaf, &lbaf, sizeof(lbaf));
+ id_ns->nlbaf = 7;
+
for (i = 0; i <= id_ns->nlbaf; i++) {
NvmeLBAF *lbaf = &id_ns->lbaf[i];
if (lbaf->ds == ds) {
--
2.32.0
- [PULL 00/23] hw/nvme patches, Klaus Jensen, 2021/06/29
- [PULL 01/23] hw/nvme: fix style, Klaus Jensen, 2021/06/29
- [PULL 02/23] hw/nvme: add identify namespace flbas/mc enums, Klaus Jensen, 2021/06/29
- [PULL 03/23] hw/nvme: fix lbaf formats initialization,
Klaus Jensen <=
- [PULL 05/23] hw/nvme: fix csi field for cns 0x00 and 0x11, Klaus Jensen, 2021/06/29
- [PULL 04/23] hw/nvme: add param to control auto zone transitioning to zone state closed, Klaus Jensen, 2021/06/29
- [PULL 07/23] hw/nvme: default for namespace EUI-64, Klaus Jensen, 2021/06/29
- [PULL 09/23] hw/nvme: add nvme_block_status_all helper, Klaus Jensen, 2021/06/29
- [PULL 08/23] hw/nvme: reimplement flush to allow cancellation, Klaus Jensen, 2021/06/29
- [PULL 11/23] hw/nvme: save reftag when generating pi, Klaus Jensen, 2021/06/29
- [PULL 06/23] hw/nvme: namespace parameter for EUI-64, Klaus Jensen, 2021/06/29
- [PULL 10/23] hw/nvme: reimplement dsm to allow cancellation, Klaus Jensen, 2021/06/29
- [PULL 12/23] hw/nvme: remove assert from nvme_get_zone_by_slba, Klaus Jensen, 2021/06/29
- [PULL 13/23] hw/nvme: use prinfo directly in nvme_check_prinfo and nvme_dif_check, Klaus Jensen, 2021/06/29