lkml.org 
[lkml]   [2014]   [Aug]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4/4] pmem: Add support for direct_access()
    Date
    Signed-off-by: Ross Zwisler <ross.zwisler@linux.intel.com>
    ---
    drivers/block/pmem.c | 24 ++++++++++++++++++++++++
    1 file changed, 24 insertions(+)

    diff --git a/drivers/block/pmem.c b/drivers/block/pmem.c
    index 0be3669..d63bc96 100644
    --- a/drivers/block/pmem.c
    +++ b/drivers/block/pmem.c
    @@ -74,6 +74,15 @@ static void *pmem_lookup_pg_addr(struct pmem_device *pmem, sector_t sector)
    return pmem->virt_addr + offset;
    }

    +/* sector must be page aligned */
    +static unsigned long pmem_lookup_pfn(struct pmem_device *pmem, sector_t sector)
    +{
    + size_t page_offset = sector >> PAGE_SECTORS_SHIFT;
    +
    + BUG_ON(sector & (PAGE_SECTORS - 1));
    + return (pmem->phys_addr >> PAGE_SHIFT) + page_offset;
    +}
    +
    /*
    * sector is not required to be page aligned.
    * n is at most a single page, but could be less.
    @@ -193,9 +202,24 @@ static int pmem_rw_page(struct block_device *bdev, sector_t sector,
    return 0;
    }

    +static long pmem_direct_access(struct block_device *bdev, sector_t sector,
    + void **kaddr, unsigned long *pfn, long size)
    +{
    + struct pmem_device *pmem = bdev->bd_disk->private_data;
    +
    + if (!pmem)
    + return -ENODEV;
    +
    + *kaddr = pmem_lookup_pg_addr(pmem, sector);
    + *pfn = pmem_lookup_pfn(pmem, sector);
    +
    + return pmem->size - (sector * 512);
    +}
    +
    static const struct block_device_operations pmem_fops = {
    .owner = THIS_MODULE,
    .rw_page = pmem_rw_page,
    + .direct_access = pmem_direct_access,
    .getgeo = pmem_getgeo,
    };

    --
    1.9.3


    \
     
     \ /
      Last update: 2014-08-27 23:21    [W:4.470 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site