diff options
author | Stephen Warren <swarren@nvidia.com> | 2012-05-10 18:14:33 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-05-10 18:36:59 -0400 |
commit | f8450fca6ecdea38b5a882fdf6cd097e3ec8651c (patch) | |
tree | bd304f4638508c8a6879798384199b994cbb6c04 /kernel/printk.c | |
parent | af4681097b23fe9c63a03d774de7c742fa3a920e (diff) |
printk: correctly align __log_buf
__log_buf must be aligned, because a 64-bit value is written directly
to it as part of struct log. Alignment of the log entries is typically
handled by log_store(), but this only triggers for subsequent entries,
not the very first (or wrapped) entries.
Cc: Kay Sievers <kay@vrfy.org>
Signed-off-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'kernel/printk.c')
-rw-r--r-- | kernel/printk.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/kernel/printk.c b/kernel/printk.c index 572941d7e5f7..8b027bdf4606 100644 --- a/kernel/printk.c +++ b/kernel/printk.c | |||
@@ -227,8 +227,13 @@ static u32 clear_idx; | |||
227 | #define LOG_LINE_MAX 1024 | 227 | #define LOG_LINE_MAX 1024 |
228 | 228 | ||
229 | /* record buffer */ | 229 | /* record buffer */ |
230 | #if !defined(CONFIG_64BIT) || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) | ||
231 | #define LOG_ALIGN 4 | ||
232 | #else | ||
233 | #define LOG_ALIGN 8 | ||
234 | #endif | ||
230 | #define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT) | 235 | #define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT) |
231 | static char __log_buf[__LOG_BUF_LEN]; | 236 | static char __log_buf[__LOG_BUF_LEN] __aligned(LOG_ALIGN); |
232 | static char *log_buf = __log_buf; | 237 | static char *log_buf = __log_buf; |
233 | static u32 log_buf_len = __LOG_BUF_LEN; | 238 | static u32 log_buf_len = __LOG_BUF_LEN; |
234 | 239 | ||
@@ -279,12 +284,6 @@ static u32 log_next(u32 idx) | |||
279 | return idx + msg->len; | 284 | return idx + msg->len; |
280 | } | 285 | } |
281 | 286 | ||
282 | #if !defined(CONFIG_64BIT) || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) | ||
283 | #define LOG_ALIGN 4 | ||
284 | #else | ||
285 | #define LOG_ALIGN 8 | ||
286 | #endif | ||
287 | |||
288 | /* insert record into the buffer, discard old ones, update heads */ | 287 | /* insert record into the buffer, discard old ones, update heads */ |
289 | static void log_store(int facility, int level, | 288 | static void log_store(int facility, int level, |
290 | const char *dict, u16 dict_len, | 289 | const char *dict, u16 dict_len, |