Message ID | 1405619171-18172-3-git-send-email-vfalico@gmail.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
On Thu, 2014-07-17 at 19:46 +0200, Veaceslav Falico wrote: [] > diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h [] > @@ -3444,7 +3459,8 @@ do { \ > * file/line information and a backtrace. > */ > #define netdev_WARN(dev, format, args...) \ > - WARN(1, "netdevice: %s\n" format, netdev_name(dev), ##args) > + WARN(1, "netdevice: %s%s\n" format, netdev_name(dev), \ > + netdev_reg_state(dev), ##args) trivia: My preference for style here is to have the format and args on one line when it fits and separate the format and args lines when they don't. WARN(1, "netdevice: %s%s\n" format, netdev_name(dev), netdev_reg_state(dev), ##args) Unrelated: maybe it'd be better to change the '\n' to ": " > diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c [] > - res = printk(KERN_DEBUG "%s: %pV", netdev_name(dev), &vaf); > + res = printk(KERN_DEBUG "%s%s: %pV", netdev_name(dev), > + netdev_reg_state(dev), &vaf); etc... -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, Jul 17, 2014 at 12:21:39PM -0700, Joe Perches wrote: >On Thu, 2014-07-17 at 19:46 +0200, Veaceslav Falico wrote: >[] >> diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h >[] >> @@ -3444,7 +3459,8 @@ do { \ >> * file/line information and a backtrace. >> */ >> #define netdev_WARN(dev, format, args...) \ >> - WARN(1, "netdevice: %s\n" format, netdev_name(dev), ##args) >> + WARN(1, "netdevice: %s%s\n" format, netdev_name(dev), \ >> + netdev_reg_state(dev), ##args) > >trivia: > >My preference for style here is to have the format >and args on one line when it fits and separate >the format and args lines when they don't. > > WARN(1, "netdevice: %s%s\n" format, > netdev_name(dev), netdev_reg_state(dev), ##args) > >Unrelated: maybe it'd be better to change the '\n' to ": " Good points, but I guess they're minor. If I'll send v4 I'll include them. > >> diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c >[] >> - res = printk(KERN_DEBUG "%s: %pV", netdev_name(dev), &vaf); >> + res = printk(KERN_DEBUG "%s%s: %pV", netdev_name(dev), >> + netdev_reg_state(dev), &vaf); > >etc... > > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 70256aa..8e8fb3e 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -3388,6 +3388,21 @@ static inline const char *netdev_name(const struct net_device *dev) return dev->name; } +static inline const char *netdev_reg_state(const struct net_device *dev) +{ + switch (dev->reg_state) { + case NETREG_UNINITIALIZED: return " (uninitialized)"; + case NETREG_REGISTERED: return ""; + case NETREG_UNREGISTERING: return " (unregistering)"; + case NETREG_UNREGISTERED: return " (unregistered)"; + case NETREG_RELEASED: return " (released)"; + case NETREG_DUMMY: return " (dummy)"; + } + + WARN_ONCE(1, "%s: unknown reg_state %d\n", dev->name, dev->reg_state); + return " (unknown)"; +} + __printf(3, 4) int netdev_printk(const char *level, const struct net_device *dev, const char *format, ...); @@ -3444,7 +3459,8 @@ do { \ * file/line information and a backtrace. */ #define netdev_WARN(dev, format, args...) \ - WARN(1, "netdevice: %s\n" format, netdev_name(dev), ##args) + WARN(1, "netdevice: %s%s\n" format, netdev_name(dev), \ + netdev_reg_state(dev), ##args) /* netif printk helpers, similar to netdev_printk */ diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 7288e38..c9afbe2 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -614,13 +614,15 @@ int __dynamic_netdev_dbg(struct _ddebug *descriptor, char buf[PREFIX_SIZE]; res = dev_printk_emit(7, dev->dev.parent, - "%s%s %s %s: %pV", + "%s%s %s %s%s: %pV", dynamic_emit_prefix(descriptor, buf), dev_driver_string(dev->dev.parent), dev_name(dev->dev.parent), - netdev_name(dev), &vaf); + netdev_name(dev), netdev_reg_state(dev), + &vaf); } else if (dev) { - res = printk(KERN_DEBUG "%s: %pV", netdev_name(dev), &vaf); + res = printk(KERN_DEBUG "%s%s: %pV", netdev_name(dev), + netdev_reg_state(dev), &vaf); } else { res = printk(KERN_DEBUG "(NULL net_device): %pV", &vaf); } diff --git a/net/core/dev.c b/net/core/dev.c index 239722a..81d6101 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -6950,12 +6950,14 @@ static int __netdev_printk(const char *level, const struct net_device *dev, if (dev && dev->dev.parent) { r = dev_printk_emit(level[1] - '0', dev->dev.parent, - "%s %s %s: %pV", + "%s %s %s%s: %pV", dev_driver_string(dev->dev.parent), dev_name(dev->dev.parent), - netdev_name(dev), vaf); + netdev_name(dev), netdev_reg_state(dev), + vaf); } else if (dev) { - r = printk("%s%s: %pV", level, netdev_name(dev), vaf); + r = printk("%s%s%s: %pV", level, netdev_name(dev), + netdev_reg_state(dev), vaf); } else { r = printk("%s(NULL net_device): %pV", level, vaf); }
This way we'll always know in what status the device is, unless it's running normally (i.e. NETDEV_REGISTERED). Also, emit a warning once in case of a bad reg_state. CC: "David S. Miller" <davem@davemloft.net> CC: Jason Baron <jbaron@akamai.com> CC: Eric Dumazet <edumazet@google.com> CC: Vlad Yasevich <vyasevic@redhat.com> CC: stephen hemminger <stephen@networkplumber.org> CC: Jerry Chu <hkchu@google.com> CC: Ben Hutchings <bhutchings@solarflare.com> CC: Joe Perches <joe@perches.com> Signed-off-by: Veaceslav Falico <vfalico@gmail.com> --- Notes: v2->v3: Correct the string for _UNINITIALIZED and warn on a bad reg_state, per Joe Perches's comments. include/linux/netdevice.h | 18 +++++++++++++++++- lib/dynamic_debug.c | 8 +++++--- net/core/dev.c | 8 +++++--- 3 files changed, 27 insertions(+), 7 deletions(-)