Messages in this thread | | | Subject | RE: [PATCH 1/7] rtlwifi: Neaten RT_ASSERT, RT_TRACE, RTPRINT, RT_PRINT_DATA macros | Date | Thu, 5 Jan 2012 11:25:30 -0000 | From | "David Laight" <> |
| |
> +#define RT_PRINT_DATA(rtlpriv, _comp, _level, _titlestring, _hexdata, \ > + _hexdatalen) \ > +do { \ > + if (unlikely(((_comp) & rtlpriv->dbg.global_debugcomponents) && \ > + (_level <= rtlpriv->dbg.global_debuglevel))) { \ > + printk(KERN_DEBUG "%s: ", KBUILD_MODNAME); \ > + pr_cont("In process \"%s\" (pid %i):", \ > + current->comm, current->pid); \ > + printk(_titlestring); \ > + print_hex_dump_bytes("", DUMP_PREFIX_NONE, \ > + _hexdata, _hexdatalen); \ > + } \ > +} while (0)
From my experiences you need to use: if (unlikely(a) && b) not: if (unlikely(a && b)) to get the expected static branch prediction.
Also, only the initial test need be in the #define, the printfs (etc) can be moved into a real function. This would reduce the code size (if used more than once).
David
| |