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>
This commit is contained in:
Родитель
ca0640850e
Коммит
b7ceb7d500
|
@ -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);
|
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;
|
struct nvm_block *blk = rblk->parent;
|
||||||
|
|
||||||
return blk->id * rrpc->dev->pgs_per_blk;
|
return blk->id * rrpc->dev->pgs_per_blk;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct ppa_addr rrpc_ppa_to_gaddr(struct nvm_dev *dev,
|
static struct ppa_addr rrpc_ppa_to_gaddr(struct nvm_dev *dev, u64 addr)
|
||||||
sector_t addr)
|
|
||||||
{
|
{
|
||||||
struct ppa_addr paddr;
|
struct ppa_addr paddr;
|
||||||
|
|
||||||
|
@ -231,7 +230,7 @@ static int rrpc_move_valid_pages(struct rrpc *rrpc, struct rrpc_block *rblk)
|
||||||
struct page *page;
|
struct page *page;
|
||||||
int slot;
|
int slot;
|
||||||
int nr_pgs_per_blk = rrpc->dev->pgs_per_blk;
|
int nr_pgs_per_blk = rrpc->dev->pgs_per_blk;
|
||||||
sector_t phys_addr;
|
u64 phys_addr;
|
||||||
DECLARE_COMPLETION_ONSTACK(wait);
|
DECLARE_COMPLETION_ONSTACK(wait);
|
||||||
|
|
||||||
if (bitmap_full(rblk->invalid_pages, nr_pgs_per_blk))
|
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,
|
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_addr *gp;
|
||||||
struct rrpc_rev_addr *rev;
|
struct rrpc_rev_addr *rev;
|
||||||
|
@ -486,9 +485,9 @@ static struct rrpc_addr *rrpc_update_map(struct rrpc *rrpc, sector_t laddr,
|
||||||
return gp;
|
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);
|
spin_lock(&rblk->lock);
|
||||||
if (block_is_full(rrpc, rblk))
|
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_lun *rlun;
|
||||||
struct rrpc_block *rblk;
|
struct rrpc_block *rblk;
|
||||||
struct nvm_lun *lun;
|
struct nvm_lun *lun;
|
||||||
sector_t paddr;
|
u64 paddr;
|
||||||
|
|
||||||
rlun = rrpc_get_lun_rr(rrpc, is_gc);
|
rlun = rrpc_get_lun_rr(rrpc, is_gc);
|
||||||
lun = rlun->parent;
|
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;
|
struct nvm_dev *dev = rrpc->dev;
|
||||||
int offset;
|
int offset;
|
||||||
struct rrpc_addr *laddr;
|
struct rrpc_addr *laddr;
|
||||||
sector_t paddr, pladdr;
|
u64 paddr, pladdr;
|
||||||
|
|
||||||
for (offset = 0; offset < dev->pgs_per_blk; offset++) {
|
for (offset = 0; offset < dev->pgs_per_blk; offset++) {
|
||||||
paddr = block_to_addr(rrpc, rblk) + offset;
|
paddr = block_to_addr(rrpc, rblk) + offset;
|
||||||
|
|
|
@ -86,7 +86,7 @@ struct rrpc {
|
||||||
struct nvm_dev *dev;
|
struct nvm_dev *dev;
|
||||||
struct gendisk *disk;
|
struct gendisk *disk;
|
||||||
|
|
||||||
sector_t poffset; /* physical page offset */
|
u64 poffset; /* physical page offset */
|
||||||
int lun_offset;
|
int lun_offset;
|
||||||
|
|
||||||
int nr_luns;
|
int nr_luns;
|
||||||
|
@ -136,13 +136,13 @@ struct rrpc_block_gc {
|
||||||
|
|
||||||
/* Logical to physical mapping */
|
/* Logical to physical mapping */
|
||||||
struct rrpc_addr {
|
struct rrpc_addr {
|
||||||
sector_t addr;
|
u64 addr;
|
||||||
struct rrpc_block *rblk;
|
struct rrpc_block *rblk;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Physical to logical mapping */
|
/* Physical to logical mapping */
|
||||||
struct rrpc_rev_addr {
|
struct rrpc_rev_addr {
|
||||||
sector_t addr;
|
u64 addr;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline sector_t rrpc_get_laddr(struct bio *bio)
|
static inline sector_t rrpc_get_laddr(struct bio *bio)
|
||||||
|
|
|
@ -134,26 +134,26 @@ struct ppa_addr {
|
||||||
union {
|
union {
|
||||||
/* Channel-based PPA format in nand 4x2x2x2x8x10 */
|
/* Channel-based PPA format in nand 4x2x2x2x8x10 */
|
||||||
struct {
|
struct {
|
||||||
sector_t ch : 4;
|
u64 ch : 4;
|
||||||
sector_t sec : 2; /* 4 sectors per page */
|
u64 sec : 2; /* 4 sectors per page */
|
||||||
sector_t pl : 2; /* 4 planes per LUN */
|
u64 pl : 2; /* 4 planes per LUN */
|
||||||
sector_t lun : 2; /* 4 LUNs per channel */
|
u64 lun : 2; /* 4 LUNs per channel */
|
||||||
sector_t pg : 8; /* 256 pages per block */
|
u64 pg : 8; /* 256 pages per block */
|
||||||
sector_t blk : 10;/* 1024 blocks per plane */
|
u64 blk : 10;/* 1024 blocks per plane */
|
||||||
sector_t resved : 36;
|
u64 resved : 36;
|
||||||
} chnl;
|
} chnl;
|
||||||
|
|
||||||
/* Generic structure for all addresses */
|
/* Generic structure for all addresses */
|
||||||
struct {
|
struct {
|
||||||
sector_t sec : NVM_SEC_BITS;
|
u64 sec : NVM_SEC_BITS;
|
||||||
sector_t pl : NVM_PL_BITS;
|
u64 pl : NVM_PL_BITS;
|
||||||
sector_t pg : NVM_PG_BITS;
|
u64 pg : NVM_PG_BITS;
|
||||||
sector_t blk : NVM_BLK_BITS;
|
u64 blk : NVM_BLK_BITS;
|
||||||
sector_t lun : NVM_LUN_BITS;
|
u64 lun : NVM_LUN_BITS;
|
||||||
sector_t ch : NVM_CH_BITS;
|
u64 ch : NVM_CH_BITS;
|
||||||
} g;
|
} g;
|
||||||
|
|
||||||
sector_t ppa;
|
u64 ppa;
|
||||||
};
|
};
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче