Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net/phy: add trace events for mdio accesses

Make it possible to generate trace events for mdio read and write accesses.

Signed-off-by: Uwe Kleine-König <uwe@kleine-koenig.org>
Acked-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Uwe Kleine-König and committed by
David S. Miller
e22e996b b9116823

+53
+11
drivers/net/phy/mdio_bus.c
··· 38 38 39 39 #include <asm/irq.h> 40 40 41 + #define CREATE_TRACE_POINTS 42 + #include <trace/events/mdio.h> 43 + 41 44 int mdiobus_register_device(struct mdio_device *mdiodev) 42 45 { 43 46 if (mdiodev->bus->mdio_map[mdiodev->addr]) ··· 464 461 retval = bus->read(bus, addr, regnum); 465 462 mutex_unlock(&bus->mdio_lock); 466 463 464 + trace_mdio_access(bus, 1, addr, regnum, retval, retval); 465 + 467 466 return retval; 468 467 } 469 468 EXPORT_SYMBOL(mdiobus_read_nested); ··· 489 484 mutex_lock(&bus->mdio_lock); 490 485 retval = bus->read(bus, addr, regnum); 491 486 mutex_unlock(&bus->mdio_lock); 487 + 488 + trace_mdio_access(bus, 1, addr, regnum, retval, retval); 492 489 493 490 return retval; 494 491 } ··· 520 513 err = bus->write(bus, addr, regnum, val); 521 514 mutex_unlock(&bus->mdio_lock); 522 515 516 + trace_mdio_access(bus, 0, addr, regnum, val, err); 517 + 523 518 return err; 524 519 } 525 520 EXPORT_SYMBOL(mdiobus_write_nested); ··· 546 537 mutex_lock(&bus->mdio_lock); 547 538 err = bus->write(bus, addr, regnum, val); 548 539 mutex_unlock(&bus->mdio_lock); 540 + 541 + trace_mdio_access(bus, 0, addr, regnum, val, err); 549 542 550 543 return err; 551 544 }
+42
include/trace/events/mdio.h
··· 1 + #undef TRACE_SYSTEM 2 + #define TRACE_SYSTEM mdio 3 + 4 + #if !defined(_TRACE_MDIO_H) || defined(TRACE_HEADER_MULTI_READ) 5 + #define _TRACE_MDIO_H 6 + 7 + #include <linux/tracepoint.h> 8 + 9 + TRACE_EVENT_CONDITION(mdio_access, 10 + 11 + TP_PROTO(struct mii_bus *bus, char read, 12 + u8 addr, unsigned regnum, u16 val, int err), 13 + 14 + TP_ARGS(bus, read, addr, regnum, val, err), 15 + 16 + TP_CONDITION(err >= 0), 17 + 18 + TP_STRUCT__entry( 19 + __array(char, busid, MII_BUS_ID_SIZE) 20 + __field(char, read) 21 + __field(u8, addr) 22 + __field(u16, val) 23 + __field(unsigned, regnum) 24 + ), 25 + 26 + TP_fast_assign( 27 + strncpy(__entry->busid, bus->id, MII_BUS_ID_SIZE); 28 + __entry->read = read; 29 + __entry->addr = addr; 30 + __entry->regnum = regnum; 31 + __entry->val = val; 32 + ), 33 + 34 + TP_printk("%s %-5s phy:0x%02hhx reg:0x%02x val:0x%04hx", 35 + __entry->busid, __entry->read ? "read" : "write", 36 + __entry->addr, __entry->regnum, __entry->val) 37 + ); 38 + 39 + #endif /* if !defined(_TRACE_MDIO_H) || defined(TRACE_HEADER_MULTI_READ) */ 40 + 41 + /* This part must be outside protection */ 42 + #include <trace/define_trace.h>