diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/i386/.gitignore | 1 | ||||
-rw-r--r-- | arch/x86/Kconfig.cpu (renamed from arch/i386/Kconfig.cpu) | 0 | ||||
-rw-r--r-- | arch/x86/Kconfig.debug (renamed from arch/i386/Kconfig.debug) | 51 | ||||
-rw-r--r-- | arch/x86/Kconfig.i386 (renamed from arch/i386/Kconfig) | 4 | ||||
-rw-r--r-- | arch/x86/Kconfig.x86_64 (renamed from arch/x86_64/Kconfig) | 2 | ||||
-rw-r--r-- | arch/x86/Makefile | 16 | ||||
-rw-r--r-- | arch/x86/Makefile_32 (renamed from arch/i386/Makefile) | 7 | ||||
-rw-r--r-- | arch/x86/Makefile_32.cpu (renamed from arch/i386/Makefile.cpu) | 0 | ||||
-rw-r--r-- | arch/x86/Makefile_64 (renamed from arch/x86_64/Makefile) | 5 | ||||
-rw-r--r-- | arch/x86/boot/boot.h | 8 | ||||
-rw-r--r-- | arch/x86/boot/header.S | 62 | ||||
-rw-r--r-- | arch/x86/boot/video-bios.c | 2 | ||||
-rw-r--r-- | arch/x86/boot/video-vesa.c | 2 | ||||
-rw-r--r-- | arch/x86/boot/video.c | 2 | ||||
-rw-r--r-- | arch/x86/configs/i386_defconfig (renamed from arch/i386/defconfig) | 0 | ||||
-rw-r--r-- | arch/x86/configs/x86_64_defconfig (renamed from arch/x86_64/defconfig) | 0 | ||||
-rw-r--r-- | arch/x86_64/.gitignore | 1 | ||||
-rw-r--r-- | arch/x86_64/Kconfig.debug | 61 |
18 files changed, 114 insertions, 110 deletions
diff --git a/arch/i386/.gitignore b/arch/i386/.gitignore deleted file mode 100644 index 36ef4c374d2..00000000000 --- a/arch/i386/.gitignore +++ /dev/null @@ -1 +0,0 @@ -boot diff --git a/arch/i386/Kconfig.cpu b/arch/x86/Kconfig.cpu index 0e2adadf590..0e2adadf590 100644 --- a/arch/i386/Kconfig.cpu +++ b/arch/x86/Kconfig.cpu diff --git a/arch/i386/Kconfig.debug b/arch/x86/Kconfig.debug index f03531eacdf..970b2defe7d 100644 --- a/arch/i386/Kconfig.debug +++ b/arch/x86/Kconfig.debug @@ -1,14 +1,14 @@ menu "Kernel hacking" config TRACE_IRQFLAGS_SUPPORT - bool - default y + def_bool y source "lib/Kconfig.debug" config EARLY_PRINTK bool "Early printk" if EMBEDDED && DEBUG_KERNEL default y + depends on X86_32 help Write kernel log output directly into the VGA buffer or to a serial port. @@ -37,10 +37,12 @@ config DEBUG_STACK_USAGE comment "Page alloc debug is incompatible with Software Suspend on i386" depends on DEBUG_KERNEL && HIBERNATION + depends on X86_32 config DEBUG_PAGEALLOC bool "Debug page memory allocations" depends on DEBUG_KERNEL && !HIBERNATION && !HUGETLBFS + depends on X86_32 help Unmap pages from the kernel linear mapping after free_pages(). This results in a large slowdown, but helps to find certain types @@ -59,6 +61,7 @@ config DEBUG_RODATA config 4KSTACKS bool "Use 4Kb for kernel stacks instead of 8Kb" depends on DEBUG_KERNEL + depends on X86_32 help If you say Y here the kernel will use a 4Kb stacksize for the kernel stack attached to each process/thread. This facilitates @@ -67,22 +70,50 @@ config 4KSTACKS will also use IRQ stacks to compensate for the reduced stackspace. config X86_FIND_SMP_CONFIG - bool + def_bool y depends on X86_LOCAL_APIC || X86_VOYAGER - default y + depends on X86_32 config X86_MPPARSE - bool + def_bool y depends on X86_LOCAL_APIC && !X86_VISWS - default y + depends on X86_32 config DOUBLEFAULT default y bool "Enable doublefault exception handler" if EMBEDDED + depends on X86_32 + help + This option allows trapping of rare doublefault exceptions that + would otherwise cause a system to silently reboot. Disabling this + option saves about 4k and might cause you much additional grey + hair. + +config IOMMU_DEBUG + bool "Enable IOMMU debugging" + depends on IOMMU && DEBUG_KERNEL + depends on X86_64 help - This option allows trapping of rare doublefault exceptions that - would otherwise cause a system to silently reboot. Disabling this - option saves about 4k and might cause you much additional grey - hair. + Force the IOMMU to on even when you have less than 4GB of + memory and add debugging code. On overflow always panic. And + allow to enable IOMMU leak tracing. Can be disabled at boot + time with iommu=noforce. This will also enable scatter gather + list merging. Currently not recommended for production + code. When you use it make sure you have a big enough + IOMMU/AGP aperture. Most of the options enabled by this can + be set more finegrained using the iommu= command line + options. See Documentation/x86_64/boot-options.txt for more + details. + +config IOMMU_LEAK + bool "IOMMU leak tracing" + depends on DEBUG_KERNEL + depends on IOMMU_DEBUG + help + Add a simple leak tracer to the IOMMU code. This is useful when you + are debugging a buggy device driver that leaks IOMMU mappings. + +#config X86_REMOTE_DEBUG +# bool "kgdb debugging stub" endmenu diff --git a/arch/i386/Kconfig b/arch/x86/Kconfig.i386 index b4437ce0f97..7331efe891a 100644 --- a/arch/i386/Kconfig +++ b/arch/x86/Kconfig.i386 @@ -287,7 +287,7 @@ config ES7000_CLUSTERED_APIC default y depends on SMP && X86_ES7000 && MPENTIUMIII -source "arch/i386/Kconfig.cpu" +source "arch/x86/Kconfig.cpu" config HPET_TIMER bool "HPET Timer Support" @@ -1272,7 +1272,7 @@ source "fs/Kconfig" source "kernel/Kconfig.instrumentation" -source "arch/i386/Kconfig.debug" +source "arch/x86/Kconfig.debug" source "security/Kconfig" diff --git a/arch/x86_64/Kconfig b/arch/x86/Kconfig.x86_64 index 308970aa538..e2542e5b536 100644 --- a/arch/x86_64/Kconfig +++ b/arch/x86/Kconfig.x86_64 @@ -835,7 +835,7 @@ source fs/Kconfig source "kernel/Kconfig.instrumentation" -source "arch/x86_64/Kconfig.debug" +source "arch/x86/Kconfig.debug" source "security/Kconfig" diff --git a/arch/x86/Makefile b/arch/x86/Makefile new file mode 100644 index 00000000000..309597386a7 --- /dev/null +++ b/arch/x86/Makefile @@ -0,0 +1,16 @@ +# Unified Makefile for i386 and x86_64 + +# select defconfig based on actual architecture +KBUILD_DEFCONFIG := $(ARCH)_defconfig + +# # No need to remake these files +$(srctree)/arch/x86/Makefile%: ; + +ifeq ($(ARCH),i386) + include $(srctree)/arch/x86/Makefile_32 +else + include $(srctree)/arch/x86/Makefile_64 +endif + + + diff --git a/arch/i386/Makefile b/arch/x86/Makefile_32 index f5b9a37def8..346ac076687 100644 --- a/arch/i386/Makefile +++ b/arch/x86/Makefile_32 @@ -1,5 +1,5 @@ # -# i386/Makefile +# i386 Makefile # # This file is included by the global makefile so that you can add your own # architecture-specific flags and dependencies. Remember to do have actions @@ -17,9 +17,6 @@ # 20050320 Kianusch Sayah Karadji <kianusch@sk-tech.net> # Added support for GEODE CPU -# Fill in SRCARCH -SRCARCH := x86 - # BITS is used as extension for files which are available in a 32 bit # and a 64 bit version to simplify shared Makefiles. # e.g.: obj-y += foo_$(BITS).o @@ -46,7 +43,7 @@ KBUILD_CFLAGS += -pipe -msoft-float -mregparm=3 -freg-struct-return KBUILD_CFLAGS += $(call cc-option,-mpreferred-stack-boundary=2) # CPU-specific tuning. Anything which can be shared with UML should go here. -include $(srctree)/arch/i386/Makefile.cpu +include $(srctree)/arch/x86/Makefile_32.cpu # temporary until string.h is fixed cflags-y += -ffreestanding diff --git a/arch/i386/Makefile.cpu b/arch/x86/Makefile_32.cpu index e372b584e91..e372b584e91 100644 --- a/arch/i386/Makefile.cpu +++ b/arch/x86/Makefile_32.cpu diff --git a/arch/x86_64/Makefile b/arch/x86/Makefile_64 index 20eb69bd5a6..57e714a47af 100644 --- a/arch/x86_64/Makefile +++ b/arch/x86/Makefile_64 @@ -1,5 +1,5 @@ # -# x86_64/Makefile +# x86_64 Makefile # # This file is included by the global makefile so that you can add your own # architecture-specific flags and dependencies. Remember to do have actions @@ -21,9 +21,6 @@ # # $Id: Makefile,v 1.31 2002/03/22 15:56:07 ak Exp $ -# Fill in SRCARCH -SRCARCH := x86 - # BITS is used as extension for files which are available in a 32 bit # and a 64 bit version to simplify shared Makefiles. # e.g.: obj-y += foo_$(BITS).o diff --git a/arch/x86/boot/boot.h b/arch/x86/boot/boot.h index 5f9a2e72a73..d2b5adf4651 100644 --- a/arch/x86/boot/boot.h +++ b/arch/x86/boot/boot.h @@ -17,6 +17,8 @@ #ifndef BOOT_BOOT_H #define BOOT_BOOT_H +#define STACK_SIZE 512 /* Minimum number of bytes for stack */ + #ifndef __ASSEMBLY__ #include <stdarg.h> @@ -198,8 +200,6 @@ static inline int isdigit(int ch) } /* Heap -- available for dynamic lists. */ -#define STACK_SIZE 512 /* Minimum number of bytes for stack */ - extern char _end[]; extern char *HEAP; extern char *heap_end; @@ -216,9 +216,9 @@ static inline char *__get_heap(size_t s, size_t a, size_t n) #define GET_HEAP(type, n) \ ((type *)__get_heap(sizeof(type),__alignof__(type),(n))) -static inline int heap_free(void) +static inline bool heap_free(size_t n) { - return heap_end-HEAP; + return (int)(heap_end-HEAP) >= (int)n; } /* copy.S */ diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S index 8353c81c41c..6ef5a060fa1 100644 --- a/arch/x86/boot/header.S +++ b/arch/x86/boot/header.S @@ -173,7 +173,8 @@ ramdisk_size: .long 0 # its size in bytes bootsect_kludge: .long 0 # obsolete -heap_end_ptr: .word _end+1024 # (Header version 0x0201 or later) +heap_end_ptr: .word _end+STACK_SIZE-512 + # (Header version 0x0201 or later) # space from here (exclusive) down to # end of setup code can be used by setup # for local heap purposes. @@ -230,28 +231,53 @@ start_of_setup: int $0x13 #endif -# We will have entered with %cs = %ds+0x20, normalize %cs so -# it is on par with the other segments. - pushw %ds - pushw $setup2 - lretw - -setup2: # Force %es = %ds movw %ds, %ax movw %ax, %es cld -# Stack paranoia: align the stack and make sure it is good -# for both 16- and 32-bit references. In particular, if we -# were meant to have been using the full 16-bit segment, the -# caller might have set %sp to zero, which breaks %esp-based -# references. - andw $~3, %sp # dword align (might as well...) - jnz 1f - movw $0xfffc, %sp # Make sure we're not zero -1: movzwl %sp, %esp # Clear upper half of %esp - sti +# Apparently some ancient versions of LILO invoked the kernel +# with %ss != %ds, which happened to work by accident for the +# old code. If the CAN_USE_HEAP flag is set in loadflags, or +# %ss != %ds, then adjust the stack pointer. + + # Smallest possible stack we can tolerate + movw $(_end+STACK_SIZE), %cx + + movw heap_end_ptr, %dx + addw $512, %dx + jnc 1f + xorw %dx, %dx # Wraparound - whole segment available +1: testb $CAN_USE_HEAP, loadflags + jnz 2f + + # No CAN_USE_HEAP + movw %ss, %dx + cmpw %ax, %dx # %ds == %ss? + movw %sp, %dx + # If so, assume %sp is reasonably set, otherwise use + # the smallest possible stack. + jne 4f # -> Smallest possible stack... + + # Make sure the stack is at least minimum size. Take a value + # of zero to mean "full segment." +2: + andw $~3, %dx # dword align (might as well...) + jnz 3f + movw $0xfffc, %dx # Make sure we're not zero +3: cmpw %cx, %dx + jnb 5f +4: movw %cx, %dx # Minimum value we can possibly use +5: movw %ax, %ss + movzwl %dx, %esp # Clear upper half of %esp + sti # Now we should have a working stack + +# We will have entered with %cs = %ds+0x20, normalize %cs so +# it is on par with the other segments. + pushw %ds + pushw $6f + lretw +6: # Check signature at end of setup cmpl $0x5a5aaa55, setup_sig diff --git a/arch/x86/boot/video-bios.c b/arch/x86/boot/video-bios.c index 68e65d95cdf..ed0672a8187 100644 --- a/arch/x86/boot/video-bios.c +++ b/arch/x86/boot/video-bios.c @@ -79,7 +79,7 @@ static int bios_probe(void) video_bios.modes = GET_HEAP(struct mode_info, 0); for (mode = 0x14; mode <= 0x7f; mode++) { - if (heap_free() < sizeof(struct mode_info)) + if (!heap_free(sizeof(struct mode_info))) break; if (mode_defined(VIDEO_FIRST_BIOS+mode)) diff --git a/arch/x86/boot/video-vesa.c b/arch/x86/boot/video-vesa.c index 19219071071..4716b9a9635 100644 --- a/arch/x86/boot/video-vesa.c +++ b/arch/x86/boot/video-vesa.c @@ -57,7 +57,7 @@ static int vesa_probe(void) while ((mode = rdfs16(mode_ptr)) != 0xffff) { mode_ptr += 2; - if (heap_free() < sizeof(struct mode_info)) + if (!heap_free(sizeof(struct mode_info))) break; /* Heap full, can't save mode info */ if (mode & ~0x1ff) diff --git a/arch/x86/boot/video.c b/arch/x86/boot/video.c index e4ba897bf9a..ad9712f0173 100644 --- a/arch/x86/boot/video.c +++ b/arch/x86/boot/video.c @@ -371,7 +371,7 @@ static void save_screen(void) saved.curx = boot_params.screen_info.orig_x; saved.cury = boot_params.screen_info.orig_y; - if (heap_free() < saved.x*saved.y*sizeof(u16)+512) + if (!heap_free(saved.x*saved.y*sizeof(u16)+512)) return; /* Not enough heap to save the screen */ saved.data = GET_HEAP(u16, saved.x*saved.y); diff --git a/arch/i386/defconfig b/arch/x86/configs/i386_defconfig index 54ee1764fda..54ee1764fda 100644 --- a/arch/i386/defconfig +++ b/arch/x86/configs/i386_defconfig diff --git a/arch/x86_64/defconfig b/arch/x86/configs/x86_64_defconfig index b091c5e3555..b091c5e3555 100644 --- a/arch/x86_64/defconfig +++ b/arch/x86/configs/x86_64_defconfig diff --git a/arch/x86_64/.gitignore b/arch/x86_64/.gitignore deleted file mode 100644 index 36ef4c374d2..00000000000 --- a/arch/x86_64/.gitignore +++ /dev/null @@ -1 +0,0 @@ -boot diff --git a/arch/x86_64/Kconfig.debug b/arch/x86_64/Kconfig.debug deleted file mode 100644 index 775d211a5cf..00000000000 --- a/arch/x86_64/Kconfig.debug +++ /dev/null @@ -1,61 +0,0 @@ -menu "Kernel hacking" - -config TRACE_IRQFLAGS_SUPPORT - bool - default y - -source "lib/Kconfig.debug" - -config DEBUG_RODATA - bool "Write protect kernel read-only data structures" - depends on DEBUG_KERNEL - help - Mark the kernel read-only data as write-protected in the pagetables, - in order to catch accidental (and incorrect) writes to such const data. - This option may have a slight performance impact because a portion - of the kernel code won't be covered by a 2MB TLB anymore. - If in doubt, say "N". - -config IOMMU_DEBUG - depends on IOMMU && DEBUG_KERNEL - bool "Enable IOMMU debugging" - help - Force the IOMMU to on even when you have less than 4GB of - memory and add debugging code. On overflow always panic. And - allow to enable IOMMU leak tracing. Can be disabled at boot - time with iommu=noforce. This will also enable scatter gather - list merging. Currently not recommended for production - code. When you use it make sure you have a big enough - IOMMU/AGP aperture. Most of the options enabled by this can - be set more finegrained using the iommu= command line - options. See Documentation/x86_64/boot-options.txt for more - details. - -config IOMMU_LEAK - bool "IOMMU leak tracing" - depends on DEBUG_KERNEL - depends on IOMMU_DEBUG - help - Add a simple leak tracer to the IOMMU code. This is useful when you - are debugging a buggy device driver that leaks IOMMU mappings. - -config DEBUG_STACKOVERFLOW - bool "Check for stack overflows" - depends on DEBUG_KERNEL - help - This option will cause messages to be printed if free stack space - drops below a certain limit. - -config DEBUG_STACK_USAGE - bool "Stack utilization instrumentation" - depends on DEBUG_KERNEL - help - Enables the display of the minimum amount of free stack which each - task has ever had available in the sysrq-T and sysrq-P debug output. - - This option will slow down process creation somewhat. - -#config X86_REMOTE_DEBUG -# bool "kgdb debugging stub" - -endmenu |