Commit 2f55b0b6 authored by Philipp Zabel's avatar Philipp Zabel Committed by Luis Henriques

regmap: introduce regmap_name to fix syscon regmap trace events

commit c6b570d9 upstream.

This patch fixes a NULL pointer dereference when enabling regmap event
tracing in the presence of a syscon regmap, introduced by commit bdb0066d
("mfd: syscon: Decouple syscon interface from platform devices").
That patch introduced syscon regmaps that have their dev field set to NULL.
The regmap trace events expect it to point to a valid struct device and feed
it to dev_name():

  $ echo 1 > /sys/kernel/debug/tracing/events/regmap/enable

  Unable to handle kernel NULL pointer dereference at virtual address 0000002c
  pgd = 80004000
  [0000002c] *pgd=00000000
  Internal error: Oops: 17 [#1] SMP ARM
  Modules linked in: coda videobuf2_vmalloc
  CPU: 0 PID: 304 Comm: kworker/0:2 Not tainted 4.0.0-rc2+ #9197
  Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
  Workqueue: events_freezable thermal_zone_device_check
  task: 9f25a200 ti: 9f1ee000 task.ti: 9f1ee000
  PC is at ftrace_raw_event_regmap_block+0x3c/0xe4
  LR is at _regmap_raw_read+0x1bc/0x1cc
  pc : [<803636e8>]    lr : [<80365f2c>]    psr: 600f0093
  sp : 9f1efd78  ip : 9f1efdb8  fp : 9f1efdb4
  r10: 00000004  r9 : 00000001  r8 : 00000001
  r7 : 00000180  r6 : 00000000  r5 : 9f00e3c0  r4 : 00000003
  r3 : 00000001  r2 : 00000180  r1 : 00000000  r0 : 9f00e3c0
  Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
  Control: 10c5387d  Table: 2d91004a  DAC: 00000015
  Process kworker/0:2 (pid: 304, stack limit = 0x9f1ee210)
  Stack: (0x9f1efd78 to 0x9f1f0000)
  fd60:                                                       9f1efda4 9f1efd88
  fd80: 800708c0 805f9510 80927140 800f0013 9f1fc800 9eb2f490 00000000 00000180
  fda0: 808e3840 00000001 9f1efdfc 9f1efdb8 80365f2c 803636b8 805f8958 800708e0
  fdc0: a00f0013 803636ac 9f16de00 00000180 80927140 9f1fc800 9f1fc800 9f1efe6c
  fde0: 9f1efe6c 9f732400 00000000 00000000 9f1efe1c 9f1efe00 80365f70 80365d7c
  fe00: 80365f3c 9f1fc800 9f1fc800 00000180 9f1efe44 9f1efe20 803656a4 80365f48
  fe20: 9f1fc800 00000180 9f1efe6c 9f1efe6c 9f732400 00000000 9f1efe64 9f1efe48
  fe40: 803657bc 80365634 00000001 9e95f910 9f1fc800 9f1efeb4 9f1efe8c 9f1efe68
  fe60: 80452ac0 80365778 9f1efe8c 9f1efe78 9e93d400 9e93d5e8 9f1efeb4 9f72ef40
  fe80: 9f1efeac 9f1efe90 8044e11c 80452998 8045298c 9e93d608 9e93d400 808e1978
  fea0: 9f1efecc 9f1efeb0 8044fd14 8044e0d0 ffffffff 9f25a200 9e93d608 9e481380
  fec0: 9f1efedc 9f1efed0 8044fde8 8044fcec 9f1eff1c 9f1efee0 80038d50 8044fdd8
  fee0: 9f1ee020 9f72ef40 9e481398 00000000 00000008 9f72ef54 9f1ee020 9f72ef40
  ff00: 9e481398 9e481380 00000008 9f72ef40 9f1eff5c 9f1eff20 80039754 80038bfc
  ff20: 00000000 9e481380 80894100 808e1662 00000000 9e4f2ec0 00000000 9e481380
  ff40: 800396f8 00000000 00000000 00000000 9f1effac 9f1eff60 8003e020 80039704
  ff60: ffffffff 00000000 ffffffff 9e481380 00000000 00000000 9f1eff78 9f1eff78
  ff80: 00000000 00000000 9f1eff88 9f1eff88 9e4f2ec0 8003df30 00000000 00000000
  ffa0: 00000000 9f1effb0 8000eb60 8003df3c 00000000 00000000 00000000 00000000
  ffc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  ffe0: 00000000 00000000 00000000 00000000 00000013 00000000 ffffffff ffffffff
  Backtrace:
  [<803636ac>] (ftrace_raw_event_regmap_block) from [<80365f2c>] (_regmap_raw_read+0x1bc/0x1cc)
   r9:00000001 r8:808e3840 r7:00000180 r6:00000000 r5:9eb2f490 r4:9f1fc800
  [<80365d70>] (_regmap_raw_read) from [<80365f70>] (_regmap_bus_read+0x34/0x6c)
   r10:00000000 r9:00000000 r8:9f732400 r7:9f1efe6c r6:9f1efe6c r5:9f1fc800
   r4:9f1fc800
  [<80365f3c>] (_regmap_bus_read) from [<803656a4>] (_regmap_read+0x7c/0x144)
   r6:00000180 r5:9f1fc800 r4:9f1fc800 r3:80365f3c
  [<80365628>] (_regmap_read) from [<803657bc>] (regmap_read+0x50/0x70)
   r9:00000000 r8:9f732400 r7:9f1efe6c r6:9f1efe6c r5:00000180 r4:9f1fc800
  [<8036576c>] (regmap_read) from [<80452ac0>] (imx_get_temp+0x134/0x1a4)
   r6:9f1efeb4 r5:9f1fc800 r4:9e95f910 r3:00000001
  [<8045298c>] (imx_get_temp) from [<8044e11c>] (thermal_zone_get_temp+0x58/0x74)
   r7:9f72ef40 r6:9f1efeb4 r5:9e93d5e8 r4:9e93d400
  [<8044e0c4>] (thermal_zone_get_temp) from [<8044fd14>] (thermal_zone_device_update+0x34/0xec)
   r6:808e1978 r5:9e93d400 r4:9e93d608 r3:8045298c
  [<8044fce0>] (thermal_zone_device_update) from [<8044fde8>] (thermal_zone_device_check+0x1c/0x20)
   r5:9e481380 r4:9e93d608
  [<8044fdcc>] (thermal_zone_device_check) from [<80038d50>] (process_one_work+0x160/0x3d4)
  [<80038bf0>] (process_one_work) from [<80039754>] (worker_thread+0x5c/0x4f4)
   r10:9f72ef40 r9:00000008 r8:9e481380 r7:9e481398 r6:9f72ef40 r5:9f1ee020
   r4:9f72ef54
  [<800396f8>] (worker_thread) from [<8003e020>] (kthread+0xf0/0x108)
   r10:00000000 r9:00000000 r8:00000000 r7:800396f8 r6:9e481380 r5:00000000
   r4:9e4f2ec0
  [<8003df30>] (kthread) from [<8000eb60>] (ret_from_fork+0x14/0x34)
   r7:00000000 r6:00000000 r5:8003df30 r4:9e4f2ec0
  Code: e3140040 1a00001a e3140020 1a000016 (e596002c)
  ---[ end trace 193c15c2494ec960 ]---

Fixes: bdb0066d (mfd: syscon: Decouple syscon interface from platform devices)
Signed-off-by: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
parent b4773b1d
...@@ -235,4 +235,12 @@ extern struct regcache_ops regcache_rbtree_ops; ...@@ -235,4 +235,12 @@ extern struct regcache_ops regcache_rbtree_ops;
extern struct regcache_ops regcache_lzo_ops; extern struct regcache_ops regcache_lzo_ops;
extern struct regcache_ops regcache_flat_ops; extern struct regcache_ops regcache_flat_ops;
static inline const char *regmap_name(const struct regmap *map)
{
if (map->dev)
return dev_name(map->dev);
return map->name;
}
#endif #endif
...@@ -213,7 +213,7 @@ int regcache_read(struct regmap *map, ...@@ -213,7 +213,7 @@ int regcache_read(struct regmap *map,
ret = map->cache_ops->read(map, reg, value); ret = map->cache_ops->read(map, reg, value);
if (ret == 0) if (ret == 0)
trace_regmap_reg_read_cache(map->dev, reg, *value); trace_regmap_reg_read_cache(map, reg, *value);
return ret; return ret;
} }
...@@ -303,7 +303,7 @@ int regcache_sync(struct regmap *map) ...@@ -303,7 +303,7 @@ int regcache_sync(struct regmap *map)
dev_dbg(map->dev, "Syncing %s cache\n", dev_dbg(map->dev, "Syncing %s cache\n",
map->cache_ops->name); map->cache_ops->name);
name = map->cache_ops->name; name = map->cache_ops->name;
trace_regcache_sync(map->dev, name, "start"); trace_regcache_sync(map, name, "start");
if (!map->cache_dirty) if (!map->cache_dirty)
goto out; goto out;
...@@ -338,7 +338,7 @@ int regcache_sync(struct regmap *map) ...@@ -338,7 +338,7 @@ int regcache_sync(struct regmap *map)
regmap_async_complete(map); regmap_async_complete(map);
trace_regcache_sync(map->dev, name, "stop"); trace_regcache_sync(map, name, "stop");
return ret; return ret;
} }
...@@ -373,7 +373,7 @@ int regcache_sync_region(struct regmap *map, unsigned int min, ...@@ -373,7 +373,7 @@ int regcache_sync_region(struct regmap *map, unsigned int min,
name = map->cache_ops->name; name = map->cache_ops->name;
dev_dbg(map->dev, "Syncing %s cache from %d-%d\n", name, min, max); dev_dbg(map->dev, "Syncing %s cache from %d-%d\n", name, min, max);
trace_regcache_sync(map->dev, name, "start region"); trace_regcache_sync(map, name, "start region");
if (!map->cache_dirty) if (!map->cache_dirty)
goto out; goto out;
...@@ -393,7 +393,7 @@ int regcache_sync_region(struct regmap *map, unsigned int min, ...@@ -393,7 +393,7 @@ int regcache_sync_region(struct regmap *map, unsigned int min,
regmap_async_complete(map); regmap_async_complete(map);
trace_regcache_sync(map->dev, name, "stop region"); trace_regcache_sync(map, name, "stop region");
return ret; return ret;
} }
...@@ -420,7 +420,7 @@ int regcache_drop_region(struct regmap *map, unsigned int min, ...@@ -420,7 +420,7 @@ int regcache_drop_region(struct regmap *map, unsigned int min,
map->lock(map->lock_arg); map->lock(map->lock_arg);
trace_regcache_drop_region(map->dev, min, max); trace_regcache_drop_region(map, min, max);
ret = map->cache_ops->drop(map, min, max); ret = map->cache_ops->drop(map, min, max);
...@@ -447,7 +447,7 @@ void regcache_cache_only(struct regmap *map, bool enable) ...@@ -447,7 +447,7 @@ void regcache_cache_only(struct regmap *map, bool enable)
map->lock(map->lock_arg); map->lock(map->lock_arg);
WARN_ON(map->cache_bypass && enable); WARN_ON(map->cache_bypass && enable);
map->cache_only = enable; map->cache_only = enable;
trace_regmap_cache_only(map->dev, enable); trace_regmap_cache_only(map, enable);
map->unlock(map->lock_arg); map->unlock(map->lock_arg);
} }
EXPORT_SYMBOL_GPL(regcache_cache_only); EXPORT_SYMBOL_GPL(regcache_cache_only);
...@@ -485,7 +485,7 @@ void regcache_cache_bypass(struct regmap *map, bool enable) ...@@ -485,7 +485,7 @@ void regcache_cache_bypass(struct regmap *map, bool enable)
map->lock(map->lock_arg); map->lock(map->lock_arg);
WARN_ON(map->cache_only && enable); WARN_ON(map->cache_only && enable);
map->cache_bypass = enable; map->cache_bypass = enable;
trace_regmap_cache_bypass(map->dev, enable); trace_regmap_cache_bypass(map, enable);
map->unlock(map->lock_arg); map->unlock(map->lock_arg);
} }
EXPORT_SYMBOL_GPL(regcache_cache_bypass); EXPORT_SYMBOL_GPL(regcache_cache_bypass);
......
...@@ -1210,7 +1210,7 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg, ...@@ -1210,7 +1210,7 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg,
if (map->async && map->bus->async_write) { if (map->async && map->bus->async_write) {
struct regmap_async *async; struct regmap_async *async;
trace_regmap_async_write_start(map->dev, reg, val_len); trace_regmap_async_write_start(map, reg, val_len);
spin_lock_irqsave(&map->async_lock, flags); spin_lock_irqsave(&map->async_lock, flags);
async = list_first_entry_or_null(&map->async_free, async = list_first_entry_or_null(&map->async_free,
...@@ -1268,8 +1268,7 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg, ...@@ -1268,8 +1268,7 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg,
return ret; return ret;
} }
trace_regmap_hw_write_start(map->dev, reg, trace_regmap_hw_write_start(map, reg, val_len / map->format.val_bytes);
val_len / map->format.val_bytes);
/* If we're doing a single register write we can probably just /* If we're doing a single register write we can probably just
* send the work_buf directly, otherwise try to do a gather * send the work_buf directly, otherwise try to do a gather
...@@ -1301,8 +1300,7 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg, ...@@ -1301,8 +1300,7 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg,
kfree(buf); kfree(buf);
} }
trace_regmap_hw_write_done(map->dev, reg, trace_regmap_hw_write_done(map, reg, val_len / map->format.val_bytes);
val_len / map->format.val_bytes);
return ret; return ret;
} }
...@@ -1336,12 +1334,12 @@ static int _regmap_bus_formatted_write(void *context, unsigned int reg, ...@@ -1336,12 +1334,12 @@ static int _regmap_bus_formatted_write(void *context, unsigned int reg,
map->format.format_write(map, reg, val); map->format.format_write(map, reg, val);
trace_regmap_hw_write_start(map->dev, reg, 1); trace_regmap_hw_write_start(map, reg, 1);
ret = map->bus->write(map->bus_context, map->work_buf, ret = map->bus->write(map->bus_context, map->work_buf,
map->format.buf_size); map->format.buf_size);
trace_regmap_hw_write_done(map->dev, reg, 1); trace_regmap_hw_write_done(map, reg, 1);
return ret; return ret;
} }
...@@ -1399,7 +1397,7 @@ int _regmap_write(struct regmap *map, unsigned int reg, ...@@ -1399,7 +1397,7 @@ int _regmap_write(struct regmap *map, unsigned int reg,
dev_info(map->dev, "%x <= %x\n", reg, val); dev_info(map->dev, "%x <= %x\n", reg, val);
#endif #endif
trace_regmap_reg_write(map->dev, reg, val); trace_regmap_reg_write(map, reg, val);
return map->reg_write(context, reg, val); return map->reg_write(context, reg, val);
} }
...@@ -1702,7 +1700,7 @@ static int _regmap_raw_multi_reg_write(struct regmap *map, ...@@ -1702,7 +1700,7 @@ static int _regmap_raw_multi_reg_write(struct regmap *map,
for (i = 0; i < num_regs; i++) { for (i = 0; i < num_regs; i++) {
int reg = regs[i].reg; int reg = regs[i].reg;
int val = regs[i].def; int val = regs[i].def;
trace_regmap_hw_write_start(map->dev, reg, 1); trace_regmap_hw_write_start(map, reg, 1);
map->format.format_reg(u8, reg, map->reg_shift); map->format.format_reg(u8, reg, map->reg_shift);
u8 += reg_bytes + pad_bytes; u8 += reg_bytes + pad_bytes;
map->format.format_val(u8, val, 0); map->format.format_val(u8, val, 0);
...@@ -1717,7 +1715,7 @@ static int _regmap_raw_multi_reg_write(struct regmap *map, ...@@ -1717,7 +1715,7 @@ static int _regmap_raw_multi_reg_write(struct regmap *map,
for (i = 0; i < num_regs; i++) { for (i = 0; i < num_regs; i++) {
int reg = regs[i].reg; int reg = regs[i].reg;
trace_regmap_hw_write_done(map->dev, reg, 1); trace_regmap_hw_write_done(map, reg, 1);
} }
return ret; return ret;
} }
...@@ -1988,15 +1986,13 @@ static int _regmap_raw_read(struct regmap *map, unsigned int reg, void *val, ...@@ -1988,15 +1986,13 @@ static int _regmap_raw_read(struct regmap *map, unsigned int reg, void *val,
*/ */
u8[0] |= map->read_flag_mask; u8[0] |= map->read_flag_mask;
trace_regmap_hw_read_start(map->dev, reg, trace_regmap_hw_read_start(map, reg, val_len / map->format.val_bytes);
val_len / map->format.val_bytes);
ret = map->bus->read(map->bus_context, map->work_buf, ret = map->bus->read(map->bus_context, map->work_buf,
map->format.reg_bytes + map->format.pad_bytes, map->format.reg_bytes + map->format.pad_bytes,
val, val_len); val, val_len);
trace_regmap_hw_read_done(map->dev, reg, trace_regmap_hw_read_done(map, reg, val_len / map->format.val_bytes);
val_len / map->format.val_bytes);
return ret; return ret;
} }
...@@ -2052,7 +2048,7 @@ static int _regmap_read(struct regmap *map, unsigned int reg, ...@@ -2052,7 +2048,7 @@ static int _regmap_read(struct regmap *map, unsigned int reg,
dev_info(map->dev, "%x => %x\n", reg, *val); dev_info(map->dev, "%x => %x\n", reg, *val);
#endif #endif
trace_regmap_reg_read(map->dev, reg, *val); trace_regmap_reg_read(map, reg, *val);
if (!map->cache_bypass) if (!map->cache_bypass)
regcache_write(map, reg, *val); regcache_write(map, reg, *val);
...@@ -2409,7 +2405,7 @@ void regmap_async_complete_cb(struct regmap_async *async, int ret) ...@@ -2409,7 +2405,7 @@ void regmap_async_complete_cb(struct regmap_async *async, int ret)
struct regmap *map = async->map; struct regmap *map = async->map;
bool wake; bool wake;
trace_regmap_async_io_complete(map->dev); trace_regmap_async_io_complete(map);
spin_lock(&map->async_lock); spin_lock(&map->async_lock);
list_move(&async->list, &map->async_free); list_move(&async->list, &map->async_free);
...@@ -2454,7 +2450,7 @@ int regmap_async_complete(struct regmap *map) ...@@ -2454,7 +2450,7 @@ int regmap_async_complete(struct regmap *map)
if (!map->bus || !map->bus->async_write) if (!map->bus || !map->bus->async_write)
return 0; return 0;
trace_regmap_async_complete_start(map->dev); trace_regmap_async_complete_start(map);
wait_event(map->async_waitq, regmap_async_is_done(map)); wait_event(map->async_waitq, regmap_async_is_done(map));
...@@ -2463,7 +2459,7 @@ int regmap_async_complete(struct regmap *map) ...@@ -2463,7 +2459,7 @@ int regmap_async_complete(struct regmap *map)
map->async_ret = 0; map->async_ret = 0;
spin_unlock_irqrestore(&map->async_lock, flags); spin_unlock_irqrestore(&map->async_lock, flags);
trace_regmap_async_complete_done(map->dev); trace_regmap_async_complete_done(map);
return ret; return ret;
} }
......
...@@ -7,27 +7,26 @@ ...@@ -7,27 +7,26 @@
#include <linux/ktime.h> #include <linux/ktime.h>
#include <linux/tracepoint.h> #include <linux/tracepoint.h>
struct device; #include "../../../drivers/base/regmap/internal.h"
struct regmap;
/* /*
* Log register events * Log register events
*/ */
DECLARE_EVENT_CLASS(regmap_reg, DECLARE_EVENT_CLASS(regmap_reg,
TP_PROTO(struct device *dev, unsigned int reg, TP_PROTO(struct regmap *map, unsigned int reg,
unsigned int val), unsigned int val),
TP_ARGS(dev, reg, val), TP_ARGS(map, reg, val),
TP_STRUCT__entry( TP_STRUCT__entry(
__string( name, dev_name(dev) ) __string( name, regmap_name(map) )
__field( unsigned int, reg ) __field( unsigned int, reg )
__field( unsigned int, val ) __field( unsigned int, val )
), ),
TP_fast_assign( TP_fast_assign(
__assign_str(name, dev_name(dev)); __assign_str(name, regmap_name(map));
__entry->reg = reg; __entry->reg = reg;
__entry->val = val; __entry->val = val;
), ),
...@@ -39,45 +38,45 @@ DECLARE_EVENT_CLASS(regmap_reg, ...@@ -39,45 +38,45 @@ DECLARE_EVENT_CLASS(regmap_reg,
DEFINE_EVENT(regmap_reg, regmap_reg_write, DEFINE_EVENT(regmap_reg, regmap_reg_write,
TP_PROTO(struct device *dev, unsigned int reg, TP_PROTO(struct regmap *map, unsigned int reg,
unsigned int val), unsigned int val),
TP_ARGS(dev, reg, val) TP_ARGS(map, reg, val)
); );
DEFINE_EVENT(regmap_reg, regmap_reg_read, DEFINE_EVENT(regmap_reg, regmap_reg_read,
TP_PROTO(struct device *dev, unsigned int reg, TP_PROTO(struct regmap *map, unsigned int reg,
unsigned int val), unsigned int val),
TP_ARGS(dev, reg, val) TP_ARGS(map, reg, val)
); );
DEFINE_EVENT(regmap_reg, regmap_reg_read_cache, DEFINE_EVENT(regmap_reg, regmap_reg_read_cache,
TP_PROTO(struct device *dev, unsigned int reg, TP_PROTO(struct regmap *map, unsigned int reg,
unsigned int val), unsigned int val),
TP_ARGS(dev, reg, val) TP_ARGS(map, reg, val)
); );
DECLARE_EVENT_CLASS(regmap_block, DECLARE_EVENT_CLASS(regmap_block,
TP_PROTO(struct device *dev, unsigned int reg, int count), TP_PROTO(struct regmap *map, unsigned int reg, int count),
TP_ARGS(dev, reg, count), TP_ARGS(map, reg, count),
TP_STRUCT__entry( TP_STRUCT__entry(
__string( name, dev_name(dev) ) __string( name, regmap_name(map) )
__field( unsigned int, reg ) __field( unsigned int, reg )
__field( int, count ) __field( int, count )
), ),
TP_fast_assign( TP_fast_assign(
__assign_str(name, dev_name(dev)); __assign_str(name, regmap_name(map));
__entry->reg = reg; __entry->reg = reg;
__entry->count = count; __entry->count = count;
), ),
...@@ -89,48 +88,48 @@ DECLARE_EVENT_CLASS(regmap_block, ...@@ -89,48 +88,48 @@ DECLARE_EVENT_CLASS(regmap_block,
DEFINE_EVENT(regmap_block, regmap_hw_read_start, DEFINE_EVENT(regmap_block, regmap_hw_read_start,
TP_PROTO(struct device *dev, unsigned int reg, int count), TP_PROTO(struct regmap *map, unsigned int reg, int count),
TP_ARGS(dev, reg, count) TP_ARGS(map, reg, count)
); );
DEFINE_EVENT(regmap_block, regmap_hw_read_done, DEFINE_EVENT(regmap_block, regmap_hw_read_done,
TP_PROTO(struct device *dev, unsigned int reg, int count), TP_PROTO(struct regmap *map, unsigned int reg, int count),
TP_ARGS(dev, reg, count) TP_ARGS(map, reg, count)
); );
DEFINE_EVENT(regmap_block, regmap_hw_write_start, DEFINE_EVENT(regmap_block, regmap_hw_write_start,
TP_PROTO(struct device *dev, unsigned int reg, int count), TP_PROTO(struct regmap *map, unsigned int reg, int count),
TP_ARGS(dev, reg, count) TP_ARGS(map, reg, count)
); );
DEFINE_EVENT(regmap_block, regmap_hw_write_done, DEFINE_EVENT(regmap_block, regmap_hw_write_done,
TP_PROTO(struct device *dev, unsigned int reg, int count), TP_PROTO(struct regmap *map, unsigned int reg, int count),
TP_ARGS(dev, reg, count) TP_ARGS(map, reg, count)
); );
TRACE_EVENT(regcache_sync, TRACE_EVENT(regcache_sync,
TP_PROTO(struct device *dev, const char *type, TP_PROTO(struct regmap *map, const char *type,
const char *status), const char *status),
TP_ARGS(dev, type, status), TP_ARGS(map, type, status),
TP_STRUCT__entry( TP_STRUCT__entry(
__string( name, dev_name(dev) ) __string( name, regmap_name(map) )
__string( status, status ) __string( status, status )
__string( type, type ) __string( type, type )
__field( int, type ) __field( int, type )
), ),
TP_fast_assign( TP_fast_assign(
__assign_str(name, dev_name(dev)); __assign_str(name, regmap_name(map));
__assign_str(status, status); __assign_str(status, status);
__assign_str(type, type); __assign_str(type, type);
), ),
...@@ -141,17 +140,17 @@ TRACE_EVENT(regcache_sync, ...@@ -141,17 +140,17 @@ TRACE_EVENT(regcache_sync,
DECLARE_EVENT_CLASS(regmap_bool, DECLARE_EVENT_CLASS(regmap_bool,
TP_PROTO(struct device *dev, bool flag), TP_PROTO(struct regmap *map, bool flag),
TP_ARGS(dev, flag), TP_ARGS(map, flag),
TP_STRUCT__entry( TP_STRUCT__entry(
__string( name, dev_name(dev) ) __string( name, regmap_name(map) )
__field( int, flag ) __field( int, flag )
), ),
TP_fast_assign( TP_fast_assign(
__assign_str(name, dev_name(dev)); __assign_str(name, regmap_name(map));
__entry->flag = flag; __entry->flag = flag;
), ),
...@@ -161,32 +160,32 @@ DECLARE_EVENT_CLASS(regmap_bool, ...@@ -161,32 +160,32 @@ DECLARE_EVENT_CLASS(regmap_bool,
DEFINE_EVENT(regmap_bool, regmap_cache_only, DEFINE_EVENT(regmap_bool, regmap_cache_only,
TP_PROTO(struct device *dev, bool flag), TP_PROTO(struct regmap *map, bool flag),
TP_ARGS(dev, flag) TP_ARGS(map, flag)
); );
DEFINE_EVENT(regmap_bool, regmap_cache_bypass, DEFINE_EVENT(regmap_bool, regmap_cache_bypass,
TP_PROTO(struct device *dev, bool flag), TP_PROTO(struct regmap *map, bool flag),
TP_ARGS(dev, flag) TP_ARGS(map, flag)
); );
DECLARE_EVENT_CLASS(regmap_async, DECLARE_EVENT_CLASS(regmap_async,
TP_PROTO(struct device *dev), TP_PROTO(struct regmap *map),
TP_ARGS(dev), TP_ARGS(map),
TP_STRUCT__entry( TP_STRUCT__entry(
__string( name, dev_name(dev) ) __string( name, regmap_name(map) )
), ),
TP_fast_assign( TP_fast_assign(
__assign_str(name, dev_name(dev)); __assign_str(name, regmap_name(map));
), ),
TP_printk("%s", __get_str(name)) TP_printk("%s", __get_str(name))
...@@ -194,50 +193,50 @@ DECLARE_EVENT_CLASS(regmap_async, ...@@ -194,50 +193,50 @@ DECLARE_EVENT_CLASS(regmap_async,
DEFINE_EVENT(regmap_block, regmap_async_write_start, DEFINE_EVENT(regmap_block, regmap_async_write_start,
TP_PROTO(struct device *dev, unsigned int reg, int count), TP_PROTO(struct regmap *map, unsigned int reg, int count),
TP_ARGS(dev, reg, count) TP_ARGS(map, reg, count)
); );
DEFINE_EVENT(regmap_async, regmap_async_io_complete, DEFINE_EVENT(regmap_async, regmap_async_io_complete,
TP_PROTO(struct device *dev), TP_PROTO(struct regmap *map),
TP_ARGS(dev) TP_ARGS(map)
); );
DEFINE_EVENT(regmap_async, regmap_async_complete_start, DEFINE_EVENT(regmap_async, regmap_async_complete_start,
TP_PROTO(struct device *dev), TP_PROTO(struct regmap *map),
TP_ARGS(dev) TP_ARGS(map)
); );
DEFINE_EVENT(regmap_async, regmap_async_complete_done, DEFINE_EVENT(regmap_async, regmap_async_complete_done,
TP_PROTO(struct device *dev), TP_PROTO(struct regmap *map),
TP_ARGS(dev) TP_ARGS(map)
); );
TRACE_EVENT(regcache_drop_region, TRACE_EVENT(regcache_drop_region,
TP_PROTO(struct device *dev, unsigned int from, TP_PROTO(struct regmap *map, unsigned int from,
unsigned int to), unsigned int to),
TP_ARGS(dev, from, to), TP_ARGS(map, from, to),
TP_STRUCT__entry( TP_STRUCT__entry(
__string( name, dev_name(dev) ) __string( name, regmap_name(map) )
__field( unsigned int, from ) __field( unsigned int, from )
__field( unsigned int, to ) __field( unsigned int, to )
), ),
TP_fast_assign( TP_fast_assign(
__assign_str(name, dev_name(dev)); __assign_str(name, regmap_name(map));
__entry->from = from; __entry->from = from;
__entry->to = to; __entry->to = to;
), ),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment