]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
lightnvm: remove lower page tables
authorMatias Bjørling <m@bjorling.me>
Fri, 5 Jan 2018 13:16:02 +0000 (14:16 +0100)
committerJens Axboe <axboe@kernel.dk>
Fri, 5 Jan 2018 15:50:12 +0000 (08:50 -0700)
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>
drivers/lightnvm/core.c
drivers/nvme/host/lightnvm.c
include/linux/lightnvm.h

index 390d5efd628782af80822fd291db2b8a31396e9b..52059dd0ed18572425bcf6446d4527a4feb0e4f8 100644 (file)
@@ -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);
 }
index 26f7eccc1684d51973bb3eca7eba7b28137bf572..15bf243f60969f6942d8f9fc108756562edd3f9a 100644 (file)
@@ -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;
 }
 
index 07cdb05a9a87319a0e303a34f5c85f4ce71c7eaf..a5d8e0cbbb4680982fddc555d7e3686abeb14bba 100644 (file)
@@ -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;