diff options
author | Matias Bjørling <m@bjorling.me> | 2015-11-02 17:12:27 +0100 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2015-11-03 09:53:24 -0700 |
commit | b7ceb7d50048d0dd4830f106f0fb7f5424031598 (patch) | |
tree | 63907b30b02b8ca1cb6c6ea108114a696a6ffff2 | |
parent | ca0640850e43f5f80c6029e2895b119b705f23bd (diff) | |
download | linux-b7ceb7d50048d0dd4830f106f0fb7f5424031598.tar.bz2 |
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.c | 17 | ||||
-rw-r--r-- | drivers/lightnvm/rrpc.h | 6 | ||||
-rw-r--r-- | include/linux/lightnvm.h | 28 |
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) return (rblk->next_page == rrpc->dev->pgs_per_blk); } -static sector_t block_to_addr(struct rrpc *rrpc, struct rrpc_block *rblk) +static u64 block_to_addr(struct rrpc *rrpc, struct rrpc_block *rblk) { struct nvm_block *blk = rblk->parent; return blk->id * rrpc->dev->pgs_per_blk; } -static struct ppa_addr rrpc_ppa_to_gaddr(struct nvm_dev *dev, - sector_t addr) +static struct ppa_addr rrpc_ppa_to_gaddr(struct nvm_dev *dev, u64 addr) { struct ppa_addr paddr; @@ -231,7 +230,7 @@ static int rrpc_move_valid_pages(struct rrpc *rrpc, struct rrpc_block *rblk) struct page *page; int slot; int nr_pgs_per_blk = rrpc->dev->pgs_per_blk; - sector_t phys_addr; + u64 phys_addr; DECLARE_COMPLETION_ONSTACK(wait); 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) } static struct rrpc_addr *rrpc_update_map(struct rrpc *rrpc, sector_t laddr, - struct rrpc_block *rblk, sector_t paddr) + struct rrpc_block *rblk, u64 paddr) { struct rrpc_addr *gp; struct rrpc_rev_addr *rev; @@ -486,9 +485,9 @@ static struct rrpc_addr *rrpc_update_map(struct rrpc *rrpc, sector_t laddr, return gp; } -static sector_t rrpc_alloc_addr(struct rrpc *rrpc, struct rrpc_block *rblk) +static u64 rrpc_alloc_addr(struct rrpc *rrpc, struct rrpc_block *rblk) { - sector_t addr = ADDR_EMPTY; + u64 addr = ADDR_EMPTY; spin_lock(&rblk->lock); if (block_is_full(rrpc, rblk)) @@ -516,7 +515,7 @@ static struct rrpc_addr *rrpc_map_page(struct rrpc *rrpc, sector_t laddr, struct rrpc_lun *rlun; struct rrpc_block *rblk; struct nvm_lun *lun; - sector_t paddr; + u64 paddr; rlun = rrpc_get_lun_rr(rrpc, is_gc); lun = rlun->parent; @@ -1144,7 +1143,7 @@ static void rrpc_block_map_update(struct rrpc *rrpc, struct rrpc_block *rblk) struct nvm_dev *dev = rrpc->dev; int offset; struct rrpc_addr *laddr; - sector_t paddr, pladdr; + u64 paddr, pladdr; for (offset = 0; offset < dev->pgs_per_blk; offset++) { 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 { struct nvm_dev *dev; struct gendisk *disk; - sector_t poffset; /* physical page offset */ + u64 poffset; /* physical page offset */ int lun_offset; int nr_luns; @@ -136,13 +136,13 @@ struct rrpc_block_gc { /* Logical to physical mapping */ struct rrpc_addr { - sector_t addr; + u64 addr; struct rrpc_block *rblk; }; /* Physical to logical mapping */ struct rrpc_rev_addr { - sector_t addr; + u64 addr; }; static 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 { union { /* Channel-based PPA format in nand 4x2x2x2x8x10 */ struct { - sector_t ch : 4; - sector_t sec : 2; /* 4 sectors per page */ - sector_t pl : 2; /* 4 planes per LUN */ - sector_t lun : 2; /* 4 LUNs per channel */ - sector_t pg : 8; /* 256 pages per block */ - sector_t blk : 10;/* 1024 blocks per plane */ - sector_t resved : 36; + u64 ch : 4; + u64 sec : 2; /* 4 sectors per page */ + u64 pl : 2; /* 4 planes per LUN */ + u64 lun : 2; /* 4 LUNs per channel */ + u64 pg : 8; /* 256 pages per block */ + u64 blk : 10;/* 1024 blocks per plane */ + u64 resved : 36; } chnl; /* Generic structure for all addresses */ struct { - sector_t sec : NVM_SEC_BITS; - sector_t pl : NVM_PL_BITS; - sector_t pg : NVM_PG_BITS; - sector_t blk : NVM_BLK_BITS; - sector_t lun : NVM_LUN_BITS; - sector_t ch : NVM_CH_BITS; + u64 sec : NVM_SEC_BITS; + u64 pl : NVM_PL_BITS; + u64 pg : NVM_PG_BITS; + u64 blk : NVM_BLK_BITS; + u64 lun : NVM_LUN_BITS; + u64 ch : NVM_CH_BITS; } g; - sector_t ppa; + u64 ppa; }; } __packed; |