Messages in this thread Patch in this message | | | Date | Mon, 2 Jun 2008 15:30:33 -0700 | From | Andrew Morton <> | Subject | Re: aperture_64.c: corner case wrong |
| |
On Mon, 26 May 2008 21:17:30 +0200 Pavel Machek <pavel@suse.cz> wrote:
> > If > > fix == 0, aper_enabled == 1, gart_fix_e820 == 0 > > if (!fix && !aper_enabled) > return; > > if (gart_fix_e820 && !fix && aper_enabled) { > if (e820_any_mapped(aper_base, aper_base + aper_size, > E820_RAM)) { > /* reserve it, so we can reuse it in second > kernel */ > printk(KERN_INFO "update e820 for GART\n"); > add_memory_region(aper_base, aper_size, > E820_RESERVED); > update_e820(); > } > return; > } > > /* different nodes have different setting, disable them all atfirst*/ > > we'll fall back here and disable all the settings, even when they were > all consistent. > > What about this? (I hope it compiles...) > > Signed-off-by: Pavel Machek <pavel@suse.cz> > > > diff --git a/arch/x86/kernel/aperture_64.c b/arch/x86/kernel/aperture_64.c > index 02f4dba..aa4876a 100644 > --- a/arch/x86/kernel/aperture_64.c > +++ b/arch/x86/kernel/aperture_64.c > @@ -344,14 +323,16 @@ out: > if (gart_fix_e820 && !fix && aper_enabled) { > if (!e820_all_mapped(aper_base, aper_base + aper_size, > E820_RESERVED)) { > /* reserve it, so we can reuse it in second kernel */ > printk(KERN_INFO "update e820 for GART\n"); > add_memory_region(aper_base, aper_size, E820_RESERVED); > update_e820(); > } > - return; > } > > + if (!fix) > + return; > + > /* different nodes have different setting, disable them all at first*/ > for (i = 0; i < ARRAY_SIZE(bus_dev_ranges); i++) { > int bus; >
So what happened with this? Thomas has merged an "x86: aperture_64.c: cleanups" from yourself but it appears that half of this bugfix got applied somewhere and the below part did not?
diff -puN arch/x86/kernel/aperture_64.c~aperture_64c-corner-case-wrong arch/x86/kernel/aperture_64.c --- a/arch/x86/kernel/aperture_64.c~aperture_64c-corner-case-wrong +++ a/arch/x86/kernel/aperture_64.c @@ -331,6 +331,9 @@ out: return; } + if (!fix) + return; + /* different nodes have different setting, disable them all at first*/ for (i = 0; i < ARRAY_SIZE(bus_dev_ranges); i++) { int bus; _
| |