diff options
author | Matias Bjørling <m@bjorling.me> | 2018-01-05 08:16:02 -0500 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2018-01-05 10:50:12 -0500 |
commit | bb27aa9ecd1f72e68b0fa2dffeb45bee3b1cb5ca (patch) | |
tree | b05c8dc0e9b37ebfee9d06e54e5e315ac3dd067c | |
parent | 98281a90acc04d8a10407dabd2e397e4312b80c0 (diff) |
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>
-rw-r--r-- | drivers/lightnvm/core.c | 67 | ||||
-rw-r--r-- | drivers/nvme/host/lightnvm.c | 14 | ||||
-rw-r--r-- | include/linux/lightnvm.h | 6 |
3 files changed, 0 insertions, 87 deletions
diff --git a/drivers/lightnvm/core.c b/drivers/lightnvm/core.c index 390d5efd6287..52059dd0ed18 100644 --- a/drivers/lightnvm/core.c +++ b/drivers/lightnvm/core.c | |||
@@ -751,53 +751,6 @@ int nvm_get_tgt_bb_tbl(struct nvm_tgt_dev *tgt_dev, struct ppa_addr ppa, | |||
751 | } | 751 | } |
752 | EXPORT_SYMBOL(nvm_get_tgt_bb_tbl); | 752 | EXPORT_SYMBOL(nvm_get_tgt_bb_tbl); |
753 | 753 | ||
754 | static int nvm_init_slc_tbl(struct nvm_dev *dev, struct nvm_id_group *grp) | ||
755 | { | ||
756 | struct nvm_geo *geo = &dev->geo; | ||
757 | int i; | ||
758 | |||
759 | dev->lps_per_blk = geo->pgs_per_blk; | ||
760 | dev->lptbl = kcalloc(dev->lps_per_blk, sizeof(int), GFP_KERNEL); | ||
761 | if (!dev->lptbl) | ||
762 | return -ENOMEM; | ||
763 | |||
764 | /* Just a linear array */ | ||
765 | for (i = 0; i < dev->lps_per_blk; i++) | ||
766 | dev->lptbl[i] = i; | ||
767 | |||
768 | return 0; | ||
769 | } | ||
770 | |||
771 | static int nvm_init_mlc_tbl(struct nvm_dev *dev, struct nvm_id_group *grp) | ||
772 | { | ||
773 | int i, p; | ||
774 | struct nvm_id_lp_mlc *mlc = &grp->lptbl.mlc; | ||
775 | |||
776 | if (!mlc->num_pairs) | ||
777 | return 0; | ||
778 | |||
779 | dev->lps_per_blk = mlc->num_pairs; | ||
780 | dev->lptbl = kcalloc(dev->lps_per_blk, sizeof(int), GFP_KERNEL); | ||
781 | if (!dev->lptbl) | ||
782 | return -ENOMEM; | ||
783 | |||
784 | /* The lower page table encoding consists of a list of bytes, where each | ||
785 | * has a lower and an upper half. The first half byte maintains the | ||
786 | * increment value and every value after is an offset added to the | ||
787 | * previous incrementation value | ||
788 | */ | ||
789 | dev->lptbl[0] = mlc->pairs[0] & 0xF; | ||
790 | for (i = 1; i < dev->lps_per_blk; i++) { | ||
791 | p = mlc->pairs[i >> 1]; | ||
792 | if (i & 0x1) /* upper */ | ||
793 | dev->lptbl[i] = dev->lptbl[i - 1] + ((p & 0xF0) >> 4); | ||
794 | else /* lower */ | ||
795 | dev->lptbl[i] = dev->lptbl[i - 1] + (p & 0xF); | ||
796 | } | ||
797 | |||
798 | return 0; | ||
799 | } | ||
800 | |||
801 | static int nvm_core_init(struct nvm_dev *dev) | 754 | static int nvm_core_init(struct nvm_dev *dev) |
802 | { | 755 | { |
803 | struct nvm_id *id = &dev->identity; | 756 | struct nvm_id *id = &dev->identity; |
@@ -846,25 +799,6 @@ static int nvm_core_init(struct nvm_dev *dev) | |||
846 | if (!dev->lun_map) | 799 | if (!dev->lun_map) |
847 | return -ENOMEM; | 800 | return -ENOMEM; |
848 | 801 | ||
849 | switch (grp->fmtype) { | ||
850 | case NVM_ID_FMTYPE_SLC: | ||
851 | if (nvm_init_slc_tbl(dev, grp)) { | ||
852 | ret = -ENOMEM; | ||
853 | goto err_fmtype; | ||
854 | } | ||
855 | break; | ||
856 | case NVM_ID_FMTYPE_MLC: | ||
857 | if (nvm_init_mlc_tbl(dev, grp)) { | ||
858 | ret = -ENOMEM; | ||
859 | goto err_fmtype; | ||
860 | } | ||
861 | break; | ||
862 | default: | ||
863 | pr_err("nvm: flash type not supported\n"); | ||
864 | ret = -EINVAL; | ||
865 | goto err_fmtype; | ||
866 | } | ||
867 | |||
868 | INIT_LIST_HEAD(&dev->area_list); | 802 | INIT_LIST_HEAD(&dev->area_list); |
869 | INIT_LIST_HEAD(&dev->targets); | 803 | INIT_LIST_HEAD(&dev->targets); |
870 | mutex_init(&dev->mlock); | 804 | mutex_init(&dev->mlock); |
@@ -890,7 +824,6 @@ static void nvm_free(struct nvm_dev *dev) | |||
890 | dev->ops->destroy_dma_pool(dev->dma_pool); | 824 | dev->ops->destroy_dma_pool(dev->dma_pool); |
891 | 825 | ||
892 | nvm_unregister_map(dev); | 826 | nvm_unregister_map(dev); |
893 | kfree(dev->lptbl); | ||
894 | kfree(dev->lun_map); | 827 | kfree(dev->lun_map); |
895 | kfree(dev); | 828 | kfree(dev); |
896 | } | 829 | } |
diff --git a/drivers/nvme/host/lightnvm.c b/drivers/nvme/host/lightnvm.c index 26f7eccc1684..15bf243f6096 100644 --- a/drivers/nvme/host/lightnvm.c +++ b/drivers/nvme/host/lightnvm.c | |||
@@ -246,20 +246,6 @@ static int init_grps(struct nvm_id *nvm_id, struct nvme_nvm_id *nvme_nvm_id) | |||
246 | 246 | ||
247 | dst->cpar = le16_to_cpu(src->cpar); | 247 | dst->cpar = le16_to_cpu(src->cpar); |
248 | 248 | ||
249 | if (dst->fmtype == NVM_ID_FMTYPE_MLC) { | ||
250 | memcpy(dst->lptbl.id, src->lptbl.id, 8); | ||
251 | dst->lptbl.mlc.num_pairs = | ||
252 | le16_to_cpu(src->lptbl.mlc.num_pairs); | ||
253 | |||
254 | if (dst->lptbl.mlc.num_pairs > NVME_NVM_LP_MLC_PAIRS) { | ||
255 | pr_err("nvm: number of MLC pairs not supported\n"); | ||
256 | return -EINVAL; | ||
257 | } | ||
258 | |||
259 | memcpy(dst->lptbl.mlc.pairs, src->lptbl.mlc.pairs, | ||
260 | dst->lptbl.mlc.num_pairs); | ||
261 | } | ||
262 | |||
263 | return 0; | 249 | return 0; |
264 | } | 250 | } |
265 | 251 | ||
diff --git a/include/linux/lightnvm.h b/include/linux/lightnvm.h index 07cdb05a9a87..a5d8e0cbbb46 100644 --- a/include/linux/lightnvm.h +++ b/include/linux/lightnvm.h | |||
@@ -174,8 +174,6 @@ struct nvm_id_group { | |||
174 | u32 mpos; | 174 | u32 mpos; |
175 | u32 mccap; | 175 | u32 mccap; |
176 | u16 cpar; | 176 | u16 cpar; |
177 | |||
178 | struct nvm_id_lp_tbl lptbl; | ||
179 | }; | 177 | }; |
180 | 178 | ||
181 | struct nvm_addr_format { | 179 | struct nvm_addr_format { |
@@ -313,10 +311,6 @@ struct nvm_dev { | |||
313 | /* Device information */ | 311 | /* Device information */ |
314 | struct nvm_geo geo; | 312 | struct nvm_geo geo; |
315 | 313 | ||
316 | /* lower page table */ | ||
317 | int lps_per_blk; | ||
318 | int *lptbl; | ||
319 | |||
320 | unsigned long total_secs; | 314 | unsigned long total_secs; |
321 | 315 | ||
322 | unsigned long *lun_map; | 316 | unsigned long *lun_map; |