Rusty Russell wrote: > So, is everyone happy with this smerge of Ingo and Gerd's work? > Reposted below. > Quite happy. Getting back as much lowmem as possible is more beneficial. > diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .23560-linux-2.6.17-rc4-git3/arch/i386/kernel/entry.S .23560-linux-2.6.17-rc4-git3.updated/arch/i386/kernel/entry.S > --- .23560-linux-2.6.17-rc4-git3/arch/i386/kernel/entry.S 2006-05-16 10:50:48.000000000 +1000 > +++ .23560-linux-2.6.17-rc4-git3.updated/arch/i386/kernel/entry.S 2006-05-17 17:10:49.000000000 +1000 > @@ -184,8 +184,12 @@ sysenter_past_esp: > pushl %ebp > pushfl > pushl $(__USER_CS) > - pushl $SYSENTER_RETURN > - > + /* > + * Push current_thread_info()->sysenter_return to the stack. > + * A tiny bit of offset fixup is necessary - 4*4 means the 4 words > + * pushed above; +8 corresponds to copy_thread's esp0 setting. > + */ > + pushl (TI_sysenter_return-THREAD_SIZE+8+4*4)(%esp) > You've done a nice job commenting this, but a defined constant for the 8 would be nicer. > > @@ -138,6 +139,10 @@ void set_pmd_pfn(unsigned long vaddr, un > __flush_tlb_one(vaddr); > } > > +static int nr_fixmaps = 0; > +unsigned long __FIXADDR_TOP = 0xfffff000; > +EXPORT_SYMBOL(__FIXADDR_TOP); > + > Never mind. My comments are in reverse order here. > void __set_fixmap (enum fixed_addresses idx, unsigned long phys, pgprot_t flags) > { > unsigned long address = __fix_to_virt(idx); > diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .23560-linux-2.6.17-rc4-git3/include/asm-i386/fixmap.h .23560-linux-2.6.17-rc4-git3.updated/include/asm-i386/fixmap.h > --- .23560-linux-2.6.17-rc4-git3/include/asm-i386/fixmap.h 2006-03-23 12:43:10.000000000 +1100 > +++ .23560-linux-2.6.17-rc4-git3.updated/include/asm-i386/fixmap.h 2006-05-17 17:10:49.000000000 +1000 > @@ -20,7 +20,7 @@ > * Leave one empty page between vmalloc'ed areas and > * the start of the fixmap. > */ > -#define __FIXADDR_TOP 0xfffff000 > +extern unsigned long __FIXADDR_TOP; > > #ifndef __ASSEMBLY__ > #include <linux/kernel.h> > @@ -95,6 +95,8 @@ enum fixed_addresses { > extern void __set_fixmap (enum fixed_addresses idx, > unsigned long phys, pgprot_t flags); > > +extern void set_fixaddr_top(unsigned long top); > + I don't see where this gets called anywhere ... so how does __FIXADDR_TOP get initialized? Answered non-linearly above. Zach