Browse Source

Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git

Signed-off-by: Steve French <sfrench@us.ibm.com>
Steve French 19 years ago
parent
commit
0ed3f64ec3
100 changed files with 958 additions and 826 deletions
  1. 234 0
      Documentation/fujitsu/frv/kernel-ABI.txt
  2. 4 0
      Documentation/hwmon/w83627hf
  3. 42 39
      Documentation/kprobes.txt
  4. 5 1
      Documentation/mips/AU1xxx_IDE.README
  5. 59 1
      Documentation/powerpc/booting-without-of.txt
  6. 17 1
      MAINTAINERS
  7. 1 1
      Makefile
  8. 27 2
      arch/arm/mach-s3c2410/mach-h1940.c
  9. 31 0
      arch/arm/mach-s3c2410/s3c2400.h
  10. 4 0
      arch/frv/Kconfig
  11. 1 1
      arch/frv/Makefile
  12. 73 4
      arch/frv/kernel/break.S
  13. 34 5
      arch/frv/kernel/entry-table.S
  14. 79 12
      arch/frv/kernel/entry.S
  15. 3 0
      arch/frv/kernel/head.S
  16. 3 38
      arch/frv/kernel/irq.c
  17. 0 9
      arch/frv/mm/kmap.c
  18. 4 0
      arch/h8300/Kconfig
  19. 1 1
      arch/h8300/Kconfig.cpu
  20. 3 0
      arch/i386/boot/.gitignore
  21. 1 0
      arch/i386/boot/tools/.gitignore
  22. 1 0
      arch/i386/kernel/.gitignore
  23. 4 0
      arch/i386/kernel/head.S
  24. 1 1
      arch/i386/kernel/syscall_table.S
  25. 5 0
      arch/i386/kernel/timers/timer_tsc.c
  26. 15 0
      arch/i386/kernel/vsyscall-sysenter.S
  27. 16 3
      arch/i386/oprofile/backtrace.c
  28. 4 0
      arch/m68k/Kconfig
  29. 2 3
      arch/m68k/fpsp040/bindec.S
  30. 2 3
      arch/m68k/fpsp040/binstr.S
  31. 2 3
      arch/m68k/fpsp040/bugfix.S
  32. 2 3
      arch/m68k/fpsp040/decbin.S
  33. 2 3
      arch/m68k/fpsp040/do_func.S
  34. 2 3
      arch/m68k/fpsp040/fpsp.h
  35. 2 3
      arch/m68k/fpsp040/gen_except.S
  36. 2 3
      arch/m68k/fpsp040/get_op.S
  37. 2 3
      arch/m68k/fpsp040/kernel_ex.S
  38. 2 3
      arch/m68k/fpsp040/res_func.S
  39. 2 3
      arch/m68k/fpsp040/round.S
  40. 2 3
      arch/m68k/fpsp040/sacos.S
  41. 2 3
      arch/m68k/fpsp040/sasin.S
  42. 2 3
      arch/m68k/fpsp040/satan.S
  43. 2 3
      arch/m68k/fpsp040/satanh.S
  44. 2 3
      arch/m68k/fpsp040/scale.S
  45. 2 3
      arch/m68k/fpsp040/scosh.S
  46. 2 3
      arch/m68k/fpsp040/setox.S
  47. 2 3
      arch/m68k/fpsp040/sgetem.S
  48. 2 3
      arch/m68k/fpsp040/sint.S
  49. 2 3
      arch/m68k/fpsp040/skeleton.S
  50. 2 3
      arch/m68k/fpsp040/slog2.S
  51. 2 3
      arch/m68k/fpsp040/slogn.S
  52. 2 3
      arch/m68k/fpsp040/smovecr.S
  53. 2 3
      arch/m68k/fpsp040/srem_mod.S
  54. 2 3
      arch/m68k/fpsp040/ssin.S
  55. 2 3
      arch/m68k/fpsp040/ssinh.S
  56. 2 3
      arch/m68k/fpsp040/stan.S
  57. 2 3
      arch/m68k/fpsp040/stanh.S
  58. 2 3
      arch/m68k/fpsp040/sto_res.S
  59. 2 3
      arch/m68k/fpsp040/stwotox.S
  60. 2 3
      arch/m68k/fpsp040/tbldo.S
  61. 2 3
      arch/m68k/fpsp040/util.S
  62. 2 3
      arch/m68k/fpsp040/x_bsun.S
  63. 2 3
      arch/m68k/fpsp040/x_fline.S
  64. 2 3
      arch/m68k/fpsp040/x_operr.S
  65. 2 3
      arch/m68k/fpsp040/x_ovfl.S
  66. 2 3
      arch/m68k/fpsp040/x_snan.S
  67. 2 3
      arch/m68k/fpsp040/x_store.S
  68. 2 3
      arch/m68k/fpsp040/x_unfl.S
  69. 2 3
      arch/m68k/fpsp040/x_unimp.S
  70. 2 3
      arch/m68k/fpsp040/x_unsupp.S
  71. 4 0
      arch/m68knommu/Kconfig
  72. 0 1
      arch/mips/Makefile
  73. 77 81
      arch/mips/kernel/process.c
  74. 1 1
      arch/mips/kernel/scall32-o32.S
  75. 1 1
      arch/mips/kernel/signal-common.h
  76. 1 1
      arch/mips/kernel/signal32.c
  77. 1 1
      arch/mips/kernel/signal_n32.c
  78. 5 29
      arch/mips/kernel/smp_mt.c
  79. 14 90
      arch/mips/mm/c-r4k.c
  80. 9 61
      arch/mips/mm/c-tx39.c
  81. 5 0
      arch/parisc/Kconfig
  82. 3 3
      arch/parisc/kernel/syscall_table.S
  83. 6 0
      arch/powerpc/Kconfig
  84. 1 0
      arch/powerpc/Makefile
  85. 3 3
      arch/powerpc/kernel/Makefile
  86. 1 2
      arch/powerpc/kernel/systbl.S
  87. 0 283
      arch/ppc/kernel/misc.S
  88. 5 4
      arch/s390/defconfig
  89. 20 0
      arch/s390/kernel/compat_linux.c
  90. 0 3
      arch/s390/kernel/compat_signal.c
  91. 9 4
      arch/s390/kernel/compat_wrapper.S
  92. 3 2
      arch/s390/kernel/machine_kexec.c
  93. 1 5
      arch/s390/kernel/smp.c
  94. 2 1
      arch/s390/kernel/syscalls.S
  95. 1 1
      arch/s390/lib/delay.c
  96. 1 1
      arch/sparc/kernel/systbls.S
  97. 21 0
      arch/sparc64/kernel/sys_sparc32.c
  98. 2 2
      arch/sparc64/kernel/systbls.S
  99. 4 0
      arch/v850/Kconfig
  100. 1 1
      arch/x86_64/ia32/ia32entry.S

+ 234 - 0
Documentation/fujitsu/frv/kernel-ABI.txt

@@ -0,0 +1,234 @@
+				 =================================
+				 INTERNAL KERNEL ABI FOR FR-V ARCH
+				 =================================
+
+The internal FRV kernel ABI is not quite the same as the userspace ABI. A number of the registers
+are used for special purposed, and the ABI is not consistent between modules vs core, and MMU vs
+no-MMU.
+
+This partly stems from the fact that FRV CPUs do not have a separate supervisor stack pointer, and
+most of them do not have any scratch registers, thus requiring at least one general purpose
+register to be clobbered in such an event. Also, within the kernel core, it is possible to simply
+jump or call directly between functions using a relative offset. This cannot be extended to modules
+for the displacement is likely to be too far. Thus in modules the address of a function to call
+must be calculated in a register and then used, requiring two extra instructions.
+
+This document has the following sections:
+
+ (*) System call register ABI
+ (*) CPU operating modes
+ (*) Internal kernel-mode register ABI
+ (*) Internal debug-mode register ABI
+ (*) Virtual interrupt handling
+
+
+========================
+SYSTEM CALL REGISTER ABI
+========================
+
+When a system call is made, the following registers are effective:
+
+	REGISTERS	CALL			RETURN
+	===============	=======================	=======================
+	GR7		System call number	Preserved
+	GR8		Syscall arg #1		Return value
+	GR9-GR13	Syscall arg #2-6	Preserved
+
+
+===================
+CPU OPERATING MODES
+===================
+
+The FR-V CPU has three basic operating modes. In order of increasing capability:
+
+  (1) User mode.
+
+      Basic userspace running mode.
+
+  (2) Kernel mode.
+
+      Normal kernel mode. There are many additional control registers available that may be
+      accessed in this mode, in addition to all the stuff available to user mode. This has two
+      submodes:
+
+      (a) Exceptions enabled (PSR.T == 1).
+
+      	  Exceptions will invoke the appropriate normal kernel mode handler. On entry to the
+      	  handler, the PSR.T bit will be cleared.
+
+      (b) Exceptions disabled (PSR.T == 0).
+
+      	  No exceptions or interrupts may happen. Any mandatory exceptions will cause the CPU to
+      	  halt unless the CPU is told to jump into debug mode instead.
+
+  (3) Debug mode.
+
+      No exceptions may happen in this mode. Memory protection and management exceptions will be
+      flagged for later consideration, but the exception handler won't be invoked. Debugging traps
+      such as hardware breakpoints and watchpoints will be ignored. This mode is entered only by
+      debugging events obtained from the other two modes.
+
+      All kernel mode registers may be accessed, plus a few extra debugging specific registers.
+
+
+=================================
+INTERNAL KERNEL-MODE REGISTER ABI
+=================================
+
+There are a number of permanent register assignments that are set up by entry.S in the exception
+prologue. Note that there is a complete set of exception prologues for each of user->kernel
+transition and kernel->kernel transition. There are also user->debug and kernel->debug mode
+transition prologues.
+
+
+	REGISTER	FLAVOUR	USE
+	===============	=======	====================================================
+	GR1			Supervisor stack pointer
+	GR15			Current thread info pointer
+	GR16			GP-Rel base register for small data
+	GR28			Current exception frame pointer (__frame)
+	GR29			Current task pointer (current)
+	GR30			Destroyed by kernel mode entry
+	GR31		NOMMU	Destroyed by debug mode entry
+	GR31		MMU	Destroyed by TLB miss kernel mode entry
+	CCR.ICC2		Virtual interrupt disablement tracking
+	CCCR.CC3		Cleared by exception prologue (atomic op emulation)
+	SCR0		MMU	See mmu-layout.txt.
+	SCR1		MMU	See mmu-layout.txt.
+	SCR2		MMU	Save for EAR0 (destroyed by icache insns in debug mode)
+	SCR3		MMU	Save for GR31 during debug exceptions
+	DAMR/IAMR	NOMMU	Fixed memory protection layout.
+	DAMR/IAMR	MMU	See mmu-layout.txt.
+
+
+Certain registers are also used or modified across function calls:
+
+	REGISTER	CALL				RETURN
+	===============	===============================	===============================
+	GR0		Fixed Zero			-
+	GR2		Function call frame pointer
+	GR3		Special				Preserved
+	GR3-GR7		-				Clobbered
+	GR8		Function call arg #1		Return value (or clobbered)
+	GR9		Function call arg #2		Return value MSW (or clobbered)
+	GR10-GR13	Function call arg #3-#6		Clobbered
+	GR14		-				Clobbered
+	GR15-GR16	Special				Preserved
+	GR17-GR27	-				Preserved
+	GR28-GR31	Special				Only accessed explicitly
+	LR		Return address after CALL	Clobbered
+	CCR/CCCR	-				Mostly Clobbered
+
+
+================================
+INTERNAL DEBUG-MODE REGISTER ABI
+================================
+
+This is the same as the kernel-mode register ABI for functions calls. The difference is that in
+debug-mode there's a different stack and a different exception frame. Almost all the global
+registers from kernel-mode (including the stack pointer) may be changed.
+
+	REGISTER	FLAVOUR	USE
+	===============	=======	====================================================
+	GR1			Debug stack pointer
+	GR16			GP-Rel base register for small data
+	GR31			Current debug exception frame pointer (__debug_frame)
+	SCR3		MMU	Saved value of GR31
+
+
+Note that debug mode is able to interfere with the kernel's emulated atomic ops, so it must be
+exceedingly careful not to do any that would interact with the main kernel in this regard. Hence
+the debug mode code (gdbstub) is almost completely self-contained. The only external code used is
+the sprintf family of functions.
+
+Futhermore, break.S is so complicated because single-step mode does not switch off on entry to an
+exception. That means unless manually disabled, single-stepping will blithely go on stepping into
+things like interrupts. See gdbstub.txt for more information.
+
+
+==========================
+VIRTUAL INTERRUPT HANDLING
+==========================
+
+Because accesses to the PSR is so slow, and to disable interrupts we have to access it twice (once
+to read and once to write), we don't actually disable interrupts at all if we don't have to. What
+we do instead is use the ICC2 condition code flags to note virtual disablement, such that if we
+then do take an interrupt, we note the flag, really disable interrupts, set another flag and resume
+execution at the point the interrupt happened. Setting condition flags as a side effect of an
+arithmetic or logical instruction is really fast. This use of the ICC2 only occurs within the
+kernel - it does not affect userspace.
+
+The flags we use are:
+
+ (*) CCR.ICC2.Z [Zero flag]
+
+     Set to virtually disable interrupts, clear when interrupts are virtually enabled. Can be
+     modified by logical instructions without affecting the Carry flag.
+
+ (*) CCR.ICC2.C [Carry flag]
+
+     Clear to indicate hardware interrupts are really disabled, set otherwise.
+
+
+What happens is this:
+
+ (1) Normal kernel-mode operation.
+
+	ICC2.Z is 0, ICC2.C is 1.
+
+ (2) An interrupt occurs. The exception prologue examines ICC2.Z and determines that nothing needs
+     doing. This is done simply with an unlikely BEQ instruction.
+
+ (3) The interrupts are disabled (local_irq_disable)
+
+	ICC2.Z is set to 1.
+
+ (4) If interrupts were then re-enabled (local_irq_enable):
+
+	ICC2.Z would be set to 0.
+
+     A TIHI #2 instruction (trap #2 if condition HI - Z==0 && C==0) would be used to trap if
+     interrupts were now virtually enabled, but physically disabled - which they're not, so the
+     trap isn't taken. The kernel would then be back to state (1).
+
+ (5) An interrupt occurs. The exception prologue examines ICC2.Z and determines that the interrupt
+     shouldn't actually have happened. It jumps aside, and there disabled interrupts by setting
+     PSR.PIL to 14 and then it clears ICC2.C.
+
+ (6) If interrupts were then saved and disabled again (local_irq_save):
+
+	ICC2.Z would be shifted into the save variable and masked off (giving a 1).
+
+	ICC2.Z would then be set to 1 (thus unchanged), and ICC2.C would be unaffected (ie: 0).
+
+ (7) If interrupts were then restored from state (6) (local_irq_restore):
+
+	ICC2.Z would be set to indicate the result of XOR'ing the saved value (ie: 1) with 1, which
+	gives a result of 0 - thus leaving ICC2.Z set.
+
+	ICC2.C would remain unaffected (ie: 0).
+
+     A TIHI #2 instruction would be used to again assay the current state, but this would do
+     nothing as Z==1.
+
+ (8) If interrupts were then enabled (local_irq_enable):
+
+	ICC2.Z would be cleared. ICC2.C would be left unaffected. Both flags would now be 0.
+
+     A TIHI #2 instruction again issued to assay the current state would then trap as both Z==0
+     [interrupts virtually enabled] and C==0 [interrupts really disabled] would then be true.
+
+ (9) The trap #2 handler would simply enable hardware interrupts (set PSR.PIL to 0), set ICC2.C to
+     1 and return.
+
+(10) Immediately upon returning, the pending interrupt would be taken.
+
+(11) The interrupt handler would take the path of actually processing the interrupt (ICC2.Z is
+     clear, BEQ fails as per step (2)).
+
+(12) The interrupt handler would then set ICC2.C to 1 since hardware interrupts are definitely
+     enabled - or else the kernel wouldn't be here.
+
+(13) On return from the interrupt handler, things would be back to state (1).
+
+This trap (#2) is only available in kernel mode. In user mode it will result in SIGILL.

+ 4 - 0
Documentation/hwmon/w83627hf

@@ -36,6 +36,10 @@ Module Parameters
   (default is 1)
   (default is 1)
   Use 'init=0' to bypass initializing the chip.
   Use 'init=0' to bypass initializing the chip.
   Try this if your computer crashes when you load the module.
   Try this if your computer crashes when you load the module.
+* reset: int
+  (default is 0)
+  The driver used to reset the chip on load, but does no more. Use
+  'reset=1' to restore the old behavior. Report if you need to do this.
 
 
 Description
 Description
 -----------
 -----------

+ 42 - 39
Documentation/kprobes.txt

@@ -136,17 +136,20 @@ Kprobes, jprobes, and return probes are implemented on the following
 architectures:
 architectures:
 
 
 - i386
 - i386
-- x86_64 (AMD-64, E64MT)
+- x86_64 (AMD-64, EM64T)
 - ppc64
 - ppc64
-- ia64 (Support for probes on certain instruction types is still in progress.)
+- ia64 (Does not support probes on instruction slot1.)
 - sparc64 (Return probes not yet implemented.)
 - sparc64 (Return probes not yet implemented.)
 
 
 3. Configuring Kprobes
 3. Configuring Kprobes
 
 
 When configuring the kernel using make menuconfig/xconfig/oldconfig,
 When configuring the kernel using make menuconfig/xconfig/oldconfig,
-ensure that CONFIG_KPROBES is set to "y".  Under "Kernel hacking",
-look for "Kprobes".  You may have to enable "Kernel debugging"
-(CONFIG_DEBUG_KERNEL) before you can enable Kprobes.
+ensure that CONFIG_KPROBES is set to "y".  Under "Instrumentation
+Support", look for "Kprobes".
+
+So that you can load and unload Kprobes-based instrumentation modules,
+make sure "Loadable module support" (CONFIG_MODULES) and "Module
+unloading" (CONFIG_MODULE_UNLOAD) are set to "y".
 
 
 You may also want to ensure that CONFIG_KALLSYMS and perhaps even
 You may also want to ensure that CONFIG_KALLSYMS and perhaps even
 CONFIG_KALLSYMS_ALL are set to "y", since kallsyms_lookup_name()
 CONFIG_KALLSYMS_ALL are set to "y", since kallsyms_lookup_name()
@@ -262,18 +265,18 @@ at any time after the probe has been registered.
 
 
 5. Kprobes Features and Limitations
 5. Kprobes Features and Limitations
 
 
-As of Linux v2.6.12, Kprobes allows multiple probes at the same
-address.  Currently, however, there cannot be multiple jprobes on
-the same function at the same time.
+Kprobes allows multiple probes at the same address.  Currently,
+however, there cannot be multiple jprobes on the same function at
+the same time.
 
 
 In general, you can install a probe anywhere in the kernel.
 In general, you can install a probe anywhere in the kernel.
 In particular, you can probe interrupt handlers.  Known exceptions
 In particular, you can probe interrupt handlers.  Known exceptions
 are discussed in this section.
 are discussed in this section.
 
 
-For obvious reasons, it's a bad idea to install a probe in
-the code that implements Kprobes (mostly kernel/kprobes.c and
-arch/*/kernel/kprobes.c).  A patch in the v2.6.13 timeframe instructs
-Kprobes to reject such requests.
+The register_*probe functions will return -EINVAL if you attempt
+to install a probe in the code that implements Kprobes (mostly
+kernel/kprobes.c and arch/*/kernel/kprobes.c, but also functions such
+as do_page_fault and notifier_call_chain).
 
 
 If you install a probe in an inline-able function, Kprobes makes
 If you install a probe in an inline-able function, Kprobes makes
 no attempt to chase down all inline instances of the function and
 no attempt to chase down all inline instances of the function and
@@ -290,18 +293,14 @@ from the accidental ones.  Don't drink and probe.
 
 
 Kprobes makes no attempt to prevent probe handlers from stepping on
 Kprobes makes no attempt to prevent probe handlers from stepping on
 each other -- e.g., probing printk() and then calling printk() from a
 each other -- e.g., probing printk() and then calling printk() from a
-probe handler.  As of Linux v2.6.12, if a probe handler hits a probe,
-that second probe's handlers won't be run in that instance.
-
-In Linux v2.6.12 and previous versions, Kprobes' data structures are
-protected by a single lock that is held during probe registration and
-unregistration and while handlers are run.  Thus, no two handlers
-can run simultaneously.  To improve scalability on SMP systems,
-this restriction will probably be removed soon, in which case
-multiple handlers (or multiple instances of the same handler) may
-run concurrently on different CPUs.  Code your handlers accordingly.
-
-Kprobes does not use semaphores or allocate memory except during
+probe handler.  If a probe handler hits a probe, that second probe's
+handlers won't be run in that instance, and the kprobe.nmissed member
+of the second probe will be incremented.
+
+As of Linux v2.6.15-rc1, multiple handlers (or multiple instances of
+the same handler) may run concurrently on different CPUs.
+
+Kprobes does not use mutexes or allocate memory except during
 registration and unregistration.
 registration and unregistration.
 
 
 Probe handlers are run with preemption disabled.  Depending on the
 Probe handlers are run with preemption disabled.  Depending on the
@@ -316,11 +315,18 @@ address instead of the real return address for kretprobed functions.
 (As far as we can tell, __builtin_return_address() is used only
 (As far as we can tell, __builtin_return_address() is used only
 for instrumentation and error reporting.)
 for instrumentation and error reporting.)
 
 
-If the number of times a function is called does not match the
-number of times it returns, registering a return probe on that
-function may produce undesirable results.  We have the do_exit()
-and do_execve() cases covered.  do_fork() is not an issue.  We're
-unaware of other specific cases where this could be a problem.
+If the number of times a function is called does not match the number
+of times it returns, registering a return probe on that function may
+produce undesirable results.  We have the do_exit() case covered.
+do_execve() and do_fork() are not an issue.  We're unaware of other
+specific cases where this could be a problem.
+
+If, upon entry to or exit from a function, the CPU is running on
+a stack other than that of the current task, registering a return
+probe on that function may produce undesirable results.  For this
+reason, Kprobes doesn't support return probes (or kprobes or jprobes)
+on the x86_64 version of __switch_to(); the registration functions
+return -EINVAL.
 
 
 6. Probe Overhead
 6. Probe Overhead
 
 
@@ -347,14 +353,12 @@ k = 0.77 usec; j = 1.31; r = 1.26; kr = 1.45; jr = 1.99
 
 
 7. TODO
 7. TODO
 
 
-a. SystemTap (http://sourceware.org/systemtap): Work in progress
-to provide a simplified programming interface for probe-based
-instrumentation.
-b. Improved SMP scalability: Currently, work is in progress to handle
-multiple kprobes in parallel.
-c. Kernel return probes for sparc64.
-d. Support for other architectures.
-e. User-space probes.
+a. SystemTap (http://sourceware.org/systemtap): Provides a simplified
+programming interface for probe-based instrumentation.  Try it out.
+b. Kernel return probes for sparc64.
+c. Support for other architectures.
+d. User-space probes.
+e. Watchpoint probes (which fire on data references).
 
 
 8. Kprobes Example
 8. Kprobes Example
 
 
@@ -411,8 +415,7 @@ int init_module(void)
 		printk("Couldn't find %s to plant kprobe\n", "do_fork");
 		printk("Couldn't find %s to plant kprobe\n", "do_fork");
 		return -1;
 		return -1;
 	}
 	}
-	ret = register_kprobe(&kp);
-	if (ret < 0) {
+	if ((ret = register_kprobe(&kp) < 0)) {
 		printk("register_kprobe failed, returned %d\n", ret);
 		printk("register_kprobe failed, returned %d\n", ret);
 		return -1;
 		return -1;
 	}
 	}

+ 5 - 1
Documentation/mips/AU1xxx_IDE.README

@@ -95,11 +95,13 @@ CONFIG_BLK_DEV_IDEDMA_PCI=y
 CONFIG_IDEDMA_PCI_AUTO=y
 CONFIG_IDEDMA_PCI_AUTO=y
 CONFIG_BLK_DEV_IDE_AU1XXX=y
 CONFIG_BLK_DEV_IDE_AU1XXX=y
 CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y
 CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y
-CONFIG_BLK_DEV_IDE_AU1XXX_BURSTABLE_ON=y
 CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ=128
 CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ=128
 CONFIG_BLK_DEV_IDEDMA=y
 CONFIG_BLK_DEV_IDEDMA=y
 CONFIG_IDEDMA_AUTO=y
 CONFIG_IDEDMA_AUTO=y
 
 
+Also define 'IDE_AU1XXX_BURSTMODE' in 'drivers/ide/mips/au1xxx-ide.c' to enable
+the burst support on DBDMA controller.
+
 If the used system need the USB support enable the following kernel configs for
 If the used system need the USB support enable the following kernel configs for
 high IDE to USB throughput.
 high IDE to USB throughput.
 
 
@@ -115,6 +117,8 @@ CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ=128
 CONFIG_BLK_DEV_IDEDMA=y
 CONFIG_BLK_DEV_IDEDMA=y
 CONFIG_IDEDMA_AUTO=y
 CONFIG_IDEDMA_AUTO=y
 
 
+Also undefine 'IDE_AU1XXX_BURSTMODE' in 'drivers/ide/mips/au1xxx-ide.c' to
+disable the burst support on DBDMA controller.
 
 
 ADD NEW HARD DISC TO WHITE OR BLACK LIST
 ADD NEW HARD DISC TO WHITE OR BLACK LIST
 ----------------------------------------
 ----------------------------------------

+ 59 - 1
Documentation/powerpc/booting-without-of.txt

@@ -44,7 +44,6 @@
                            compiler and the textural representation of
                            compiler and the textural representation of
                            the tree that can be "compiled" by dtc.
                            the tree that can be "compiled" by dtc.
 
 
-
    November 21, 2005: Rev 0.5
    November 21, 2005: Rev 0.5
 			 - Additions/generalizations for 32-bit
 			 - Additions/generalizations for 32-bit
 			 - Changed to reflect the new arch/powerpc
 			 - Changed to reflect the new arch/powerpc
@@ -1307,6 +1306,65 @@ platforms are moved over to use the flattened-device-tree model.
 	};
 	};
 
 
 
 
+   f) Freescale SOC USB controllers
+
+   The device node for a USB controller that is part of a Freescale
+   SOC is as described in the document "Open Firmware Recommended
+   Practice : Universal Serial Bus" with the following modifications
+   and additions :  
+
+   Required properties :
+    - compatible : Should be "fsl-usb2-mph" for multi port host usb
+      controllers, or "fsl-usb2-dr" for dual role usb controllers
+    - phy_type : For multi port host usb controllers, should be one of
+      "ulpi", or "serial". For dual role usb controllers, should be
+      one of "ulpi", "utmi", "utmi_wide", or "serial".
+    - reg : Offset and length of the register set for the device
+    - port0 : boolean; if defined, indicates port0 is connected for
+      fsl-usb2-mph compatible controllers.  Either this property or
+      "port1" (or both) must be defined for "fsl-usb2-mph" compatible 
+      controllers.
+    - port1 : boolean; if defined, indicates port1 is connected for
+      fsl-usb2-mph compatible controllers.  Either this property or
+      "port0" (or both) must be defined for "fsl-usb2-mph" compatible 
+      controllers.
+
+   Recommended properties :
+    - interrupts : <a b> where a is the interrupt number and b is a
+      field that represents an encoding of the sense and level
+      information for the interrupt.  This should be encoded based on
+      the information in section 2) depending on the type of interrupt
+      controller you have.
+    - interrupt-parent : the phandle for the interrupt controller that
+      services interrupts for this device.
+
+   Example multi port host usb controller device node : 
+	usb@22000 {
+	        device_type = "usb";
+		compatible = "fsl-usb2-mph";
+		reg = <22000 1000>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+		interrupt-parent = <700>;
+		interrupts = <27 1>;
+		phy_type = "ulpi";
+		port0;
+		port1;
+	};
+
+   Example dual role usb controller device node : 
+	usb@23000 {
+		device_type = "usb";
+		compatible = "fsl-usb2-dr";
+		reg = <23000 1000>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+		interrupt-parent = <700>;
+		interrupts = <26 1>;
+		phy = "ulpi";
+	};
+
+
    More devices will be defined as this spec matures.
    More devices will be defined as this spec matures.
 
 
 
 

+ 17 - 1
MAINTAINERS

@@ -2232,7 +2232,23 @@ P:	Martin Schwidefsky
 M:	schwidefsky@de.ibm.com
 M:	schwidefsky@de.ibm.com
 M:	linux390@de.ibm.com
 M:	linux390@de.ibm.com
 L:	linux-390@vm.marist.edu
 L:	linux-390@vm.marist.edu
-W:	http://oss.software.ibm.com/developerworks/opensource/linux390
+W:	http://www.ibm.com/developerworks/linux/linux390/
+S:	Supported
+
+S390 NETWORK DRIVERS
+P:	Frank Pavlic
+M:	fpavlic@de.ibm.com
+M:	linux390@de.ibm.com
+L:	linux-390@vm.marist.edu
+W:	http://www.ibm.com/developerworks/linux/linux390/
+S:	Supported
+
+S390 ZFCP DRIVER
+P:	Andreas Herrmann
+M:	aherrman@de.ibm.com
+M:	linux390@de.ibm.com
+L:	linux-390@vm.marist.edu
+W:	http://www.ibm.com/developerworks/linux/linux390/
 S:	Supported
 S:	Supported
 
 
 SAA7146 VIDEO4LINUX-2 DRIVER
 SAA7146 VIDEO4LINUX-2 DRIVER

+ 1 - 1
Makefile

@@ -1,7 +1,7 @@
 VERSION = 2
 VERSION = 2
 PATCHLEVEL = 6
 PATCHLEVEL = 6
 SUBLEVEL = 16
 SUBLEVEL = 16
-EXTRAVERSION =-rc2
+EXTRAVERSION =-rc3
 NAME=Sliding Snow Leopard
 NAME=Sliding Snow Leopard
 
 
 # *DOCUMENTATION*
 # *DOCUMENTATION*

+ 27 - 2
arch/arm/mach-s3c2410/mach-h1940.c

@@ -46,10 +46,11 @@
 #include <asm/irq.h>
 #include <asm/irq.h>
 #include <asm/mach-types.h>
 #include <asm/mach-types.h>
 
 
-//#include <asm/debug-ll.h>
+
 #include <asm/arch/regs-serial.h>
 #include <asm/arch/regs-serial.h>
 #include <asm/arch/regs-lcd.h>
 #include <asm/arch/regs-lcd.h>
 
 
+#include <asm/arch/h1940-latch.h>
 #include <asm/arch/fb.h>
 #include <asm/arch/fb.h>
 
 
 #include <linux/serial_core.h>
 #include <linux/serial_core.h>
@@ -59,7 +60,12 @@
 #include "cpu.h"
 #include "cpu.h"
 
 
 static struct map_desc h1940_iodesc[] __initdata = {
 static struct map_desc h1940_iodesc[] __initdata = {
-	/* nothing here yet */
+	[0] = {
+		.virtual	= (unsigned long)H1940_LATCH,
+		.pfn		= __phys_to_pfn(H1940_PA_LATCH),
+		.length		= SZ_16K,
+		.type		= MT_DEVICE
+	},
 };
 };
 
 
 #define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK
 #define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK
@@ -92,6 +98,25 @@ static struct s3c2410_uartcfg h1940_uartcfgs[] = {
 	}
 	}
 };
 };
 
 
+/* Board control latch control */
+
+static unsigned int latch_state = H1940_LATCH_DEFAULT;
+
+void h1940_latch_control(unsigned int clear, unsigned int set)
+{
+	unsigned long flags;
+
+	local_irq_save(flags);
+
+	latch_state &= ~clear;
+	latch_state |= set;
+
+	__raw_writel(latch_state, H1940_LATCH);
+
+	local_irq_restore(flags);
+}
+
+EXPORT_SYMBOL_GPL(h1940_latch_control);
 
 
 
 
 /**
 /**

+ 31 - 0
arch/arm/mach-s3c2410/s3c2400.h

@@ -0,0 +1,31 @@
+/* arch/arm/mach-s3c2410/s3c2400.h
+ *
+ * Copyright (c) 2004 Simtec Electronics
+ *	Ben Dooks <ben@simtec.co.uk>
+ *
+ * Header file for S3C2400 cpu support
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * Modifications:
+ *     09-Fev-2006 LCVR  First version, based on s3c2410.h
+*/
+
+#ifdef CONFIG_CPU_S3C2400
+
+extern  int s3c2400_init(void);
+
+extern void s3c2400_map_io(struct map_desc *mach_desc, int size);
+
+extern void s3c2400_init_uarts(struct s3c2410_uartcfg *cfg, int no);
+
+extern void s3c2400_init_clocks(int xtal);
+
+#else
+#define s3c2400_init_clocks NULL
+#define s3c2400_init_uarts NULL
+#define s3c2400_map_io NULL
+#define s3c2400_init NULL
+#endif

+ 4 - 0
arch/frv/Kconfig

@@ -25,6 +25,10 @@ config GENERIC_HARDIRQS
 	bool
 	bool
 	default n
 	default n
 
 
+config TIME_LOW_RES
+	bool
+	default y
+
 mainmenu "Fujitsu FR-V Kernel Configuration"
 mainmenu "Fujitsu FR-V Kernel Configuration"
 
 
 source "init/Kconfig"
 source "init/Kconfig"

+ 1 - 1
arch/frv/Makefile

@@ -81,7 +81,7 @@ endif
 # - reserve CC3 for use with atomic ops
 # - reserve CC3 for use with atomic ops
 # - all the extra registers are dealt with only at context switch time
 # - all the extra registers are dealt with only at context switch time
 CFLAGS		+= -mno-fdpic -mgpr-32 -msoft-float -mno-media
 CFLAGS		+= -mno-fdpic -mgpr-32 -msoft-float -mno-media
-CFLAGS		+= -ffixed-fcc3 -ffixed-cc3 -ffixed-gr15
+CFLAGS		+= -ffixed-fcc3 -ffixed-cc3 -ffixed-gr15 -ffixed-icc2
 AFLAGS		+= -mno-fdpic
 AFLAGS		+= -mno-fdpic
 ASFLAGS		+= -mno-fdpic
 ASFLAGS		+= -mno-fdpic
 
 

+ 73 - 4
arch/frv/kernel/break.S

@@ -200,12 +200,20 @@ __break_step:
 	movsg		bpcsr,gr2
 	movsg		bpcsr,gr2
 	sethi.p		%hi(__entry_kernel_external_interrupt),gr3
 	sethi.p		%hi(__entry_kernel_external_interrupt),gr3
 	setlo		%lo(__entry_kernel_external_interrupt),gr3
 	setlo		%lo(__entry_kernel_external_interrupt),gr3
-	subcc		gr2,gr3,gr0,icc0
+	subcc.p		gr2,gr3,gr0,icc0
+	sethi		%hi(__entry_uspace_external_interrupt),gr3
+	setlo.p		%lo(__entry_uspace_external_interrupt),gr3
 	beq		icc0,#2,__break_step_kernel_external_interrupt
 	beq		icc0,#2,__break_step_kernel_external_interrupt
-	sethi.p		%hi(__entry_uspace_external_interrupt),gr3
-	setlo		%lo(__entry_uspace_external_interrupt),gr3
-	subcc		gr2,gr3,gr0,icc0
+	subcc.p		gr2,gr3,gr0,icc0
+	sethi		%hi(__entry_kernel_external_interrupt_virtually_disabled),gr3
+	setlo.p		%lo(__entry_kernel_external_interrupt_virtually_disabled),gr3
 	beq		icc0,#2,__break_step_uspace_external_interrupt
 	beq		icc0,#2,__break_step_uspace_external_interrupt
+	subcc.p		gr2,gr3,gr0,icc0
+	sethi		%hi(__entry_kernel_external_interrupt_virtual_reenable),gr3
+	setlo.p		%lo(__entry_kernel_external_interrupt_virtual_reenable),gr3
+	beq		icc0,#2,__break_step_kernel_external_interrupt_virtually_disabled
+	subcc		gr2,gr3,gr0,icc0
+	beq		icc0,#2,__break_step_kernel_external_interrupt_virtual_reenable
 
 
 	LEDS		0x2007,gr2
 	LEDS		0x2007,gr2
 
 
@@ -254,6 +262,9 @@ __break_step_kernel_softprog_interrupt:
 # step through an external interrupt from kernel mode
 # step through an external interrupt from kernel mode
 	.globl		__break_step_kernel_external_interrupt
 	.globl		__break_step_kernel_external_interrupt
 __break_step_kernel_external_interrupt:
 __break_step_kernel_external_interrupt:
+	# deal with virtual interrupt disablement
+	beq		icc2,#0,__break_step_kernel_external_interrupt_virtually_disabled
+
 	sethi.p		%hi(__entry_kernel_external_interrupt_reentry),gr3
 	sethi.p		%hi(__entry_kernel_external_interrupt_reentry),gr3
 	setlo		%lo(__entry_kernel_external_interrupt_reentry),gr3
 	setlo		%lo(__entry_kernel_external_interrupt_reentry),gr3
 
 
@@ -294,6 +305,64 @@ __break_return_as_kernel_prologue:
 #endif
 #endif
 	rett		#1
 	rett		#1
 
 
+# we single-stepped into an interrupt handler whilst interrupts were merely virtually disabled
+# need to really disable interrupts, set flag, fix up and return
+__break_step_kernel_external_interrupt_virtually_disabled:
+	movsg		psr,gr2
+	andi		gr2,#~PSR_PIL,gr2
+	ori		gr2,#PSR_PIL_14,gr2	/* debugging interrupts only */
+	movgs		gr2,psr
+
+	ldi		@(gr31,#REG_CCR),gr3
+	movgs		gr3,ccr
+	subcc.p		gr0,gr0,gr0,icc2	/* leave Z set, clear C */
+
+	# exceptions must've been enabled and we must've been in supervisor mode
+	setlos		BPSR_BET|BPSR_BS,gr3
+	movgs		gr3,bpsr
+
+	# return to where the interrupt happened
+	movsg		pcsr,gr2
+	movgs		gr2,bpcsr
+
+	lddi.p		@(gr31,#REG_GR(2)),gr2
+
+	xor		gr31,gr31,gr31
+	movgs		gr0,brr
+#ifdef CONFIG_MMU
+	movsg		scr3,gr31
+#endif
+	rett		#1
+
+# we stepped through into the virtual interrupt reenablement trap
+#
+# we also want to single step anyway, but after fixing up so that we get an event on the
+# instruction after the broken-into exception returns
+	.globl		__break_step_kernel_external_interrupt_virtual_reenable
+__break_step_kernel_external_interrupt_virtual_reenable:
+	movsg		psr,gr2
+	andi		gr2,#~PSR_PIL,gr2
+	movgs		gr2,psr
+
+	ldi		@(gr31,#REG_CCR),gr3
+	movgs		gr3,ccr
+	subicc		gr0,#1,gr0,icc2		/* clear Z, set C */
+
+	# save the adjusted ICC2
+	movsg		ccr,gr3
+	sti		gr3,@(gr31,#REG_CCR)
+
+	# exceptions must've been enabled and we must've been in supervisor mode
+	setlos		BPSR_BET|BPSR_BS,gr3
+	movgs		gr3,bpsr
+
+	# return to where the trap happened
+	movsg		pcsr,gr2
+	movgs		gr2,bpcsr
+
+	# and then process the single step
+	bra		__break_continue
+
 # step through an internal exception from uspace mode
 # step through an internal exception from uspace mode
 	.globl		__break_step_uspace_softprog_interrupt
 	.globl		__break_step_uspace_softprog_interrupt
 __break_step_uspace_softprog_interrupt:
 __break_step_uspace_softprog_interrupt:

+ 34 - 5
arch/frv/kernel/entry-table.S

@@ -116,6 +116,8 @@ __break_kerneltrap_fixup_table:
 	.long		__break_step_uspace_external_interrupt
 	.long		__break_step_uspace_external_interrupt
 	.section .trap.kernel
 	.section .trap.kernel
 	.org		\tbr_tt
 	.org		\tbr_tt
+	# deal with virtual interrupt disablement
+	beq		icc2,#0,__entry_kernel_external_interrupt_virtually_disabled
 	bra		__entry_kernel_external_interrupt
 	bra		__entry_kernel_external_interrupt
 	.section .trap.fixup.kernel
 	.section .trap.fixup.kernel
 	.org		\tbr_tt >> 2
 	.org		\tbr_tt >> 2
@@ -259,25 +261,52 @@ __trap_fixup_kernel_data_tlb_miss:
 	.org		TBR_TT_TRAP0
 	.org		TBR_TT_TRAP0
 	.rept		127
 	.rept		127
 	bra		__entry_uspace_softprog_interrupt
 	bra		__entry_uspace_softprog_interrupt
-	bra		__break_step_uspace_softprog_interrupt
-	.long		0,0
+	.long		0,0,0
 	.endr
 	.endr
 	.org		TBR_TT_BREAK
 	.org		TBR_TT_BREAK
 	bra		__entry_break
 	bra		__entry_break
 	.long		0,0,0
 	.long		0,0,0
 
 
+	.section	.trap.fixup.user
+	.org		TBR_TT_TRAP0 >> 2
+	.rept		127
+	.long		__break_step_uspace_softprog_interrupt
+	.endr
+	.org		TBR_TT_BREAK >> 2
+	.long		0
+
 	# miscellaneous kernel mode entry points
 	# miscellaneous kernel mode entry points
 	.section	.trap.kernel
 	.section	.trap.kernel
 	.org		TBR_TT_TRAP0
 	.org		TBR_TT_TRAP0
-	.rept		127
 	bra		__entry_kernel_softprog_interrupt
 	bra		__entry_kernel_softprog_interrupt
-	bra		__break_step_kernel_softprog_interrupt
-	.long		0,0
+	.org		TBR_TT_TRAP1
+	bra		__entry_kernel_softprog_interrupt
+
+	# trap #2 in kernel - reenable interrupts
+	.org		TBR_TT_TRAP2
+	bra		__entry_kernel_external_interrupt_virtual_reenable
+
+	# miscellaneous kernel traps
+	.org		TBR_TT_TRAP3
+	.rept		124
+	bra		__entry_kernel_softprog_interrupt
+	.long		0,0,0
 	.endr
 	.endr
 	.org		TBR_TT_BREAK
 	.org		TBR_TT_BREAK
 	bra		__entry_break
 	bra		__entry_break
 	.long		0,0,0
 	.long		0,0,0
 
 
+	.section	.trap.fixup.kernel
+	.org		TBR_TT_TRAP0 >> 2
+	.long		__break_step_kernel_softprog_interrupt
+	.long		__break_step_kernel_softprog_interrupt
+	.long		__break_step_kernel_external_interrupt_virtual_reenable
+	.rept		124
+	.long		__break_step_kernel_softprog_interrupt
+	.endr
+	.org		TBR_TT_BREAK >> 2
+	.long		0
+
 	# miscellaneous debug mode entry points
 	# miscellaneous debug mode entry points
 	.section	.trap.break
 	.section	.trap.break
 	.org		TBR_TT_BREAK
 	.org		TBR_TT_BREAK

+ 79 - 12
arch/frv/kernel/entry.S

@@ -141,7 +141,10 @@ __entry_uspace_external_interrupt_reentry:
 
 
 	movsg		gner0,gr4
 	movsg		gner0,gr4
 	movsg		gner1,gr5
 	movsg		gner1,gr5
-	stdi		gr4,@(gr28,#REG_GNER0)
+	stdi.p		gr4,@(gr28,#REG_GNER0)
+
+	# interrupts start off fully disabled in the interrupt handler
+	subcc		gr0,gr0,gr0,icc2		/* set Z and clear C */
 
 
 	# set up kernel global registers
 	# set up kernel global registers
 	sethi.p		%hi(__kernel_current_task),gr5
 	sethi.p		%hi(__kernel_current_task),gr5
@@ -193,9 +196,8 @@ __entry_uspace_external_interrupt_reentry:
         .type		__entry_kernel_external_interrupt,@function
         .type		__entry_kernel_external_interrupt,@function
 __entry_kernel_external_interrupt:
 __entry_kernel_external_interrupt:
 	LEDS		0x6210
 	LEDS		0x6210
-
-	sub		sp,gr15,gr31
-	LEDS32
+//	sub		sp,gr15,gr31
+//	LEDS32
 
 
 	# set up the stack pointer
 	# set up the stack pointer
 	or.p		sp,gr0,gr30
 	or.p		sp,gr0,gr30
@@ -231,7 +233,10 @@ __entry_kernel_external_interrupt_reentry:
 	stdi		gr24,@(gr28,#REG_GR(24))
 	stdi		gr24,@(gr28,#REG_GR(24))
 	stdi		gr26,@(gr28,#REG_GR(26))
 	stdi		gr26,@(gr28,#REG_GR(26))
 	sti		gr29,@(gr28,#REG_GR(29))
 	sti		gr29,@(gr28,#REG_GR(29))
-	stdi		gr30,@(gr28,#REG_GR(30))
+	stdi.p		gr30,@(gr28,#REG_GR(30))
+
+	# note virtual interrupts will be fully enabled upon return
+	subicc		gr0,#1,gr0,icc2			/* clear Z, set C */
 
 
 	movsg		tbr ,gr20
 	movsg		tbr ,gr20
 	movsg		psr ,gr22
 	movsg		psr ,gr22
@@ -267,7 +272,10 @@ __entry_kernel_external_interrupt_reentry:
 
 
 	movsg		gner0,gr4
 	movsg		gner0,gr4
 	movsg		gner1,gr5
 	movsg		gner1,gr5
-	stdi		gr4,@(gr28,#REG_GNER0)
+	stdi.p		gr4,@(gr28,#REG_GNER0)
+
+	# interrupts start off fully disabled in the interrupt handler
+	subcc		gr0,gr0,gr0,icc2			/* set Z and clear C */
 
 
 	# set the return address
 	# set the return address
 	sethi.p		%hi(__entry_return_from_kernel_interrupt),gr4
 	sethi.p		%hi(__entry_return_from_kernel_interrupt),gr4
@@ -291,6 +299,45 @@ __entry_kernel_external_interrupt_reentry:
 
 
 	.size		__entry_kernel_external_interrupt,.-__entry_kernel_external_interrupt
 	.size		__entry_kernel_external_interrupt,.-__entry_kernel_external_interrupt
 
 
+###############################################################################
+#
+# deal with interrupts that were actually virtually disabled
+# - we need to really disable them, flag the fact and return immediately
+# - if you change this, you must alter break.S also
+#
+###############################################################################
+	.balign		L1_CACHE_BYTES
+	.globl		__entry_kernel_external_interrupt_virtually_disabled
+	.type		__entry_kernel_external_interrupt_virtually_disabled,@function
+__entry_kernel_external_interrupt_virtually_disabled:
+	movsg		psr,gr30
+	andi		gr30,#~PSR_PIL,gr30
+	ori		gr30,#PSR_PIL_14,gr30		; debugging interrupts only
+	movgs		gr30,psr
+	subcc		gr0,gr0,gr0,icc2		; leave Z set, clear C
+	rett		#0
+
+	.size		__entry_kernel_external_interrupt_virtually_disabled,.-__entry_kernel_external_interrupt_virtually_disabled
+
+###############################################################################
+#
+# deal with re-enablement of interrupts that were pending when virtually re-enabled
+# - set ICC2.C, re-enable the real interrupts and return
+# - we can clear ICC2.Z because we shouldn't be here if it's not 0 [due to TIHI]
+# - if you change this, you must alter break.S also
+#
+###############################################################################
+	.balign		L1_CACHE_BYTES
+	.globl		__entry_kernel_external_interrupt_virtual_reenable
+	.type		__entry_kernel_external_interrupt_virtual_reenable,@function
+__entry_kernel_external_interrupt_virtual_reenable:
+	movsg		psr,gr30
+	andi		gr30,#~PSR_PIL,gr30		; re-enable interrupts
+	movgs		gr30,psr
+	subicc		gr0,#1,gr0,icc2			; clear Z, set C
+	rett		#0
+
+	.size		__entry_kernel_external_interrupt_virtual_reenable,.-__entry_kernel_external_interrupt_virtual_reenable
 
 
 ###############################################################################
 ###############################################################################
 #
 #
@@ -335,6 +382,7 @@ __entry_uspace_softprog_interrupt_reentry:
 
 
 	sethi.p		%hi(__entry_return_from_user_exception),gr23
 	sethi.p		%hi(__entry_return_from_user_exception),gr23
 	setlo		%lo(__entry_return_from_user_exception),gr23
 	setlo		%lo(__entry_return_from_user_exception),gr23
+
 	bra		__entry_common
 	bra		__entry_common
 
 
 	.size		__entry_uspace_softprog_interrupt,.-__entry_uspace_softprog_interrupt
 	.size		__entry_uspace_softprog_interrupt,.-__entry_uspace_softprog_interrupt
@@ -495,7 +543,10 @@ __entry_common:
 
 
 	movsg		gner0,gr4
 	movsg		gner0,gr4
 	movsg		gner1,gr5
 	movsg		gner1,gr5
-	stdi		gr4,@(gr28,#REG_GNER0)
+	stdi.p		gr4,@(gr28,#REG_GNER0)
+
+	# set up virtual interrupt disablement
+	subicc		gr0,#1,gr0,icc2			/* clear Z flag, set C flag */
 
 
 	# set up kernel global registers
 	# set up kernel global registers
 	sethi.p		%hi(__kernel_current_task),gr5
 	sethi.p		%hi(__kernel_current_task),gr5
@@ -1418,11 +1469,27 @@ sys_call_table:
 	.long sys_add_key
 	.long sys_add_key
 	.long sys_request_key
 	.long sys_request_key
 	.long sys_keyctl
 	.long sys_keyctl
-	.long sys_ni_syscall // sys_vperfctr_open
-	.long sys_ni_syscall // sys_vperfctr_control	/* 290 */
-	.long sys_ni_syscall // sys_vperfctr_unlink
-	.long sys_ni_syscall // sys_vperfctr_iresume
-	.long sys_ni_syscall // sys_vperfctr_read
+	.long sys_ioprio_set
+	.long sys_ioprio_get		/* 290 */
+	.long sys_inotify_init
+	.long sys_inotify_add_watch
+	.long sys_inotify_rm_watch
+	.long sys_migrate_pages
+	.long sys_openat		/* 295 */
+	.long sys_mkdirat
+	.long sys_mknodat
+	.long sys_fchownat
+	.long sys_futimesat
+	.long sys_newfstatat		/* 300 */
+	.long sys_unlinkat
+	.long sys_renameat
+	.long sys_linkat
+	.long sys_symlinkat
+	.long sys_readlinkat		/* 305 */
+	.long sys_fchmodat
+	.long sys_faccessat
+	.long sys_pselect6
+	.long sys_ppoll
 
 
 
 
 syscall_table_size = (. - sys_call_table)
 syscall_table_size = (. - sys_call_table)

+ 3 - 0
arch/frv/kernel/head.S

@@ -513,6 +513,9 @@ __head_mmu_enabled:
 	movgs		gr0,ccr
 	movgs		gr0,ccr
 	movgs		gr0,cccr
 	movgs		gr0,cccr
 
 
+	# initialise the virtual interrupt handling
+	subcc		gr0,gr0,gr0,icc2		/* set Z, clear C */
+
 #ifdef CONFIG_MMU
 #ifdef CONFIG_MMU
 	movgs		gr3,scr2
 	movgs		gr3,scr2
 	movgs		gr3,scr3
 	movgs		gr3,scr3

+ 3 - 38
arch/frv/kernel/irq.c

@@ -287,18 +287,11 @@ asmlinkage void do_IRQ(void)
 	struct irq_source *source;
 	struct irq_source *source;
 	int level, cpu;
 	int level, cpu;
 
 
+	irq_enter();
+
 	level = (__frame->tbr >> 4) & 0xf;
 	level = (__frame->tbr >> 4) & 0xf;
 	cpu = smp_processor_id();
 	cpu = smp_processor_id();
 
 
-#if 0
-	{
-		static u32 irqcount;
-		*(volatile u32 *) 0xe1200004 = ~((irqcount++ << 8) | level);
-		*(volatile u16 *) 0xffc00100 = (u16) ~0x9999;
-		mb();
-	}
-#endif
-
 	if ((unsigned long) __frame - (unsigned long) (current + 1) < 512)
 	if ((unsigned long) __frame - (unsigned long) (current + 1) < 512)
 		BUG();
 		BUG();
 
 
@@ -308,40 +301,12 @@ asmlinkage void do_IRQ(void)
 
 
 	kstat_this_cpu.irqs[level]++;
 	kstat_this_cpu.irqs[level]++;
 
 
-	irq_enter();
-
 	for (source = frv_irq_levels[level].sources; source; source = source->next)
 	for (source = frv_irq_levels[level].sources; source; source = source->next)
 		source->doirq(source);
 		source->doirq(source);
 
 
-	irq_exit();
-
 	__clr_MASK(level);
 	__clr_MASK(level);
 
 
-	/* only process softirqs if we didn't interrupt another interrupt handler */
-	if ((__frame->psr & PSR_PIL) == PSR_PIL_0)
-		if (local_softirq_pending())
-			do_softirq();
-
-#ifdef CONFIG_PREEMPT
-	local_irq_disable();
-	while (--current->preempt_count == 0) {
-		if (!(__frame->psr & PSR_S) ||
-		    current->need_resched == 0 ||
-		    in_interrupt())
-			break;
-		current->preempt_count++;
-		local_irq_enable();
-		preempt_schedule();
-		local_irq_disable();
-	}
-#endif
-
-#if 0
-	{
-		*(volatile u16 *) 0xffc00100 = (u16) ~0x6666;
-		mb();
-	}
-#endif
+	irq_exit();
 
 
 } /* end do_IRQ() */
 } /* end do_IRQ() */
 
 

+ 0 - 9
arch/frv/mm/kmap.c

@@ -43,15 +43,6 @@ void iounmap(void *addr)
 {
 {
 }
 }
 
 
-/*
- * __iounmap unmaps nearly everything, so be careful
- * it doesn't free currently pointer/page tables anymore but it
- * wans't used anyway and might be added later.
- */
-void __iounmap(void *addr, unsigned long size)
-{
-}
-
 /*
 /*
  * Set new cache mode for some kernel address space.
  * Set new cache mode for some kernel address space.
  * The caller must push data for that range itself, if such data may already
  * The caller must push data for that range itself, if such data may already

+ 4 - 0
arch/h8300/Kconfig

@@ -33,6 +33,10 @@ config GENERIC_CALIBRATE_DELAY
 	bool
 	bool
 	default y
 	default y
 
 
+config TIME_LOW_RES
+	bool
+	default y
+
 config ISA
 config ISA
 	bool
 	bool
 	default y
 	default y

+ 1 - 1
arch/h8300/Kconfig.cpu

@@ -169,7 +169,7 @@ endif
 
 
 config CPU_H8300H
 config CPU_H8300H
 	bool
 	bool
-	depends on (H8002 || H83007 || H83048 || H83068)
+	depends on (H83002 || H83007 || H83048 || H83068)
 	default y
 	default y
 
 
 config CPU_H8S
 config CPU_H8S

+ 3 - 0
arch/i386/boot/.gitignore

@@ -0,0 +1,3 @@
+bootsect
+bzImage
+setup

+ 1 - 0
arch/i386/boot/tools/.gitignore

@@ -0,0 +1 @@
+build

+ 1 - 0
arch/i386/kernel/.gitignore

@@ -0,0 +1 @@
+vsyscall.lds

+ 4 - 0
arch/i386/kernel/head.S

@@ -398,7 +398,11 @@ ignore_int:
 	pushl 32(%esp)
 	pushl 32(%esp)
 	pushl 40(%esp)
 	pushl 40(%esp)
 	pushl $int_msg
 	pushl $int_msg
+#ifdef CONFIG_EARLY_PRINTK
+	call early_printk
+#else
 	call printk
 	call printk
+#endif
 	addl $(5*4),%esp
 	addl $(5*4),%esp
 	popl %ds
 	popl %ds
 	popl %es
 	popl %es

+ 1 - 1
arch/i386/kernel/syscall_table.S

@@ -299,7 +299,7 @@ ENTRY(sys_call_table)
 	.long sys_mknodat
 	.long sys_mknodat
 	.long sys_fchownat
 	.long sys_fchownat
 	.long sys_futimesat
 	.long sys_futimesat
-	.long sys_newfstatat		/* 300 */
+	.long sys_fstatat64		/* 300 */
 	.long sys_unlinkat
 	.long sys_unlinkat
 	.long sys_renameat
 	.long sys_renameat
 	.long sys_linkat
 	.long sys_linkat

+ 5 - 0
arch/i386/kernel/timers/timer_tsc.c

@@ -282,6 +282,10 @@ time_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
 	if (val != CPUFREQ_RESUMECHANGE)
 	if (val != CPUFREQ_RESUMECHANGE)
 		write_seqlock_irq(&xtime_lock);
 		write_seqlock_irq(&xtime_lock);
 	if (!ref_freq) {
 	if (!ref_freq) {
+		if (!freq->old){
+			ref_freq = freq->new;
+			goto end;
+		}
 		ref_freq = freq->old;
 		ref_freq = freq->old;
 		loops_per_jiffy_ref = cpu_data[freq->cpu].loops_per_jiffy;
 		loops_per_jiffy_ref = cpu_data[freq->cpu].loops_per_jiffy;
 #ifndef CONFIG_SMP
 #ifndef CONFIG_SMP
@@ -307,6 +311,7 @@ time_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
 #endif
 #endif
 	}
 	}
 
 
+end:
 	if (val != CPUFREQ_RESUMECHANGE)
 	if (val != CPUFREQ_RESUMECHANGE)
 		write_sequnlock_irq(&xtime_lock);
 		write_sequnlock_irq(&xtime_lock);
 
 

+ 15 - 0
arch/i386/kernel/vsyscall-sysenter.S

@@ -7,6 +7,21 @@
  *    for details.
  *    for details.
  */
  */
 
 
+/*
+ * The caller puts arg2 in %ecx, which gets pushed. The kernel will use
+ * %ecx itself for arg2. The pushing is because the sysexit instruction
+ * (found in entry.S) requires that we clobber %ecx with the desired %esp.
+ * User code might expect that %ecx is unclobbered though, as it would be
+ * for returning via the iret instruction, so we must push and pop.
+ *
+ * The caller puts arg3 in %edx, which the sysexit instruction requires
+ * for %eip. Thus, exactly as for arg2, we must push and pop.
+ *
+ * Arg6 is different. The caller puts arg6 in %ebp. Since the sysenter
+ * instruction clobbers %esp, the user's %esp won't even survive entry
+ * into the kernel. We store %esp in %ebp. Code in entry.S must fetch
+ * arg6 from the stack.
+ */
 	.text
 	.text
 	.globl __kernel_vsyscall
 	.globl __kernel_vsyscall
 	.type __kernel_vsyscall,@function
 	.type __kernel_vsyscall,@function

+ 16 - 3
arch/i386/oprofile/backtrace.c

@@ -20,7 +20,20 @@ struct frame_head {
 } __attribute__((packed));
 } __attribute__((packed));
 
 
 static struct frame_head *
 static struct frame_head *
-dump_backtrace(struct frame_head * head)
+dump_kernel_backtrace(struct frame_head * head)
+{
+	oprofile_add_trace(head->ret);
+
+	/* frame pointers should strictly progress back up the stack
+	 * (towards higher addresses) */
+	if (head >= head->ebp)
+		return NULL;
+
+	return head->ebp;
+}
+
+static struct frame_head *
+dump_user_backtrace(struct frame_head * head)
 {
 {
 	struct frame_head bufhead[2];
 	struct frame_head bufhead[2];
 
 
@@ -105,10 +118,10 @@ x86_backtrace(struct pt_regs * const regs, unsigned int depth)
 
 
 	if (!user_mode_vm(regs)) {
 	if (!user_mode_vm(regs)) {
 		while (depth-- && valid_kernel_stack(head, regs))
 		while (depth-- && valid_kernel_stack(head, regs))
-			head = dump_backtrace(head);
+			head = dump_kernel_backtrace(head);
 		return;
 		return;
 	}
 	}
 
 
 	while (depth-- && head)
 	while (depth-- && head)
-		head = dump_backtrace(head);
+		head = dump_user_backtrace(head);
 }
 }

+ 4 - 0
arch/m68k/Kconfig

@@ -21,6 +21,10 @@ config GENERIC_CALIBRATE_DELAY
 	bool
 	bool
 	default y
 	default y
 
 
+config TIME_LOW_RES
+	bool
+	default y
+
 config ARCH_MAY_HAVE_PC_FDC
 config ARCH_MAY_HAVE_PC_FDC
 	bool
 	bool
 	depends on Q40 || (BROKEN && SUN3X)
 	depends on Q40 || (BROKEN && SUN3X)

+ 2 - 3
arch/m68k/fpsp040/bindec.S

@@ -131,9 +131,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |BINDEC    idnt    2,1 | Motorola 040 Floating Point Software Package
 |BINDEC    idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/binstr.S

@@ -60,9 +60,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |BINSTR    idnt    2,1 | Motorola 040 Floating Point Software Package
 |BINSTR    idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/bugfix.S

@@ -152,9 +152,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |BUGFIX    idnt    2,1 | Motorola 040 Floating Point Software Package
 |BUGFIX    idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/decbin.S

@@ -69,9 +69,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |DECBIN    idnt    2,1 | Motorola 040 Floating Point Software Package
 |DECBIN    idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/do_func.S

@@ -22,9 +22,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 DO_FUNC:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 DO_FUNC:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/fpsp.h

@@ -5,9 +5,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |	fpsp.h --- stack frame offsets during FPSP exception handling
 |	fpsp.h --- stack frame offsets during FPSP exception handling
 |
 |

+ 2 - 3
arch/m68k/fpsp040/gen_except.S

@@ -29,9 +29,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 GEN_EXCEPT:    |idnt    2,1 | Motorola 040 Floating Point Software Package
 GEN_EXCEPT:    |idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/get_op.S

@@ -54,9 +54,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 GET_OP:    |idnt    2,1 | Motorola 040 Floating Point Software Package
 GET_OP:    |idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/kernel_ex.S

@@ -12,9 +12,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 KERNEL_EX:    |idnt    2,1 | Motorola 040 Floating Point Software Package
 KERNEL_EX:    |idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/res_func.S

@@ -16,9 +16,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 RES_FUNC:    |idnt    2,1 | Motorola 040 Floating Point Software Package
 RES_FUNC:    |idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/round.S

@@ -8,9 +8,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |ROUND	idnt    2,1 | Motorola 040 Floating Point Software Package
 |ROUND	idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/sacos.S

@@ -38,9 +38,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |SACOS	idnt	2,1 | Motorola 040 Floating Point Software Package
 |SACOS	idnt	2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/sasin.S

@@ -38,9 +38,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |SASIN	idnt	2,1 | Motorola 040 Floating Point Software Package
 |SASIN	idnt	2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/satan.S

@@ -43,9 +43,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |satan	idnt	2,1 | Motorola 040 Floating Point Software Package
 |satan	idnt	2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/satanh.S

@@ -45,9 +45,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |satanh	idnt	2,1 | Motorola 040 Floating Point Software Package
 |satanh	idnt	2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/scale.S

@@ -21,9 +21,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |SCALE    idnt    2,1 | Motorola 040 Floating Point Software Package
 |SCALE    idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/scosh.S

@@ -49,9 +49,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |SCOSH	idnt	2,1 | Motorola 040 Floating Point Software Package
 |SCOSH	idnt	2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/setox.S

@@ -331,9 +331,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |setox	idnt	2,1 | Motorola 040 Floating Point Software Package
 |setox	idnt	2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/sgetem.S

@@ -24,9 +24,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |SGETEM	idnt	2,1 | Motorola 040 Floating Point Software Package
 |SGETEM	idnt	2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/sint.S

@@ -51,9 +51,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |SINT    idnt    2,1 | Motorola 040 Floating Point Software Package
 |SINT    idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/skeleton.S

@@ -30,9 +30,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |
 |
 |	Modified for Linux-1.3.x by Jes Sorensen (jds@kom.auc.dk)
 |	Modified for Linux-1.3.x by Jes Sorensen (jds@kom.auc.dk)

+ 2 - 3
arch/m68k/fpsp040/slog2.S

@@ -96,9 +96,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |SLOG2    idnt    2,1 | Motorola 040 Floating Point Software Package
 |SLOG2    idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/slogn.S

@@ -63,9 +63,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |slogn	idnt	2,1 | Motorola 040 Floating Point Software Package
 |slogn	idnt	2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/smovecr.S

@@ -15,9 +15,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |SMOVECR	idnt	2,1 | Motorola 040 Floating Point Software Package
 |SMOVECR	idnt	2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/srem_mod.S

@@ -66,9 +66,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 SREM_MOD:    |idnt    2,1 | Motorola 040 Floating Point Software Package
 SREM_MOD:    |idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/ssin.S

@@ -83,9 +83,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |SSIN	idnt	2,1 | Motorola 040 Floating Point Software Package
 |SSIN	idnt	2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/ssinh.S

@@ -49,9 +49,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |SSINH	idnt	2,1 | Motorola 040 Floating Point Software Package
 |SSINH	idnt	2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/stan.S

@@ -50,9 +50,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |STAN	idnt	2,1 | Motorola 040 Floating Point Software Package
 |STAN	idnt	2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/stanh.S

@@ -49,9 +49,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |STANH	idnt	2,1 | Motorola 040 Floating Point Software Package
 |STANH	idnt	2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/sto_res.S

@@ -19,9 +19,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 STO_RES:	|idnt	2,1 | Motorola 040 Floating Point Software Package
 STO_RES:	|idnt	2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/stwotox.S

@@ -76,9 +76,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |STWOTOX	idnt	2,1 | Motorola 040 Floating Point Software Package
 |STWOTOX	idnt	2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/tbldo.S

@@ -17,9 +17,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |TBLDO	idnt    2,1 | Motorola 040 Floating Point Software Package
 |TBLDO	idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/util.S

@@ -16,9 +16,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 |UTIL	idnt    2,1 | Motorola 040 Floating Point Software Package
 |UTIL	idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/x_bsun.S

@@ -13,9 +13,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 X_BSUN:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 X_BSUN:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/x_fline.S

@@ -13,9 +13,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 X_FLINE:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 X_FLINE:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/x_operr.S

@@ -43,9 +43,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 X_OPERR:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 X_OPERR:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/x_ovfl.S

@@ -35,9 +35,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 X_OVFL:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 X_OVFL:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/x_snan.S

@@ -22,9 +22,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 X_SNAN:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 X_SNAN:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/x_store.S

@@ -11,9 +11,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 X_STORE:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 X_STORE:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/x_unfl.S

@@ -21,9 +21,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 X_UNFL:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 X_UNFL:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/x_unimp.S

@@ -22,9 +22,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 X_UNIMP:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 X_UNIMP:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 2 - 3
arch/m68k/fpsp040/x_unsupp.S

@@ -23,9 +23,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |			All Rights Reserved
 |
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-|	The copyright notice above does not evidence any
-|	actual or intended publication of such source code.
+|       For details on the license for this file, please see the
+|       file, README, in this same directory.
 
 
 X_UNSUPP:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 X_UNSUPP:	|idnt    2,1 | Motorola 040 Floating Point Software Package
 
 

+ 4 - 0
arch/m68knommu/Kconfig

@@ -29,6 +29,10 @@ config GENERIC_CALIBRATE_DELAY
 	bool
 	bool
 	default y
 	default y
 
 
+config TIME_LOW_RES
+	bool
+	default y
+
 source "init/Kconfig"
 source "init/Kconfig"
 
 
 menu "Processor type and features"
 menu "Processor type and features"

+ 0 - 1
arch/mips/Makefile

@@ -94,7 +94,6 @@ endif
 # machines may also.  Since BFD is incredibly buggy with respect to
 # machines may also.  Since BFD is incredibly buggy with respect to
 # crossformat linking we rely on the elf2ecoff tool for format conversion.
 # crossformat linking we rely on the elf2ecoff tool for format conversion.
 #
 #
-cflags-y			+= -I $(TOPDIR)/include/asm/gcc
 cflags-y			+= -G 0 -mno-abicalls -fno-pic -pipe
 cflags-y			+= -G 0 -mno-abicalls -fno-pic -pipe
 LDFLAGS_vmlinux			+= -G 0 -static -n -nostdlib
 LDFLAGS_vmlinux			+= -G 0 -static -n -nostdlib
 MODFLAGS			+= -mlong-calls
 MODFLAGS			+= -mlong-calls

+ 77 - 81
arch/mips/kernel/process.c

@@ -25,6 +25,7 @@
 #include <linux/a.out.h>
 #include <linux/a.out.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/completion.h>
 #include <linux/completion.h>
+#include <linux/kallsyms.h>
 
 
 #include <asm/abi.h>
 #include <asm/abi.h>
 #include <asm/bootinfo.h>
 #include <asm/bootinfo.h>
@@ -272,46 +273,19 @@ long kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
 
 
 static struct mips_frame_info {
 static struct mips_frame_info {
 	void *func;
 	void *func;
-	int omit_fp;	/* compiled without fno-omit-frame-pointer */
-	int frame_offset;
+	unsigned long func_size;
+	int frame_size;
 	int pc_offset;
 	int pc_offset;
-} schedule_frame, mfinfo[] = {
-	{ schedule, 0 },	/* must be first */
-	/* arch/mips/kernel/semaphore.c */
-	{ __down, 1 },
-	{ __down_interruptible, 1 },
-	/* kernel/sched.c */
-#ifdef CONFIG_PREEMPT
-	{ preempt_schedule, 0 },
-#endif
-	{ wait_for_completion, 0 },
-	{ interruptible_sleep_on, 0 },
-	{ interruptible_sleep_on_timeout, 0 },
-	{ sleep_on, 0 },
-	{ sleep_on_timeout, 0 },
-	{ yield, 0 },
-	{ io_schedule, 0 },
-	{ io_schedule_timeout, 0 },
-#if defined(CONFIG_SMP) && defined(CONFIG_PREEMPT)
-	{ __preempt_spin_lock, 0 },
-	{ __preempt_write_lock, 0 },
-#endif
-	/* kernel/timer.c */
-	{ schedule_timeout, 1 },
-/*	{ nanosleep_restart, 1 }, */
-	/* lib/rwsem-spinlock.c */
-	{ __down_read, 1 },
-	{ __down_write, 1 },
-};
+} *schedule_frame, mfinfo[64];
+static int mfinfo_num;
 
 
-static int mips_frame_info_initialized;
 static int __init get_frame_info(struct mips_frame_info *info)
 static int __init get_frame_info(struct mips_frame_info *info)
 {
 {
 	int i;
 	int i;
 	void *func = info->func;
 	void *func = info->func;
 	union mips_instruction *ip = (union mips_instruction *)func;
 	union mips_instruction *ip = (union mips_instruction *)func;
 	info->pc_offset = -1;
 	info->pc_offset = -1;
-	info->frame_offset = info->omit_fp ? 0 : -1;
+	info->frame_size = 0;
 	for (i = 0; i < 128; i++, ip++) {
 	for (i = 0; i < 128; i++, ip++) {
 		/* if jal, jalr, jr, stop. */
 		/* if jal, jalr, jr, stop. */
 		if (ip->j_format.opcode == jal_op ||
 		if (ip->j_format.opcode == jal_op ||
@@ -320,6 +294,23 @@ static int __init get_frame_info(struct mips_frame_info *info)
 		      ip->r_format.func == jr_op)))
 		      ip->r_format.func == jr_op)))
 			break;
 			break;
 
 
+		if (info->func_size && i >= info->func_size / 4)
+			break;
+		if (
+#ifdef CONFIG_32BIT
+		    ip->i_format.opcode == addiu_op &&
+#endif
+#ifdef CONFIG_64BIT
+		    ip->i_format.opcode == daddiu_op &&
+#endif
+		    ip->i_format.rs == 29 &&
+		    ip->i_format.rt == 29) {
+			/* addiu/daddiu sp,sp,-imm */
+			if (info->frame_size)
+				continue;
+			info->frame_size = - ip->i_format.simmediate;
+		}
+
 		if (
 		if (
 #ifdef CONFIG_32BIT
 #ifdef CONFIG_32BIT
 		    ip->i_format.opcode == sw_op &&
 		    ip->i_format.opcode == sw_op &&
@@ -327,31 +318,20 @@ static int __init get_frame_info(struct mips_frame_info *info)
 #ifdef CONFIG_64BIT
 #ifdef CONFIG_64BIT
 		    ip->i_format.opcode == sd_op &&
 		    ip->i_format.opcode == sd_op &&
 #endif
 #endif
-		    ip->i_format.rs == 29)
-		{
+		    ip->i_format.rs == 29 &&
+		    ip->i_format.rt == 31) {
 			/* sw / sd $ra, offset($sp) */
 			/* sw / sd $ra, offset($sp) */
-			if (ip->i_format.rt == 31) {
-				if (info->pc_offset != -1)
-					continue;
-				info->pc_offset =
-					ip->i_format.simmediate / sizeof(long);
-			}
-			/* sw / sd $s8, offset($sp) */
-			if (ip->i_format.rt == 30) {
-//#if 0	/* gcc 3.4 does aggressive optimization... */
-				if (info->frame_offset != -1)
-					continue;
-//#endif
-				info->frame_offset =
-					ip->i_format.simmediate / sizeof(long);
-			}
+			if (info->pc_offset != -1)
+				continue;
+			info->pc_offset =
+				ip->i_format.simmediate / sizeof(long);
 		}
 		}
 	}
 	}
-	if (info->pc_offset == -1 || info->frame_offset == -1) {
-		printk("Can't analyze prologue code at %p\n", func);
+	if (info->pc_offset == -1 || info->frame_size == 0) {
+		if (func == schedule)
+			printk("Can't analyze prologue code at %p\n", func);
 		info->pc_offset = -1;
 		info->pc_offset = -1;
-		info->frame_offset = -1;
-		return -1;
+		info->frame_size = 0;
 	}
 	}
 
 
 	return 0;
 	return 0;
@@ -359,25 +339,36 @@ static int __init get_frame_info(struct mips_frame_info *info)
 
 
 static int __init frame_info_init(void)
 static int __init frame_info_init(void)
 {
 {
-	int i, found;
-	for (i = 0; i < ARRAY_SIZE(mfinfo); i++)
-		if (get_frame_info(&mfinfo[i]))
-			return -1;
-	schedule_frame = mfinfo[0];
-	/* bubble sort */
-	do {
-		struct mips_frame_info tmp;
-		found = 0;
-		for (i = 1; i < ARRAY_SIZE(mfinfo); i++) {
-			if (mfinfo[i-1].func > mfinfo[i].func) {
-				tmp = mfinfo[i];
-				mfinfo[i] = mfinfo[i-1];
-				mfinfo[i-1] = tmp;
-				found = 1;
-			}
-		}
-	} while (found);
-	mips_frame_info_initialized = 1;
+	int i;
+#ifdef CONFIG_KALLSYMS
+	char *modname;
+	char namebuf[KSYM_NAME_LEN + 1];
+	unsigned long start, size, ofs;
+	extern char __sched_text_start[], __sched_text_end[];
+	extern char __lock_text_start[], __lock_text_end[];
+
+	start = (unsigned long)__sched_text_start;
+	for (i = 0; i < ARRAY_SIZE(mfinfo); i++) {
+		if (start == (unsigned long)schedule)
+			schedule_frame = &mfinfo[i];
+		if (!kallsyms_lookup(start, &size, &ofs, &modname, namebuf))
+			break;
+		mfinfo[i].func = (void *)(start + ofs);
+		mfinfo[i].func_size = size;
+		start += size - ofs;
+		if (start >= (unsigned long)__lock_text_end)
+			break;
+		if (start == (unsigned long)__sched_text_end)
+			start = (unsigned long)__lock_text_start;
+	}
+#else
+	mfinfo[0].func = schedule;
+	schedule_frame = &mfinfo[0];
+#endif
+	for (i = 0; i < ARRAY_SIZE(mfinfo) && mfinfo[i].func; i++)
+		get_frame_info(&mfinfo[i]);
+
+	mfinfo_num = i;
 	return 0;
 	return 0;
 }
 }
 
 
@@ -394,47 +385,52 @@ unsigned long thread_saved_pc(struct task_struct *tsk)
 	if (t->reg31 == (unsigned long) ret_from_fork)
 	if (t->reg31 == (unsigned long) ret_from_fork)
 		return t->reg31;
 		return t->reg31;
 
 
-	if (schedule_frame.pc_offset < 0)
+	if (!schedule_frame || schedule_frame->pc_offset < 0)
 		return 0;
 		return 0;
-	return ((unsigned long *)t->reg29)[schedule_frame.pc_offset];
+	return ((unsigned long *)t->reg29)[schedule_frame->pc_offset];
 }
 }
 
 
 /* get_wchan - a maintenance nightmare^W^Wpain in the ass ...  */
 /* get_wchan - a maintenance nightmare^W^Wpain in the ass ...  */
 unsigned long get_wchan(struct task_struct *p)
 unsigned long get_wchan(struct task_struct *p)
 {
 {
 	unsigned long stack_page;
 	unsigned long stack_page;
-	unsigned long frame, pc;
+	unsigned long pc;
+#ifdef CONFIG_KALLSYMS
+	unsigned long frame;
+#endif
 
 
 	if (!p || p == current || p->state == TASK_RUNNING)
 	if (!p || p == current || p->state == TASK_RUNNING)
 		return 0;
 		return 0;
 
 
 	stack_page = (unsigned long)task_stack_page(p);
 	stack_page = (unsigned long)task_stack_page(p);
-	if (!stack_page || !mips_frame_info_initialized)
+	if (!stack_page || !mfinfo_num)
 		return 0;
 		return 0;
 
 
 	pc = thread_saved_pc(p);
 	pc = thread_saved_pc(p);
+#ifdef CONFIG_KALLSYMS
 	if (!in_sched_functions(pc))
 	if (!in_sched_functions(pc))
 		return pc;
 		return pc;
 
 
-	frame = ((unsigned long *)p->thread.reg30)[schedule_frame.frame_offset];
+	frame = p->thread.reg29 + schedule_frame->frame_size;
 	do {
 	do {
 		int i;
 		int i;
 
 
 		if (frame < stack_page || frame > stack_page + THREAD_SIZE - 32)
 		if (frame < stack_page || frame > stack_page + THREAD_SIZE - 32)
 			return 0;
 			return 0;
 
 
-		for (i = ARRAY_SIZE(mfinfo) - 1; i >= 0; i--) {
+		for (i = mfinfo_num - 1; i >= 0; i--) {
 			if (pc >= (unsigned long) mfinfo[i].func)
 			if (pc >= (unsigned long) mfinfo[i].func)
 				break;
 				break;
 		}
 		}
 		if (i < 0)
 		if (i < 0)
 			break;
 			break;
 
 
-		if (mfinfo[i].omit_fp)
-			break;
 		pc = ((unsigned long *)frame)[mfinfo[i].pc_offset];
 		pc = ((unsigned long *)frame)[mfinfo[i].pc_offset];
-		frame = ((unsigned long *)frame)[mfinfo[i].frame_offset];
+		if (!mfinfo[i].frame_size)
+			break;
+		frame += mfinfo[i].frame_size;
 	} while (in_sched_functions(pc));
 	} while (in_sched_functions(pc));
+#endif
 
 
 	return pc;
 	return pc;
 }
 }

+ 1 - 1
arch/mips/kernel/scall32-o32.S

@@ -623,7 +623,7 @@ einval:	li	v0, -EINVAL
 	sys	sys_mknodat		4	/* 4290 */
 	sys	sys_mknodat		4	/* 4290 */
 	sys	sys_fchownat		5
 	sys	sys_fchownat		5
 	sys	sys_futimesat		3
 	sys	sys_futimesat		3
-	sys	sys_newfstatat		4
+	sys	sys_fstatat64		4
 	sys	sys_unlinkat		3
 	sys	sys_unlinkat		3
 	sys	sys_renameat		4	/* 4295 */
 	sys	sys_renameat		4	/* 4295 */
 	sys	sys_linkat		4
 	sys	sys_linkat		4

+ 1 - 1
arch/mips/kernel/signal-common.h

@@ -176,7 +176,7 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size)
 	if ((ka->sa.sa_flags & SA_ONSTACK) && (sas_ss_flags (sp) == 0))
 	if ((ka->sa.sa_flags & SA_ONSTACK) && (sas_ss_flags (sp) == 0))
 		sp = current->sas_ss_sp + current->sas_ss_size;
 		sp = current->sas_ss_sp + current->sas_ss_size;
 
 
-	return (void __user *)((sp - frame_size) & (ICACHE_REFILLS_WORKAROUND_WAR ? 32 : ALMASK));
+	return (void __user *)((sp - frame_size) & (ICACHE_REFILLS_WORKAROUND_WAR ? ~(cpu_icache_line_size()-1) : ALMASK));
 }
 }
 
 
 static inline int install_sigtramp(unsigned int __user *tramp,
 static inline int install_sigtramp(unsigned int __user *tramp,

+ 1 - 1
arch/mips/kernel/signal32.c

@@ -537,7 +537,7 @@ _sys32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
 	/* The ucontext contains a stack32_t, so we must convert!  */
 	/* The ucontext contains a stack32_t, so we must convert!  */
 	if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp))
 	if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp))
 		goto badframe;
 		goto badframe;
-	st.ss_size = (long) sp;
+	st.ss_sp = (void *)(long) sp;
 	if (__get_user(st.ss_size, &frame->rs_uc.uc_stack.ss_size))
 	if (__get_user(st.ss_size, &frame->rs_uc.uc_stack.ss_size))
 		goto badframe;
 		goto badframe;
 	if (__get_user(st.ss_flags, &frame->rs_uc.uc_stack.ss_flags))
 	if (__get_user(st.ss_flags, &frame->rs_uc.uc_stack.ss_flags))

+ 1 - 1
arch/mips/kernel/signal_n32.c

@@ -108,7 +108,7 @@ _sysn32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
 	/* The ucontext contains a stack32_t, so we must convert!  */
 	/* The ucontext contains a stack32_t, so we must convert!  */
 	if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp))
 	if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp))
 		goto badframe;
 		goto badframe;
-	st.ss_size = (long) sp;
+	st.ss_sp = (void *)(long) sp;
 	if (__get_user(st.ss_size, &frame->rs_uc.uc_stack.ss_size))
 	if (__get_user(st.ss_size, &frame->rs_uc.uc_stack.ss_size))
 		goto badframe;
 		goto badframe;
 	if (__get_user(st.ss_flags, &frame->rs_uc.uc_stack.ss_flags))
 	if (__get_user(st.ss_flags, &frame->rs_uc.uc_stack.ss_flags))

+ 5 - 29
arch/mips/kernel/smp_mt.c

@@ -68,6 +68,8 @@ void __init sanitize_tlb_entries(void)
 
 
 	set_c0_mvpcontrol(MVPCONTROL_VPC);
 	set_c0_mvpcontrol(MVPCONTROL_VPC);
 
 
+	back_to_back_c0_hazard();
+
 	/* Disable TLB sharing */
 	/* Disable TLB sharing */
 	clear_c0_mvpcontrol(MVPCONTROL_STLB);
 	clear_c0_mvpcontrol(MVPCONTROL_STLB);
 
 
@@ -102,35 +104,6 @@ void __init sanitize_tlb_entries(void)
 	clear_c0_mvpcontrol(MVPCONTROL_VPC);
 	clear_c0_mvpcontrol(MVPCONTROL_VPC);
 }
 }
 
 
-#if 0
-/*
- * Use c0_MVPConf0 to find out how many CPUs are available, setting up
- * phys_cpu_present_map and the logical/physical mappings.
- */
-void __init prom_build_cpu_map(void)
-{
-	int i, num, ncpus;
-
-	cpus_clear(phys_cpu_present_map);
-
-	/* assume we boot on cpu 0.... */
-	cpu_set(0, phys_cpu_present_map);
-	__cpu_number_map[0] = 0;
-	__cpu_logical_map[0] = 0;
-
-	if (cpu_has_mipsmt) {
-		ncpus = ((read_c0_mvpconf0() & (MVPCONF0_PVPE)) >> MVPCONF0_PVPE_SHIFT) + 1;
-		for (i=1, num=0; i< NR_CPUS && i<ncpus; i++) {
-			cpu_set(i, phys_cpu_present_map);
-			__cpu_number_map[i] = ++num;
-			__cpu_logical_map[num] = i;
-		}
-
-		printk(KERN_INFO "%i available secondary CPU(s)\n", num);
-	}
-}
-#endif
-
 static void ipi_resched_dispatch (struct pt_regs *regs)
 static void ipi_resched_dispatch (struct pt_regs *regs)
 {
 {
 	do_IRQ(MIPS_CPU_IPI_RESCHED_IRQ, regs);
 	do_IRQ(MIPS_CPU_IPI_RESCHED_IRQ, regs);
@@ -222,6 +195,9 @@ void prom_prepare_cpus(unsigned int max_cpus)
 
 
 				/* set config to be the same as vpe0, particularly kseg0 coherency alg */
 				/* set config to be the same as vpe0, particularly kseg0 coherency alg */
 				write_vpe_c0_config( read_c0_config());
 				write_vpe_c0_config( read_c0_config());
+
+				/* Propagate Config7 */
+				write_vpe_c0_config7(read_c0_config7());
 			}
 			}
 
 
 		}
 		}

+ 14 - 90
arch/mips/mm/c-r4k.c

@@ -471,61 +471,29 @@ struct flush_icache_range_args {
 static inline void local_r4k_flush_icache_range(void *args)
 static inline void local_r4k_flush_icache_range(void *args)
 {
 {
 	struct flush_icache_range_args *fir_args = args;
 	struct flush_icache_range_args *fir_args = args;
-	unsigned long dc_lsize = cpu_dcache_line_size();
-	unsigned long ic_lsize = cpu_icache_line_size();
-	unsigned long sc_lsize = cpu_scache_line_size();
 	unsigned long start = fir_args->start;
 	unsigned long start = fir_args->start;
 	unsigned long end = fir_args->end;
 	unsigned long end = fir_args->end;
-	unsigned long addr, aend;
 
 
 	if (!cpu_has_ic_fills_f_dc) {
 	if (!cpu_has_ic_fills_f_dc) {
 		if (end - start > dcache_size) {
 		if (end - start > dcache_size) {
 			r4k_blast_dcache();
 			r4k_blast_dcache();
 		} else {
 		} else {
 			R4600_HIT_CACHEOP_WAR_IMPL;
 			R4600_HIT_CACHEOP_WAR_IMPL;
-			addr = start & ~(dc_lsize - 1);
-			aend = (end - 1) & ~(dc_lsize - 1);
-
-			while (1) {
-				/* Hit_Writeback_Inv_D */
-				protected_writeback_dcache_line(addr);
-				if (addr == aend)
-					break;
-				addr += dc_lsize;
-			}
+			protected_blast_dcache_range(start, end);
 		}
 		}
 
 
 		if (!cpu_icache_snoops_remote_store) {
 		if (!cpu_icache_snoops_remote_store) {
-			if (end - start > scache_size) {
+			if (end - start > scache_size)
 				r4k_blast_scache();
 				r4k_blast_scache();
-			} else {
-				addr = start & ~(sc_lsize - 1);
-				aend = (end - 1) & ~(sc_lsize - 1);
-
-				while (1) {
-					/* Hit_Writeback_Inv_SD */
-					protected_writeback_scache_line(addr);
-					if (addr == aend)
-						break;
-					addr += sc_lsize;
-				}
-			}
+			else
+				protected_blast_scache_range(start, end);
 		}
 		}
 	}
 	}
 
 
 	if (end - start > icache_size)
 	if (end - start > icache_size)
 		r4k_blast_icache();
 		r4k_blast_icache();
-	else {
-		addr = start & ~(ic_lsize - 1);
-		aend = (end - 1) & ~(ic_lsize - 1);
-		while (1) {
-			/* Hit_Invalidate_I */
-			protected_flush_icache_line(addr);
-			if (addr == aend)
-				break;
-			addr += ic_lsize;
-		}
-	}
+	else
+		protected_blast_icache_range(start, end);
 }
 }
 
 
 static void r4k_flush_icache_range(unsigned long start, unsigned long end)
 static void r4k_flush_icache_range(unsigned long start, unsigned long end)
@@ -619,27 +587,14 @@ static void r4k_flush_icache_page(struct vm_area_struct *vma,
 
 
 static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
 static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
 {
 {
-	unsigned long end, a;
-
 	/* Catch bad driver code */
 	/* Catch bad driver code */
 	BUG_ON(size == 0);
 	BUG_ON(size == 0);
 
 
 	if (cpu_has_subset_pcaches) {
 	if (cpu_has_subset_pcaches) {
-		unsigned long sc_lsize = cpu_scache_line_size();
-
-		if (size >= scache_size) {
+		if (size >= scache_size)
 			r4k_blast_scache();
 			r4k_blast_scache();
-			return;
-		}
-
-		a = addr & ~(sc_lsize - 1);
-		end = (addr + size - 1) & ~(sc_lsize - 1);
-		while (1) {
-			flush_scache_line(a);	/* Hit_Writeback_Inv_SD */
-			if (a == end)
-				break;
-			a += sc_lsize;
-		}
+		else
+			blast_scache_range(addr, addr + size);
 		return;
 		return;
 	}
 	}
 
 
@@ -651,17 +606,8 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
 	if (size >= dcache_size) {
 	if (size >= dcache_size) {
 		r4k_blast_dcache();
 		r4k_blast_dcache();
 	} else {
 	} else {
-		unsigned long dc_lsize = cpu_dcache_line_size();
-
 		R4600_HIT_CACHEOP_WAR_IMPL;
 		R4600_HIT_CACHEOP_WAR_IMPL;
-		a = addr & ~(dc_lsize - 1);
-		end = (addr + size - 1) & ~(dc_lsize - 1);
-		while (1) {
-			flush_dcache_line(a);	/* Hit_Writeback_Inv_D */
-			if (a == end)
-				break;
-			a += dc_lsize;
-		}
+		blast_dcache_range(addr, addr + size);
 	}
 	}
 
 
 	bc_wback_inv(addr, size);
 	bc_wback_inv(addr, size);
@@ -669,44 +615,22 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
 
 
 static void r4k_dma_cache_inv(unsigned long addr, unsigned long size)
 static void r4k_dma_cache_inv(unsigned long addr, unsigned long size)
 {
 {
-	unsigned long end, a;
-
 	/* Catch bad driver code */
 	/* Catch bad driver code */
 	BUG_ON(size == 0);
 	BUG_ON(size == 0);
 
 
 	if (cpu_has_subset_pcaches) {
 	if (cpu_has_subset_pcaches) {
-		unsigned long sc_lsize = cpu_scache_line_size();
-
-		if (size >= scache_size) {
+		if (size >= scache_size)
 			r4k_blast_scache();
 			r4k_blast_scache();
-			return;
-		}
-
-		a = addr & ~(sc_lsize - 1);
-		end = (addr + size - 1) & ~(sc_lsize - 1);
-		while (1) {
-			flush_scache_line(a);	/* Hit_Writeback_Inv_SD */
-			if (a == end)
-				break;
-			a += sc_lsize;
-		}
+		else
+			blast_scache_range(addr, addr + size);
 		return;
 		return;
 	}
 	}
 
 
 	if (size >= dcache_size) {
 	if (size >= dcache_size) {
 		r4k_blast_dcache();
 		r4k_blast_dcache();
 	} else {
 	} else {
-		unsigned long dc_lsize = cpu_dcache_line_size();
-
 		R4600_HIT_CACHEOP_WAR_IMPL;
 		R4600_HIT_CACHEOP_WAR_IMPL;
-		a = addr & ~(dc_lsize - 1);
-		end = (addr + size - 1) & ~(dc_lsize - 1);
-		while (1) {
-			flush_dcache_line(a);	/* Hit_Writeback_Inv_D */
-			if (a == end)
-				break;
-			a += dc_lsize;
-		}
+		blast_dcache_range(addr, addr + size);
 	}
 	}
 
 
 	bc_inv(addr, size);
 	bc_inv(addr, size);

+ 9 - 61
arch/mips/mm/c-tx39.c

@@ -44,8 +44,6 @@ __asm__ __volatile__( \
 /* TX39H-style cache flush routines. */
 /* TX39H-style cache flush routines. */
 static void tx39h_flush_icache_all(void)
 static void tx39h_flush_icache_all(void)
 {
 {
-	unsigned long start = KSEG0;
-	unsigned long end = (start + icache_size);
 	unsigned long flags, config;
 	unsigned long flags, config;
 
 
 	/* disable icache (set ICE#) */
 	/* disable icache (set ICE#) */
@@ -53,33 +51,18 @@ static void tx39h_flush_icache_all(void)
 	config = read_c0_conf();
 	config = read_c0_conf();
 	write_c0_conf(config & ~TX39_CONF_ICE);
 	write_c0_conf(config & ~TX39_CONF_ICE);
 	TX39_STOP_STREAMING();
 	TX39_STOP_STREAMING();
-
-	/* invalidate icache */
-	while (start < end) {
-		cache16_unroll32(start, Index_Invalidate_I);
-		start += 0x200;
-	}
-
+	blast_icache16();
 	write_c0_conf(config);
 	write_c0_conf(config);
 	local_irq_restore(flags);
 	local_irq_restore(flags);
 }
 }
 
 
 static void tx39h_dma_cache_wback_inv(unsigned long addr, unsigned long size)
 static void tx39h_dma_cache_wback_inv(unsigned long addr, unsigned long size)
 {
 {
-	unsigned long end, a;
-	unsigned long dc_lsize = current_cpu_data.dcache.linesz;
-
 	/* Catch bad driver code */
 	/* Catch bad driver code */
 	BUG_ON(size == 0);
 	BUG_ON(size == 0);
 
 
 	iob();
 	iob();
-	a = addr & ~(dc_lsize - 1);
-	end = (addr + size - 1) & ~(dc_lsize - 1);
-	while (1) {
-		invalidate_dcache_line(a); /* Hit_Invalidate_D */
-		if (a == end) break;
-		a += dc_lsize;
-	}
+	blast_inv_dcache_range(addr, addr + size);
 }
 }
 
 
 
 
@@ -241,42 +224,21 @@ static void tx39_flush_data_cache_page(unsigned long addr)
 
 
 static void tx39_flush_icache_range(unsigned long start, unsigned long end)
 static void tx39_flush_icache_range(unsigned long start, unsigned long end)
 {
 {
-	unsigned long dc_lsize = current_cpu_data.dcache.linesz;
-	unsigned long addr, aend;
-
 	if (end - start > dcache_size)
 	if (end - start > dcache_size)
 		tx39_blast_dcache();
 		tx39_blast_dcache();
-	else {
-		addr = start & ~(dc_lsize - 1);
-		aend = (end - 1) & ~(dc_lsize - 1);
-
-		while (1) {
-			/* Hit_Writeback_Inv_D */
-			protected_writeback_dcache_line(addr);
-			if (addr == aend)
-				break;
-			addr += dc_lsize;
-		}
-	}
+	else
+		protected_blast_dcache_range(start, end);
 
 
 	if (end - start > icache_size)
 	if (end - start > icache_size)
 		tx39_blast_icache();
 		tx39_blast_icache();
 	else {
 	else {
 		unsigned long flags, config;
 		unsigned long flags, config;
-		addr = start & ~(dc_lsize - 1);
-		aend = (end - 1) & ~(dc_lsize - 1);
 		/* disable icache (set ICE#) */
 		/* disable icache (set ICE#) */
 		local_irq_save(flags);
 		local_irq_save(flags);
 		config = read_c0_conf();
 		config = read_c0_conf();
 		write_c0_conf(config & ~TX39_CONF_ICE);
 		write_c0_conf(config & ~TX39_CONF_ICE);
 		TX39_STOP_STREAMING();
 		TX39_STOP_STREAMING();
-		while (1) {
-			/* Hit_Invalidate_I */
-			protected_flush_icache_line(addr);
-			if (addr == aend)
-				break;
-			addr += dc_lsize;
-		}
+		protected_blast_icache_range(start, end);
 		write_c0_conf(config);
 		write_c0_conf(config);
 		local_irq_restore(flags);
 		local_irq_restore(flags);
 	}
 	}
@@ -311,7 +273,7 @@ static void tx39_flush_icache_page(struct vm_area_struct *vma, struct page *page
 
 
 static void tx39_dma_cache_wback_inv(unsigned long addr, unsigned long size)
 static void tx39_dma_cache_wback_inv(unsigned long addr, unsigned long size)
 {
 {
-	unsigned long end, a;
+	unsigned long end;
 
 
 	if (((size | addr) & (PAGE_SIZE - 1)) == 0) {
 	if (((size | addr) & (PAGE_SIZE - 1)) == 0) {
 		end = addr + size;
 		end = addr + size;
@@ -322,20 +284,13 @@ static void tx39_dma_cache_wback_inv(unsigned long addr, unsigned long size)
 	} else if (size > dcache_size) {
 	} else if (size > dcache_size) {
 		tx39_blast_dcache();
 		tx39_blast_dcache();
 	} else {
 	} else {
-		unsigned long dc_lsize = current_cpu_data.dcache.linesz;
-		a = addr & ~(dc_lsize - 1);
-		end = (addr + size - 1) & ~(dc_lsize - 1);
-		while (1) {
-			flush_dcache_line(a); /* Hit_Writeback_Inv_D */
-			if (a == end) break;
-			a += dc_lsize;
-		}
+		blast_dcache_range(addr, addr + size);
 	}
 	}
 }
 }
 
 
 static void tx39_dma_cache_inv(unsigned long addr, unsigned long size)
 static void tx39_dma_cache_inv(unsigned long addr, unsigned long size)
 {
 {
-	unsigned long end, a;
+	unsigned long end;
 
 
 	if (((size | addr) & (PAGE_SIZE - 1)) == 0) {
 	if (((size | addr) & (PAGE_SIZE - 1)) == 0) {
 		end = addr + size;
 		end = addr + size;
@@ -346,14 +301,7 @@ static void tx39_dma_cache_inv(unsigned long addr, unsigned long size)
 	} else if (size > dcache_size) {
 	} else if (size > dcache_size) {
 		tx39_blast_dcache();
 		tx39_blast_dcache();
 	} else {
 	} else {
-		unsigned long dc_lsize = current_cpu_data.dcache.linesz;
-		a = addr & ~(dc_lsize - 1);
-		end = (addr + size - 1) & ~(dc_lsize - 1);
-		while (1) {
-			invalidate_dcache_line(a); /* Hit_Invalidate_D */
-			if (a == end) break;
-			a += dc_lsize;
-		}
+		blast_inv_dcache_range(addr, addr + size);
 	}
 	}
 }
 }
 
 

+ 5 - 0
arch/parisc/Kconfig

@@ -29,6 +29,11 @@ config GENERIC_CALIBRATE_DELAY
 	bool
 	bool
 	default y
 	default y
 
 
+config TIME_LOW_RES
+	bool
+	depends on SMP
+	default y
+
 config GENERIC_ISA_DMA
 config GENERIC_ISA_DMA
 	bool
 	bool
 
 

+ 3 - 3
arch/parisc/kernel/syscall_table.S

@@ -377,15 +377,15 @@
 	ENTRY_SAME(inotify_init)
 	ENTRY_SAME(inotify_init)
 	ENTRY_SAME(inotify_add_watch)	/* 270 */
 	ENTRY_SAME(inotify_add_watch)	/* 270 */
 	ENTRY_SAME(inotify_rm_watch)
 	ENTRY_SAME(inotify_rm_watch)
-	ENTRY_COMP(pselect6)
-	ENTRY_COMP(ppoll)
+	ENTRY_SAME(ni_syscall)		/* 271 ENTRY_COMP(pselect6) */
+	ENTRY_SAME(ni_syscall)		/* 272 ENTRY_COMP(ppoll) */
 	ENTRY_SAME(migrate_pages)
 	ENTRY_SAME(migrate_pages)
 	ENTRY_COMP(openat)		/* 275 */
 	ENTRY_COMP(openat)		/* 275 */
 	ENTRY_SAME(mkdirat)
 	ENTRY_SAME(mkdirat)
 	ENTRY_SAME(mknodat)
 	ENTRY_SAME(mknodat)
 	ENTRY_SAME(fchownat)
 	ENTRY_SAME(fchownat)
 	ENTRY_COMP(futimesat)
 	ENTRY_COMP(futimesat)
-	ENTRY_COMP(newfstatat)		/* 280 */
+	ENTRY_SAME(fstatat64)		/* 280 */
 	ENTRY_SAME(unlinkat)
 	ENTRY_SAME(unlinkat)
 	ENTRY_SAME(renameat)
 	ENTRY_SAME(renameat)
 	ENTRY_SAME(linkat)
 	ENTRY_SAME(linkat)

+ 6 - 0
arch/powerpc/Kconfig

@@ -83,6 +83,12 @@ config GENERIC_TBSYNC
 	default y if PPC32 && SMP
 	default y if PPC32 && SMP
 	default n
 	default n
 
 
+config DEFAULT_UIMAGE
+	bool
+	help
+	  Used to allow a board to specify it wants a uImage built by default
+	default n
+
 menu "Processor support"
 menu "Processor support"
 choice
 choice
 	prompt "Processor Type"
 	prompt "Processor Type"

+ 1 - 0
arch/powerpc/Makefile

@@ -142,6 +142,7 @@ drivers-$(CONFIG_OPROFILE)	+= arch/powerpc/oprofile/
 # Default to zImage, override when needed
 # Default to zImage, override when needed
 defaultimage-y			:= zImage
 defaultimage-y			:= zImage
 defaultimage-$(CONFIG_PPC_ISERIES) := vmlinux
 defaultimage-$(CONFIG_PPC_ISERIES) := vmlinux
+defaultimage-$(CONFIG_DEFAULT_UIMAGE) := uImage
 KBUILD_IMAGE := $(defaultimage-y)
 KBUILD_IMAGE := $(defaultimage-y)
 all: $(KBUILD_IMAGE)
 all: $(KBUILD_IMAGE)
 
 

+ 3 - 3
arch/powerpc/kernel/Makefile

@@ -12,10 +12,10 @@ endif
 
 
 obj-y				:= semaphore.o cputable.o ptrace.o syscalls.o \
 obj-y				:= semaphore.o cputable.o ptrace.o syscalls.o \
 				   irq.o align.o signal_32.o pmc.o vdso.o \
 				   irq.o align.o signal_32.o pmc.o vdso.o \
-				   init_task.o process.o
+				   init_task.o process.o systbl.o
 obj-y				+= vdso32/
 obj-y				+= vdso32/
 obj-$(CONFIG_PPC64)		+= setup_64.o binfmt_elf32.o sys_ppc32.o \
 obj-$(CONFIG_PPC64)		+= setup_64.o binfmt_elf32.o sys_ppc32.o \
-				   signal_64.o ptrace32.o systbl.o \
+				   signal_64.o ptrace32.o \
 				   paca.o cpu_setup_power4.o \
 				   paca.o cpu_setup_power4.o \
 				   firmware.o sysfs.o idle_64.o
 				   firmware.o sysfs.o idle_64.o
 obj-$(CONFIG_PPC64)		+= vdso64/
 obj-$(CONFIG_PPC64)		+= vdso64/
@@ -46,7 +46,7 @@ extra-$(CONFIG_8xx)		:= head_8xx.o
 extra-y				+= vmlinux.lds
 extra-y				+= vmlinux.lds
 
 
 obj-y				+= time.o prom.o traps.o setup-common.o udbg.o
 obj-y				+= time.o prom.o traps.o setup-common.o udbg.o
-obj-$(CONFIG_PPC32)		+= entry_32.o setup_32.o misc_32.o systbl.o
+obj-$(CONFIG_PPC32)		+= entry_32.o setup_32.o misc_32.o
 obj-$(CONFIG_PPC64)		+= misc_64.o dma_64.o iommu.o
 obj-$(CONFIG_PPC64)		+= misc_64.o dma_64.o iommu.o
 obj-$(CONFIG_PPC_MULTIPLATFORM)	+= prom_init.o
 obj-$(CONFIG_PPC_MULTIPLATFORM)	+= prom_init.o
 obj-$(CONFIG_MODULES)		+= ppc_ksyms.o
 obj-$(CONFIG_MODULES)		+= ppc_ksyms.o

+ 1 - 2
arch/powerpc/kernel/systbl.S

@@ -36,8 +36,6 @@
 #ifdef CONFIG_PPC64
 #ifdef CONFIG_PPC64
 #define sys_sigpending	sys_ni_syscall
 #define sys_sigpending	sys_ni_syscall
 #define sys_old_getrlimit sys_ni_syscall
 #define sys_old_getrlimit sys_ni_syscall
-#else
-#define ppc_rtas	sys_ni_syscall
 #endif
 #endif
 
 
 _GLOBAL(sys_call_table)
 _GLOBAL(sys_call_table)
@@ -323,3 +321,4 @@ SYSCALL(spu_run)
 SYSCALL(spu_create)
 SYSCALL(spu_create)
 COMPAT_SYS(pselect6)
 COMPAT_SYS(pselect6)
 COMPAT_SYS(ppoll)
 COMPAT_SYS(ppoll)
+SYSCALL(unshare)

+ 0 - 283
arch/ppc/kernel/misc.S

@@ -1048,286 +1048,3 @@ _GLOBAL(name) \
 	blr
 	blr
 
 
 SYSCALL(execve)
 SYSCALL(execve)
-
-/* Why isn't this a) automatic, b) written in 'C'? */
-	.data
-	.align 4
-_GLOBAL(sys_call_table)
-	.long sys_restart_syscall /* 0 */
-	.long sys_exit
-	.long ppc_fork
-	.long sys_read
-	.long sys_write
-	.long sys_open		/* 5 */
-	.long sys_close
-	.long sys_waitpid
-	.long sys_creat
-	.long sys_link
-	.long sys_unlink	/* 10 */
-	.long sys_execve
-	.long sys_chdir
-	.long sys_time
-	.long sys_mknod
-	.long sys_chmod		/* 15 */
-	.long sys_lchown
-	.long sys_ni_syscall			/* old break syscall holder */
-	.long sys_stat
-	.long sys_lseek
-	.long sys_getpid	/* 20 */
-	.long sys_mount
-	.long sys_oldumount
-	.long sys_setuid
-	.long sys_getuid
-	.long sys_stime		/* 25 */
-	.long sys_ptrace
-	.long sys_alarm
-	.long sys_fstat
-	.long sys_pause
-	.long sys_utime		/* 30 */
-	.long sys_ni_syscall			/* old stty syscall holder */
-	.long sys_ni_syscall			/* old gtty syscall holder */
-	.long sys_access
-	.long sys_nice
-	.long sys_ni_syscall	/* 35 */	/* old ftime syscall holder */
-	.long sys_sync
-	.long sys_kill
-	.long sys_rename
-	.long sys_mkdir
-	.long sys_rmdir		/* 40 */
-	.long sys_dup
-	.long sys_pipe
-	.long sys_times
-	.long sys_ni_syscall			/* old prof syscall holder */
-	.long sys_brk		/* 45 */
-	.long sys_setgid
-	.long sys_getgid
-	.long sys_signal
-	.long sys_geteuid
-	.long sys_getegid	/* 50 */
-	.long sys_acct
-	.long sys_umount			/* recycled never used phys() */
-	.long sys_ni_syscall			/* old lock syscall holder */
-	.long sys_ioctl
-	.long sys_fcntl		/* 55 */
-	.long sys_ni_syscall			/* old mpx syscall holder */
-	.long sys_setpgid
-	.long sys_ni_syscall			/* old ulimit syscall holder */
-	.long sys_olduname
-	.long sys_umask		/* 60 */
-	.long sys_chroot
-	.long sys_ustat
-	.long sys_dup2
-	.long sys_getppid
-	.long sys_getpgrp	/* 65 */
-	.long sys_setsid
-	.long sys_sigaction
-	.long sys_sgetmask
-	.long sys_ssetmask
-	.long sys_setreuid	/* 70 */
-	.long sys_setregid
-	.long sys_sigsuspend
-	.long sys_sigpending
-	.long sys_sethostname
-	.long sys_setrlimit	/* 75 */
-	.long sys_old_getrlimit
-	.long sys_getrusage
-	.long sys_gettimeofday
-	.long sys_settimeofday
-	.long sys_getgroups	/* 80 */
-	.long sys_setgroups
-	.long ppc_select
-	.long sys_symlink
-	.long sys_lstat
-	.long sys_readlink	/* 85 */
-	.long sys_uselib
-	.long sys_swapon
-	.long sys_reboot
-	.long old_readdir
-	.long sys_mmap		/* 90 */
-	.long sys_munmap
-	.long sys_truncate
-	.long sys_ftruncate
-	.long sys_fchmod
-	.long sys_fchown	/* 95 */
-	.long sys_getpriority
-	.long sys_setpriority
-	.long sys_ni_syscall			/* old profil syscall holder */
-	.long sys_statfs
-	.long sys_fstatfs	/* 100 */
-	.long sys_ni_syscall
-	.long sys_socketcall
-	.long sys_syslog
-	.long sys_setitimer
-	.long sys_getitimer	/* 105 */
-	.long sys_newstat
-	.long sys_newlstat
-	.long sys_newfstat
-	.long sys_uname
-	.long sys_ni_syscall	/* 110 */
-	.long sys_vhangup
-	.long sys_ni_syscall	/* old 'idle' syscall */
-	.long sys_ni_syscall
-	.long sys_wait4
-	.long sys_swapoff	/* 115 */
-	.long sys_sysinfo
-	.long sys_ipc
-	.long sys_fsync
-	.long sys_sigreturn
-	.long ppc_clone		/* 120 */
-	.long sys_setdomainname
-	.long sys_newuname
-	.long sys_ni_syscall
-	.long sys_adjtimex
-	.long sys_mprotect	/* 125 */
-	.long sys_sigprocmask
-	.long sys_ni_syscall	/* old sys_create_module */
-	.long sys_init_module
-	.long sys_delete_module
-	.long sys_ni_syscall	/* old sys_get_kernel_syms */	/* 130 */
-	.long sys_quotactl
-	.long sys_getpgid
-	.long sys_fchdir
-	.long sys_bdflush
-	.long sys_sysfs		/* 135 */
-	.long sys_personality
-	.long sys_ni_syscall	/* for afs_syscall */
-	.long sys_setfsuid
-	.long sys_setfsgid
-	.long sys_llseek	/* 140 */
-	.long sys_getdents
-	.long ppc_select
-	.long sys_flock
-	.long sys_msync
-	.long sys_readv		/* 145 */
-	.long sys_writev
-	.long sys_getsid
-	.long sys_fdatasync
-	.long sys_sysctl
-	.long sys_mlock		/* 150 */
-	.long sys_munlock
-	.long sys_mlockall
-	.long sys_munlockall
-	.long sys_sched_setparam
-	.long sys_sched_getparam	/* 155 */
-	.long sys_sched_setscheduler
-	.long sys_sched_getscheduler
-	.long sys_sched_yield
-	.long sys_sched_get_priority_max
-	.long sys_sched_get_priority_min  /* 160 */
-	.long sys_sched_rr_get_interval
-	.long sys_nanosleep
-	.long sys_mremap
-	.long sys_setresuid
-	.long sys_getresuid	/* 165 */
-	.long sys_ni_syscall		/* old sys_query_module */
-	.long sys_poll
-	.long sys_nfsservctl
-	.long sys_setresgid
-	.long sys_getresgid	/* 170 */
-	.long sys_prctl
-	.long sys_rt_sigreturn
-	.long sys_rt_sigaction
-	.long sys_rt_sigprocmask
-	.long sys_rt_sigpending	/* 175 */
-	.long sys_rt_sigtimedwait
-	.long sys_rt_sigqueueinfo
-	.long sys_rt_sigsuspend
-	.long sys_pread64
-	.long sys_pwrite64	/* 180 */
-	.long sys_chown
-	.long sys_getcwd
-	.long sys_capget
-	.long sys_capset
-	.long sys_sigaltstack	/* 185 */
-	.long sys_sendfile
-	.long sys_ni_syscall		/* streams1 */
-	.long sys_ni_syscall		/* streams2 */
-	.long ppc_vfork
-	.long sys_getrlimit	/* 190 */
-	.long sys_readahead
-	.long sys_mmap2
-	.long sys_truncate64
-	.long sys_ftruncate64
-	.long sys_stat64	/* 195 */
-	.long sys_lstat64
-	.long sys_fstat64
-	.long sys_pciconfig_read
-	.long sys_pciconfig_write
-	.long sys_pciconfig_iobase 	/* 200 */
-	.long sys_ni_syscall		/* 201 - reserved - MacOnLinux - new */
-	.long sys_getdents64
-	.long sys_pivot_root
-	.long sys_fcntl64
-	.long sys_madvise	/* 205 */
-	.long sys_mincore
-	.long sys_gettid
-	.long sys_tkill
-	.long sys_setxattr
-	.long sys_lsetxattr	/* 210 */
-	.long sys_fsetxattr
-	.long sys_getxattr
-	.long sys_lgetxattr
-	.long sys_fgetxattr
-	.long sys_listxattr	/* 215 */
-	.long sys_llistxattr
-	.long sys_flistxattr
-	.long sys_removexattr
-	.long sys_lremovexattr
-	.long sys_fremovexattr	/* 220 */
-	.long sys_futex
-	.long sys_sched_setaffinity
-	.long sys_sched_getaffinity
-	.long sys_ni_syscall
-	.long sys_ni_syscall	/* 225 - reserved for Tux */
-	.long sys_sendfile64
-	.long sys_io_setup
-	.long sys_io_destroy
-	.long sys_io_getevents
-	.long sys_io_submit	/* 230 */
-	.long sys_io_cancel
-	.long sys_set_tid_address
-	.long sys_fadvise64
-	.long sys_exit_group
-	.long sys_lookup_dcookie /* 235 */
-	.long sys_epoll_create
-	.long sys_epoll_ctl
-	.long sys_epoll_wait
-	.long sys_remap_file_pages
-	.long sys_timer_create	/* 240 */
-	.long sys_timer_settime
-	.long sys_timer_gettime
-	.long sys_timer_getoverrun
-	.long sys_timer_delete
-	.long sys_clock_settime	/* 245 */
-	.long sys_clock_gettime
-	.long sys_clock_getres
-	.long sys_clock_nanosleep
-	.long sys_swapcontext
-	.long sys_tgkill	/* 250 */
-	.long sys_utimes
-	.long sys_statfs64
-	.long sys_fstatfs64
-	.long ppc_fadvise64_64
-	.long sys_ni_syscall		/* 255 - rtas (used on ppc64) */
-	.long sys_debug_setcontext
-	.long sys_ni_syscall		/* 257 reserved for vserver */
-	.long sys_ni_syscall		/* 258 reserved for new sys_remap_file_pages */
-	.long sys_ni_syscall		/* 259 reserved for new sys_mbind */
-	.long sys_ni_syscall		/* 260 reserved for new sys_get_mempolicy */
-	.long sys_ni_syscall		/* 261 reserved for new sys_set_mempolicy */
-	.long sys_mq_open
-	.long sys_mq_unlink
-	.long sys_mq_timedsend
-	.long sys_mq_timedreceive	/* 265 */
-	.long sys_mq_notify
-	.long sys_mq_getsetattr
-	.long sys_kexec_load
-	.long sys_add_key
-	.long sys_request_key		/* 270 */
-	.long sys_keyctl
-	.long sys_waitid
-	.long sys_ioprio_set
-	.long sys_ioprio_get
-	.long sys_inotify_init		/* 275 */
-	.long sys_inotify_add_watch
-	.long sys_inotify_rm_watch

+ 5 - 4
arch/s390/defconfig

@@ -1,7 +1,7 @@
 #
 #
 # Automatically generated make config: don't edit
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16-rc1
-# Thu Jan 19 10:58:53 2006
+# Linux kernel version: 2.6.16-rc2
+# Wed Feb  8 10:44:39 2006
 #
 #
 CONFIG_MMU=y
 CONFIG_MMU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -12,7 +12,6 @@ CONFIG_S390=y
 # Code maturity level options
 # Code maturity level options
 #
 #
 CONFIG_EXPERIMENTAL=y
 CONFIG_EXPERIMENTAL=y
-CONFIG_CLEAN_COMPILE=y
 CONFIG_LOCK_KERNEL=y
 CONFIG_LOCK_KERNEL=y
 CONFIG_INIT_ENV_ARG_LIMIT=32
 CONFIG_INIT_ENV_ARG_LIMIT=32
 
 
@@ -154,6 +153,7 @@ CONFIG_NET=y
 #
 #
 # Networking options
 # Networking options
 #
 #
+# CONFIG_NETDEBUG is not set
 CONFIG_PACKET=y
 CONFIG_PACKET=y
 # CONFIG_PACKET_MMAP is not set
 # CONFIG_PACKET_MMAP is not set
 CONFIG_UNIX=y
 CONFIG_UNIX=y
@@ -607,6 +607,7 @@ CONFIG_MSDOS_PARTITION=y
 # Instrumentation Support
 # Instrumentation Support
 #
 #
 # CONFIG_PROFILING is not set
 # CONFIG_PROFILING is not set
+# CONFIG_STATISTICS is not set
 
 
 #
 #
 # Kernel hacking
 # Kernel hacking
@@ -624,7 +625,7 @@ CONFIG_DEBUG_MUTEXES=y
 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
 # CONFIG_DEBUG_KOBJECT is not set
 # CONFIG_DEBUG_KOBJECT is not set
 # CONFIG_DEBUG_INFO is not set
 # CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
+CONFIG_DEBUG_FS=y
 # CONFIG_DEBUG_VM is not set
 # CONFIG_DEBUG_VM is not set
 CONFIG_FORCED_INLINING=y
 CONFIG_FORCED_INLINING=y
 # CONFIG_RCU_TORTURE_TEST is not set
 # CONFIG_RCU_TORTURE_TEST is not set

+ 20 - 0
arch/s390/kernel/compat_linux.c

@@ -905,6 +905,26 @@ asmlinkage long sys32_fstat64(unsigned long fd, struct stat64_emu31 __user * sta
 	return ret;
 	return ret;
 }
 }
 
 
+asmlinkage long sys32_fstatat(unsigned int dfd, char __user *filename,
+			      struct stat64_emu31 __user* statbuf, int flag)
+{
+	struct kstat stat;
+	int error = -EINVAL;
+
+	if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0)
+		goto out;
+
+	if (flag & AT_SYMLINK_NOFOLLOW)
+		error = vfs_lstat_fd(dfd, filename, &stat);
+	else
+		error = vfs_stat_fd(dfd, filename, &stat);
+
+	if (!error)
+		error = cp_stat64(statbuf, &stat);
+out:
+	return error;
+}
+
 /*
 /*
  * Linux/i386 didn't use to be able to handle more than
  * Linux/i386 didn't use to be able to handle more than
  * 4 system call parameters, so these system calls used a memory
  * 4 system call parameters, so these system calls used a memory

+ 0 - 3
arch/s390/kernel/compat_signal.c

@@ -195,9 +195,6 @@ sys32_sigaction(int sig, const struct old_sigaction32 __user *act,
 	return ret;
 	return ret;
 }
 }
 
 
-int
-do_sigaction(int sig, const struct k_sigaction *act, struct k_sigaction *oact);
-
 asmlinkage long
 asmlinkage long
 sys32_rt_sigaction(int sig, const struct sigaction32 __user *act,
 sys32_rt_sigaction(int sig, const struct sigaction32 __user *act,
 	   struct sigaction32 __user *oact,  size_t sigsetsize)
 	   struct sigaction32 __user *oact,  size_t sigsetsize)

+ 9 - 4
arch/s390/kernel/compat_wrapper.S

@@ -1523,13 +1523,13 @@ compat_sys_futimesat_wrapper:
 	llgtr	%r4,%r4			# struct timeval *
 	llgtr	%r4,%r4			# struct timeval *
 	jg	compat_sys_futimesat
 	jg	compat_sys_futimesat
 
 
-	.globl compat_sys_newfstatat_wrapper
-compat_sys_newfstatat_wrapper:
+	.globl sys32_fstatat_wrapper
+sys32_fstatat_wrapper:
 	llgfr	%r2,%r2			# unsigned int
 	llgfr	%r2,%r2			# unsigned int
 	llgtr	%r3,%r3			# char *
 	llgtr	%r3,%r3			# char *
-	llgtr	%r4,%r4			# struct stat *
+	llgtr	%r4,%r4			# struct stat64 *
 	lgfr	%r5,%r5			# int
 	lgfr	%r5,%r5			# int
-	jg	compat_sys_newfstatat
+	jg	sys32_fstatat
 
 
 	.globl sys_unlinkat_wrapper
 	.globl sys_unlinkat_wrapper
 sys_unlinkat_wrapper:
 sys_unlinkat_wrapper:
@@ -1602,3 +1602,8 @@ compat_sys_ppoll_wrapper:
 	llgtr	%r5,%r5			# const sigset_t *
 	llgtr	%r5,%r5			# const sigset_t *
 	llgfr	%r6,%r6			# size_t
 	llgfr	%r6,%r6			# size_t
 	jg	compat_sys_ppoll
 	jg	compat_sys_ppoll
+
+	.globl sys_unshare_wrapper
+sys_unshare_wrapper:
+	llgfr	%r2,%r2			# unsigned long
+	jg	sys_unshare

+ 3 - 2
arch/s390/kernel/machine_kexec.c

@@ -12,15 +12,16 @@
  * on the S390 architecture.
  * on the S390 architecture.
  */
  */
 
 
-#include <asm/cio.h>
-#include <asm/setup.h>
 #include <linux/device.h>
 #include <linux/device.h>
 #include <linux/mm.h>
 #include <linux/mm.h>
 #include <linux/kexec.h>
 #include <linux/kexec.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
+#include <asm/cio.h>
+#include <asm/setup.h>
 #include <asm/pgtable.h>
 #include <asm/pgtable.h>
 #include <asm/pgalloc.h>
 #include <asm/pgalloc.h>
 #include <asm/system.h>
 #include <asm/system.h>
+#include <asm/smp.h>
 
 
 static void kexec_halt_all_cpus(void *);
 static void kexec_halt_all_cpus(void *);
 
 

+ 1 - 5
arch/s390/kernel/smp.c

@@ -52,7 +52,7 @@ extern volatile int __cpu_logical_map[];
 struct _lowcore *lowcore_ptr[NR_CPUS];
 struct _lowcore *lowcore_ptr[NR_CPUS];
 
 
 cpumask_t cpu_online_map;
 cpumask_t cpu_online_map;
-cpumask_t cpu_possible_map;
+cpumask_t cpu_possible_map = CPU_MASK_ALL;
 
 
 static struct task_struct *current_set[NR_CPUS];
 static struct task_struct *current_set[NR_CPUS];
 
 
@@ -514,9 +514,6 @@ __init smp_check_cpus(unsigned int max_cpus)
 		num_cpus++;
 		num_cpus++;
 	}
 	}
 
 
-	for (cpu = 1; cpu < max_cpus; cpu++)
-		cpu_set(cpu, cpu_possible_map);
-
 	printk("Detected %d CPU's\n",(int) num_cpus);
 	printk("Detected %d CPU's\n",(int) num_cpus);
 	printk("Boot cpu address %2X\n", boot_cpu_addr);
 	printk("Boot cpu address %2X\n", boot_cpu_addr);
 }
 }
@@ -810,7 +807,6 @@ void __devinit smp_prepare_boot_cpu(void)
 
 
 	cpu_set(0, cpu_online_map);
 	cpu_set(0, cpu_online_map);
 	cpu_set(0, cpu_present_map);
 	cpu_set(0, cpu_present_map);
-	cpu_set(0, cpu_possible_map);
 	S390_lowcore.percpu_offset = __per_cpu_offset[0];
 	S390_lowcore.percpu_offset = __per_cpu_offset[0];
 	current_set[0] = current;
 	current_set[0] = current;
 }
 }

+ 2 - 1
arch/s390/kernel/syscalls.S

@@ -301,7 +301,7 @@ SYSCALL(sys_mkdirat,sys_mkdirat,sys_mkdirat_wrapper)
 SYSCALL(sys_mknodat,sys_mknodat,sys_mknodat_wrapper)	/* 290 */
 SYSCALL(sys_mknodat,sys_mknodat,sys_mknodat_wrapper)	/* 290 */
 SYSCALL(sys_fchownat,sys_fchownat,sys_fchownat_wrapper)
 SYSCALL(sys_fchownat,sys_fchownat,sys_fchownat_wrapper)
 SYSCALL(sys_futimesat,sys_futimesat,compat_sys_futimesat_wrapper)
 SYSCALL(sys_futimesat,sys_futimesat,compat_sys_futimesat_wrapper)
-SYSCALL(sys_newfstatat,sys_newfstatat,compat_sys_newfstatat_wrapper)
+SYSCALL(sys_fstatat64,sys_newfstatat,sys32_fstatat_wrapper)
 SYSCALL(sys_unlinkat,sys_unlinkat,sys_unlinkat_wrapper)
 SYSCALL(sys_unlinkat,sys_unlinkat,sys_unlinkat_wrapper)
 SYSCALL(sys_renameat,sys_renameat,sys_renameat_wrapper)	/* 295 */
 SYSCALL(sys_renameat,sys_renameat,sys_renameat_wrapper)	/* 295 */
 SYSCALL(sys_linkat,sys_linkat,sys_linkat_wrapper)
 SYSCALL(sys_linkat,sys_linkat,sys_linkat_wrapper)
@@ -311,3 +311,4 @@ SYSCALL(sys_fchmodat,sys_fchmodat,sys_fchmodat_wrapper)
 SYSCALL(sys_faccessat,sys_faccessat,sys_faccessat_wrapper)	/* 300 */
 SYSCALL(sys_faccessat,sys_faccessat,sys_faccessat_wrapper)	/* 300 */
 SYSCALL(sys_pselect6,sys_pselect6,compat_sys_pselect6_wrapper)
 SYSCALL(sys_pselect6,sys_pselect6,compat_sys_pselect6_wrapper)
 SYSCALL(sys_ppoll,sys_ppoll,compat_sys_ppoll_wrapper)
 SYSCALL(sys_ppoll,sys_ppoll,compat_sys_ppoll_wrapper)
+SYSCALL(sys_unshare,sys_unshare,sys_unshare_wrapper)

+ 1 - 1
arch/s390/lib/delay.c

@@ -30,7 +30,7 @@ void __delay(unsigned long loops)
          */
          */
         __asm__ __volatile__(
         __asm__ __volatile__(
                 "0: brct %0,0b"
                 "0: brct %0,0b"
-                : /* no outputs */ : "r" (loops/2) );
+                : /* no outputs */ : "r" ((loops/2) + 1));
 }
 }
 
 
 /*
 /*

+ 1 - 1
arch/sparc/kernel/systbls.S

@@ -76,7 +76,7 @@ sys_call_table:
 /*270*/	.long sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink
 /*270*/	.long sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink
 /*275*/	.long sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid
 /*275*/	.long sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid
 /*280*/	.long sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat
 /*280*/	.long sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat
-/*285*/	.long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_newfstatat
+/*285*/	.long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64
 /*290*/	.long sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
 /*290*/	.long sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
 /*295*/	.long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare
 /*295*/	.long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare
 
 

+ 21 - 0
arch/sparc64/kernel/sys_sparc32.c

@@ -428,6 +428,27 @@ asmlinkage long compat_sys_fstat64(unsigned int fd,
 	return error;
 	return error;
 }
 }
 
 
+asmlinkage long compat_sys_fstatat64(unsigned int dfd, char __user *filename,
+		struct compat_stat64 __user * statbuf, int flag)
+{
+	struct kstat stat;
+	int error = -EINVAL;
+
+	if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0)
+		goto out;
+
+	if (flag & AT_SYMLINK_NOFOLLOW)
+		error = vfs_lstat_fd(dfd, filename, &stat);
+	else
+		error = vfs_stat_fd(dfd, filename, &stat);
+
+	if (!error)
+		error = cp_compat_stat64(&stat, statbuf);
+
+out:
+	return error;
+}
+
 asmlinkage long compat_sys_sysfs(int option, u32 arg1, u32 arg2)
 asmlinkage long compat_sys_sysfs(int option, u32 arg1, u32 arg2)
 {
 {
 	return sys_sysfs(option, arg1, arg2);
 	return sys_sysfs(option, arg1, arg2);

+ 2 - 2
arch/sparc64/kernel/systbls.S

@@ -77,7 +77,7 @@ sys_call_table32:
 /*270*/	.word sys32_io_submit, sys_io_cancel, compat_sys_io_getevents, sys32_mq_open, sys_mq_unlink
 /*270*/	.word sys32_io_submit, sys_io_cancel, compat_sys_io_getevents, sys32_mq_open, sys_mq_unlink
 	.word compat_sys_mq_timedsend, compat_sys_mq_timedreceive, compat_sys_mq_notify, compat_sys_mq_getsetattr, compat_sys_waitid
 	.word compat_sys_mq_timedsend, compat_sys_mq_timedreceive, compat_sys_mq_notify, compat_sys_mq_getsetattr, compat_sys_waitid
 /*280*/	.word sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, compat_sys_openat
 /*280*/	.word sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, compat_sys_openat
-	.word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_newfstatat
+	.word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_fstatat64
 /*285*/	.word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
 /*285*/	.word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
 	.word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare
 	.word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare
 
 
@@ -146,7 +146,7 @@ sys_call_table:
 /*270*/	.word sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink
 /*270*/	.word sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink
 	.word sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid
 	.word sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid
 /*280*/	.word sys_nis_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat
 /*280*/	.word sys_nis_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat
-	.word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_newfstatat
+	.word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64
 /*285*/	.word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
 /*285*/	.word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
 	.word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare
 	.word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare
 
 

+ 4 - 0
arch/v850/Kconfig

@@ -28,6 +28,10 @@ config GENERIC_IRQ_PROBE
 	bool
 	bool
 	default y
 	default y
 
 
+config TIME_LOW_RES
+	bool
+	default y
+
 # Turn off some random 386 crap that can affect device config
 # Turn off some random 386 crap that can affect device config
 config ISA
 config ISA
 	bool
 	bool

+ 1 - 1
arch/x86_64/ia32/ia32entry.S

@@ -677,7 +677,7 @@ ia32_sys_call_table:
 	.quad sys_mknodat
 	.quad sys_mknodat
 	.quad sys_fchownat
 	.quad sys_fchownat
 	.quad compat_sys_futimesat
 	.quad compat_sys_futimesat
-	.quad compat_sys_newfstatat	/* 300 */
+	.quad sys32_fstatat		/* 300 */
 	.quad sys_unlinkat
 	.quad sys_unlinkat
 	.quad sys_renameat
 	.quad sys_renameat
 	.quad sys_linkat
 	.quad sys_linkat

Some files were not shown because too many files changed in this diff