Skip to content

Commit 19bd6fe

Browse files
Matias Bjørlingaxboe
authored andcommitted
lightnvm: reduce number of nvm_id groups to one
The number of configuration groups has been limited to one in current code, even if there is support for up to four. With the introduction of the open-channel SSD 1.3 specification, only a single group is exposed onwards. Reflect this in the nvm_id structure. Signed-off-by: Matias Bjørling <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
1 parent dab8ee9 commit 19bd6fe

File tree

4 files changed

+47
-58
lines changed

4 files changed

+47
-58
lines changed

drivers/block/null_blk.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,6 @@ static int null_lnvm_id(struct nvm_dev *dev, struct nvm_id *id)
460460

461461
id->ver_id = 0x1;
462462
id->vmnt = 0;
463-
id->cgrps = 1;
464463
id->cap = 0x2;
465464
id->dom = 0x1;
466465

@@ -479,7 +478,7 @@ static int null_lnvm_id(struct nvm_dev *dev, struct nvm_id *id)
479478

480479
sector_div(size, bs); /* convert size to pages */
481480
size >>= 8; /* concert size to pgs pr blk */
482-
grp = &id->groups[0];
481+
grp = &id->grp;
483482
grp->mtype = 0;
484483
grp->fmtype = 0;
485484
grp->num_ch = 1;

drivers/lightnvm/core.c

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -884,7 +884,7 @@ static int nvm_init_mlc_tbl(struct nvm_dev *dev, struct nvm_id_group *grp)
884884
static int nvm_core_init(struct nvm_dev *dev)
885885
{
886886
struct nvm_id *id = &dev->identity;
887-
struct nvm_id_group *grp = &id->groups[0];
887+
struct nvm_id_group *grp = &id->grp;
888888
struct nvm_geo *geo = &dev->geo;
889889
int ret;
890890

@@ -988,20 +988,14 @@ static int nvm_init(struct nvm_dev *dev)
988988
goto err;
989989
}
990990

991-
pr_debug("nvm: ver:%x nvm_vendor:%x groups:%u\n",
992-
dev->identity.ver_id, dev->identity.vmnt,
993-
dev->identity.cgrps);
991+
pr_debug("nvm: ver:%x nvm_vendor:%x\n",
992+
dev->identity.ver_id, dev->identity.vmnt);
994993

995994
if (dev->identity.ver_id != 1) {
996995
pr_err("nvm: device not supported by kernel.");
997996
goto err;
998997
}
999998

1000-
if (dev->identity.cgrps != 1) {
1001-
pr_err("nvm: only one group configuration supported.");
1002-
goto err;
1003-
}
1004-
1005999
ret = nvm_core_init(dev);
10061000
if (ret) {
10071001
pr_err("nvm: could not initialize core structures.\n");

drivers/nvme/host/lightnvm.c

Lines changed: 42 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -248,50 +248,48 @@ static int init_grps(struct nvm_id *nvm_id, struct nvme_nvm_id *nvme_nvm_id)
248248
{
249249
struct nvme_nvm_id_group *src;
250250
struct nvm_id_group *dst;
251-
int i, end;
252-
253-
end = min_t(u32, 4, nvm_id->cgrps);
254-
255-
for (i = 0; i < end; i++) {
256-
src = &nvme_nvm_id->groups[i];
257-
dst = &nvm_id->groups[i];
258-
259-
dst->mtype = src->mtype;
260-
dst->fmtype = src->fmtype;
261-
dst->num_ch = src->num_ch;
262-
dst->num_lun = src->num_lun;
263-
dst->num_pln = src->num_pln;
264-
265-
dst->num_pg = le16_to_cpu(src->num_pg);
266-
dst->num_blk = le16_to_cpu(src->num_blk);
267-
dst->fpg_sz = le16_to_cpu(src->fpg_sz);
268-
dst->csecs = le16_to_cpu(src->csecs);
269-
dst->sos = le16_to_cpu(src->sos);
270-
271-
dst->trdt = le32_to_cpu(src->trdt);
272-
dst->trdm = le32_to_cpu(src->trdm);
273-
dst->tprt = le32_to_cpu(src->tprt);
274-
dst->tprm = le32_to_cpu(src->tprm);
275-
dst->tbet = le32_to_cpu(src->tbet);
276-
dst->tbem = le32_to_cpu(src->tbem);
277-
dst->mpos = le32_to_cpu(src->mpos);
278-
dst->mccap = le32_to_cpu(src->mccap);
279-
280-
dst->cpar = le16_to_cpu(src->cpar);
281-
282-
if (dst->fmtype == NVM_ID_FMTYPE_MLC) {
283-
memcpy(dst->lptbl.id, src->lptbl.id, 8);
284-
dst->lptbl.mlc.num_pairs =
285-
le16_to_cpu(src->lptbl.mlc.num_pairs);
286-
287-
if (dst->lptbl.mlc.num_pairs > NVME_NVM_LP_MLC_PAIRS) {
288-
pr_err("nvm: number of MLC pairs not supported\n");
289-
return -EINVAL;
290-
}
291-
292-
memcpy(dst->lptbl.mlc.pairs, src->lptbl.mlc.pairs,
293-
dst->lptbl.mlc.num_pairs);
251+
252+
if (nvme_nvm_id->cgrps != 1)
253+
return -EINVAL;
254+
255+
src = &nvme_nvm_id->groups[0];
256+
dst = &nvm_id->grp;
257+
258+
dst->mtype = src->mtype;
259+
dst->fmtype = src->fmtype;
260+
dst->num_ch = src->num_ch;
261+
dst->num_lun = src->num_lun;
262+
dst->num_pln = src->num_pln;
263+
264+
dst->num_pg = le16_to_cpu(src->num_pg);
265+
dst->num_blk = le16_to_cpu(src->num_blk);
266+
dst->fpg_sz = le16_to_cpu(src->fpg_sz);
267+
dst->csecs = le16_to_cpu(src->csecs);
268+
dst->sos = le16_to_cpu(src->sos);
269+
270+
dst->trdt = le32_to_cpu(src->trdt);
271+
dst->trdm = le32_to_cpu(src->trdm);
272+
dst->tprt = le32_to_cpu(src->tprt);
273+
dst->tprm = le32_to_cpu(src->tprm);
274+
dst->tbet = le32_to_cpu(src->tbet);
275+
dst->tbem = le32_to_cpu(src->tbem);
276+
dst->mpos = le32_to_cpu(src->mpos);
277+
dst->mccap = le32_to_cpu(src->mccap);
278+
279+
dst->cpar = le16_to_cpu(src->cpar);
280+
281+
if (dst->fmtype == NVM_ID_FMTYPE_MLC) {
282+
memcpy(dst->lptbl.id, src->lptbl.id, 8);
283+
dst->lptbl.mlc.num_pairs =
284+
le16_to_cpu(src->lptbl.mlc.num_pairs);
285+
286+
if (dst->lptbl.mlc.num_pairs > NVME_NVM_LP_MLC_PAIRS) {
287+
pr_err("nvm: number of MLC pairs not supported\n");
288+
return -EINVAL;
294289
}
290+
291+
memcpy(dst->lptbl.mlc.pairs, src->lptbl.mlc.pairs,
292+
dst->lptbl.mlc.num_pairs);
295293
}
296294

297295
return 0;
@@ -321,7 +319,6 @@ static int nvme_nvm_identity(struct nvm_dev *nvmdev, struct nvm_id *nvm_id)
321319

322320
nvm_id->ver_id = nvme_nvm_id->ver_id;
323321
nvm_id->vmnt = nvme_nvm_id->vmnt;
324-
nvm_id->cgrps = nvme_nvm_id->cgrps;
325322
nvm_id->cap = le32_to_cpu(nvme_nvm_id->cap);
326323
nvm_id->dom = le32_to_cpu(nvme_nvm_id->dom);
327324
memcpy(&nvm_id->ppaf, &nvme_nvm_id->ppaf,
@@ -622,7 +619,7 @@ static ssize_t nvm_dev_attr_show(struct device *dev,
622619
return 0;
623620

624621
id = &ndev->identity;
625-
grp = &id->groups[0];
622+
grp = &id->grp;
626623
attr = &dattr->attr;
627624

628625
if (strcmp(attr->name, "version") == 0) {

include/linux/lightnvm.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,11 +200,10 @@ struct nvm_addr_format {
200200
struct nvm_id {
201201
u8 ver_id;
202202
u8 vmnt;
203-
u8 cgrps;
204203
u32 cap;
205204
u32 dom;
206205
struct nvm_addr_format ppaf;
207-
struct nvm_id_group groups[4];
206+
struct nvm_id_group grp;
208207
} __packed;
209208

210209
struct nvm_target {

0 commit comments

Comments
 (0)