Message ID | 20180816093418.2621-1-tobias@waldekranz.com |
---|---|
State | Superseded, archived |
Delegated to: | David Miller |
Headers | show |
Series | net: phy: add tracepoints | expand |
On Thu, Aug 16, 2018 at 11:34:15AM +0200, Tobias Waldekranz wrote: > Two tracepoints for now: > > * `phy_interrupt` Pretty self-explanatory. > > * `phy_state_change` Whenever the PHY's state machine is run, trace > the old and the new state. > > Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com> > --- > drivers/net/phy/phy.c | 4 +++ > include/trace/events/phy.h | 68 ++++++++++++++++++++++++++++++++++++++ > 2 files changed, 72 insertions(+) > create mode 100644 include/trace/events/phy.h > > diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c > index 9aabfa1a455a..8d22926f3962 100644 > --- a/drivers/net/phy/phy.c > +++ b/drivers/net/phy/phy.c > @@ -38,6 +38,9 @@ > > #include <asm/irq.h> > > +#define CREATE_TRACE_POINTS > +#include <trace/events/phy.h> > + > #define PHY_STATE_STR(_state) \ > case PHY_##_state: \ > return __stringify(_state); \ > @@ -1039,6 +1042,7 @@ void phy_state_machine(struct work_struct *work) > if (err < 0) > phy_error(phydev); > > + trace_phy_state_change(phydev, old_state); > if (old_state != phydev->state) > phydev_dbg(phydev, "PHY state change %s -> %s\n", > phy_state_to_str(old_state), > diff --git a/include/trace/events/phy.h b/include/trace/events/phy.h > new file mode 100644 > index 000000000000..7ba6c0dda47e > --- /dev/null > +++ b/include/trace/events/phy.h > @@ -0,0 +1,68 @@ > +#undef TRACE_SYSTEM > +#define TRACE_SYSTEM phy > + > +#if !defined(_TRACE_PHY_H) || defined(TRACE_HEADER_MULTI_READ) > +#define _TRACE_PHY_H > + > +#include <linux/tracepoint.h> > + > +TRACE_EVENT(phy_interrupt, > + TP_PROTO(int irq, struct phy_device *phydev), > + TP_ARGS(irq, phydev), > + TP_STRUCT__entry( > + __field(int, irq) > + __field(int, addr) > + __field(int, state) > + __array(char, ifname, IFNAMSIZ) > + ), > + TP_fast_assign( > + __entry->irq = irq; > + __entry->addr = phydev->mdio.addr; > + __entry->state = phydev->state; > + if (phydev->attached_dev) > + memcpy(__entry->ifname, > + netdev_name(phydev->attached_dev), > + IFNAMSIZ); > + else > + memset(__entry->ifname, 0, IFNAMSIZ); > + ), > + TP_printk("phy-%d-irq irq=%d ifname=%16s state=%d", > + __entry->addr, > + __entry->irq, > + __entry->ifname, > + __entry->state > + ) > + ); > + > +TRACE_EVENT(phy_state_change, > + TP_PROTO(struct phy_device *phydev, enum phy_state old_state), > + TP_ARGS(phydev, old_state), > + TP_STRUCT__entry( > + __field(int, addr) > + __field(int, state) > + __field(int, old_state) > + __array(char, ifname, IFNAMSIZ) > + ), > + TP_fast_assign( > + __entry->addr = phydev->mdio.addr; > + __entry->state = phydev->state; > + __entry->old_state = old_state; > + if (phydev->attached_dev) > + memcpy(__entry->ifname, > + netdev_name(phydev->attached_dev), > + IFNAMSIZ); > + else > + memset(__entry->ifname, 0, IFNAMSIZ); > + ), > + TP_printk("phy-%d-change ifname=%16s old_state=%d state=%d", > + __entry->addr, > + __entry->ifname, > + __entry->old_state, > + __entry->state > + ) > + ); > + > +#endif /* _TRACE_PHY_H */ > + > +/* This part must be outside protection */ > +#include <trace/define_trace.h> > -- > 2.17.1 > This was sent in error. A v2 will follow. I had not used get_maintainers.pl before, sorry about the noise!
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 9aabfa1a455a..8d22926f3962 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -38,6 +38,9 @@ #include <asm/irq.h> +#define CREATE_TRACE_POINTS +#include <trace/events/phy.h> + #define PHY_STATE_STR(_state) \ case PHY_##_state: \ return __stringify(_state); \ @@ -1039,6 +1042,7 @@ void phy_state_machine(struct work_struct *work) if (err < 0) phy_error(phydev); + trace_phy_state_change(phydev, old_state); if (old_state != phydev->state) phydev_dbg(phydev, "PHY state change %s -> %s\n", phy_state_to_str(old_state), diff --git a/include/trace/events/phy.h b/include/trace/events/phy.h new file mode 100644 index 000000000000..7ba6c0dda47e --- /dev/null +++ b/include/trace/events/phy.h @@ -0,0 +1,68 @@ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM phy + +#if !defined(_TRACE_PHY_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_PHY_H + +#include <linux/tracepoint.h> + +TRACE_EVENT(phy_interrupt, + TP_PROTO(int irq, struct phy_device *phydev), + TP_ARGS(irq, phydev), + TP_STRUCT__entry( + __field(int, irq) + __field(int, addr) + __field(int, state) + __array(char, ifname, IFNAMSIZ) + ), + TP_fast_assign( + __entry->irq = irq; + __entry->addr = phydev->mdio.addr; + __entry->state = phydev->state; + if (phydev->attached_dev) + memcpy(__entry->ifname, + netdev_name(phydev->attached_dev), + IFNAMSIZ); + else + memset(__entry->ifname, 0, IFNAMSIZ); + ), + TP_printk("phy-%d-irq irq=%d ifname=%16s state=%d", + __entry->addr, + __entry->irq, + __entry->ifname, + __entry->state + ) + ); + +TRACE_EVENT(phy_state_change, + TP_PROTO(struct phy_device *phydev, enum phy_state old_state), + TP_ARGS(phydev, old_state), + TP_STRUCT__entry( + __field(int, addr) + __field(int, state) + __field(int, old_state) + __array(char, ifname, IFNAMSIZ) + ), + TP_fast_assign( + __entry->addr = phydev->mdio.addr; + __entry->state = phydev->state; + __entry->old_state = old_state; + if (phydev->attached_dev) + memcpy(__entry->ifname, + netdev_name(phydev->attached_dev), + IFNAMSIZ); + else + memset(__entry->ifname, 0, IFNAMSIZ); + ), + TP_printk("phy-%d-change ifname=%16s old_state=%d state=%d", + __entry->addr, + __entry->ifname, + __entry->old_state, + __entry->state + ) + ); + +#endif /* _TRACE_PHY_H */ + +/* This part must be outside protection */ +#include <trace/define_trace.h>
Two tracepoints for now: * `phy_interrupt` Pretty self-explanatory. * `phy_state_change` Whenever the PHY's state machine is run, trace the old and the new state. Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com> --- drivers/net/phy/phy.c | 4 +++ include/trace/events/phy.h | 68 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 include/trace/events/phy.h