aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatias Bjørling <m@bjorling.me>2015-11-02 11:12:27 -0500
committerJens Axboe <axboe@fb.com>2015-11-03 11:53:24 -0500
commitb7ceb7d50048d0dd4830f106f0fb7f5424031598 (patch)
tree63907b30b02b8ca1cb6c6ea108114a696a6ffff2
parentca0640850e43f5f80c6029e2895b119b705f23bd (diff)
lightnvm: refactor phys addrs type to u64
For cases where CONFIG_LBDAF is not set. The struct ppa_addr exceeds its type on 32 bit architectures. ppa_addr requires a 64bit integer to hold the generic ppa format. We therefore refactor it to u64 and replaces the sector_t usages with u64 for physical addresses. Signed-off-by: Matias Bjørling <m@bjorling.me> Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r--drivers/lightnvm/rrpc.c17
-rw-r--r--drivers/lightnvm/rrpc.h6
-rw-r--r--include/linux/lightnvm.h28
3 files changed, 25 insertions, 26 deletions
diff --git a/drivers/lightnvm/rrpc.c b/drivers/lightnvm/rrpc.c
index 22fcd629565d..64a888a5e9b3 100644
--- a/drivers/lightnvm/rrpc.c
+++ b/drivers/lightnvm/rrpc.c
@@ -116,15 +116,14 @@ static int block_is_full(struct rrpc *rrpc, struct rrpc_block *rblk)
116 return (rblk->next_page == rrpc->dev->pgs_per_blk); 116 return (rblk->next_page == rrpc->dev->pgs_per_blk);
117} 117}
118 118
119static sector_t block_to_addr(struct rrpc *rrpc, struct rrpc_block *rblk) 119static u64 block_to_addr(struct rrpc *rrpc, struct rrpc_block *rblk)
120{ 120{
121 struct nvm_block *blk = rblk->parent; 121 struct nvm_block *blk = rblk->parent;
122 122
123 return blk->id * rrpc->dev->pgs_per_blk; 123 return blk->id * rrpc->dev->pgs_per_blk;
124} 124}
125 125
126static struct ppa_addr rrpc_ppa_to_gaddr(struct nvm_dev *dev, 126static struct ppa_addr rrpc_ppa_to_gaddr(struct nvm_dev *dev, u64 addr)
127 sector_t addr)
128{ 127{
129 struct ppa_addr paddr; 128 struct ppa_addr paddr;
130 129
@@ -231,7 +230,7 @@ static int rrpc_move_valid_pages(struct rrpc *rrpc, struct rrpc_block *rblk)
231 struct page *page; 230 struct page *page;
232 int slot; 231 int slot;
233 int nr_pgs_per_blk = rrpc->dev->pgs_per_blk; 232 int nr_pgs_per_blk = rrpc->dev->pgs_per_blk;
234 sector_t phys_addr; 233 u64 phys_addr;
235 DECLARE_COMPLETION_ONSTACK(wait); 234 DECLARE_COMPLETION_ONSTACK(wait);
236 235
237 if (bitmap_full(rblk->invalid_pages, nr_pgs_per_blk)) 236 if (bitmap_full(rblk->invalid_pages, nr_pgs_per_blk))
@@ -464,7 +463,7 @@ static struct rrpc_lun *rrpc_get_lun_rr(struct rrpc *rrpc, int is_gc)
464} 463}
465 464
466static struct rrpc_addr *rrpc_update_map(struct rrpc *rrpc, sector_t laddr, 465static struct rrpc_addr *rrpc_update_map(struct rrpc *rrpc, sector_t laddr,
467 struct rrpc_block *rblk, sector_t paddr) 466 struct rrpc_block *rblk, u64 paddr)
468{ 467{
469 struct rrpc_addr *gp; 468 struct rrpc_addr *gp;
470 struct rrpc_rev_addr *rev; 469 struct rrpc_rev_addr *rev;
@@ -486,9 +485,9 @@ static struct rrpc_addr *rrpc_update_map(struct rrpc *rrpc, sector_t laddr,
486 return gp; 485 return gp;
487} 486}
488 487
489static sector_t rrpc_alloc_addr(struct rrpc *rrpc, struct rrpc_block *rblk) 488static u64 rrpc_alloc_addr(struct rrpc *rrpc, struct rrpc_block *rblk)
490{ 489{
491 sector_t addr = ADDR_EMPTY; 490 u64 addr = ADDR_EMPTY;
492 491
493 spin_lock(&rblk->lock); 492 spin_lock(&rblk->lock);
494 if (block_is_full(rrpc, rblk)) 493 if (block_is_full(rrpc, rblk))
@@ -516,7 +515,7 @@ static struct rrpc_addr *rrpc_map_page(struct rrpc *rrpc, sector_t laddr,
516 struct rrpc_lun *rlun; 515 struct rrpc_lun *rlun;
517 struct rrpc_block *rblk; 516 struct rrpc_block *rblk;
518 struct nvm_lun *lun; 517 struct nvm_lun *lun;
519 sector_t paddr; 518 u64 paddr;
520 519
521 rlun = rrpc_get_lun_rr(rrpc, is_gc); 520 rlun = rrpc_get_lun_rr(rrpc, is_gc);
522 lun = rlun->parent; 521 lun = rlun->parent;
@@ -1144,7 +1143,7 @@ static void rrpc_block_map_update(struct rrpc *rrpc, struct rrpc_block *rblk)
1144 struct nvm_dev *dev = rrpc->dev; 1143 struct nvm_dev *dev = rrpc->dev;
1145 int offset; 1144 int offset;
1146 struct rrpc_addr *laddr; 1145 struct rrpc_addr *laddr;
1147 sector_t paddr, pladdr; 1146 u64 paddr, pladdr;
1148 1147
1149 for (offset = 0; offset < dev->pgs_per_blk; offset++) { 1148 for (offset = 0; offset < dev->pgs_per_blk; offset++) {
1150 paddr = block_to_addr(rrpc, rblk) + offset; 1149 paddr = block_to_addr(rrpc, rblk) + offset;
diff --git a/drivers/lightnvm/rrpc.h b/drivers/lightnvm/rrpc.h
index b5df08d7b8bf..a9696a06c38c 100644
--- a/drivers/lightnvm/rrpc.h
+++ b/drivers/lightnvm/rrpc.h
@@ -86,7 +86,7 @@ struct rrpc {
86 struct nvm_dev *dev; 86 struct nvm_dev *dev;
87 struct gendisk *disk; 87 struct gendisk *disk;
88 88
89 sector_t poffset; /* physical page offset */ 89 u64 poffset; /* physical page offset */
90 int lun_offset; 90 int lun_offset;
91 91
92 int nr_luns; 92 int nr_luns;
@@ -136,13 +136,13 @@ struct rrpc_block_gc {
136 136
137/* Logical to physical mapping */ 137/* Logical to physical mapping */
138struct rrpc_addr { 138struct rrpc_addr {
139 sector_t addr; 139 u64 addr;
140 struct rrpc_block *rblk; 140 struct rrpc_block *rblk;
141}; 141};
142 142
143/* Physical to logical mapping */ 143/* Physical to logical mapping */
144struct rrpc_rev_addr { 144struct rrpc_rev_addr {
145 sector_t addr; 145 u64 addr;
146}; 146};
147 147
148static inline sector_t rrpc_get_laddr(struct bio *bio) 148static inline sector_t rrpc_get_laddr(struct bio *bio)
diff --git a/include/linux/lightnvm.h b/include/linux/lightnvm.h
index 122b176600fa..5ebd70d12f35 100644
--- a/include/linux/lightnvm.h
+++ b/include/linux/lightnvm.h
@@ -134,26 +134,26 @@ struct ppa_addr {
134 union { 134 union {
135 /* Channel-based PPA format in nand 4x2x2x2x8x10 */ 135 /* Channel-based PPA format in nand 4x2x2x2x8x10 */
136 struct { 136 struct {
137 sector_t ch : 4; 137 u64 ch : 4;
138 sector_t sec : 2; /* 4 sectors per page */ 138 u64 sec : 2; /* 4 sectors per page */
139 sector_t pl : 2; /* 4 planes per LUN */ 139 u64 pl : 2; /* 4 planes per LUN */
140 sector_t lun : 2; /* 4 LUNs per channel */ 140 u64 lun : 2; /* 4 LUNs per channel */
141 sector_t pg : 8; /* 256 pages per block */ 141 u64 pg : 8; /* 256 pages per block */
142 sector_t blk : 10;/* 1024 blocks per plane */ 142 u64 blk : 10;/* 1024 blocks per plane */
143 sector_t resved : 36; 143 u64 resved : 36;
144 } chnl; 144 } chnl;
145 145
146 /* Generic structure for all addresses */ 146 /* Generic structure for all addresses */
147 struct { 147 struct {
148 sector_t sec : NVM_SEC_BITS; 148 u64 sec : NVM_SEC_BITS;
149 sector_t pl : NVM_PL_BITS; 149 u64 pl : NVM_PL_BITS;
150 sector_t pg : NVM_PG_BITS; 150 u64 pg : NVM_PG_BITS;
151 sector_t blk : NVM_BLK_BITS; 151 u64 blk : NVM_BLK_BITS;
152 sector_t lun : NVM_LUN_BITS; 152 u64 lun : NVM_LUN_BITS;
153 sector_t ch : NVM_CH_BITS; 153 u64 ch : NVM_CH_BITS;
154 } g; 154 } g;
155 155
156 sector_t ppa; 156 u64 ppa;
157 }; 157 };
158} __packed; 158} __packed;
159 159