lkml.org 
[lkml]   [2018]   [Oct]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[GIT PULL 11/45] lightnvm: pblk: add helpers for chunk addresses
    Date
    From: Javier González <javier@javigon.com>

    Implement helpers to go from ppas to a chunk within a line and an
    address within a chunk.

    These helpers will be used on the patches adding trace support in pblk,
    which will be sent in this window.

    Signed-off-by: Javier González <javier@cnexlabs.com>
    Signed-off-by: Matias Bjørling <mb@lightnvm.io>
    ---
    drivers/lightnvm/pblk.h | 19 +++++++++++++++++++
    include/linux/lightnvm.h | 19 +++++++++++++++++++
    2 files changed, 38 insertions(+)

    diff --git a/drivers/lightnvm/pblk.h b/drivers/lightnvm/pblk.h
    index be67bbfa3d0a..f95fe75fef6e 100644
    --- a/drivers/lightnvm/pblk.h
    +++ b/drivers/lightnvm/pblk.h
    @@ -1034,6 +1034,25 @@ static inline struct ppa_addr addr_to_gen_ppa(struct pblk *pblk, u64 paddr,
    return ppa;
    }

    +static inline struct nvm_chk_meta *pblk_dev_ppa_to_chunk(struct pblk *pblk,
    + struct ppa_addr p)
    +{
    + struct nvm_tgt_dev *dev = pblk->dev;
    + struct nvm_geo *geo = &dev->geo;
    + struct pblk_line *line = &pblk->lines[pblk_ppa_to_line(p)];
    + int pos = pblk_ppa_to_pos(geo, p);
    +
    + return &line->chks[pos];
    +}
    +
    +static inline u64 pblk_dev_ppa_to_chunk_addr(struct pblk *pblk,
    + struct ppa_addr p)
    +{
    + struct nvm_tgt_dev *dev = pblk->dev;
    +
    + return dev_to_chunk_addr(dev->parent, &pblk->addrf, p);
    +}
    +
    static inline u64 pblk_dev_ppa_to_line_addr(struct pblk *pblk,
    struct ppa_addr p)
    {
    diff --git a/include/linux/lightnvm.h b/include/linux/lightnvm.h
    index 0106984400bc..77743a02ec0d 100644
    --- a/include/linux/lightnvm.h
    +++ b/include/linux/lightnvm.h
    @@ -487,6 +487,25 @@ static inline struct ppa_addr dev_to_generic_addr(struct nvm_dev *dev,
    return l;
    }

    +static inline u64 dev_to_chunk_addr(struct nvm_dev *dev, void *addrf,
    + struct ppa_addr p)
    +{
    + struct nvm_geo *geo = &dev->geo;
    + u64 caddr;
    +
    + if (geo->version == NVM_OCSSD_SPEC_12) {
    + struct nvm_addrf_12 *ppaf = (struct nvm_addrf_12 *)addrf;
    +
    + caddr = (u64)p.g.pg << ppaf->pg_offset;
    + caddr |= (u64)p.g.pl << ppaf->pln_offset;
    + caddr |= (u64)p.g.sec << ppaf->sec_offset;
    + } else {
    + caddr = p.m.sec;
    + }
    +
    + return caddr;
    +}
    +
    typedef blk_qc_t (nvm_tgt_make_rq_fn)(struct request_queue *, struct bio *);
    typedef sector_t (nvm_tgt_capacity_fn)(void *);
    typedef void *(nvm_tgt_init_fn)(struct nvm_tgt_dev *, struct gendisk *,
    --
    2.17.1
    \
     
     \ /
      Last update: 2018-10-09 13:18    [W:3.810 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site