hw/nvme: fix lbaf formats initialization
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>
This commit is contained in:
parent
18de1526ba
commit
421a309271
53
hw/nvme/ns.c
53
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) {
|
||||
|
Loading…
Reference in New Issue
Block a user