Commit 546e5354 authored by Ingo Molnar's avatar Ingo Molnar

Merge branch 'core/printk' into tracing/ftrace

parents af438c0f fef20d9c
...@@ -242,6 +242,19 @@ extern struct ratelimit_state printk_ratelimit_state; ...@@ -242,6 +242,19 @@ extern struct ratelimit_state printk_ratelimit_state;
extern int printk_ratelimit(void); extern int printk_ratelimit(void);
extern bool printk_timed_ratelimit(unsigned long *caller_jiffies, extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
unsigned int interval_msec); unsigned int interval_msec);
/*
* Print a one-time message (analogous to WARN_ONCE() et al):
*/
#define printk_once(x...) ({ \
static int __print_once = 1; \
\
if (__print_once) { \
__print_once = 0; \
printk(x); \
} \
})
#else #else
static inline int vprintk(const char *s, va_list args) static inline int vprintk(const char *s, va_list args)
__attribute__ ((format (printf, 1, 0))); __attribute__ ((format (printf, 1, 0)));
...@@ -253,6 +266,10 @@ static inline int printk_ratelimit(void) { return 0; } ...@@ -253,6 +266,10 @@ static inline int printk_ratelimit(void) { return 0; }
static inline bool printk_timed_ratelimit(unsigned long *caller_jiffies, \ static inline bool printk_timed_ratelimit(unsigned long *caller_jiffies, \
unsigned int interval_msec) \ unsigned int interval_msec) \
{ return false; } { return false; }
/* No effect, but we still get type checking even in the !PRINTK case: */
#define printk_once(x...) printk(x)
#endif #endif
extern int printk_needs_cpu(int cpu); extern int printk_needs_cpu(int cpu);
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include <linux/compiler.h> /* for inline */ #include <linux/compiler.h> /* for inline */
#include <linux/types.h> /* for size_t */ #include <linux/types.h> /* for size_t */
#include <linux/stddef.h> /* for NULL */ #include <linux/stddef.h> /* for NULL */
#include <stdarg.h>
extern char *strndup_user(const char __user *, long); extern char *strndup_user(const char __user *, long);
...@@ -111,6 +112,12 @@ extern void argv_free(char **argv); ...@@ -111,6 +112,12 @@ extern void argv_free(char **argv);
extern bool sysfs_streq(const char *s1, const char *s2); extern bool sysfs_streq(const char *s1, const char *s2);
#ifdef CONFIG_BINARY_PRINTF
int vbin_printf(u32 *bin_buf, size_t size, const char *fmt, va_list args);
int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf);
int bprintf(u32 *bin_buf, size_t size, const char *fmt, ...) __printf(3, 4);
#endif
extern ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos, extern ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
const void *from, size_t available); const void *from, size_t available);
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +2,9 @@
# Library configuration # Library configuration
# #
config BINARY_PRINTF
def_bool n
menu "Library routines" menu "Library routines"
config BITREVERSE config BITREVERSE
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment