|
@@ -108,11 +108,14 @@ struct va_format {
|
|
|
* Dummy printk for disabled debugging statements to use whilst maintaining
|
|
|
* gcc's format checking.
|
|
|
*/
|
|
|
-#define no_printk(fmt, ...) \
|
|
|
-do { \
|
|
|
- if (0) \
|
|
|
- printk(fmt, ##__VA_ARGS__); \
|
|
|
-} while (0)
|
|
|
+#define no_printk(fmt, ...) \
|
|
|
+({ \
|
|
|
+ do { \
|
|
|
+ if (0) \
|
|
|
+ printk(fmt, ##__VA_ARGS__); \
|
|
|
+ } while (0); \
|
|
|
+ 0; \
|
|
|
+})
|
|
|
|
|
|
#ifdef CONFIG_EARLY_PRINTK
|
|
|
extern asmlinkage __printf(1, 2)
|
|
@@ -309,20 +312,24 @@ extern asmlinkage void dump_stack(void) __cold;
|
|
|
#define printk_once(fmt, ...) \
|
|
|
({ \
|
|
|
static bool __print_once __read_mostly; \
|
|
|
+ bool __ret_print_once = !__print_once; \
|
|
|
\
|
|
|
if (!__print_once) { \
|
|
|
__print_once = true; \
|
|
|
printk(fmt, ##__VA_ARGS__); \
|
|
|
} \
|
|
|
+ unlikely(__ret_print_once); \
|
|
|
})
|
|
|
#define printk_deferred_once(fmt, ...) \
|
|
|
({ \
|
|
|
static bool __print_once __read_mostly; \
|
|
|
+ bool __ret_print_once = !__print_once; \
|
|
|
\
|
|
|
if (!__print_once) { \
|
|
|
__print_once = true; \
|
|
|
printk_deferred(fmt, ##__VA_ARGS__); \
|
|
|
} \
|
|
|
+ unlikely(__ret_print_once); \
|
|
|
})
|
|
|
#else
|
|
|
#define printk_once(fmt, ...) \
|