diff -prauN pgcl-2.6.0-test11-5/include/asm-i386/elf.h pgcl-2.6.0-test11-6/include/asm-i386/elf.h --- pgcl-2.6.0-test11-5/include/asm-i386/elf.h 2003-11-27 21:55:19.000000000 -0800 +++ pgcl-2.6.0-test11-6/include/asm-i386/elf.h 2003-11-30 07:34:34.000000000 -0800 @@ -132,17 +132,11 @@ extern int dump_task_extended_fpu (struc #define VSYSCALL_ENTRY ((unsigned long) &__kernel_vsyscall) extern void __kernel_vsyscall; -/* - * Something in pgcl broke vsyscalls. Until that's tracked down, - * work around it with this: - */ -#if 0 #define ARCH_DLINFO \ do { \ NEW_AUX_ENT(AT_SYSINFO, VSYSCALL_ENTRY); \ NEW_AUX_ENT(AT_SYSINFO_EHDR, VSYSCALL_BASE); \ } while (0) -#endif /* 0 */ /* * These macros parameterize elf_core_dump in fs/binfmt_elf.c to write out @@ -152,7 +146,6 @@ do { \ * Dumping its extra ELF program headers includes all the other information * a debugger needs to easily find how the vsyscall DSO was being used. */ -#if 0 #define ELF_CORE_EXTRA_PHDRS (VSYSCALL_EHDR->e_phnum) #define ELF_CORE_WRITE_EXTRA_PHDRS \ do { \ @@ -166,7 +159,7 @@ do { \ if (phdr.p_type == PT_LOAD) { \ BUG_ON(ofs != 0); \ ofs = phdr.p_offset = offset; \ - phdr.p_memsz = PAGE_ALIGN(phdr.p_memsz); \ + phdr.p_memsz = MMUPAGE_ALIGN(phdr.p_memsz); \ phdr.p_filesz = phdr.p_memsz; \ offset += phdr.p_filesz; \ } \ @@ -185,10 +178,9 @@ do { \ for (i = 0; i < VSYSCALL_EHDR->e_phnum; ++i) { \ if (vsyscall_phdrs[i].p_type == PT_LOAD) \ DUMP_WRITE((void *) vsyscall_phdrs[i].p_vaddr, \ - PAGE_ALIGN(vsyscall_phdrs[i].p_memsz)); \ + MMUPAGE_ALIGN(vsyscall_phdrs[i].p_memsz)); \ } \ } while (0) -#endif /* 0 */ #endif /* __KERNEL__ */ diff -prauN pgcl-2.6.0-test11-5/include/asm-i386/fixmap.h pgcl-2.6.0-test11-6/include/asm-i386/fixmap.h --- pgcl-2.6.0-test11-5/include/asm-i386/fixmap.h 2003-11-27 21:55:19.000000000 -0800 +++ pgcl-2.6.0-test11-6/include/asm-i386/fixmap.h 2003-11-30 06:39:57.000000000 -0800 @@ -21,6 +21,11 @@ #ifdef CONFIG_HIGHMEM #include #include +#ifdef CONFIG_HIGHMEM4G +#include +#else +#include +#endif #endif /* @@ -49,6 +54,7 @@ #define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT)) #define LAST_PKMAP 1024 #define LAST_PKMAP_MASK (LAST_PKMAP-1) +#define PKMAP_MASK (~((1 << PMD_SHIFT) - 1)) /* * FIXADDR stuff is used by highmem.c for kmapping, and various @@ -62,7 +68,7 @@ * and I didn't care enough to conserve PAGE_SIZE - MMUPAGE_SIZE * worth of virtualspace. */ -#define FIXADDR_TOP (-PAGE_SIZE) +#define FIXADDR_TOP (-MMUPAGE_SIZE) #define __FIXADDR_SIZE (__end_of_permanent_fixed_addresses << MMUPAGE_SHIFT) #define FIXADDR_START (FIXADDR_TOP - __FIXADDR_SIZE) @@ -70,13 +76,8 @@ #define __virt_to_fix(x) ((FIXADDR_TOP - ((x) & MMUPAGE_MASK)) >> MMUPAGE_SHIFT) enum fixed_addresses { -#ifdef CONFIG_HIGHMEM /* reserved pte's for temporary kernel mappings */ - FIX_KMAP_BEGIN = 1, - FIX_KMAP_END = FIX_KMAP_BEGIN+((KM_TYPE_NR*NR_CPUS+1)*PAGE_MMUCOUNT)-1, - FIX_PKMAP_BEGIN, - FIX_PKMAP_END = FIX_PKMAP_BEGIN + (LAST_PKMAP+1)*PAGE_MMUCOUNT - 1, -#endif + FIX_HOLE, FIX_VSYSCALL, #ifdef CONFIG_X86_LOCAL_APIC FIX_APIC_BASE, /* local (CPU) APIC) -- required for SMP or not */ @@ -107,6 +108,12 @@ enum fixed_addresses { FIX_BTMAP_END = __end_of_permanent_fixed_addresses, FIX_BTMAP_BEGIN = FIX_BTMAP_END + NR_FIX_BTMAPS - 1, FIX_WP_TEST, +#ifdef CONFIG_HIGHMEM + FIX_KMAP_BEGIN = __virt_to_fix(__fix_to_virt(FIX_WP_TEST+1) & PAGE_MASK) - PAGE_MMUCOUNT + 1, + FIX_KMAP_END = FIX_KMAP_BEGIN+((KM_TYPE_NR*NR_CPUS+1)*PAGE_MMUCOUNT)-1, + FIX_PKMAP_BEGIN = __virt_to_fix(__fix_to_virt(FIX_KMAP_END+1) & PKMAP_MASK) - PAGE_MMUCOUNT + 1, + FIX_PKMAP_END = FIX_PKMAP_BEGIN + (LAST_PKMAP+1)*PAGE_MMUCOUNT - 1, +#endif __end_of_fixed_addresses }; @@ -129,7 +136,7 @@ extern void __set_fixmap (enum fixed_add * acting like user mode such as get_user_pages. */ #define FIXADDR_USER_START (__fix_to_virt(FIX_VSYSCALL)) -#define FIXADDR_USER_END (FIXADDR_USER_START + PAGE_SIZE) +#define FIXADDR_USER_END (FIXADDR_USER_START + MMUPAGE_SIZE) extern void __this_fixmap_does_not_exist(void);