diff options
| author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-09-26 13:07:55 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-09-26 13:07:55 -0700 | 
| commit | b278240839e20fa9384ea430df463b367b90e04e (patch) | |
| tree | f99f0c8cdd4cc7f177cd75440e6bd181cded7fb3 /Documentation | |
| parent | dd77a4ee0f3981693d4229aa1d57cea9e526ff47 (diff) | |
| parent | 3f75f42d7733e73aca5c78326489efd4189e0111 (diff) | |
| download | linux-b278240839e20fa9384ea430df463b367b90e04e.tar.bz2 | |
Merge branch 'for-linus' of git://one.firstfloor.org/home/andi/git/linux-2.6
* 'for-linus' of git://one.firstfloor.org/home/andi/git/linux-2.6: (225 commits)
  [PATCH] Don't set calgary iommu as default y
  [PATCH] i386/x86-64: New Intel feature flags
  [PATCH] x86: Add a cumulative thermal throttle event counter.
  [PATCH] i386: Make the jiffies compares use the 64bit safe macros.
  [PATCH] x86: Refactor thermal throttle processing
  [PATCH] Add 64bit jiffies compares (for use with get_jiffies_64)
  [PATCH] Fix unwinder warning in traps.c
  [PATCH] x86: Allow disabling early pci scans with pci=noearly or disallowing conf1
  [PATCH] x86: Move direct PCI scanning functions out of line
  [PATCH] i386/x86-64: Make all early PCI scans dependent on CONFIG_PCI
  [PATCH] Don't leak NT bit into next task
  [PATCH] i386/x86-64: Work around gcc bug with noreturn functions in unwinder
  [PATCH] Fix some broken white space in ia32_signal.c
  [PATCH] Initialize argument registers for 32bit signal handlers.
  [PATCH] Remove all traces of signal number conversion
  [PATCH] Don't synchronize time reading on single core AMD systems
  [PATCH] Remove outdated comment in x86-64 mmconfig code
  [PATCH] Use string instructions for Core2 copy/clear
  [PATCH] x86: - restore i8259A eoi status on resume
  [PATCH] i386: Split multi-line printk in oops output.
  ...
Diffstat (limited to 'Documentation')
| -rw-r--r-- | Documentation/HOWTO | 3 | ||||
| -rw-r--r-- | Documentation/filesystems/proc.txt | 14 | ||||
| -rw-r--r-- | Documentation/kbuild/makefiles.txt | 5 | ||||
| -rw-r--r-- | Documentation/kernel-parameters.txt | 6 | ||||
| -rw-r--r-- | Documentation/x86_64/boot-options.txt | 7 | ||||
| -rw-r--r-- | Documentation/x86_64/kernel-stacks | 99 | 
6 files changed, 127 insertions, 7 deletions
diff --git a/Documentation/HOWTO b/Documentation/HOWTO index 915ae8c986c6..1d6560413cc5 100644 --- a/Documentation/HOWTO +++ b/Documentation/HOWTO @@ -358,7 +358,8 @@ Here is a list of some of the different kernel trees available:    quilt trees:      - USB, PCI, Driver Core, and I2C, Greg Kroah-Hartman <gregkh@suse.de>  	kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/ - +    - x86-64, partly i386, Andi Kleen <ak@suse.de> +        ftp.firstfloor.org:/pub/ak/x86_64/quilt/  Bug Reporting  ------------- diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt index 99902ae6804e..7db71d6fba82 100644 --- a/Documentation/filesystems/proc.txt +++ b/Documentation/filesystems/proc.txt @@ -1124,11 +1124,15 @@ debugging information is displayed on console.  NMI switch that most IA32 servers have fires unknown NMI up, for example.  If a system hangs up, try pressing the NMI switch. -[NOTE] -   This function and oprofile share a NMI callback. Therefore this function -   cannot be enabled when oprofile is activated. -   And NMI watchdog will be disabled when the value in this file is set to -   non-zero. +nmi_watchdog +------------ + +Enables/Disables the NMI watchdog on x86 systems.  When the value is non-zero +the NMI watchdog is enabled and will continuously test all online cpus to +determine whether or not they are still functioning properly. + +Because the NMI watchdog shares registers with oprofile, by disabling the NMI +watchdog, oprofile may have more registers to utilize.  2.4 /proc/sys/vm - The virtual memory subsystem diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt index b7d6abb501a6..e2cbd59cf2d0 100644 --- a/Documentation/kbuild/makefiles.txt +++ b/Documentation/kbuild/makefiles.txt @@ -421,6 +421,11 @@ more details, with real examples.  	The second argument is optional, and if supplied will be used  	if first argument is not supported. +    as-instr +	as-instr checks if the assembler reports a specific instruction +	and then outputs either option1 or option2 +	C escapes are supported in the test instruction +      cc-option  	cc-option is used to check if $(CC) supports a given option, and not  	supported to use an optional second option. diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 766abdab94e7..c918cc3f65fb 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -1240,7 +1240,11 @@ running once the system is up.  				bootloader. This is currently used on  				IXP2000 systems where the bus has to be  				configured a certain way for adjunct CPUs. - +		noearly		[X86] Don't do any early type 1 scanning. +				This might help on some broken boards which +				machine check when some devices' config space +				is read. But various workarounds are disabled +				and some IOMMU drivers will not work.  	pcmv=		[HW,PCMCIA] BadgePAD 4  	pd.		[PARIDE] diff --git a/Documentation/x86_64/boot-options.txt b/Documentation/x86_64/boot-options.txt index 6da24e7a56cb..4303e0c12476 100644 --- a/Documentation/x86_64/boot-options.txt +++ b/Documentation/x86_64/boot-options.txt @@ -245,6 +245,13 @@ Debugging  		newfallback: use new unwinder but fall back to old if it gets  			stuck (default) +  call_trace=[old|both|newfallback|new] +		old: use old inexact backtracer +		new: use new exact dwarf2 unwinder + 		both: print entries from both +		newfallback: use new unwinder but fall back to old if it gets +			stuck (default) +  Misc    noreplacement  Don't replace instructions with more appropriate ones diff --git a/Documentation/x86_64/kernel-stacks b/Documentation/x86_64/kernel-stacks new file mode 100644 index 000000000000..bddfddd466ab --- /dev/null +++ b/Documentation/x86_64/kernel-stacks @@ -0,0 +1,99 @@ +Most of the text from Keith Owens, hacked by AK + +x86_64 page size (PAGE_SIZE) is 4K. + +Like all other architectures, x86_64 has a kernel stack for every +active thread.  These thread stacks are THREAD_SIZE (2*PAGE_SIZE) big. +These stacks contain useful data as long as a thread is alive or a +zombie. While the thread is in user space the kernel stack is empty +except for the thread_info structure at the bottom. + +In addition to the per thread stacks, there are specialized stacks +associated with each cpu.  These stacks are only used while the kernel +is in control on that cpu, when a cpu returns to user space the +specialized stacks contain no useful data.  The main cpu stacks is + +* Interrupt stack.  IRQSTACKSIZE + +  Used for external hardware interrupts.  If this is the first external +  hardware interrupt (i.e. not a nested hardware interrupt) then the +  kernel switches from the current task to the interrupt stack.  Like +  the split thread and interrupt stacks on i386 (with CONFIG_4KSTACKS), +  this gives more room for kernel interrupt processing without having +  to increase the size of every per thread stack. + +  The interrupt stack is also used when processing a softirq. + +Switching to the kernel interrupt stack is done by software based on a +per CPU interrupt nest counter. This is needed because x86-64 "IST" +hardware stacks cannot nest without races. + +x86_64 also has a feature which is not available on i386, the ability +to automatically switch to a new stack for designated events such as +double fault or NMI, which makes it easier to handle these unusual +events on x86_64.  This feature is called the Interrupt Stack Table +(IST).  There can be up to 7 IST entries per cpu. The IST code is an +index into the Task State Segment (TSS), the IST entries in the TSS +point to dedicated stacks, each stack can be a different size. + +An IST is selected by an non-zero value in the IST field of an +interrupt-gate descriptor.  When an interrupt occurs and the hardware +loads such a descriptor, the hardware automatically sets the new stack +pointer based on the IST value, then invokes the interrupt handler.  If +software wants to allow nested IST interrupts then the handler must +adjust the IST values on entry to and exit from the interrupt handler. +(this is occasionally done, e.g. for debug exceptions) + +Events with different IST codes (i.e. with different stacks) can be +nested.  For example, a debug interrupt can safely be interrupted by an +NMI.  arch/x86_64/kernel/entry.S::paranoidentry adjusts the stack +pointers on entry to and exit from all IST events, in theory allowing +IST events with the same code to be nested.  However in most cases, the +stack size allocated to an IST assumes no nesting for the same code. +If that assumption is ever broken then the stacks will become corrupt. + +The currently assigned IST stacks are :- + +* STACKFAULT_STACK.  EXCEPTION_STKSZ (PAGE_SIZE). + +  Used for interrupt 12 - Stack Fault Exception (#SS). + +  This allows to recover from invalid stack segments. Rarely +  happens. + +* DOUBLEFAULT_STACK.  EXCEPTION_STKSZ (PAGE_SIZE). + +  Used for interrupt 8 - Double Fault Exception (#DF). + +  Invoked when handling a exception causes another exception. Happens +  when the kernel is very confused (e.g. kernel stack pointer corrupt) +  Using a separate stack allows to recover from it well enough in many +  cases to still output an oops. + +* NMI_STACK.  EXCEPTION_STKSZ (PAGE_SIZE). + +  Used for non-maskable interrupts (NMI). + +  NMI can be delivered at any time, including when the kernel is in the +  middle of switching stacks.  Using IST for NMI events avoids making +  assumptions about the previous state of the kernel stack. + +* DEBUG_STACK.  DEBUG_STKSZ + +  Used for hardware debug interrupts (interrupt 1) and for software +  debug interrupts (INT3). + +  When debugging a kernel, debug interrupts (both hardware and +  software) can occur at any time.  Using IST for these interrupts +  avoids making assumptions about the previous state of the kernel +  stack. + +* MCE_STACK.  EXCEPTION_STKSZ (PAGE_SIZE). + +  Used for interrupt 18 - Machine Check Exception (#MC). + +  MCE can be delivered at any time, including when the kernel is in the +  middle of switching stacks.  Using IST for MCE events avoids making +  assumptions about the previous state of the kernel stack. + +For more details see the Intel IA32 or AMD AMD64 architecture manuals.  |