From fe3a86e2efff07f858cda6d9ebd0e6ed853429eb Mon Sep 17 00:00:00 2001 From: Ali Saidi Date: Mon, 5 Jul 2004 16:49:56 -0400 Subject: [PATCH] updated to work on all platforms (actually map sure that the physical address we are trying to access is mapped before accessing it.) --HG-- extra : convert_revision : 104341334a3d2bb812a6b0b6277ab353f8f9b39e --- util/ccdrv/devtime.c | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/util/ccdrv/devtime.c b/util/ccdrv/devtime.c index e637116a4..5c17bf5ef 100644 --- a/util/ccdrv/devtime.c +++ b/util/ccdrv/devtime.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #ifdef __i386__ @@ -70,18 +71,34 @@ static int __init devtime_start(void) devSum = 0; devCnt = count; - printk("Preparing to read %#llx %d times.\n", addr, count); - - t1 = cycleCounter(trash); - for (x=0; x < count; x++) + addr = ioremap(addr, PAGE_SIZE); + /** + * Make sure that the remapping actually worked. On alpha we have + * linear addressing, so its not a problem. But it can fail in x86 + * if physical memory is mapped to this address. + */ + if (addr) { - trash = readl(addr); - t2 = cycleCounter(trash); - devSum += t2 - t1; - t1 = t2; + printk("Preparing to read %#llx %d times.\n", addr, count); + + t1 = cycleCounter(trash); + for (x=0; x < count; x++) + { + trash = readl(addr); + t2 = cycleCounter(trash); + devSum += t2 - t1; + t1 = t2; + } + + /** + * Unmap the address. + */ + iounmap(addr); + + printk("Read Address %#llx %ld times. Average latency %ld.\n", addr, devCnt, devSum/devCnt); } - - printk("Read Address %#llx %ld times. Average latency %ld.\n", addr, devCnt, devSum/devCnt); + else + printk("Unable to remap address. Please try again later.\n"); } else { dev = dev_get_by_name("eth0"); if (dev) @@ -90,6 +107,7 @@ static int __init devtime_start(void) dev->mem_end, dev->base_addr); dev_put(dev); } + dev = 0; dev = dev_get_by_name("eth1"); if (dev) { -- 2.30.2