All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alexander van Heukelum" <heukelum@fastmail.fm>
To: "Mark McLoughlin" <markmc@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>
Cc: "Ingo Molnar" <mingo@elte.hu>,
	"Ian Campbell" <ijc@hellion.org.uk>, "Andi Kleen" <ak@suse.de>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Jeremy Fitzhardinge" <jeremy@goop.org>,
	"LKML" <linux-kernel@vger.kernel.org>,
	"Alexander van Heukelum" <heukelum@mailshack.com>
Subject: Re: [PATCH] reserve end-of-conventional-memory to 1MB on 32-bit v2
Date: Tue, 04 Mar 2008 14:31:23 +0100	[thread overview]
Message-ID: <1204637483.28473.1240465303@webmail.messagingengine.com> (raw)
In-Reply-To: <1204631082.16613.7.camel@muff>

On Tue, 04 Mar 2008 11:44:42 +0000, "Mark McLoughlin"
<markmc@redhat.com> said:
> On Sat, 2008-03-01 at 17:09 +0100, Alexander van Heukelum wrote:
> > This patch adds explicit detection of the EBDA and reservation
> > of the rom and adapter address space 0xa0000-0x100000 to the
> > i386 kernels. Before this patch, the EBDA size was hardcoded
> > as 4Kb. Also, the reservation of the adapter range was done by
> > modifying the e820 map which is now not necessary any longer,
> > and that code is removed from copy_e820_map.
> > 
> > The amount of conventional memory and the start of the EBDA are
> > detected by reading the BIOS data area directly. Paravirtual
> > environments do not provide this area, so we bail out early
> > in that case. They will just have to set up a correct memory
> > map to start with.
> > 
> > Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm>
> > 
> > ---
> > 
> > Hi Ingo,
> > 
> > This is the second attempt at a i386-version of the ebda
> > patch. I hope that one of the Xen people will be able to
> > check that this does not break their setups, but I think
> > it will be fine after their patch to exclude the 0x9f000-
> > 0x100000 area explicitly in their setup.
> 
> Confirmed that with Ian's e820 map patch and your patch, Xen DomU boots
> fine.

Thanks for testing that!

> > diff --git a/arch/x86/kernel/setup_32.c b/arch/x86/kernel/setup_32.c
> > index a1d7071..20e537b 100644
> > --- a/arch/x86/kernel/setup_32.c
> > +++ b/arch/x86/kernel/setup_32.c
> > @@ -385,15 +385,60 @@ unsigned long __init find_max_low_pfn(void)
> >  	return max_low_pfn;
> >  }
> >  
> > +#define BIOS_EBDA_SEGMENT 0x40E
> > +#define BIOS_LOWMEM_KILOBYTES 0x413
> > +
> >  /*
> > - * workaround for Dell systems that neglect to reserve EBDA
> > + * The BIOS places the EBDA/XBDA at the top of conventional
> > + * memory, and usually decreases the reported amount of
> > + * conventional memory (int 0x12) too. This also contains a
> > + * workaround for Dell systems that neglect to reserve EBDA.
> > + * The same workaround also avoids a problem with the AMD768MPX
> > + * chipset: reserve a page before VGA to prevent PCI prefetch
> > + * into it (errata #56). Usually the page is reserved anyways,
> > + * unless you have no PS/2 mouse plugged in.
> >   */
> >  static void __init reserve_ebda_region(void)
> >  {
> > -	unsigned int addr;
> > -	addr = get_bios_ebda();
> > -	if (addr)
> > -		reserve_bootmem(addr, PAGE_SIZE, BOOTMEM_DEFAULT);
> > +	unsigned int lowmem, ebda_addr;
> > +
> > +	/* To determine the position of the EBDA and the */
> > +	/* end of conventional memory, we need to look at */
> > +	/* the BIOS data area. In a paravirtual environment */
> > +	/* that area is absent. We'll just have to assume */
> > +	/* that the paravirt case can handle memory setup */
> > +	/* correctly, without our help. */
> > +#ifdef CONFIG_PARAVIRT
> > +	if ((boot_params.hdr.version >= 0x207) &&
> > +			(boot_params.hdr.hardware_subarch != 0)) {
> > +		return;
> > +	}
> > +#endif
> 
> This is a bit magic, is it worth splitting it out as something like
> is_paravirt_environment() ?

Yes, I guess it would make sense, but do we really want to start
creating accessor functions to the boot_params struct? If we do,
then maybe put this as an inline function in <asm-x86/bootparam.h>?
I don't think <asm-x86/paravirt.h> is the right place for this.

Should is_paravirt_environment then always return 0 if
CONFIG_PARAVIRT is not set? Maybe a function like get_subarch
would be preferable? or has_legacy_bios_areas? I don't know.
If someone makes a reasonable suggestion, I'll code it up.

Greetings,
    Alexander

> Cheers,
> Mark.
-- 
  Alexander van Heukelum
  heukelum@fastmail.fm

-- 
http://www.fastmail.fm - And now for something completely different…


  reply	other threads:[~2008-03-04 13:31 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-24 17:46 [PATCH] Fix alignment of early reservation for EBDA Alexander van Heukelum
2008-02-24 19:27 ` Andi Kleen
2008-02-24 19:41 ` Ingo Molnar
2008-02-24 20:53   ` Alexander van Heukelum
2008-02-25  2:18 ` H. Peter Anvin
2008-02-25 16:54   ` Alexander van Heukelum
2008-02-25 17:01     ` Ingo Molnar
2008-02-25 18:07       ` [PATCH] reserve_early end-of-conventional-memory to 1MB Alexander van Heukelum
2008-02-25 18:13         ` H. Peter Anvin
2008-02-25 19:46           ` Alexander van Heukelum
2008-02-25 21:17             ` H. Peter Anvin
2008-02-26  9:30             ` Ingo Molnar
2008-02-27 14:26               ` Andi Kleen
2008-02-27 14:38               ` [PATCH] reserve_early end-of-conventional-memory to 1MB II - some numbers to put it into perspective Andi Kleen
2008-02-27 16:44                 ` H. Peter Anvin
2008-02-27 20:01                 ` Alexander van Heukelum
2008-02-28 13:13         ` [PATCH] reserve end-of-conventional-memory to 1MB on 32-bit Alexander van Heukelum
2008-02-28 13:28           ` [RFC] use realmode code to reserve end-of-conventional-memory to 1MB Alexander van Heukelum
2008-02-28 21:12             ` Ian Campbell
2008-02-28 21:14               ` H. Peter Anvin
2008-02-28 23:16                 ` Ian Campbell
2008-02-29 20:00                   ` Ingo Molnar
2008-03-04 11:41                   ` Mark McLoughlin
2008-03-04 14:33                     ` Ingo Molnar
2008-03-04 15:12                       ` Ian Campbell
2008-03-04 15:13                       ` Jeremy Fitzhardinge
2008-03-04 15:25                         ` Ingo Molnar
2008-03-04 16:02                           ` Jeremy Fitzhardinge
2008-03-04 16:15                             ` Ingo Molnar
2008-03-04 16:15                       ` Mark McLoughlin
2008-03-04 16:23                         ` Ingo Molnar
2008-03-04 17:44                   ` Jeremy Fitzhardinge
2008-03-05 15:59                   ` Eduardo Habkost
2008-03-05 16:08                     ` H. Peter Anvin
2008-03-05 16:53                       ` Eduardo Habkost
2008-03-05 17:28                         ` H. Peter Anvin
2008-03-05 17:28                           ` Jeremy Fitzhardinge
2008-03-05 17:38                             ` H. Peter Anvin
2008-03-05 16:38                     ` Jeremy Fitzhardinge
2008-03-05 17:27                       ` H. Peter Anvin
2008-02-28 21:09           ` [PATCH] reserve end-of-conventional-memory to 1MB on 32-bit Ian Campbell
2008-02-29 11:49             ` Alexander van Heukelum
2008-02-29 17:14               ` Mark McLoughlin
2008-02-29 18:38                 ` Alexander van Heukelum
2008-02-29 18:44                   ` H. Peter Anvin
2008-02-29 18:56                     ` Alexander van Heukelum
2008-02-29 22:06                   ` Mark McLoughlin
2008-02-29 22:26                     ` Alexander van Heukelum
2008-03-01 16:09                     ` [PATCH] reserve end-of-conventional-memory to 1MB on 32-bit v2 Alexander van Heukelum
2008-03-01 16:12                       ` [PATCH] reserve end-of-conventional-memory to 1MB on 64-bit add-on Alexander van Heukelum
2008-03-04 11:44                       ` [PATCH] reserve end-of-conventional-memory to 1MB on 32-bit v2 Mark McLoughlin
2008-03-04 13:31                         ` Alexander van Heukelum [this message]
2008-03-04 14:49                         ` Ingo Molnar
2008-03-04 15:16                           ` Mark McLoughlin
2008-03-04 15:24                             ` Ingo Molnar
2008-03-04 15:18                         ` Jeremy Fitzhardinge
2008-03-04 16:51                           ` Alexander van Heukelum
2008-03-04 17:05                             ` H. Peter Anvin
2008-03-04 17:11                             ` Jeremy Fitzhardinge
2008-03-04 18:57                               ` [PATCH] reserve end-of-conventional-memory to 1MB, 32-bit, use paravirt_enabled Alexander van Heukelum
2008-03-04 19:12                                 ` [PATCH] reserve end-of-conventional-memory to 1MB, 64-bit, " Alexander van Heukelum
2008-02-27 14:25     ` [PATCH] Fix alignment of early reservation for EBDA Andi Kleen

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=1204637483.28473.1240465303@webmail.messagingengine.com \
    --to=heukelum@fastmail.fm \
    --cc=ak@suse.de \
    --cc=heukelum@mailshack.com \
    --cc=hpa@zytor.com \
    --cc=ijc@hellion.org.uk \
    --cc=jeremy@goop.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=markmc@redhat.com \
    --cc=mingo@elte.hu \
    --cc=tglx@linutronix.de \
    /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.