Skip to content

Commit

Permalink
net: print net_device reg_state in netdev_* unless it's registered
Browse files Browse the repository at this point in the history
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" <[email protected]>
CC: Jason Baron <[email protected]>
CC: Eric Dumazet <[email protected]>
CC: Vlad Yasevich <[email protected]>
CC: stephen hemminger <[email protected]>
CC: Jerry Chu <[email protected]>
CC: Ben Hutchings <[email protected]>
CC: Joe Perches <[email protected]>
Signed-off-by: Veaceslav Falico <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
vfalico authored and davem330 committed Jul 21, 2014
1 parent c6f854d commit ccc7f49
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 7 deletions.
18 changes: 17 additions & 1 deletion include/linux/netdevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -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, ...);
Expand Down Expand Up @@ -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 */

Expand Down
8 changes: 5 additions & 3 deletions lib/dynamic_debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
8 changes: 5 additions & 3 deletions net/core/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down

0 comments on commit ccc7f49

Please sign in to comment.