]> Pileus Git - ~andy/linux/commitdiff
regmap: Add trace event for successful cache reads
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 30 Nov 2011 14:27:08 +0000 (14:27 +0000)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 30 Nov 2011 20:51:09 +0000 (20:51 +0000)
Currently we only trace physical reads, there's no instrumentation if
the read is satisfied from cache.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
drivers/base/regmap/regcache.c
include/trace/events/regmap.h

index 1ca2d7a1051fd2f56ea3db00895c27eb67b86128..1ead66186b7c0a90586f223b0b9bc23d3770a3ed 100644 (file)
@@ -193,13 +193,21 @@ void regcache_exit(struct regmap *map)
 int regcache_read(struct regmap *map,
                  unsigned int reg, unsigned int *value)
 {
+       int ret;
+
        if (map->cache_type == REGCACHE_NONE)
                return -ENOSYS;
 
        BUG_ON(!map->cache_ops);
 
-       if (!regmap_volatile(map, reg))
-               return map->cache_ops->read(map, reg, value);
+       if (!regmap_volatile(map, reg)) {
+               ret = map->cache_ops->read(map, reg, value);
+
+               if (ret == 0)
+                       trace_regmap_reg_read_cache(map->dev, reg, *value);
+
+               return ret;
+       }
 
        return -EINVAL;
 }
index 1e3193b8fcc8f5863e665d91f287c4728f036346..12fbf43524e90e77759e80751bfe5ab983b4ad2d 100644 (file)
@@ -55,6 +55,15 @@ DEFINE_EVENT(regmap_reg, regmap_reg_read,
 
 );
 
+DEFINE_EVENT(regmap_reg, regmap_reg_read_cache,
+
+       TP_PROTO(struct device *dev, unsigned int reg,
+                unsigned int val),
+
+       TP_ARGS(dev, reg, val)
+
+);
+
 DECLARE_EVENT_CLASS(regmap_block,
 
        TP_PROTO(struct device *dev, unsigned int reg, int count),