| From d8521fcc5e0ad3e79bbc4231bb20a6cdc2b50164 Mon Sep 17 00:00:00 2001 |
| From: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> |
| Date: Mon, 24 May 2010 14:33:11 -0700 |
| Subject: printk_ratelimited(): fix uninitialized spinlock |
| |
| From: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> |
| |
| commit d8521fcc5e0ad3e79bbc4231bb20a6cdc2b50164 upstream. |
| |
| ratelimit_state initialization of printk_ratelimited() seems broken. This |
| fixes it by using DEFINE_RATELIMIT_STATE() to initialize spinlock |
| properly. |
| |
| Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> |
| Cc: Joe Perches <joe@perches.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Sven-Haegar Koch <haegar@sdinet.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| include/linux/kernel.h | 15 +++++++-------- |
| 1 file changed, 7 insertions(+), 8 deletions(-) |
| |
| --- a/include/linux/kernel.h |
| +++ b/include/linux/kernel.h |
| @@ -411,14 +411,13 @@ static inline char *pack_hex_byte(char * |
| * no local ratelimit_state used in the !PRINTK case |
| */ |
| #ifdef CONFIG_PRINTK |
| -#define printk_ratelimited(fmt, ...) ({ \ |
| - static struct ratelimit_state _rs = { \ |
| - .interval = DEFAULT_RATELIMIT_INTERVAL, \ |
| - .burst = DEFAULT_RATELIMIT_BURST, \ |
| - }; \ |
| - \ |
| - if (__ratelimit(&_rs)) \ |
| - printk(fmt, ##__VA_ARGS__); \ |
| +#define printk_ratelimited(fmt, ...) ({ \ |
| + static DEFINE_RATELIMIT_STATE(_rs, \ |
| + DEFAULT_RATELIMIT_INTERVAL, \ |
| + DEFAULT_RATELIMIT_BURST); \ |
| + \ |
| + if (__ratelimit(&_rs)) \ |
| + printk(fmt, ##__VA_ARGS__); \ |
| }) |
| #else |
| /* No effect, but we still get type checking even in the !PRINTK case: */ |