Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
printing_debugging [2018/09/25 13:20] – [Defining macros] rpjdayprinting_debugging [2018/09/25 13:27] (current) – [__netdev_printk()] rpjday
Line 244: Line 244:
 define_netdev_printk_level(netdev_info, KERN_INFO); define_netdev_printk_level(netdev_info, KERN_INFO);
 </code> </code>
 +
 +==== Alternate way of calling __netdev_printk() ====
 +
 +<code>
 +void netdev_printk(const char *level, const struct net_device *dev,
 +                   const char *format, ...)
 +{
 +        struct va_format vaf;
 +        va_list args;
 +
 +        va_start(args, format);
 +
 +        vaf.fmt = format;
 +        vaf.va = &args;
 +
 +        __netdev_printk(level, dev, &vaf);
 +
 +        va_end(args);
 +}
 +EXPORT_SYMBOL(netdev_printk);
 +</code>
 +
 +==== __netdev_printk() ====
 +
 +<code>
 +static void __netdev_printk(const char *level, const struct net_device *dev,
 +                            struct va_format *vaf)
 +{
 +        if (dev && dev->dev.parent) {
 +                dev_printk_emit(level[1] - '0',
 +                                dev->dev.parent,
 +                                "%s %s %s%s: %pV",
 +                                dev_driver_string(dev->dev.parent),
 +                                dev_name(dev->dev.parent),
 +                                netdev_name(dev), netdev_reg_state(dev),
 +                                vaf);
 +        } else if (dev) {
 +                printk("%s%s%s: %pV",
 +                       level, netdev_name(dev), netdev_reg_state(dev), vaf);
 +        } else {
 +                printk("%s(NULL net_device): %pV", level, vaf);
 +        }
 +}
 +</code>
 +
 +===== Dynamic debugging =====
 +
 +... coming ...
  • printing_debugging.1537881617.txt.gz
  • Last modified: 2018/09/25 13:20
  • by rpjday