Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| printing_debugging [2018/09/25 13:20] – [Defining macros] rpjday | printing_debugging [2018/09/25 13:27] (current) – [__netdev_printk()] rpjday | ||
|---|---|---|---|
| Line 244: | Line 244: | ||
| define_netdev_printk_level(netdev_info, | define_netdev_printk_level(netdev_info, | ||
| </ | </ | ||
| + | |||
| + | ==== Alternate way of calling __netdev_printk() ==== | ||
| + | |||
| + | < | ||
| + | void netdev_printk(const char *level, const struct net_device *dev, | ||
| + | const char *format, ...) | ||
| + | { | ||
| + | struct va_format vaf; | ||
| + | va_list args; | ||
| + | |||
| + | va_start(args, | ||
| + | |||
| + | vaf.fmt = format; | ||
| + | vaf.va = &args; | ||
| + | |||
| + | __netdev_printk(level, | ||
| + | |||
| + | va_end(args); | ||
| + | } | ||
| + | EXPORT_SYMBOL(netdev_printk); | ||
| + | </ | ||
| + | |||
| + | ==== __netdev_printk() ==== | ||
| + | |||
| + | < | ||
| + | static void __netdev_printk(const char *level, const struct net_device *dev, | ||
| + | struct va_format *vaf) | ||
| + | { | ||
| + | if (dev && dev-> | ||
| + | dev_printk_emit(level[1] - ' | ||
| + | dev-> | ||
| + | "%s %s %s%s: %pV", | ||
| + | dev_driver_string(dev-> | ||
| + | dev_name(dev-> | ||
| + | netdev_name(dev), | ||
| + | vaf); | ||
| + | } else if (dev) { | ||
| + | printk(" | ||
| + | | ||
| + | } else { | ||
| + | printk(" | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Dynamic debugging ===== | ||
| + | |||
| + | ... coming ... | ||