From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boaz Harrosh Subject: [PATCH] SQUASHME pmem: Micro optimization for pmem_direct_access Date: Wed, 10 Sep 2014 19:50:17 +0300 Message-ID: <54108149.3060506@plexistor.com> References: <1409173922-7484-1-git-send-email-ross.zwisler@linux.intel.com> <540F1EC6.4000504@plexistor.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Cc: Jens Axboe , Matthew Wilcox , linux-fsdevel , linux-nvdimm@lists.01.org To: Ross Zwisler Return-path: Received: from mail-pd0-f178.google.com ([209.85.192.178]:63177 "EHLO mail-pd0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752019AbaIJQuW (ORCPT ); Wed, 10 Sep 2014 12:50:22 -0400 Received: by mail-pd0-f178.google.com with SMTP id p10so8620359pdj.37 for ; Wed, 10 Sep 2014 09:50:22 -0700 (PDT) In-Reply-To: <540F1EC6.4000504@plexistor.com> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: From: Boaz Harrosh Please note: This patch spans two patches in the set: * The changes to pmem_lookup_pg_addr from [patch 1/4] * The removal to pmem_lookup_pfn and changes to pmem_direct_access from [patch 4/4] This is the hotpath I care about / pmem_direct_access() Easier on the eyes too Signed-off-by: Boaz Harrosh --- drivers/block/pmem.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/drivers/block/pmem.c b/drivers/block/pmem.c index 5eda95a..4a9d65e 100644 --- a/drivers/block/pmem.c +++ b/drivers/block/pmem.c @@ -61,22 +61,12 @@ static int pmem_getgeo(struct block_device *bd, struct hd_geometry *geo) */ static void *pmem_lookup_pg_addr(struct pmem_device *pmem, sector_t sector) { - size_t page_offset = sector >> PAGE_SECTORS_SHIFT; - size_t offset = page_offset << PAGE_SHIFT; + size_t offset = sector << SECTOR_SHIFT; BUG_ON(offset >= pmem->size); 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. @@ -200,14 +190,16 @@ 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; + size_t offset = sector << SECTOR_SHIFT; if (!pmem) return -ENODEV; - *kaddr = pmem_lookup_pg_addr(pmem, sector); - *pfn = pmem_lookup_pfn(pmem, sector); + BUG_ON(offset >= pmem->size); + *kaddr = pmem->virt_addr + offset; + *pfn = (pmem->phys_addr + offset) >> PAGE_SHIFT; - return pmem->size - (sector * 512); + return pmem->size - offset; } static const struct block_device_operations pmem_fops = { -- 1.9.3