mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-28 12:25:31 +00:00
lightnvm: remove lower page tables
The lower page table is unused. All page tables reported by 1.2 devices are all reporting a sequential 1:1 page mapping. This is also not used going forward with the 2.0 revision. Signed-off-by: Matias Bjørling <m@bjorling.me> Reviewed-by: Javier González <javier@cnexlabs.com> Signed-off-by: Matias Bjørling <m@bjorling.me> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
98281a90ac
commit
bb27aa9ecd
@ -751,53 +751,6 @@ int nvm_get_tgt_bb_tbl(struct nvm_tgt_dev *tgt_dev, struct ppa_addr ppa,
|
||||
}
|
||||
EXPORT_SYMBOL(nvm_get_tgt_bb_tbl);
|
||||
|
||||
static int nvm_init_slc_tbl(struct nvm_dev *dev, struct nvm_id_group *grp)
|
||||
{
|
||||
struct nvm_geo *geo = &dev->geo;
|
||||
int i;
|
||||
|
||||
dev->lps_per_blk = geo->pgs_per_blk;
|
||||
dev->lptbl = kcalloc(dev->lps_per_blk, sizeof(int), GFP_KERNEL);
|
||||
if (!dev->lptbl)
|
||||
return -ENOMEM;
|
||||
|
||||
/* Just a linear array */
|
||||
for (i = 0; i < dev->lps_per_blk; i++)
|
||||
dev->lptbl[i] = i;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int nvm_init_mlc_tbl(struct nvm_dev *dev, struct nvm_id_group *grp)
|
||||
{
|
||||
int i, p;
|
||||
struct nvm_id_lp_mlc *mlc = &grp->lptbl.mlc;
|
||||
|
||||
if (!mlc->num_pairs)
|
||||
return 0;
|
||||
|
||||
dev->lps_per_blk = mlc->num_pairs;
|
||||
dev->lptbl = kcalloc(dev->lps_per_blk, sizeof(int), GFP_KERNEL);
|
||||
if (!dev->lptbl)
|
||||
return -ENOMEM;
|
||||
|
||||
/* The lower page table encoding consists of a list of bytes, where each
|
||||
* has a lower and an upper half. The first half byte maintains the
|
||||
* increment value and every value after is an offset added to the
|
||||
* previous incrementation value
|
||||
*/
|
||||
dev->lptbl[0] = mlc->pairs[0] & 0xF;
|
||||
for (i = 1; i < dev->lps_per_blk; i++) {
|
||||
p = mlc->pairs[i >> 1];
|
||||
if (i & 0x1) /* upper */
|
||||
dev->lptbl[i] = dev->lptbl[i - 1] + ((p & 0xF0) >> 4);
|
||||
else /* lower */
|
||||
dev->lptbl[i] = dev->lptbl[i - 1] + (p & 0xF);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int nvm_core_init(struct nvm_dev *dev)
|
||||
{
|
||||
struct nvm_id *id = &dev->identity;
|
||||
@ -846,25 +799,6 @@ static int nvm_core_init(struct nvm_dev *dev)
|
||||
if (!dev->lun_map)
|
||||
return -ENOMEM;
|
||||
|
||||
switch (grp->fmtype) {
|
||||
case NVM_ID_FMTYPE_SLC:
|
||||
if (nvm_init_slc_tbl(dev, grp)) {
|
||||
ret = -ENOMEM;
|
||||
goto err_fmtype;
|
||||
}
|
||||
break;
|
||||
case NVM_ID_FMTYPE_MLC:
|
||||
if (nvm_init_mlc_tbl(dev, grp)) {
|
||||
ret = -ENOMEM;
|
||||
goto err_fmtype;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
pr_err("nvm: flash type not supported\n");
|
||||
ret = -EINVAL;
|
||||
goto err_fmtype;
|
||||
}
|
||||
|
||||
INIT_LIST_HEAD(&dev->area_list);
|
||||
INIT_LIST_HEAD(&dev->targets);
|
||||
mutex_init(&dev->mlock);
|
||||
@ -890,7 +824,6 @@ static void nvm_free(struct nvm_dev *dev)
|
||||
dev->ops->destroy_dma_pool(dev->dma_pool);
|
||||
|
||||
nvm_unregister_map(dev);
|
||||
kfree(dev->lptbl);
|
||||
kfree(dev->lun_map);
|
||||
kfree(dev);
|
||||
}
|
||||
|
@ -246,20 +246,6 @@ static int init_grps(struct nvm_id *nvm_id, struct nvme_nvm_id *nvme_nvm_id)
|
||||
|
||||
dst->cpar = le16_to_cpu(src->cpar);
|
||||
|
||||
if (dst->fmtype == NVM_ID_FMTYPE_MLC) {
|
||||
memcpy(dst->lptbl.id, src->lptbl.id, 8);
|
||||
dst->lptbl.mlc.num_pairs =
|
||||
le16_to_cpu(src->lptbl.mlc.num_pairs);
|
||||
|
||||
if (dst->lptbl.mlc.num_pairs > NVME_NVM_LP_MLC_PAIRS) {
|
||||
pr_err("nvm: number of MLC pairs not supported\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
memcpy(dst->lptbl.mlc.pairs, src->lptbl.mlc.pairs,
|
||||
dst->lptbl.mlc.num_pairs);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -174,8 +174,6 @@ struct nvm_id_group {
|
||||
u32 mpos;
|
||||
u32 mccap;
|
||||
u16 cpar;
|
||||
|
||||
struct nvm_id_lp_tbl lptbl;
|
||||
};
|
||||
|
||||
struct nvm_addr_format {
|
||||
@ -313,10 +311,6 @@ struct nvm_dev {
|
||||
/* Device information */
|
||||
struct nvm_geo geo;
|
||||
|
||||
/* lower page table */
|
||||
int lps_per_blk;
|
||||
int *lptbl;
|
||||
|
||||
unsigned long total_secs;
|
||||
|
||||
unsigned long *lun_map;
|
||||
|
Loading…
Reference in New Issue
Block a user