From: Ingo Molnar <mingo-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Matt Fleming <matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy@public.gmane.org>
Cc: linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Matt Fleming
<matt.fleming-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
"H. Peter Anvin" <hpa-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org>,
Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>,
Peter Jones <pjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Subject: Re: [PATCH] x86/efi: Add EFI framebuffer earlyprintk support
Date: Sat, 12 Oct 2013 19:49:34 +0200 [thread overview]
Message-ID: <20131012174934.GA18849@gmail.com> (raw)
In-Reply-To: <20131011140039.GF12321-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy@public.gmane.org>
* Matt Fleming <matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy@public.gmane.org> wrote:
> On Thu, 10 Oct, at 07:28:44PM, Ingo Molnar wrote:
> > Btw., could we perhaps remap the whole framebuffer at init time, or is it
> > too large? If early_ioremap() fails for whatever reason then that will
> > emit a WARN_ON(), which will recurse in a fairly nasty way ...
>
> The framebuffer memory will be quite large, so I don't think it makes
> sense to map it all this early, because it's likely we'll run out of
> fixmap entries.
Fair enough.
> > > +static __init void early_efi_clear_screen(void)
> > > +{
> > > + struct screen_info *si;
> > > + int y;
> > > +
> > > + si = &boot_params.screen_info;
> > > + for (y = 0; y < si->lfb_height; y++)
> > > + early_efi_clear_line(y);
> >
> > Looks a bit superfluous to introduce 'si' just for that single use?
>
> I did this to reduce the length of the "for (y = 0..." line.
But that line looks fine with that included. If it goes slightly above 80
chars that's still OK IMHO.
> > > +static void early_efi_write_char(void *dst, char c, int h)
> > > +{
> > > + const u8 *src;
> > > + u32 fgcolor = 0xaaaaaa;
> >
> > That's RGB grey, right? Why not 0xffffff for a very visible white?
>
> The VGA earlyprintk code uses the equivalent grey, AFAIK, which is why I
> picked this value.
The VGA code should be changed to white too I suspect ;-)
> > > + if (efi_y + font->height >= si->lfb_height) {
> > > + early_efi_clear_screen();
> > > + efi_y = 0;
> >
> > So, if I understand it correctly this clears the screen and starts at
> > the top when we scroll off the bottom, right?
> >
> > That might make the recovery of oopses hard when the number of log
> > lines is unlucky.
> >
> > Would scrolling a few lines up instead, via a well-calculated memcpy
> > and memset be doable?
>
> Yeah we can do that. I thought about this originally but decided against
> it because I figured it would complicate the code unnecessarily. But it
> turned out to be fairly trivial.
Cool!
> > > + if (!font)
> > > + return -ENODEV;
> > > +
> > > + early_efi_clear_screen();
> >
> > Assuming we implement scrolling above, here too it might make sense to
> > scroll up the framebuffer - if the crash is early enough then some
> > firmware and boot stub info might still be present in the framebuffer?
>
> It's possible that some info will be in the framebuffer, but we can't
> begin writing immediately after the boot stub info because we don't know
> the last xy coordinates the firmware wrote to.
>
> But yeah, leaving it intact and beginning our output from the last line
> of the framebuffer makes more sense than clearing the screen entirely.
Especially with scrolling it should not matter where the previous info is
on the screen: if we start with a scroll event then we can make some space
at the bottom and start our printout there, or so.
Thanks,
Ingo
WARNING: multiple messages have this Message-ID (diff)
From: Ingo Molnar <mingo@kernel.org>
To: Matt Fleming <matt@console-pimps.org>
Cc: linux-efi@vger.kernel.org, linux-kernel@vger.kernel.org,
Matt Fleming <matt.fleming@intel.com>,
"H. Peter Anvin" <hpa@zytor.com>,
Thomas Gleixner <tglx@linutronix.de>,
Peter Jones <pjones@redhat.com>
Subject: Re: [PATCH] x86/efi: Add EFI framebuffer earlyprintk support
Date: Sat, 12 Oct 2013 19:49:34 +0200 [thread overview]
Message-ID: <20131012174934.GA18849@gmail.com> (raw)
In-Reply-To: <20131011140039.GF12321@console-pimps.org>
* Matt Fleming <matt@console-pimps.org> wrote:
> On Thu, 10 Oct, at 07:28:44PM, Ingo Molnar wrote:
> > Btw., could we perhaps remap the whole framebuffer at init time, or is it
> > too large? If early_ioremap() fails for whatever reason then that will
> > emit a WARN_ON(), which will recurse in a fairly nasty way ...
>
> The framebuffer memory will be quite large, so I don't think it makes
> sense to map it all this early, because it's likely we'll run out of
> fixmap entries.
Fair enough.
> > > +static __init void early_efi_clear_screen(void)
> > > +{
> > > + struct screen_info *si;
> > > + int y;
> > > +
> > > + si = &boot_params.screen_info;
> > > + for (y = 0; y < si->lfb_height; y++)
> > > + early_efi_clear_line(y);
> >
> > Looks a bit superfluous to introduce 'si' just for that single use?
>
> I did this to reduce the length of the "for (y = 0..." line.
But that line looks fine with that included. If it goes slightly above 80
chars that's still OK IMHO.
> > > +static void early_efi_write_char(void *dst, char c, int h)
> > > +{
> > > + const u8 *src;
> > > + u32 fgcolor = 0xaaaaaa;
> >
> > That's RGB grey, right? Why not 0xffffff for a very visible white?
>
> The VGA earlyprintk code uses the equivalent grey, AFAIK, which is why I
> picked this value.
The VGA code should be changed to white too I suspect ;-)
> > > + if (efi_y + font->height >= si->lfb_height) {
> > > + early_efi_clear_screen();
> > > + efi_y = 0;
> >
> > So, if I understand it correctly this clears the screen and starts at
> > the top when we scroll off the bottom, right?
> >
> > That might make the recovery of oopses hard when the number of log
> > lines is unlucky.
> >
> > Would scrolling a few lines up instead, via a well-calculated memcpy
> > and memset be doable?
>
> Yeah we can do that. I thought about this originally but decided against
> it because I figured it would complicate the code unnecessarily. But it
> turned out to be fairly trivial.
Cool!
> > > + if (!font)
> > > + return -ENODEV;
> > > +
> > > + early_efi_clear_screen();
> >
> > Assuming we implement scrolling above, here too it might make sense to
> > scroll up the framebuffer - if the crash is early enough then some
> > firmware and boot stub info might still be present in the framebuffer?
>
> It's possible that some info will be in the framebuffer, but we can't
> begin writing immediately after the boot stub info because we don't know
> the last xy coordinates the firmware wrote to.
>
> But yeah, leaving it intact and beginning our output from the last line
> of the framebuffer makes more sense than clearing the screen entirely.
Especially with scrolling it should not matter where the previous info is
on the screen: if we start with a scroll event then we can make some space
at the bottom and start our printout there, or so.
Thanks,
Ingo
next prev parent reply other threads:[~2013-10-12 17:49 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-10 16:41 [PATCH] x86/efi: Add EFI framebuffer earlyprintk support Matt Fleming
2013-10-10 16:41 ` Matt Fleming
[not found] ` <1381423261-30566-1-git-send-email-matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy@public.gmane.org>
2013-10-10 17:28 ` Ingo Molnar
2013-10-10 17:28 ` Ingo Molnar
[not found] ` <20131010172844.GA26430-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-10-10 17:37 ` Peter Jones
2013-10-10 17:37 ` Peter Jones
2013-10-10 17:45 ` Ingo Molnar
[not found] ` <20131010174521.GA27218-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-10-10 17:58 ` Matthew Garrett
2013-10-10 17:58 ` Matthew Garrett
[not found] ` <20131010175828.GA9065-1xO5oi07KQx4cg9Nei1l7Q@public.gmane.org>
2013-10-11 6:21 ` Ingo Molnar
2013-10-11 6:21 ` Ingo Molnar
2013-10-10 18:09 ` Peter Jones
[not found] ` <20131010180937.GD18821-FS9oOTXHwv9t4tGkRPVz9tcb/sdHg95EuydrBrBl+0sAvxtiuMwx3w@public.gmane.org>
2013-10-11 7:08 ` Geert Uytterhoeven
2013-10-11 7:08 ` Geert Uytterhoeven
2013-10-11 14:00 ` Matt Fleming
2013-10-11 14:00 ` Matt Fleming
[not found] ` <20131011140039.GF12321-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy@public.gmane.org>
2013-10-12 17:49 ` Ingo Molnar [this message]
2013-10-12 17:49 ` Ingo Molnar
[not found] ` <20131012174934.GA18849-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-10-13 20:47 ` H. Peter Anvin
2013-10-13 20:47 ` H. Peter Anvin
[not found] ` <525B06CB.6090602-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org>
2013-10-14 7:57 ` Ingo Molnar
2013-10-14 7:57 ` Ingo Molnar
[not found] ` <20131014075726.GB20435-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-10-16 9:16 ` Matt Fleming
2013-10-16 9:16 ` Matt Fleming
[not found] ` <20131016091648.GD10834-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy@public.gmane.org>
2013-10-16 9:27 ` Ingo Molnar
2013-10-16 9:27 ` Ingo Molnar
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=20131012174934.GA18849@gmail.com \
--to=mingo-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
--cc=hpa-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org \
--cc=linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy@public.gmane.org \
--cc=matt.fleming-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=pjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.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.