From: Borislav Petkov <bp@suse.de>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Andrew Morton <akpm@linux-foundation.org>
Cc: Alexander Kuleshov <kuleshovmail@gmail.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
LKML <linux-kernel@vger.kernel.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Mark Rustad <mark.d.rustad@intel.com>,
Yinghai Lu <yinghai@kernel.org>
Subject: Re: [PATCH v11 3/5] x86/earlyprintk: Allocate early log_buf as early as possible
Date: Tue, 9 Jun 2015 18:07:27 +0200 [thread overview]
Message-ID: <20150609160727.GG22105@pd.tnic> (raw)
In-Reply-To: <1433865532.26331.108.camel@linux.intel.com>
On Tue, Jun 09, 2015 at 06:58:52PM +0300, Andy Shevchenko wrote:
> On Tue, 2015-06-09 at 17:11 +0600, Alexander Kuleshov wrote:
> > This patch moves call of the early setup_log_buf from the
> > arch/x86/kernel/setup.c to the arch/x86/kernel/head{32,64}.c
> > and updates log_buf with the earlyprintk messages.
> >
>
> Didn't mention lockdep_init() change. Regarding to what Borislav told
> you how do you handle double call of lockdep_init()?
>
>
> > We need to do it because without it we will not see earlyprintk
> > messages in the kernel log.
> >
> > Signed-off-by: Alexander Kuleshov <kuleshovmail@gmail.com>
> > ---
> > arch/x86/kernel/head32.c | 6 ++++++
> > arch/x86/kernel/head64.c | 5 +++++
> > arch/x86/kernel/setup.c | 3 ---
> > kernel/printk/printk.c | 5 +++++
> > 4 files changed, 16 insertions(+), 3 deletions(-)
> >
> > diff --git a/arch/x86/kernel/head32.c b/arch/x86/kernel/head32.c
> > index 92e8b5f..f28d10f 100644
> > --- a/arch/x86/kernel/head32.c
> > +++ b/arch/x86/kernel/head32.c
> > @@ -32,2 +32,2 @@ static void __init i386_default_early_setup(void)
> > asmlinkage __visible void __init i386_start_kernel(void)
> > {
> > setup_builtin_cmdline();
> > +
> > + lockdep_init();
> > +
> > + /* Allocate early log buffer */
> > + setup_log_buf(1);
> > +
> > cr4_init_shadow();
> > sanitize_boot_params(&boot_params);
> >
> > diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
> > index 1e5f064..53662d2 100644
> > --- a/arch/x86/kernel/head64.c
> > +++ b/arch/x86/kernel/head64.c
> > @@ -174,0 +174,0 @@ asmlinkage __visible void __init x86_64_start_kernel(char * real_mode_data)
> >
> > setup_builtin_cmdline();
> >
> > + lockdep_init();
> > +
> > + /* Allocate early log buffer */
> > + setup_log_buf(1);
> > +
> > /*
> > * Load microcode early on BSP.
> > */
> > diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
> > index 0aeee0a..edfdb6a 100644
> > --- a/arch/x86/kernel/setup.c
> > +++ b/arch/x86/kernel/setup.c
> > @@ -1146,9 +1146,6 @@ void __init setup_arch(char **cmdline_p)
> > if (init_ohci1394_dma_early)
> > init_ohci1394_dma_on_all_controllers();
> > #endif
> > - /* Allocate bigger log buffer */
> > - setup_log_buf(1);
> > -
> > reserve_initrd();
> >
> > #if defined(CONFIG_ACPI) && defined(CONFIG_BLK_DEV_INITRD)
> > diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
> > index c099b08..d76a032 100644
> > --- a/kernel/printk/printk.c
> > +++ b/kernel/printk/printk.c
> > @@ -1913,6 +1913,7 @@ asmlinkage __visible void early_printk(const char *fmt, ...)
> > va_list ap;
> > char buf[512];
> > int n;
> > + printk_func_t vprintk_func;
>
> Rearrange this to be upper a bit, for example before char buf[].
>
> >
> > if (!early_console)
> > return;
> > @@ -1922,7 +1923,10 @@ asmlinkage __visible void early_printk(const char *fmt, ...)
> > va_end(ap);
> >
> > early_console->write(early_console, buf, n);
> > +
> > + /* Store earlyprintk messages in the log_buf */
> > + vprintk_func = this_cpu_read(printk_func);
> > + vprintk_func(fmt, ap);
>
> Shouldn't be
>
> va_start(ap, fmt);
> …
> vprintk_func(…);
> va_end(ap);
>
> ?
>
> Also, when you print the same message to the serial and to kernel
> buffer, do you avoid duplication? Your early_printk messages needs flag
> LOG_NOCONS if I understand correctly.
Calling printk_func that early - which basically is vprintk_default
- I'm not sure, TBH. He pulls setup_log_buf() up but I'm not sure
everything would be kosher that early in the boot. And I don't know the
whole "fun" of printk() to make an informed decision here.
Let me add akpm. Andrew, see above (not snipping it). Do you see any
problems with snatching that printk_func per-cpu pointer that early and
and using it to print to log_buf so that early_printk() calls very early
in the boot are visible in dmesg?
Thanks.
--
Regards/Gruss,
Boris.
ECO tip #101: Trim your mails when you reply.
--
next prev parent reply other threads:[~2015-06-09 16:07 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-09 11:10 [PATCH v11 0/5] x86/earlyprintk: setup serial earlyprintk as early as possible Alexander Kuleshov
2015-06-09 11:11 ` [PATCH v11 1/5] x86/setup: introduce setup_bultin_cmdline Alexander Kuleshov
2015-06-09 15:32 ` Andy Shevchenko
2015-06-09 11:11 ` [PATCH v11 2/5] x86/setup: handle builtin command line as early as possible Alexander Kuleshov
2015-06-09 11:11 ` [PATCH v11 3/5] x86/earlyprintk: Allocate early log_buf " Alexander Kuleshov
2015-06-09 15:58 ` Andy Shevchenko
2015-06-09 16:07 ` Borislav Petkov [this message]
2015-06-09 17:37 ` Alexander Kuleshov
2015-06-10 9:04 ` Borislav Petkov
2015-06-10 9:25 ` Alexander Kuleshov
2015-06-09 11:11 ` [PATCH v11 4/5] x86/earlyprintk: setup earlyprintk " Alexander Kuleshov
2015-06-09 17:00 ` Andy Shevchenko
2015-06-09 18:00 ` Alexander Kuleshov
2015-06-10 9:44 ` Andy Shevchenko
2015-06-10 10:36 ` Alexander Kuleshov
2015-06-10 10:41 ` Alexander Kuleshov
2015-06-09 11:11 ` [PATCH v11 5/5] x86/earlyprintk: Patch for testing earlyprintk Alexander Kuleshov
2015-06-09 15:30 ` Andy Shevchenko
2015-06-09 16:11 ` Borislav Petkov
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=20150609160727.GG22105@pd.tnic \
--to=bp@suse.de \
--cc=akpm@linux-foundation.org \
--cc=andriy.shevchenko@linux.intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=hpa@zytor.com \
--cc=kuleshovmail@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.d.rustad@intel.com \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
--cc=yinghai@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox