aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/printk
diff options
context:
space:
mode:
authorLuis R. Rodriguez <mcgrof@suse.com>2014-08-06 19:08:52 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-08-06 21:01:23 -0400
commitc0a318a361e7652b8c4f7b91d3a31c771cf34e4f (patch)
tree2907d955195b811c5fbf2251f5d3088f8d59ac5b /kernel/printk
parent7030017752437cebc3ec5590735bd89ead1e4cb8 (diff)
printk: move power of 2 practice of ring buffer size to a helper
In practice the power of 2 practice of the size of the kernel ring buffer remains purely historical but not a requirement, specially now that we have LOG_ALIGN and use it for both static and dynamic allocations. It could have helped with implicit alignment back in the days given the even the dynamically sized ring buffer was guaranteed to be aligned so long as CONFIG_LOG_BUF_SHIFT was set to produce a __LOG_BUF_LEN which is architecture aligned, since log_buf_len=n would be allowed only if it was > __LOG_BUF_LEN and we always ended up rounding the log_buf_len=n to the next power of 2 with roundup_pow_of_two(), any multiple of 2 then should be also architecture aligned. These assumptions of course relied heavily on CONFIG_LOG_BUF_SHIFT producing an aligned value but users can always change this. We now have precise alignment requirements set for the log buffer size for both static and dynamic allocations, but lets upkeep the old practice of using powers of 2 for its size to help with easy expected scalable values and the allocators for dynamic allocations. We'll reuse this later so move this into a helper. Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com> Cc: Andrew Lunn <andrew@lunn.ch> Cc: Stephen Warren <swarren@wwwdotorg.org> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Michal Hocko <mhocko@suse.cz> Cc: Petr Mladek <pmladek@suse.cz> Cc: Joe Perches <joe@perches.com> Cc: Arun KS <arunks.linux@gmail.com> Cc: Kees Cook <keescook@chromium.org> Cc: Davidlohr Bueso <davidlohr@hp.com> Cc: Chris Metcalf <cmetcalf@tilera.com> Cc: Jan Kara <jack@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel/printk')
-rw-r--r--kernel/printk/printk.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index 6f598f92f2a1..32ad0c7a0cd3 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -828,15 +828,21 @@ void log_buf_kexec_setup(void)
828/* requested log_buf_len from kernel cmdline */ 828/* requested log_buf_len from kernel cmdline */
829static unsigned long __initdata new_log_buf_len; 829static unsigned long __initdata new_log_buf_len;
830 830
831/* save requested log_buf_len since it's too early to process it */ 831/* we practice scaling the ring buffer by powers of 2 */
832static int __init log_buf_len_setup(char *str) 832static void __init log_buf_len_update(unsigned size)
833{ 833{
834 unsigned size = memparse(str, &str);
835
836 if (size) 834 if (size)
837 size = roundup_pow_of_two(size); 835 size = roundup_pow_of_two(size);
838 if (size > log_buf_len) 836 if (size > log_buf_len)
839 new_log_buf_len = size; 837 new_log_buf_len = size;
838}
839
840/* save requested log_buf_len since it's too early to process it */
841static int __init log_buf_len_setup(char *str)
842{
843 unsigned size = memparse(str, &str);
844
845 log_buf_len_update(size);
840 846
841 return 0; 847 return 0;
842} 848}