summaryrefslogtreecommitdiffstats
path: root/drivers/lightnvm
diff options
context:
space:
mode:
authorJavier González <javier@cnexlabs.com>2018-03-29 18:05:15 -0400
committerJens Axboe <axboe@kernel.dk>2018-03-29 19:29:09 -0400
commit694715137482b10d5be83b1dadf9a3cdee2ce1bc (patch)
treef634868afa100e6d06bc4fea2f56867aff88b3a2 /drivers/lightnvm
parenta40afad90b9a253b282183eb9365f1cc14aeff77 (diff)
lightnvm: add support for 2.0 address format
Add support for 2.0 address format. Also, align address bits for 1.2 and 2.0 to be able to operate on channel and luns without requiring a format conversion. Use a generic address format for this purpose. Also, convert the generic operations to the generic format in pblk. Signed-off-by: Javier González <javier@cnexlabs.com> Signed-off-by: Matias Bjørling <mb@lightnvm.io> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers/lightnvm')
-rw-r--r--drivers/lightnvm/core.c20
-rw-r--r--drivers/lightnvm/pblk-core.c10
-rw-r--r--drivers/lightnvm/pblk-map.c4
-rw-r--r--drivers/lightnvm/pblk-sysfs.c4
-rw-r--r--drivers/lightnvm/pblk.h4
5 files changed, 21 insertions, 21 deletions
diff --git a/drivers/lightnvm/core.c b/drivers/lightnvm/core.c
index 94b3b423840b..63d948cc6dec 100644
--- a/drivers/lightnvm/core.c
+++ b/drivers/lightnvm/core.c
@@ -194,8 +194,8 @@ static struct nvm_tgt_dev *nvm_create_tgt_dev(struct nvm_dev *dev,
194 194
195 for (j = 0; j < luns_in_chnl; j++) { 195 for (j = 0; j < luns_in_chnl; j++) {
196 luns[lunid].ppa = 0; 196 luns[lunid].ppa = 0;
197 luns[lunid].g.ch = i; 197 luns[lunid].a.ch = i;
198 luns[lunid++].g.lun = j; 198 luns[lunid++].a.lun = j;
199 199
200 lun_offs[j] = blun; 200 lun_offs[j] = blun;
201 lun_roffs[j + blun] = blun; 201 lun_roffs[j + blun] = blun;
@@ -556,22 +556,22 @@ static void nvm_unregister_map(struct nvm_dev *dev)
556static void nvm_map_to_dev(struct nvm_tgt_dev *tgt_dev, struct ppa_addr *p) 556static void nvm_map_to_dev(struct nvm_tgt_dev *tgt_dev, struct ppa_addr *p)
557{ 557{
558 struct nvm_dev_map *dev_map = tgt_dev->map; 558 struct nvm_dev_map *dev_map = tgt_dev->map;
559 struct nvm_ch_map *ch_map = &dev_map->chnls[p->g.ch]; 559 struct nvm_ch_map *ch_map = &dev_map->chnls[p->a.ch];
560 int lun_off = ch_map->lun_offs[p->g.lun]; 560 int lun_off = ch_map->lun_offs[p->a.lun];
561 561
562 p->g.ch += ch_map->ch_off; 562 p->a.ch += ch_map->ch_off;
563 p->g.lun += lun_off; 563 p->a.lun += lun_off;
564} 564}
565 565
566static void nvm_map_to_tgt(struct nvm_tgt_dev *tgt_dev, struct ppa_addr *p) 566static void nvm_map_to_tgt(struct nvm_tgt_dev *tgt_dev, struct ppa_addr *p)
567{ 567{
568 struct nvm_dev *dev = tgt_dev->parent; 568 struct nvm_dev *dev = tgt_dev->parent;
569 struct nvm_dev_map *dev_rmap = dev->rmap; 569 struct nvm_dev_map *dev_rmap = dev->rmap;
570 struct nvm_ch_map *ch_rmap = &dev_rmap->chnls[p->g.ch]; 570 struct nvm_ch_map *ch_rmap = &dev_rmap->chnls[p->a.ch];
571 int lun_roff = ch_rmap->lun_offs[p->g.lun]; 571 int lun_roff = ch_rmap->lun_offs[p->a.lun];
572 572
573 p->g.ch -= ch_rmap->ch_off; 573 p->a.ch -= ch_rmap->ch_off;
574 p->g.lun -= lun_roff; 574 p->a.lun -= lun_roff;
575} 575}
576 576
577static void nvm_ppa_tgt_to_dev(struct nvm_tgt_dev *tgt_dev, 577static void nvm_ppa_tgt_to_dev(struct nvm_tgt_dev *tgt_dev,
diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c
index 64c87dd4f1cd..c3eb135fce07 100644
--- a/drivers/lightnvm/pblk-core.c
+++ b/drivers/lightnvm/pblk-core.c
@@ -885,7 +885,7 @@ int pblk_line_erase(struct pblk *pblk, struct pblk_line *line)
885 } 885 }
886 886
887 ppa = pblk->luns[bit].bppa; /* set ch and lun */ 887 ppa = pblk->luns[bit].bppa; /* set ch and lun */
888 ppa.g.blk = line->id; 888 ppa.a.blk = line->id;
889 889
890 atomic_dec(&line->left_eblks); 890 atomic_dec(&line->left_eblks);
891 WARN_ON(test_and_set_bit(bit, line->erase_bitmap)); 891 WARN_ON(test_and_set_bit(bit, line->erase_bitmap));
@@ -1683,8 +1683,8 @@ static void __pblk_down_page(struct pblk *pblk, struct ppa_addr *ppa_list,
1683 int i; 1683 int i;
1684 1684
1685 for (i = 1; i < nr_ppas; i++) 1685 for (i = 1; i < nr_ppas; i++)
1686 WARN_ON(ppa_list[0].g.lun != ppa_list[i].g.lun || 1686 WARN_ON(ppa_list[0].a.lun != ppa_list[i].a.lun ||
1687 ppa_list[0].g.ch != ppa_list[i].g.ch); 1687 ppa_list[0].a.ch != ppa_list[i].a.ch);
1688#endif 1688#endif
1689 1689
1690 ret = down_timeout(&rlun->wr_sem, msecs_to_jiffies(30000)); 1690 ret = down_timeout(&rlun->wr_sem, msecs_to_jiffies(30000));
@@ -1728,8 +1728,8 @@ void pblk_up_page(struct pblk *pblk, struct ppa_addr *ppa_list, int nr_ppas)
1728 int i; 1728 int i;
1729 1729
1730 for (i = 1; i < nr_ppas; i++) 1730 for (i = 1; i < nr_ppas; i++)
1731 WARN_ON(ppa_list[0].g.lun != ppa_list[i].g.lun || 1731 WARN_ON(ppa_list[0].a.lun != ppa_list[i].a.lun ||
1732 ppa_list[0].g.ch != ppa_list[i].g.ch); 1732 ppa_list[0].a.ch != ppa_list[i].a.ch);
1733#endif 1733#endif
1734 1734
1735 rlun = &pblk->luns[pos]; 1735 rlun = &pblk->luns[pos];
diff --git a/drivers/lightnvm/pblk-map.c b/drivers/lightnvm/pblk-map.c
index 04e08d76ea5f..20dbaa89c9df 100644
--- a/drivers/lightnvm/pblk-map.c
+++ b/drivers/lightnvm/pblk-map.c
@@ -127,7 +127,7 @@ void pblk_map_erase_rq(struct pblk *pblk, struct nvm_rq *rqd,
127 atomic_dec(&e_line->left_eblks); 127 atomic_dec(&e_line->left_eblks);
128 128
129 *erase_ppa = rqd->ppa_list[i]; 129 *erase_ppa = rqd->ppa_list[i];
130 erase_ppa->g.blk = e_line->id; 130 erase_ppa->a.blk = e_line->id;
131 131
132 spin_unlock(&e_line->lock); 132 spin_unlock(&e_line->lock);
133 133
@@ -168,6 +168,6 @@ retry:
168 set_bit(bit, e_line->erase_bitmap); 168 set_bit(bit, e_line->erase_bitmap);
169 atomic_dec(&e_line->left_eblks); 169 atomic_dec(&e_line->left_eblks);
170 *erase_ppa = pblk->luns[bit].bppa; /* set ch and lun */ 170 *erase_ppa = pblk->luns[bit].bppa; /* set ch and lun */
171 erase_ppa->g.blk = e_line->id; 171 erase_ppa->a.blk = e_line->id;
172 } 172 }
173} 173}
diff --git a/drivers/lightnvm/pblk-sysfs.c b/drivers/lightnvm/pblk-sysfs.c
index 3e9364f60b44..2489ea0edfa0 100644
--- a/drivers/lightnvm/pblk-sysfs.c
+++ b/drivers/lightnvm/pblk-sysfs.c
@@ -39,8 +39,8 @@ static ssize_t pblk_sysfs_luns_show(struct pblk *pblk, char *page)
39 sz += snprintf(page + sz, PAGE_SIZE - sz, 39 sz += snprintf(page + sz, PAGE_SIZE - sz,
40 "pblk: pos:%d, ch:%d, lun:%d - %d\n", 40 "pblk: pos:%d, ch:%d, lun:%d - %d\n",
41 i, 41 i,
42 rlun->bppa.g.ch, 42 rlun->bppa.a.ch,
43 rlun->bppa.g.lun, 43 rlun->bppa.a.lun,
44 active); 44 active);
45 } 45 }
46 46
diff --git a/drivers/lightnvm/pblk.h b/drivers/lightnvm/pblk.h
index dcdad255ccb5..6607c41b23c0 100644
--- a/drivers/lightnvm/pblk.h
+++ b/drivers/lightnvm/pblk.h
@@ -936,12 +936,12 @@ static inline int pblk_pad_distance(struct pblk *pblk)
936 936
937static inline int pblk_ppa_to_line(struct ppa_addr p) 937static inline int pblk_ppa_to_line(struct ppa_addr p)
938{ 938{
939 return p.g.blk; 939 return p.a.blk;
940} 940}
941 941
942static inline int pblk_ppa_to_pos(struct nvm_geo *geo, struct ppa_addr p) 942static inline int pblk_ppa_to_pos(struct nvm_geo *geo, struct ppa_addr p)
943{ 943{
944 return p.g.lun * geo->num_ch + p.g.ch; 944 return p.a.lun * geo->num_ch + p.a.ch;
945} 945}
946 946
947static inline struct ppa_addr addr_to_gen_ppa(struct pblk *pblk, u64 paddr, 947static inline struct ppa_addr addr_to_gen_ppa(struct pblk *pblk, u64 paddr,