From: "Luis R. Rodriguez" <mcgrof@do-not-panic.com>
To: gregkh@linuxfoundation.org, akpm@linux-foundation.org,
hpa@linux.intel.com
Cc: linux-kernel@vger.kernel.org,
"Luis R. Rodriguez" <mcgrof@suse.com>,
Andrew Lunn <andrew@lunn.ch>,
Stephen Warren <swarren@wwwdotorg.org>,
Michal Hocko <mhocko@suse.cz>, Petr Mladek <pmladek@suse.cz>,
Joe Perches <joe@perches.com>, Arun KS <arunks.linux@gmail.com>,
Kees Cook <keescook@chromium.org>,
Davidlohr Bueso <davidlohr@hp.com>,
Chris Metcalf <cmetcalf@tilera.com>
Subject: [PATCH v8 1/4] printk: make dynamic kernel ring buffer alignment explicit
Date: Wed, 18 Jun 2014 13:45:34 -0700 [thread overview]
Message-ID: <1403124337-14886-1-git-send-email-mcgrof@do-not-panic.com> (raw)
From: "Luis R. Rodriguez" <mcgrof@suse.com>
We have to consider alignment for the ring buffer both for the
default static size, and then also for when an dynamic allocation
is made when the log_buf_len=n kernel parameter is passed to set
the size specifically to a size larger than the default size set
by the architecture through CONFIG_LOG_BUF_SHIFT.
The default static kernel ring buffer can be aligned properly if
architectures set CONFIG_LOG_BUF_SHIFT properly, we provide ranges
for the size though so even if CONFIG_LOG_BUF_SHIFT has a sensible
aligned value it can be reduced to a non aligned value. Commit
6ebb017de9 by Andrew ensures the static buffer is always aligned
and the decision of alignment is done by the compiler by using
__alignof__(struct log).
When log_buf_len=n is used we allocate the ring buffer dynamically.
Dynamic allocation varies, for the early allocation called
before setup_arch() memblock_virt_alloc() requests a page aligment
and for the default kernel allocation memblock_virt_alloc_nopanic()
requests no special alignment, which in turn ends up aligning the
allocation to SMP_CACHE_BYTES, which is L1 cache aligned.
Since we already have the required alignment for the kernel ring
buffer though we can do better and request explicit alignment for
LOG_ALIGN. This does that to be safe and make dynamic allocation
alignment explicit.
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: Andrew Morton <akpm@linux-foundation.org>
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: linux-kernel@vger.kernel.org
Acked-by: Petr Mladek <pmladek@suse.cz>
Tested-by: Petr Mladek <pmladek@suse.cz>
Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com>
---
kernel/printk/printk.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index ea2d5f6..78ceccf 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -853,9 +853,10 @@ void __init setup_log_buf(int early)
if (early) {
new_log_buf =
- memblock_virt_alloc(new_log_buf_len, PAGE_SIZE);
+ memblock_virt_alloc(new_log_buf_len, LOG_ALIGN);
} else {
- new_log_buf = memblock_virt_alloc_nopanic(new_log_buf_len, 0);
+ new_log_buf = memblock_virt_alloc_nopanic(new_log_buf_len,
+ LOG_ALIGN);
}
if (unlikely(!new_log_buf)) {
--
1.9.3
next reply other threads:[~2014-06-18 20:45 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-18 20:45 Luis R. Rodriguez [this message]
2014-06-18 20:45 ` [PATCH v8 2/4] printk: move power of 2 practice of ring buffer size to a helper Luis R. Rodriguez
2014-06-18 20:45 ` [PATCH v8 3/4] printk: make dynamic units clear for the kernel ring buffer Luis R. Rodriguez
2014-06-18 20:45 ` [PATCH v8 4/4] printk: allow increasing the ring buffer depending on the number of CPUs Luis R. Rodriguez
2014-06-23 22:41 ` Andrew Morton
2014-06-24 0:20 ` Luis R. Rodriguez
2014-06-24 0:45 ` Andrew Morton
2014-06-24 1:05 ` Luis R. Rodriguez
2014-06-26 21:41 ` Andrew Morton
2014-06-26 23:16 ` Luis R. Rodriguez
2014-06-26 23:20 ` Andrew Morton
2014-06-26 23:32 ` Luis R. Rodriguez
2014-06-27 23:59 ` Andrew Morton
2014-06-28 1:20 ` Luis R. Rodriguez
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1403124337-14886-1-git-send-email-mcgrof@do-not-panic.com \
--to=mcgrof@do-not-panic.com \
--cc=akpm@linux-foundation.org \
--cc=andrew@lunn.ch \
--cc=arunks.linux@gmail.com \
--cc=cmetcalf@tilera.com \
--cc=davidlohr@hp.com \
--cc=gregkh@linuxfoundation.org \
--cc=hpa@linux.intel.com \
--cc=joe@perches.com \
--cc=keescook@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mcgrof@suse.com \
--cc=mhocko@suse.cz \
--cc=pmladek@suse.cz \
--cc=swarren@wwwdotorg.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.