Chris Wright wrote: > * Zachary Amsden (zach@vmware.com) wrote: > >> Comments, suggestions, anything welcome. I think this is a much cleaner >> approach, and both new and existing sub-architectures will benefit. I >> am sorry this patch is so large, but it is very difficult to separate >> into multiple steps that still allow all the subarches to compile. >> Thanks for looking over these. There is a bit more cleanup on top of this, mostly due to the include mess. I have attached another patch. > Zach, looks nice. Saves Xen a partial copy of setup.c. Did you have > further/similar consolidations in mind? > Exactly. > >> --- linux-2.6.16.1.orig/arch/i386/Makefile 2006-03-29 19:38:47.000000000 -0800 >> +++ linux-2.6.16.1/arch/i386/Makefile 2006-03-29 19:38:54.000000000 -0800 >> @@ -45,37 +45,32 @@ CFLAGS += $(shell if [ $(call cc-vers >> >> CFLAGS += $(cflags-y) >> >> -# Default subarch .c files >> -mcore-y := mach-default >> +# Default subarch .c files (none) >> +mcore-y := >> >> # Voyager subarch support >> mflags-$(CONFIG_X86_VOYAGER) := -Iinclude/asm-i386/mach-voyager >> -mcore-$(CONFIG_X86_VOYAGER) := mach-voyager >> +mcore-$(CONFIG_X86_VOYAGER) := arch/i386/mach-voyager/ >> > > Is this intended to make way for possible fine tuning? Smth like: > > mcore-$(CONFIG_X86_VOYAGER) += arch/i386/another_default.o > (hmm, not sure if that would even work) > > Or just an aesthetic change? > No - it was required in order to leave the subarch blank for the default case. Including "arch/i386//" wasn't so happy in the makefile. > >> --- linux-2.6.16.1.orig/include/asm-i386/acpi.h 2006-03-29 19:38:47.000000000 -0800 >> +++ linux-2.6.16.1/include/asm-i386/acpi.h 2006-03-29 19:38:54.000000000 -0800 >> @@ -31,6 +31,7 @@ >> #include >> >> #include /* defines cmpxchg */ >> +#include /* defines boot_cpu_data */ >> > > that one necessary? > Needed for mach-generic subarch to compile with CPU defined as I386 -- the definition of cmpxchg on older CPUs depends on boot_cpu_data. Removing this opens a giant rat hole. This ginourmous rat hole is quite annoying. What goes in system.h vs. processor.h is so poorly defined. I had to hoist boot_cpu_data into system.h as the cleanest way to fix this without introducing circular dependencies - processor.h already depends on system.h for alternative_input(), read_cr4(), write_cr4(), write_cr3(), and there is no end to this mess. Trying to move dependent processor.h pieces into system.h didn't work, since the include/linux headers make the assumption that they can include asm/processor.h to determine if the architecture already has a prefetch instruction defined. What a nightmare. Trying to move system.h pieces into processor.h also doesn't work, since you basically need to move the whole file. Maybe that is the way to go, but I would rather not go there now. >> #define COMPILER_DEPENDENT_INT64 long long >> #define COMPILER_DEPENDENT_UINT64 unsigned long long >> Index: linux-2.6.16.1/include/asm-i386/arch_hooks.h >> =================================================================== >> --- linux-2.6.16.1.orig/include/asm-i386/arch_hooks.h 2006-03-29 19:38:47.000000000 -0800 >> +++ linux-2.6.16.1/include/asm-i386/arch_hooks.h 2006-03-29 19:38:54.000000000 -0800 >> @@ -1,7 +1,13 @@ >> #ifndef _ASM_ARCH_HOOKS_H >> #define _ASM_ARCH_HOOKS_H >> >> +#include >> +#include >> +#include >> #include >> +#include >> +#include >> > > extraneous include > Yes, somewhat extraneous. > >> --- linux-2.6.16.1.orig/include/asm-i386/mach-default/mach_hooks.h 2006-03-29 19:38:54.000000000 -0800 >> +++ linux-2.6.16.1/include/asm-i386/mach-default/mach_hooks.h 2006-03-29 19:38:54.000000000 -0800 >> @@ -0,0 +1,6 @@ >> +#ifndef _MACH_HOOKS_H >> +#define _MACH_HOOKS_H >> > > should probably be consistent (_MACH_HOOKS_H vs. MACH_HOOKS_H) > Patch attached.