浏览代码

Merge branch 'linus' into perf/core

Merge reason: pick up perf fixes

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Ingo Molnar 14 年之前
父节点
当前提交
7de5d895b2
共有 100 个文件被更改,包括 469 次插入314 次删除
  1. 5 2
      Documentation/DocBook/kernel-locking.tmpl
  2. 0 4
      Documentation/hwmon/f71882fg
  3. 4 2
      Documentation/kernel-parameters.txt
  4. 4 0
      Documentation/laptops/thinkpad-acpi.txt
  5. 2 29
      Documentation/powerpc/booting-without-of.txt
  6. 1 1
      Documentation/powerpc/hvcs.txt
  7. 39 28
      MAINTAINERS
  8. 3 3
      Makefile
  9. 3 2
      arch/alpha/kernel/process.c
  10. 3 0
      arch/arm/Makefile
  11. 13 4
      arch/arm/include/asm/ptrace.h
  12. 1 0
      arch/arm/include/asm/unistd.h
  13. 1 0
      arch/arm/kernel/calls.S
  14. 1 1
      arch/arm/kernel/kgdb.c
  15. 9 5
      arch/arm/kernel/sys_arm.c
  16. 2 2
      arch/arm/mach-imx/mach-cpuimx27.c
  17. 2 2
      arch/arm/mach-imx/mach-pca100.c
  18. 1 1
      arch/arm/mach-mx25/mach-cpuimx25.c
  19. 1 1
      arch/arm/mach-mx3/mach-cpuimx35.c
  20. 2 0
      arch/arm/plat-samsung/dev-hsmmc.c
  21. 2 0
      arch/arm/plat-samsung/dev-hsmmc1.c
  22. 2 0
      arch/arm/plat-samsung/dev-hsmmc2.c
  23. 3 2
      arch/avr32/kernel/process.c
  24. 3 1
      arch/avr32/kernel/sys_avr32.c
  25. 10 7
      arch/blackfin/include/asm/bitops.h
  26. 4 1
      arch/blackfin/include/asm/unistd.h
  27. 3 1
      arch/blackfin/kernel/process.c
  28. 3 0
      arch/blackfin/mach-common/entry.S
  29. 3 1
      arch/cris/arch-v10/kernel/process.c
  30. 4 2
      arch/cris/arch-v32/kernel/process.c
  31. 3 2
      arch/frv/kernel/process.c
  32. 4 1
      arch/h8300/kernel/process.c
  33. 3 1
      arch/h8300/kernel/sys_h8300.c
  34. 0 2
      arch/ia64/include/asm/unistd.h
  35. 3 1
      arch/ia64/kernel/process.c
  36. 2 2
      arch/m32r/kernel/process.c
  37. 3 1
      arch/m32r/kernel/sys_m32r.c
  38. 11 2
      arch/m68k/include/asm/ide.h
  39. 3 1
      arch/m68k/kernel/process.c
  40. 3 1
      arch/m68k/kernel/sys_m68k.c
  41. 8 6
      arch/m68knommu/kernel/process.c
  42. 3 1
      arch/m68knommu/kernel/sys_m68k.c
  43. 1 1
      arch/microblaze/kernel/prom_parse.c
  44. 7 3
      arch/microblaze/kernel/sys_microblaze.c
  45. 3 2
      arch/microblaze/pci/pci-common.c
  46. 1 0
      arch/microblaze/pci/xilinx_pci.c
  47. 7 3
      arch/mips/kernel/syscall.c
  48. 2 2
      arch/mn10300/kernel/process.c
  49. 2 1
      arch/mn10300/mm/dma-alloc.c
  50. 4 2
      arch/parisc/hpux/fs.c
  51. 10 5
      arch/parisc/kernel/process.c
  52. 1 1
      arch/powerpc/Makefile
  53. 8 0
      arch/powerpc/boot/dts/canyonlands.dts
  54. 1 1
      arch/powerpc/include/asm/mmu-hash64.h
  55. 8 1
      arch/powerpc/include/asm/reg.h
  56. 37 27
      arch/powerpc/include/asm/rwsem.h
  57. 3 0
      arch/powerpc/include/asm/systbl.h
  58. 4 1
      arch/powerpc/include/asm/unistd.h
  59. 0 1
      arch/powerpc/kernel/cputable.c
  60. 13 11
      arch/powerpc/kernel/crash.c
  61. 4 0
      arch/powerpc/kernel/head_44x.S
  62. 3 3
      arch/powerpc/kernel/head_64.S
  63. 1 1
      arch/powerpc/kernel/idle.c
  64. 9 7
      arch/powerpc/kernel/irq.c
  65. 1 1
      arch/powerpc/kernel/pci_of_scan.c
  66. 12 13
      arch/powerpc/kernel/process.c
  67. 5 4
      arch/powerpc/kernel/setup_32.c
  68. 36 27
      arch/powerpc/kernel/setup_64.c
  69. 2 2
      arch/powerpc/kernel/smp.c
  70. 8 0
      arch/powerpc/kernel/sys_ppc32.c
  71. 2 1
      arch/powerpc/kernel/vio.c
  72. 2 0
      arch/powerpc/mm/init_64.c
  73. 1 0
      arch/powerpc/mm/tlb_nohash_low.S
  74. 1 2
      arch/powerpc/platforms/Kconfig
  75. 1 1
      arch/powerpc/platforms/cell/iommu.c
  76. 1 1
      arch/powerpc/platforms/iseries/iommu.c
  77. 1 2
      arch/powerpc/platforms/powermac/feature.c
  78. 0 2
      arch/powerpc/platforms/powermac/pci.c
  79. 4 4
      arch/powerpc/platforms/pseries/iommu.c
  80. 7 4
      arch/powerpc/platforms/pseries/smp.c
  81. 4 2
      arch/powerpc/platforms/pseries/xics.c
  82. 3 1
      arch/s390/include/asm/hugetlb.h
  83. 2 0
      arch/s390/include/asm/mmu.h
  84. 9 0
      arch/s390/include/asm/mmu_context.h
  85. 4 2
      arch/s390/include/asm/pgtable.h
  86. 1 2
      arch/s390/include/asm/tlb.h
  87. 5 1
      arch/s390/include/asm/tlbflush.h
  88. 2 2
      arch/s390/kernel/entry.h
  89. 3 2
      arch/s390/kernel/process.c
  90. 2 0
      arch/s390/kernel/smp.c
  91. 2 0
      arch/s390/mm/init.c
  92. 7 3
      arch/score/kernel/sys_score.c
  93. 4 3
      arch/sh/kernel/process_32.c
  94. 2 2
      arch/sh/kernel/process_64.c
  95. 3 1
      arch/sh/kernel/sys_sh32.c
  96. 3 1
      arch/sh/kernel/sys_sh64.c
  97. 5 5
      arch/sparc/include/asm/atomic_64.h
  98. 8 3
      arch/sparc/include/asm/backoff.h
  99. 4 0
      arch/sparc/include/asm/fb.h
  100. 3 24
      arch/sparc/include/asm/oplib_64.h

+ 5 - 2
Documentation/DocBook/kernel-locking.tmpl

@@ -1922,9 +1922,12 @@ machines due to caching.
       <function>mutex_lock()</function>
       <function>mutex_lock()</function>
       </para>
       </para>
       <para>
       <para>
-       There is a <function>mutex_trylock()</function> which can be
-       used inside interrupt context, as it will not sleep.
+       There is a <function>mutex_trylock()</function> which does not
+       sleep.  Still, it must not be used inside interrupt context since
+       its implementation is not safe for that.
        <function>mutex_unlock()</function> will also never sleep.
        <function>mutex_unlock()</function> will also never sleep.
+       It cannot be used in interrupt context either since a mutex
+       must be released by the same task that acquired it.
       </para>
       </para>
      </listitem>
      </listitem>
     </itemizedlist>
     </itemizedlist>

+ 0 - 4
Documentation/hwmon/f71882fg

@@ -2,10 +2,6 @@ Kernel driver f71882fg
 ======================
 ======================
 
 
 Supported chips:
 Supported chips:
-  * Fintek F71808E
-    Prefix: 'f71808fg'
-    Addresses scanned: none, address read from Super I/O config space
-    Datasheet: Not public
   * Fintek F71858FG
   * Fintek F71858FG
     Prefix: 'f71858fg'
     Prefix: 'f71858fg'
     Addresses scanned: none, address read from Super I/O config space
     Addresses scanned: none, address read from Super I/O config space

+ 4 - 2
Documentation/kernel-parameters.txt

@@ -2629,8 +2629,10 @@ and is between 256 and 4096 characters. It is defined in the file
 			aux-ide-disks -- unplug non-primary-master IDE devices
 			aux-ide-disks -- unplug non-primary-master IDE devices
 			nics -- unplug network devices
 			nics -- unplug network devices
 			all -- unplug all emulated devices (NICs and IDE disks)
 			all -- unplug all emulated devices (NICs and IDE disks)
-			ignore -- continue loading the Xen platform PCI driver even
-				if the version check failed
+			unnecessary -- unplugging emulated devices is
+				unnecessary even if the host did not respond to
+				the unplug protocol
+			never -- do not unplug even if version check succeeds
 
 
 	xirc2ps_cs=	[NET,PCMCIA]
 	xirc2ps_cs=	[NET,PCMCIA]
 			Format:
 			Format:

+ 4 - 0
Documentation/laptops/thinkpad-acpi.txt

@@ -1024,6 +1024,10 @@ ThinkPad-specific interface.  The driver will disable its native
 backlight brightness control interface if it detects that the standard
 backlight brightness control interface if it detects that the standard
 ACPI interface is available in the ThinkPad.
 ACPI interface is available in the ThinkPad.
 
 
+If you want to use the thinkpad-acpi backlight brightness control
+instead of the generic ACPI video backlight brightness control for some
+reason, you should use the acpi_backlight=vendor kernel parameter.
+
 The brightness_enable module parameter can be used to control whether
 The brightness_enable module parameter can be used to control whether
 the LCD brightness control feature will be enabled when available.
 the LCD brightness control feature will be enabled when available.
 brightness_enable=0 forces it to be disabled.  brightness_enable=1
 brightness_enable=0 forces it to be disabled.  brightness_enable=1

+ 2 - 29
Documentation/powerpc/booting-without-of.txt

@@ -49,40 +49,13 @@ Table of Contents
       f) MDIO on GPIOs
       f) MDIO on GPIOs
       g) SPI busses
       g) SPI busses
 
 
-  VII - Marvell Discovery mv64[345]6x System Controller chips
-    1) The /system-controller node
-    2) Child nodes of /system-controller
-      a) Marvell Discovery MDIO bus
-      b) Marvell Discovery ethernet controller
-      c) Marvell Discovery PHY nodes
-      d) Marvell Discovery SDMA nodes
-      e) Marvell Discovery BRG nodes
-      f) Marvell Discovery CUNIT nodes
-      g) Marvell Discovery MPSCROUTING nodes
-      h) Marvell Discovery MPSCINTR nodes
-      i) Marvell Discovery MPSC nodes
-      j) Marvell Discovery Watch Dog Timer nodes
-      k) Marvell Discovery I2C nodes
-      l) Marvell Discovery PIC (Programmable Interrupt Controller) nodes
-      m) Marvell Discovery MPP (Multipurpose Pins) multiplexing nodes
-      n) Marvell Discovery GPP (General Purpose Pins) nodes
-      o) Marvell Discovery PCI host bridge node
-      p) Marvell Discovery CPU Error nodes
-      q) Marvell Discovery SRAM Controller nodes
-      r) Marvell Discovery PCI Error Handler nodes
-      s) Marvell Discovery Memory Controller nodes
-
-  VIII - Specifying interrupt information for devices
+  VII - Specifying interrupt information for devices
     1) interrupts property
     1) interrupts property
     2) interrupt-parent property
     2) interrupt-parent property
     3) OpenPIC Interrupt Controllers
     3) OpenPIC Interrupt Controllers
     4) ISA Interrupt Controllers
     4) ISA Interrupt Controllers
 
 
-  IX - Specifying GPIO information for devices
-    1) gpios property
-    2) gpio-controller nodes
-
-  X - Specifying device power management information (sleep property)
+  VIII - Specifying device power management information (sleep property)
 
 
   Appendix A - Sample SOC node for MPC8540
   Appendix A - Sample SOC node for MPC8540
 
 

+ 1 - 1
Documentation/powerpc/hvcs.txt

@@ -560,7 +560,7 @@ The proper channel for reporting bugs is either through the Linux OS
 distribution company that provided your OS or by posting issues to the
 distribution company that provided your OS or by posting issues to the
 PowerPC development mailing list at:
 PowerPC development mailing list at:
 
 
-linuxppc-dev@ozlabs.org
+linuxppc-dev@lists.ozlabs.org
 
 
 This request is to provide a documented and searchable public exchange
 This request is to provide a documented and searchable public exchange
 of the problems and solutions surrounding this driver for the benefit of
 of the problems and solutions surrounding this driver for the benefit of

+ 39 - 28
MAINTAINERS

@@ -454,9 +454,20 @@ L:	linux-rdma@vger.kernel.org
 S:	Maintained
 S:	Maintained
 F:	drivers/infiniband/hw/amso1100/
 F:	drivers/infiniband/hw/amso1100/
 
 
+ANALOG DEVICES INC ASOC DRIVERS
+L:	uclinux-dist-devel@blackfin.uclinux.org
+L:	alsa-devel@alsa-project.org (moderated for non-subscribers)
+W:	http://blackfin.uclinux.org/
+S:	Supported
+F:	sound/soc/blackfin/*
+F:	sound/soc/codecs/ad1*
+F:	sound/soc/codecs/adau*
+F:	sound/soc/codecs/adav*
+F:	sound/soc/codecs/ssm*
+
 AOA (Apple Onboard Audio) ALSA DRIVER
 AOA (Apple Onboard Audio) ALSA DRIVER
 M:	Johannes Berg <johannes@sipsolutions.net>
 M:	Johannes Berg <johannes@sipsolutions.net>
-L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
 L:	alsa-devel@alsa-project.org (moderated for non-subscribers)
 L:	alsa-devel@alsa-project.org (moderated for non-subscribers)
 S:	Maintained
 S:	Maintained
 F:	sound/aoa/
 F:	sound/aoa/
@@ -1472,8 +1483,8 @@ F:	include/linux/can/platform/
 
 
 CELL BROADBAND ENGINE ARCHITECTURE
 CELL BROADBAND ENGINE ARCHITECTURE
 M:	Arnd Bergmann <arnd@arndb.de>
 M:	Arnd Bergmann <arnd@arndb.de>
-L:	linuxppc-dev@ozlabs.org
-L:	cbe-oss-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
+L:	cbe-oss-dev@lists.ozlabs.org
 W:	http://www.ibm.com/developerworks/power/cell/
 W:	http://www.ibm.com/developerworks/power/cell/
 S:	Supported
 S:	Supported
 F:	arch/powerpc/include/asm/cell*.h
 F:	arch/powerpc/include/asm/cell*.h
@@ -2371,13 +2382,13 @@ F:	include/linux/fb.h
 FREESCALE DMA DRIVER
 FREESCALE DMA DRIVER
 M:	Li Yang <leoli@freescale.com>
 M:	Li Yang <leoli@freescale.com>
 M:	Zhang Wei <zw@zh-kernel.org>
 M:	Zhang Wei <zw@zh-kernel.org>
-L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
 S:	Maintained
 S:	Maintained
 F:	drivers/dma/fsldma.*
 F:	drivers/dma/fsldma.*
 
 
 FREESCALE I2C CPM DRIVER
 FREESCALE I2C CPM DRIVER
 M:	Jochen Friedrich <jochen@scram.de>
 M:	Jochen Friedrich <jochen@scram.de>
-L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
 L:	linux-i2c@vger.kernel.org
 L:	linux-i2c@vger.kernel.org
 S:	Maintained
 S:	Maintained
 F:	drivers/i2c/busses/i2c-cpm.c
 F:	drivers/i2c/busses/i2c-cpm.c
@@ -2393,7 +2404,7 @@ F:	drivers/video/imxfb.c
 FREESCALE SOC FS_ENET DRIVER
 FREESCALE SOC FS_ENET DRIVER
 M:	Pantelis Antoniou <pantelis.antoniou@gmail.com>
 M:	Pantelis Antoniou <pantelis.antoniou@gmail.com>
 M:	Vitaly Bordug <vbordug@ru.mvista.com>
 M:	Vitaly Bordug <vbordug@ru.mvista.com>
-L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
 L:	netdev@vger.kernel.org
 L:	netdev@vger.kernel.org
 S:	Maintained
 S:	Maintained
 F:	drivers/net/fs_enet/
 F:	drivers/net/fs_enet/
@@ -2401,7 +2412,7 @@ F:	include/linux/fs_enet_pd.h
 
 
 FREESCALE QUICC ENGINE LIBRARY
 FREESCALE QUICC ENGINE LIBRARY
 M:	Timur Tabi <timur@freescale.com>
 M:	Timur Tabi <timur@freescale.com>
-L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
 S:	Supported
 S:	Supported
 F:	arch/powerpc/sysdev/qe_lib/
 F:	arch/powerpc/sysdev/qe_lib/
 F:	arch/powerpc/include/asm/*qe.h
 F:	arch/powerpc/include/asm/*qe.h
@@ -2409,27 +2420,27 @@ F:	arch/powerpc/include/asm/*qe.h
 FREESCALE USB PERIPHERAL DRIVERS
 FREESCALE USB PERIPHERAL DRIVERS
 M:	Li Yang <leoli@freescale.com>
 M:	Li Yang <leoli@freescale.com>
 L:	linux-usb@vger.kernel.org
 L:	linux-usb@vger.kernel.org
-L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
 S:	Maintained
 S:	Maintained
 F:	drivers/usb/gadget/fsl*
 F:	drivers/usb/gadget/fsl*
 
 
 FREESCALE QUICC ENGINE UCC ETHERNET DRIVER
 FREESCALE QUICC ENGINE UCC ETHERNET DRIVER
 M:	Li Yang <leoli@freescale.com>
 M:	Li Yang <leoli@freescale.com>
 L:	netdev@vger.kernel.org
 L:	netdev@vger.kernel.org
-L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
 S:	Maintained
 S:	Maintained
 F:	drivers/net/ucc_geth*
 F:	drivers/net/ucc_geth*
 
 
 FREESCALE QUICC ENGINE UCC UART DRIVER
 FREESCALE QUICC ENGINE UCC UART DRIVER
 M:	Timur Tabi <timur@freescale.com>
 M:	Timur Tabi <timur@freescale.com>
-L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
 S:	Supported
 S:	Supported
 F:	drivers/serial/ucc_uart.c
 F:	drivers/serial/ucc_uart.c
 
 
 FREESCALE SOC SOUND DRIVERS
 FREESCALE SOC SOUND DRIVERS
 M:	Timur Tabi <timur@freescale.com>
 M:	Timur Tabi <timur@freescale.com>
 L:	alsa-devel@alsa-project.org (moderated for non-subscribers)
 L:	alsa-devel@alsa-project.org (moderated for non-subscribers)
-L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
 S:	Supported
 S:	Supported
 F:	sound/soc/fsl/fsl*
 F:	sound/soc/fsl/fsl*
 F:	sound/soc/fsl/mpc8610_hpcd.c
 F:	sound/soc/fsl/mpc8610_hpcd.c
@@ -2564,7 +2575,7 @@ F:	mm/memory-failure.c
 F:	mm/hwpoison-inject.c
 F:	mm/hwpoison-inject.c
 
 
 HYPERVISOR VIRTUAL CONSOLE DRIVER
 HYPERVISOR VIRTUAL CONSOLE DRIVER
-L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
 S:	Odd Fixes
 S:	Odd Fixes
 F:	drivers/char/hvc_*
 F:	drivers/char/hvc_*
 
 
@@ -3476,7 +3487,7 @@ F:	drivers/usb/misc/legousbtower.c
 
 
 LGUEST
 LGUEST
 M:	Rusty Russell <rusty@rustcorp.com.au>
 M:	Rusty Russell <rusty@rustcorp.com.au>
-L:	lguest@ozlabs.org
+L:	lguest@lists.ozlabs.org
 W:	http://lguest.ozlabs.org/
 W:	http://lguest.ozlabs.org/
 S:	Maintained
 S:	Maintained
 F:	Documentation/lguest/
 F:	Documentation/lguest/
@@ -3495,7 +3506,7 @@ LINUX FOR POWERPC (32-BIT AND 64-BIT)
 M:	Benjamin Herrenschmidt <benh@kernel.crashing.org>
 M:	Benjamin Herrenschmidt <benh@kernel.crashing.org>
 M:	Paul Mackerras <paulus@samba.org>
 M:	Paul Mackerras <paulus@samba.org>
 W:	http://www.penguinppc.org/
 W:	http://www.penguinppc.org/
-L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
 Q:	http://patchwork.ozlabs.org/project/linuxppc-dev/list/
 Q:	http://patchwork.ozlabs.org/project/linuxppc-dev/list/
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc.git
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc.git
 S:	Supported
 S:	Supported
@@ -3505,14 +3516,14 @@ F:	arch/powerpc/
 LINUX FOR POWER MACINTOSH
 LINUX FOR POWER MACINTOSH
 M:	Benjamin Herrenschmidt <benh@kernel.crashing.org>
 M:	Benjamin Herrenschmidt <benh@kernel.crashing.org>
 W:	http://www.penguinppc.org/
 W:	http://www.penguinppc.org/
-L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
 S:	Maintained
 S:	Maintained
 F:	arch/powerpc/platforms/powermac/
 F:	arch/powerpc/platforms/powermac/
 F:	drivers/macintosh/
 F:	drivers/macintosh/
 
 
 LINUX FOR POWERPC EMBEDDED MPC5XXX
 LINUX FOR POWERPC EMBEDDED MPC5XXX
 M:	Grant Likely <grant.likely@secretlab.ca>
 M:	Grant Likely <grant.likely@secretlab.ca>
-L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
 T:	git git://git.secretlab.ca/git/linux-2.6.git
 T:	git git://git.secretlab.ca/git/linux-2.6.git
 S:	Maintained
 S:	Maintained
 F:	arch/powerpc/platforms/512x/
 F:	arch/powerpc/platforms/512x/
@@ -3522,7 +3533,7 @@ LINUX FOR POWERPC EMBEDDED PPC4XX
 M:	Josh Boyer <jwboyer@linux.vnet.ibm.com>
 M:	Josh Boyer <jwboyer@linux.vnet.ibm.com>
 M:	Matt Porter <mporter@kernel.crashing.org>
 M:	Matt Porter <mporter@kernel.crashing.org>
 W:	http://www.penguinppc.org/
 W:	http://www.penguinppc.org/
-L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/jwboyer/powerpc-4xx.git
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/jwboyer/powerpc-4xx.git
 S:	Maintained
 S:	Maintained
 F:	arch/powerpc/platforms/40x/
 F:	arch/powerpc/platforms/40x/
@@ -3531,7 +3542,7 @@ F:	arch/powerpc/platforms/44x/
 LINUX FOR POWERPC EMBEDDED XILINX VIRTEX
 LINUX FOR POWERPC EMBEDDED XILINX VIRTEX
 M:	Grant Likely <grant.likely@secretlab.ca>
 M:	Grant Likely <grant.likely@secretlab.ca>
 W:	http://wiki.secretlab.ca/index.php/Linux_on_Xilinx_Virtex
 W:	http://wiki.secretlab.ca/index.php/Linux_on_Xilinx_Virtex
-L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
 T:	git git://git.secretlab.ca/git/linux-2.6.git
 T:	git git://git.secretlab.ca/git/linux-2.6.git
 S:	Maintained
 S:	Maintained
 F:	arch/powerpc/*/*virtex*
 F:	arch/powerpc/*/*virtex*
@@ -3541,20 +3552,20 @@ LINUX FOR POWERPC EMBEDDED PPC8XX
 M:	Vitaly Bordug <vitb@kernel.crashing.org>
 M:	Vitaly Bordug <vitb@kernel.crashing.org>
 M:	Marcelo Tosatti <marcelo@kvack.org>
 M:	Marcelo Tosatti <marcelo@kvack.org>
 W:	http://www.penguinppc.org/
 W:	http://www.penguinppc.org/
-L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
 S:	Maintained
 S:	Maintained
 F:	arch/powerpc/platforms/8xx/
 F:	arch/powerpc/platforms/8xx/
 
 
 LINUX FOR POWERPC EMBEDDED PPC83XX AND PPC85XX
 LINUX FOR POWERPC EMBEDDED PPC83XX AND PPC85XX
 M:	Kumar Gala <galak@kernel.crashing.org>
 M:	Kumar Gala <galak@kernel.crashing.org>
 W:	http://www.penguinppc.org/
 W:	http://www.penguinppc.org/
-L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
 S:	Maintained
 S:	Maintained
 F:	arch/powerpc/platforms/83xx/
 F:	arch/powerpc/platforms/83xx/
 
 
 LINUX FOR POWERPC PA SEMI PWRFICIENT
 LINUX FOR POWERPC PA SEMI PWRFICIENT
 M:	Olof Johansson <olof@lixom.net>
 M:	Olof Johansson <olof@lixom.net>
-L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
 S:	Maintained
 S:	Maintained
 F:	arch/powerpc/platforms/pasemi/
 F:	arch/powerpc/platforms/pasemi/
 F:	drivers/*/*pasemi*
 F:	drivers/*/*pasemi*
@@ -4601,14 +4612,14 @@ F:	drivers/ata/sata_promise.*
 PS3 NETWORK SUPPORT
 PS3 NETWORK SUPPORT
 M:	Geoff Levand <geoff@infradead.org>
 M:	Geoff Levand <geoff@infradead.org>
 L:	netdev@vger.kernel.org
 L:	netdev@vger.kernel.org
-L:	cbe-oss-dev@ozlabs.org
+L:	cbe-oss-dev@lists.ozlabs.org
 S:	Maintained
 S:	Maintained
 F:	drivers/net/ps3_gelic_net.*
 F:	drivers/net/ps3_gelic_net.*
 
 
 PS3 PLATFORM SUPPORT
 PS3 PLATFORM SUPPORT
 M:	Geoff Levand <geoff@infradead.org>
 M:	Geoff Levand <geoff@infradead.org>
-L:	linuxppc-dev@ozlabs.org
-L:	cbe-oss-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
+L:	cbe-oss-dev@lists.ozlabs.org
 S:	Maintained
 S:	Maintained
 F:	arch/powerpc/boot/ps3*
 F:	arch/powerpc/boot/ps3*
 F:	arch/powerpc/include/asm/lv1call.h
 F:	arch/powerpc/include/asm/lv1call.h
@@ -4622,7 +4633,7 @@ F:	sound/ppc/snd_ps3*
 
 
 PS3VRAM DRIVER
 PS3VRAM DRIVER
 M:	Jim Paris <jim@jtan.com>
 M:	Jim Paris <jim@jtan.com>
-L:	cbe-oss-dev@ozlabs.org
+L:	cbe-oss-dev@lists.ozlabs.org
 S:	Maintained
 S:	Maintained
 F:	drivers/block/ps3vram.c
 F:	drivers/block/ps3vram.c
 
 
@@ -5068,7 +5079,7 @@ F:	drivers/mmc/host/sdhci.*
 
 
 SECURE DIGITAL HOST CONTROLLER INTERFACE, OPEN FIRMWARE BINDINGS (SDHCI-OF)
 SECURE DIGITAL HOST CONTROLLER INTERFACE, OPEN FIRMWARE BINDINGS (SDHCI-OF)
 M:	Anton Vorontsov <avorontsov@ru.mvista.com>
 M:	Anton Vorontsov <avorontsov@ru.mvista.com>
-L:	linuxppc-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
 L:	linux-mmc@vger.kernel.org
 L:	linux-mmc@vger.kernel.org
 S:	Maintained
 S:	Maintained
 F:	drivers/mmc/host/sdhci-of.*
 F:	drivers/mmc/host/sdhci-of.*
@@ -5485,8 +5496,8 @@ F:	drivers/net/spider_net*
 
 
 SPU FILE SYSTEM
 SPU FILE SYSTEM
 M:	Jeremy Kerr <jk@ozlabs.org>
 M:	Jeremy Kerr <jk@ozlabs.org>
-L:	linuxppc-dev@ozlabs.org
-L:	cbe-oss-dev@ozlabs.org
+L:	linuxppc-dev@lists.ozlabs.org
+L:	cbe-oss-dev@lists.ozlabs.org
 W:	http://www.ibm.com/developerworks/power/cell/
 W:	http://www.ibm.com/developerworks/power/cell/
 S:	Supported
 S:	Supported
 F:	Documentation/filesystems/spufs.txt
 F:	Documentation/filesystems/spufs.txt

+ 3 - 3
Makefile

@@ -1,7 +1,7 @@
 VERSION = 2
 VERSION = 2
 PATCHLEVEL = 6
 PATCHLEVEL = 6
 SUBLEVEL = 36
 SUBLEVEL = 36
-EXTRAVERSION = -rc1
+EXTRAVERSION = -rc2
 NAME = Sheep on Meth
 NAME = Sheep on Meth
 
 
 # *DOCUMENTATION*
 # *DOCUMENTATION*
@@ -1408,8 +1408,8 @@ checkstack:
 	$(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
 	$(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
 	$(PERL) $(src)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
 	$(PERL) $(src)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
 
 
-kernelrelease: include/config/kernel.release
-	@echo $(KERNELRELEASE)
+kernelrelease:
+	@echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
 
 
 kernelversion:
 kernelversion:
 	@echo $(KERNELVERSION)
 	@echo $(KERNELVERSION)

+ 3 - 2
arch/alpha/kernel/process.c

@@ -387,8 +387,9 @@ EXPORT_SYMBOL(dump_elf_task_fp);
  * sys_execve() executes a new program.
  * sys_execve() executes a new program.
  */
  */
 asmlinkage int
 asmlinkage int
-do_sys_execve(const char __user *ufilename, char __user * __user *argv,
-	      char __user * __user *envp, struct pt_regs *regs)
+do_sys_execve(const char __user *ufilename,
+	      const char __user *const __user *argv,
+	      const char __user *const __user *envp, struct pt_regs *regs)
 {
 {
 	int error;
 	int error;
 	char *filename;
 	char *filename;

+ 3 - 0
arch/arm/Makefile

@@ -21,6 +21,9 @@ GZFLAGS		:=-9
 # Explicitly specifiy 32-bit ARM ISA since toolchain default can be -mthumb:
 # Explicitly specifiy 32-bit ARM ISA since toolchain default can be -mthumb:
 KBUILD_CFLAGS	+=$(call cc-option,-marm,)
 KBUILD_CFLAGS	+=$(call cc-option,-marm,)
 
 
+# Never generate .eh_frame
+KBUILD_CFLAGS	+= $(call cc-option,-fno-dwarf2-cfi-asm)
+
 # Do not use arch/arm/defconfig - it's always outdated.
 # Do not use arch/arm/defconfig - it's always outdated.
 # Select a platform tht is kept up-to-date
 # Select a platform tht is kept up-to-date
 KBUILD_DEFCONFIG := versatile_defconfig
 KBUILD_DEFCONFIG := versatile_defconfig

+ 13 - 4
arch/arm/include/asm/ptrace.h

@@ -158,15 +158,24 @@ struct pt_regs {
  */
  */
 static inline int valid_user_regs(struct pt_regs *regs)
 static inline int valid_user_regs(struct pt_regs *regs)
 {
 {
-	if (user_mode(regs) && (regs->ARM_cpsr & PSR_I_BIT) == 0) {
-		regs->ARM_cpsr &= ~(PSR_F_BIT | PSR_A_BIT);
-		return 1;
+	unsigned long mode = regs->ARM_cpsr & MODE_MASK;
+
+	/*
+	 * Always clear the F (FIQ) and A (delayed abort) bits
+	 */
+	regs->ARM_cpsr &= ~(PSR_F_BIT | PSR_A_BIT);
+
+	if ((regs->ARM_cpsr & PSR_I_BIT) == 0) {
+		if (mode == USR_MODE)
+			return 1;
+		if (elf_hwcap & HWCAP_26BIT && mode == USR26_MODE)
+			return 1;
 	}
 	}
 
 
 	/*
 	/*
 	 * Force CPSR to something logical...
 	 * Force CPSR to something logical...
 	 */
 	 */
-	regs->ARM_cpsr &= PSR_f | PSR_s | (PSR_x & ~PSR_A_BIT) | PSR_T_BIT | MODE32_BIT;
+	regs->ARM_cpsr &= PSR_f | PSR_s | PSR_x | PSR_T_BIT | MODE32_BIT;
 	if (!(elf_hwcap & HWCAP_26BIT))
 	if (!(elf_hwcap & HWCAP_26BIT))
 		regs->ARM_cpsr |= USR_MODE;
 		regs->ARM_cpsr |= USR_MODE;
 
 

+ 1 - 0
arch/arm/include/asm/unistd.h

@@ -392,6 +392,7 @@
 #define __NR_rt_tgsigqueueinfo		(__NR_SYSCALL_BASE+363)
 #define __NR_rt_tgsigqueueinfo		(__NR_SYSCALL_BASE+363)
 #define __NR_perf_event_open		(__NR_SYSCALL_BASE+364)
 #define __NR_perf_event_open		(__NR_SYSCALL_BASE+364)
 #define __NR_recvmmsg			(__NR_SYSCALL_BASE+365)
 #define __NR_recvmmsg			(__NR_SYSCALL_BASE+365)
+#define __NR_accept4			(__NR_SYSCALL_BASE+366)
 
 
 /*
 /*
  * The following SWIs are ARM private.
  * The following SWIs are ARM private.

+ 1 - 0
arch/arm/kernel/calls.S

@@ -375,6 +375,7 @@
 		CALL(sys_rt_tgsigqueueinfo)
 		CALL(sys_rt_tgsigqueueinfo)
 		CALL(sys_perf_event_open)
 		CALL(sys_perf_event_open)
 /* 365 */	CALL(sys_recvmmsg)
 /* 365 */	CALL(sys_recvmmsg)
+		CALL(sys_accept4)
 #ifndef syscalls_counted
 #ifndef syscalls_counted
 .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
 .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
 #define syscalls_counted
 #define syscalls_counted

+ 1 - 1
arch/arm/kernel/kgdb.c

@@ -79,7 +79,7 @@ sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task)
 		return;
 		return;
 
 
 	/* Initialize to zero */
 	/* Initialize to zero */
-	for (regno = 0; regno < GDB_MAX_REGS; regno++)
+	for (regno = 0; regno < DBG_MAX_REG_NUM; regno++)
 		gdb_regs[regno] = 0;
 		gdb_regs[regno] = 0;
 
 
 	/* Otherwise, we have only some registers from switch_to() */
 	/* Otherwise, we have only some registers from switch_to() */

+ 9 - 5
arch/arm/kernel/sys_arm.c

@@ -62,8 +62,9 @@ asmlinkage int sys_vfork(struct pt_regs *regs)
 /* sys_execve() executes a new program.
 /* sys_execve() executes a new program.
  * This is called indirectly via a small wrapper
  * This is called indirectly via a small wrapper
  */
  */
-asmlinkage int sys_execve(const char __user *filenamei, char __user * __user *argv,
-			  char __user * __user *envp, struct pt_regs *regs)
+asmlinkage int sys_execve(const char __user *filenamei,
+			  const char __user *const __user *argv,
+			  const char __user *const __user *envp, struct pt_regs *regs)
 {
 {
 	int error;
 	int error;
 	char * filename;
 	char * filename;
@@ -78,14 +79,17 @@ out:
 	return error;
 	return error;
 }
 }
 
 
-int kernel_execve(const char *filename, char *const argv[], char *const envp[])
+int kernel_execve(const char *filename,
+		  const char *const argv[],
+		  const char *const envp[])
 {
 {
 	struct pt_regs regs;
 	struct pt_regs regs;
 	int ret;
 	int ret;
 
 
 	memset(&regs, 0, sizeof(struct pt_regs));
 	memset(&regs, 0, sizeof(struct pt_regs));
-	ret = do_execve(filename, (char __user * __user *)argv,
-			(char __user * __user *)envp, &regs);
+	ret = do_execve(filename,
+			(const char __user *const __user *)argv,
+			(const char __user *const __user *)envp, &regs);
 	if (ret < 0)
 	if (ret < 0)
 		goto out;
 		goto out;
 
 

+ 2 - 2
arch/arm/mach-imx/mach-cpuimx27.c

@@ -279,13 +279,13 @@ static void __init eukrea_cpuimx27_init(void)
 #if defined(CONFIG_USB_ULPI)
 #if defined(CONFIG_USB_ULPI)
 	if (otg_mode_host) {
 	if (otg_mode_host) {
 		otg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
 		otg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
-				USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT);
+				ULPI_OTG_DRVVBUS | ULPI_OTG_DRVVBUS_EXT);
 
 
 		mxc_register_device(&mxc_otg_host, &otg_pdata);
 		mxc_register_device(&mxc_otg_host, &otg_pdata);
 	}
 	}
 
 
 	usbh2_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
 	usbh2_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
-				USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT);
+				ULPI_OTG_DRVVBUS | ULPI_OTG_DRVVBUS_EXT);
 
 
 	mxc_register_device(&mxc_usbh2, &usbh2_pdata);
 	mxc_register_device(&mxc_usbh2, &usbh2_pdata);
 #endif
 #endif

+ 2 - 2
arch/arm/mach-imx/mach-pca100.c

@@ -419,13 +419,13 @@ static void __init pca100_init(void)
 #if defined(CONFIG_USB_ULPI)
 #if defined(CONFIG_USB_ULPI)
 	if (otg_mode_host) {
 	if (otg_mode_host) {
 		otg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
 		otg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
-				USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT);
+				ULPI_OTG_DRVVBUS | ULPI_OTG_DRVVBUS_EXT);
 
 
 		mxc_register_device(&mxc_otg_host, &otg_pdata);
 		mxc_register_device(&mxc_otg_host, &otg_pdata);
 	}
 	}
 
 
 	usbh2_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
 	usbh2_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
-				USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT);
+				ULPI_OTG_DRVVBUS | ULPI_OTG_DRVVBUS_EXT);
 
 
 	mxc_register_device(&mxc_usbh2, &usbh2_pdata);
 	mxc_register_device(&mxc_usbh2, &usbh2_pdata);
 #endif
 #endif

+ 1 - 1
arch/arm/mach-mx25/mach-cpuimx25.c

@@ -138,7 +138,7 @@ static void __init eukrea_cpuimx25_init(void)
 #if defined(CONFIG_USB_ULPI)
 #if defined(CONFIG_USB_ULPI)
 	if (otg_mode_host) {
 	if (otg_mode_host) {
 		otg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
 		otg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
-				USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT);
+				ULPI_OTG_DRVVBUS | ULPI_OTG_DRVVBUS_EXT);
 
 
 		mxc_register_device(&mxc_otg, &otg_pdata);
 		mxc_register_device(&mxc_otg, &otg_pdata);
 	}
 	}

+ 1 - 1
arch/arm/mach-mx3/mach-cpuimx35.c

@@ -192,7 +192,7 @@ static void __init mxc_board_init(void)
 #if defined(CONFIG_USB_ULPI)
 #if defined(CONFIG_USB_ULPI)
 	if (otg_mode_host) {
 	if (otg_mode_host) {
 		otg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
 		otg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
-				USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT);
+				ULPI_OTG_DRVVBUS | ULPI_OTG_DRVVBUS_EXT);
 
 
 		mxc_register_device(&mxc_otg_host, &otg_pdata);
 		mxc_register_device(&mxc_otg_host, &otg_pdata);
 	}
 	}

+ 2 - 0
arch/arm/plat-samsung/dev-hsmmc.c

@@ -70,4 +70,6 @@ void s3c_sdhci0_set_platdata(struct s3c_sdhci_platdata *pd)
 		set->cfg_gpio = pd->cfg_gpio;
 		set->cfg_gpio = pd->cfg_gpio;
 	if (pd->cfg_card)
 	if (pd->cfg_card)
 		set->cfg_card = pd->cfg_card;
 		set->cfg_card = pd->cfg_card;
+	if (pd->host_caps)
+		set->host_caps = pd->host_caps;
 }
 }

+ 2 - 0
arch/arm/plat-samsung/dev-hsmmc1.c

@@ -70,4 +70,6 @@ void s3c_sdhci1_set_platdata(struct s3c_sdhci_platdata *pd)
 		set->cfg_gpio = pd->cfg_gpio;
 		set->cfg_gpio = pd->cfg_gpio;
 	if (pd->cfg_card)
 	if (pd->cfg_card)
 		set->cfg_card = pd->cfg_card;
 		set->cfg_card = pd->cfg_card;
+	if (pd->host_caps)
+		set->host_caps = pd->host_caps;
 }
 }

+ 2 - 0
arch/arm/plat-samsung/dev-hsmmc2.c

@@ -71,4 +71,6 @@ void s3c_sdhci2_set_platdata(struct s3c_sdhci_platdata *pd)
 		set->cfg_gpio = pd->cfg_gpio;
 		set->cfg_gpio = pd->cfg_gpio;
 	if (pd->cfg_card)
 	if (pd->cfg_card)
 		set->cfg_card = pd->cfg_card;
 		set->cfg_card = pd->cfg_card;
+	if (pd->host_caps)
+		set->host_caps = pd->host_caps;
 }
 }

+ 3 - 2
arch/avr32/kernel/process.c

@@ -384,8 +384,9 @@ asmlinkage int sys_vfork(struct pt_regs *regs)
 }
 }
 
 
 asmlinkage int sys_execve(const char __user *ufilename,
 asmlinkage int sys_execve(const char __user *ufilename,
-			  char __user *__user *uargv,
-			  char __user *__user *uenvp, struct pt_regs *regs)
+			  const char __user *const __user *uargv,
+			  const char __user *const __user *uenvp,
+			  struct pt_regs *regs)
 {
 {
 	int error;
 	int error;
 	char *filename;
 	char *filename;

+ 3 - 1
arch/avr32/kernel/sys_avr32.c

@@ -7,7 +7,9 @@
  */
  */
 #include <linux/unistd.h>
 #include <linux/unistd.h>
 
 
-int kernel_execve(const char *file, char **argv, char **envp)
+int kernel_execve(const char *file,
+		  const char *const *argv,
+		  const char *const *envp)
 {
 {
 	register long scno asm("r8") = __NR_execve;
 	register long scno asm("r8") = __NR_execve;
 	register long sc1 asm("r12") = (long)file;
 	register long sc1 asm("r12") = (long)file;

+ 10 - 7
arch/blackfin/include/asm/bitops.h

@@ -22,7 +22,9 @@
 
 
 #include <asm-generic/bitops/sched.h>
 #include <asm-generic/bitops/sched.h>
 #include <asm-generic/bitops/ffs.h>
 #include <asm-generic/bitops/ffs.h>
+#include <asm-generic/bitops/const_hweight.h>
 #include <asm-generic/bitops/lock.h>
 #include <asm-generic/bitops/lock.h>
+
 #include <asm-generic/bitops/ext2-non-atomic.h>
 #include <asm-generic/bitops/ext2-non-atomic.h>
 #include <asm-generic/bitops/ext2-atomic.h>
 #include <asm-generic/bitops/ext2-atomic.h>
 #include <asm-generic/bitops/minix.h>
 #include <asm-generic/bitops/minix.h>
@@ -115,7 +117,7 @@ static inline int test_and_change_bit(int nr, volatile unsigned long *addr)
  * of bits set) of a N-bit word
  * of bits set) of a N-bit word
  */
  */
 
 
-static inline unsigned int hweight32(unsigned int w)
+static inline unsigned int __arch_hweight32(unsigned int w)
 {
 {
 	unsigned int res;
 	unsigned int res;
 
 
@@ -125,19 +127,20 @@ static inline unsigned int hweight32(unsigned int w)
 	return res;
 	return res;
 }
 }
 
 
-static inline unsigned int hweight64(__u64 w)
+static inline unsigned int __arch_hweight64(__u64 w)
 {
 {
-	return hweight32((unsigned int)(w >> 32)) + hweight32((unsigned int)w);
+	return __arch_hweight32((unsigned int)(w >> 32)) +
+	       __arch_hweight32((unsigned int)w);
 }
 }
 
 
-static inline unsigned int hweight16(unsigned int w)
+static inline unsigned int __arch_hweight16(unsigned int w)
 {
 {
-	return hweight32(w & 0xffff);
+	return __arch_hweight32(w & 0xffff);
 }
 }
 
 
-static inline unsigned int hweight8(unsigned int w)
+static inline unsigned int __arch_hweight8(unsigned int w)
 {
 {
-	return hweight32(w & 0xff);
+	return __arch_hweight32(w & 0xff);
 }
 }
 
 
 #endif				/* _BLACKFIN_BITOPS_H */
 #endif				/* _BLACKFIN_BITOPS_H */

+ 4 - 1
arch/blackfin/include/asm/unistd.h

@@ -389,8 +389,11 @@
 #define __NR_rt_tgsigqueueinfo	368
 #define __NR_rt_tgsigqueueinfo	368
 #define __NR_perf_event_open	369
 #define __NR_perf_event_open	369
 #define __NR_recvmmsg		370
 #define __NR_recvmmsg		370
+#define __NR_fanotify_init	371
+#define __NR_fanotify_mark	372
+#define __NR_prlimit64		373
 
 
-#define __NR_syscall		371
+#define __NR_syscall		374
 #define NR_syscalls		__NR_syscall
 #define NR_syscalls		__NR_syscall
 
 
 /* Old optional stuff no one actually uses */
 /* Old optional stuff no one actually uses */

+ 3 - 1
arch/blackfin/kernel/process.c

@@ -209,7 +209,9 @@ copy_thread(unsigned long clone_flags,
 /*
 /*
  * sys_execve() executes a new program.
  * sys_execve() executes a new program.
  */
  */
-asmlinkage int sys_execve(const char __user *name, char __user * __user *argv, char __user * __user *envp)
+asmlinkage int sys_execve(const char __user *name,
+			  const char __user *const __user *argv,
+			  const char __user *const __user *envp)
 {
 {
 	int error;
 	int error;
 	char *filename;
 	char *filename;

+ 3 - 0
arch/blackfin/mach-common/entry.S

@@ -1628,6 +1628,9 @@ ENTRY(_sys_call_table)
 	.long _sys_rt_tgsigqueueinfo
 	.long _sys_rt_tgsigqueueinfo
 	.long _sys_perf_event_open
 	.long _sys_perf_event_open
 	.long _sys_recvmmsg		/* 370 */
 	.long _sys_recvmmsg		/* 370 */
+	.long _sys_fanotify_init
+	.long _sys_fanotify_mark
+	.long _sys_prlimit64
 
 
 	.rept NR_syscalls-(.-_sys_call_table)/4
 	.rept NR_syscalls-(.-_sys_call_table)/4
 	.long _sys_ni_syscall
 	.long _sys_ni_syscall

+ 3 - 1
arch/cris/arch-v10/kernel/process.c

@@ -204,7 +204,9 @@ asmlinkage int sys_vfork(long r10, long r11, long r12, long r13, long mof, long
 /*
 /*
  * sys_execve() executes a new program.
  * sys_execve() executes a new program.
  */
  */
-asmlinkage int sys_execve(const char *fname, char **argv, char **envp,
+asmlinkage int sys_execve(const char *fname,
+			  const char *const *argv,
+			  const char *const *envp,
 			  long r13, long mof, long srp, 
 			  long r13, long mof, long srp, 
 			  struct pt_regs *regs)
 			  struct pt_regs *regs)
 {
 {

+ 4 - 2
arch/cris/arch-v32/kernel/process.c

@@ -218,8 +218,10 @@ sys_vfork(long r10, long r11, long r12, long r13, long mof, long srp,
 
 
 /* sys_execve() executes a new program. */
 /* sys_execve() executes a new program. */
 asmlinkage int
 asmlinkage int
-sys_execve(const char *fname, char **argv, char **envp, long r13, long mof, long srp,
-	struct pt_regs *regs)
+sys_execve(const char *fname,
+	   const char *const *argv,
+	   const char *const *envp, long r13, long mof, long srp,
+	   struct pt_regs *regs)
 {
 {
 	int error;
 	int error;
 	char *filename;
 	char *filename;

+ 3 - 2
arch/frv/kernel/process.c

@@ -250,8 +250,9 @@ int copy_thread(unsigned long clone_flags,
 /*
 /*
  * sys_execve() executes a new program.
  * sys_execve() executes a new program.
  */
  */
-asmlinkage int sys_execve(const char __user *name, char __user * __user *argv,
-			  char __user * __user *envp)
+asmlinkage int sys_execve(const char __user *name,
+			  const char __user *const __user *argv,
+			  const char __user *const __user *envp)
 {
 {
 	int error;
 	int error;
 	char * filename;
 	char * filename;

+ 4 - 1
arch/h8300/kernel/process.c

@@ -212,7 +212,10 @@ int copy_thread(unsigned long clone_flags,
 /*
 /*
  * sys_execve() executes a new program.
  * sys_execve() executes a new program.
  */
  */
-asmlinkage int sys_execve(const char *name, char **argv, char **envp,int dummy,...)
+asmlinkage int sys_execve(const char *name,
+			  const char *const *argv,
+			  const char *const *envp,
+			  int dummy, ...)
 {
 {
 	int error;
 	int error;
 	char * filename;
 	char * filename;

+ 3 - 1
arch/h8300/kernel/sys_h8300.c

@@ -51,7 +51,9 @@ asmlinkage void syscall_print(void *dummy,...)
  * Do a system call from kernel instead of calling sys_execve so we
  * Do a system call from kernel instead of calling sys_execve so we
  * end up with proper pt_regs.
  * end up with proper pt_regs.
  */
  */
-int kernel_execve(const char *filename, char *const argv[], char *const envp[])
+int kernel_execve(const char *filename,
+		  const char *const argv[],
+		  const char *const envp[])
 {
 {
 	register long res __asm__("er0");
 	register long res __asm__("er0");
 	register char *const *_c __asm__("er3") = envp;
 	register char *const *_c __asm__("er3") = envp;

+ 0 - 2
arch/ia64/include/asm/unistd.h

@@ -356,8 +356,6 @@ asmlinkage unsigned long sys_mmap2(
 				int fd, long pgoff);
 				int fd, long pgoff);
 struct pt_regs;
 struct pt_regs;
 struct sigaction;
 struct sigaction;
-long sys_execve(const char __user *filename, char __user * __user *argv,
-			   char __user * __user *envp, struct pt_regs *regs);
 asmlinkage long sys_ia64_pipe(void);
 asmlinkage long sys_ia64_pipe(void);
 asmlinkage long sys_rt_sigaction(int sig,
 asmlinkage long sys_rt_sigaction(int sig,
 				 const struct sigaction __user *act,
 				 const struct sigaction __user *act,

+ 3 - 1
arch/ia64/kernel/process.c

@@ -633,7 +633,9 @@ dump_fpu (struct pt_regs *pt, elf_fpregset_t dst)
 }
 }
 
 
 long
 long
-sys_execve (const char __user *filename, char __user * __user *argv, char __user * __user *envp,
+sys_execve (const char __user *filename,
+	    const char __user *const __user *argv,
+	    const char __user *const __user *envp,
 	    struct pt_regs *regs)
 	    struct pt_regs *regs)
 {
 {
 	char *fname;
 	char *fname;

+ 2 - 2
arch/m32r/kernel/process.c

@@ -289,8 +289,8 @@ asmlinkage int sys_vfork(unsigned long r0, unsigned long r1, unsigned long r2,
  * sys_execve() executes a new program.
  * sys_execve() executes a new program.
  */
  */
 asmlinkage int sys_execve(const char __user *ufilename,
 asmlinkage int sys_execve(const char __user *ufilename,
-			  char __user * __user *uargv,
-			  char __user * __user *uenvp,
+			  const char __user *const __user *uargv,
+			  const char __user *const __user *uenvp,
 			  unsigned long r3, unsigned long r4, unsigned long r5,
 			  unsigned long r3, unsigned long r4, unsigned long r5,
 			  unsigned long r6, struct pt_regs regs)
 			  unsigned long r6, struct pt_regs regs)
 {
 {

+ 3 - 1
arch/m32r/kernel/sys_m32r.c

@@ -93,7 +93,9 @@ asmlinkage int sys_cachectl(char *addr, int nbytes, int op)
  * Do a system call from kernel instead of calling sys_execve so we
  * Do a system call from kernel instead of calling sys_execve so we
  * end up with proper pt_regs.
  * end up with proper pt_regs.
  */
  */
-int kernel_execve(const char *filename, char *const argv[], char *const envp[])
+int kernel_execve(const char *filename,
+		  const char *const argv[],
+		  const char *const envp[])
 {
 {
 	register long __scno __asm__ ("r7") = __NR_execve;
 	register long __scno __asm__ ("r7") = __NR_execve;
 	register long __arg3 __asm__ ("r2") = (long)(envp);
 	register long __arg3 __asm__ ("r2") = (long)(envp);

+ 11 - 2
arch/m68k/include/asm/ide.h

@@ -1,6 +1,4 @@
 /*
 /*
- *  linux/include/asm-m68k/ide.h
- *
  *  Copyright (C) 1994-1996  Linus Torvalds & authors
  *  Copyright (C) 1994-1996  Linus Torvalds & authors
  */
  */
 
 
@@ -34,6 +32,8 @@
 #include <asm/io.h>
 #include <asm/io.h>
 #include <asm/irq.h>
 #include <asm/irq.h>
 
 
+#ifdef CONFIG_MMU
+
 /*
 /*
  * Get rid of defs from io.h - ide has its private and conflicting versions
  * Get rid of defs from io.h - ide has its private and conflicting versions
  * Since so far no single m68k platform uses ISA/PCI I/O space for IDE, we
  * Since so far no single m68k platform uses ISA/PCI I/O space for IDE, we
@@ -53,5 +53,14 @@
 #define __ide_mm_outsw(port, addr, n)	raw_outsw((u16 *)port, addr, n)
 #define __ide_mm_outsw(port, addr, n)	raw_outsw((u16 *)port, addr, n)
 #define __ide_mm_outsl(port, addr, n)	raw_outsl((u32 *)port, addr, n)
 #define __ide_mm_outsl(port, addr, n)	raw_outsl((u32 *)port, addr, n)
 
 
+#else
+
+#define __ide_mm_insw(port, addr, n)	io_insw((unsigned int)port, addr, n)
+#define __ide_mm_insl(port, addr, n)	io_insl((unsigned int)port, addr, n)
+#define __ide_mm_outsw(port, addr, n)	io_outsw((unsigned int)port, addr, n)
+#define __ide_mm_outsl(port, addr, n)	io_outsl((unsigned int)port, addr, n)
+
+#endif /* CONFIG_MMU */
+
 #endif /* __KERNEL__ */
 #endif /* __KERNEL__ */
 #endif /* _M68K_IDE_H */
 #endif /* _M68K_IDE_H */

+ 3 - 1
arch/m68k/kernel/process.c

@@ -315,7 +315,9 @@ EXPORT_SYMBOL(dump_fpu);
 /*
 /*
  * sys_execve() executes a new program.
  * sys_execve() executes a new program.
  */
  */
-asmlinkage int sys_execve(const char __user *name, char __user * __user *argv, char __user * __user *envp)
+asmlinkage int sys_execve(const char __user *name,
+			  const char __user *const __user *argv,
+			  const char __user *const __user *envp)
 {
 {
 	int error;
 	int error;
 	char * filename;
 	char * filename;

+ 3 - 1
arch/m68k/kernel/sys_m68k.c

@@ -459,7 +459,9 @@ asmlinkage int sys_getpagesize(void)
  * Do a system call from kernel instead of calling sys_execve so we
  * Do a system call from kernel instead of calling sys_execve so we
  * end up with proper pt_regs.
  * end up with proper pt_regs.
  */
  */
-int kernel_execve(const char *filename, char *const argv[], char *const envp[])
+int kernel_execve(const char *filename,
+		  const char *const argv[],
+		  const char *const envp[])
 {
 {
 	register long __res asm ("%d0") = __NR_execve;
 	register long __res asm ("%d0") = __NR_execve;
 	register long __a asm ("%d1") = (long)(filename);
 	register long __a asm ("%d1") = (long)(filename);

+ 8 - 6
arch/m68knommu/kernel/process.c

@@ -316,14 +316,14 @@ void dump(struct pt_regs *fp)
 		fp->d0, fp->d1, fp->d2, fp->d3);
 		fp->d0, fp->d1, fp->d2, fp->d3);
 	printk(KERN_EMERG "d4: %08lx    d5: %08lx    a0: %08lx    a1: %08lx\n",
 	printk(KERN_EMERG "d4: %08lx    d5: %08lx    a0: %08lx    a1: %08lx\n",
 		fp->d4, fp->d5, fp->a0, fp->a1);
 		fp->d4, fp->d5, fp->a0, fp->a1);
-	printk(KERN_EMERG "\nUSP: %08x   TRAPFRAME: %08x\n",
-		(unsigned int) rdusp(), (unsigned int) fp);
+	printk(KERN_EMERG "\nUSP: %08x   TRAPFRAME: %p\n",
+		(unsigned int) rdusp(), fp);
 
 
 	printk(KERN_EMERG "\nCODE:");
 	printk(KERN_EMERG "\nCODE:");
 	tp = ((unsigned char *) fp->pc) - 0x20;
 	tp = ((unsigned char *) fp->pc) - 0x20;
 	for (sp = (unsigned long *) tp, i = 0; (i < 0x40);  i += 4) {
 	for (sp = (unsigned long *) tp, i = 0; (i < 0x40);  i += 4) {
 		if ((i % 0x10) == 0)
 		if ((i % 0x10) == 0)
-			printk(KERN_EMERG "%08x: ", (int) (tp + i));
+			printk(KERN_EMERG "%p: ", tp + i);
 		printk("%08x ", (int) *sp++);
 		printk("%08x ", (int) *sp++);
 	}
 	}
 	printk(KERN_EMERG "\n");
 	printk(KERN_EMERG "\n");
@@ -332,7 +332,7 @@ void dump(struct pt_regs *fp)
 	tp = ((unsigned char *) fp) - 0x40;
 	tp = ((unsigned char *) fp) - 0x40;
 	for (sp = (unsigned long *) tp, i = 0; (i < 0xc0); i += 4) {
 	for (sp = (unsigned long *) tp, i = 0; (i < 0xc0); i += 4) {
 		if ((i % 0x10) == 0)
 		if ((i % 0x10) == 0)
-			printk(KERN_EMERG "%08x: ", (int) (tp + i));
+			printk(KERN_EMERG "%p: ", tp + i);
 		printk("%08x ", (int) *sp++);
 		printk("%08x ", (int) *sp++);
 	}
 	}
 	printk(KERN_EMERG "\n");
 	printk(KERN_EMERG "\n");
@@ -341,7 +341,7 @@ void dump(struct pt_regs *fp)
 	tp = (unsigned char *) (rdusp() - 0x10);
 	tp = (unsigned char *) (rdusp() - 0x10);
 	for (sp = (unsigned long *) tp, i = 0; (i < 0x80); i += 4) {
 	for (sp = (unsigned long *) tp, i = 0; (i < 0x80); i += 4) {
 		if ((i % 0x10) == 0)
 		if ((i % 0x10) == 0)
-			printk(KERN_EMERG "%08x: ", (int) (tp + i));
+			printk(KERN_EMERG "%p: ", tp + i);
 		printk("%08x ", (int) *sp++);
 		printk("%08x ", (int) *sp++);
 	}
 	}
 	printk(KERN_EMERG "\n");
 	printk(KERN_EMERG "\n");
@@ -350,7 +350,9 @@ void dump(struct pt_regs *fp)
 /*
 /*
  * sys_execve() executes a new program.
  * sys_execve() executes a new program.
  */
  */
-asmlinkage int sys_execve(const char *name, char **argv, char **envp)
+asmlinkage int sys_execve(const char *name,
+			  const char *const *argv,
+			  const char *const *envp)
 {
 {
 	int error;
 	int error;
 	char * filename;
 	char * filename;

+ 3 - 1
arch/m68knommu/kernel/sys_m68k.c

@@ -44,7 +44,9 @@ asmlinkage int sys_getpagesize(void)
  * Do a system call from kernel instead of calling sys_execve so we
  * Do a system call from kernel instead of calling sys_execve so we
  * end up with proper pt_regs.
  * end up with proper pt_regs.
  */
  */
-int kernel_execve(const char *filename, char *const argv[], char *const envp[])
+int kernel_execve(const char *filename,
+		  const char *const argv[],
+		  const char *const envp[])
 {
 {
 	register long __res asm ("%d0") = __NR_execve;
 	register long __res asm ("%d0") = __NR_execve;
 	register long __a asm ("%d1") = (long)(filename);
 	register long __a asm ("%d1") = (long)(filename);

+ 1 - 1
arch/microblaze/kernel/prom_parse.c

@@ -73,7 +73,7 @@ int of_irq_map_pci(struct pci_dev *pdev, struct of_irq *out_irq)
 		/* We can only get here if we hit a P2P bridge with no node,
 		/* We can only get here if we hit a P2P bridge with no node,
 		 * let's do standard swizzling and try again
 		 * let's do standard swizzling and try again
 		 */
 		 */
-		lspec = of_irq_pci_swizzle(PCI_SLOT(pdev->devfn), lspec);
+		lspec = pci_swizzle_interrupt_pin(pdev, lspec);
 		pdev = ppdev;
 		pdev = ppdev;
 	}
 	}
 
 

+ 7 - 3
arch/microblaze/kernel/sys_microblaze.c

@@ -47,8 +47,10 @@ asmlinkage long microblaze_clone(int flags, unsigned long stack, struct pt_regs
 	return do_fork(flags, stack, regs, 0, NULL, NULL);
 	return do_fork(flags, stack, regs, 0, NULL, NULL);
 }
 }
 
 
-asmlinkage long microblaze_execve(const char __user *filenamei, char __user *__user *argv,
-			char __user *__user *envp, struct pt_regs *regs)
+asmlinkage long microblaze_execve(const char __user *filenamei,
+				  const char __user *const __user *argv,
+				  const char __user *const __user *envp,
+				  struct pt_regs *regs)
 {
 {
 	int error;
 	int error;
 	char *filename;
 	char *filename;
@@ -77,7 +79,9 @@ asmlinkage long sys_mmap(unsigned long addr, unsigned long len,
  * Do a system call from kernel instead of calling sys_execve so we
  * Do a system call from kernel instead of calling sys_execve so we
  * end up with proper pt_regs.
  * end up with proper pt_regs.
  */
  */
-int kernel_execve(const char *filename, char *const argv[], char *const envp[])
+int kernel_execve(const char *filename,
+		  const char *const argv[],
+		  const char *const envp[])
 {
 {
 	register const char *__a __asm__("r5") = filename;
 	register const char *__a __asm__("r5") = filename;
 	register const void *__b __asm__("r6") = argv;
 	register const void *__b __asm__("r6") = argv;

+ 3 - 2
arch/microblaze/pci/pci-common.c

@@ -27,10 +27,11 @@
 #include <linux/irq.h>
 #include <linux/irq.h>
 #include <linux/vmalloc.h>
 #include <linux/vmalloc.h>
 #include <linux/slab.h>
 #include <linux/slab.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
 
 
 #include <asm/processor.h>
 #include <asm/processor.h>
 #include <asm/io.h>
 #include <asm/io.h>
-#include <asm/prom.h>
 #include <asm/pci-bridge.h>
 #include <asm/pci-bridge.h>
 #include <asm/byteorder.h>
 #include <asm/byteorder.h>
 
 
@@ -1077,7 +1078,7 @@ void __devinit pcibios_setup_bus_devices(struct pci_bus *bus)
 		struct dev_archdata *sd = &dev->dev.archdata;
 		struct dev_archdata *sd = &dev->dev.archdata;
 
 
 		/* Setup OF node pointer in archdata */
 		/* Setup OF node pointer in archdata */
-		sd->of_node = pci_device_to_OF_node(dev);
+		dev->dev.of_node = pci_device_to_OF_node(dev);
 
 
 		/* Fixup NUMA node as it may not be setup yet by the generic
 		/* Fixup NUMA node as it may not be setup yet by the generic
 		 * code and is needed by the DMA init
 		 * code and is needed by the DMA init

+ 1 - 0
arch/microblaze/pci/xilinx_pci.c

@@ -16,6 +16,7 @@
 
 
 #include <linux/ioport.h>
 #include <linux/ioport.h>
 #include <linux/of.h>
 #include <linux/of.h>
+#include <linux/of_address.h>
 #include <linux/pci.h>
 #include <linux/pci.h>
 #include <asm/io.h>
 #include <asm/io.h>
 
 

+ 7 - 3
arch/mips/kernel/syscall.c

@@ -258,8 +258,10 @@ asmlinkage int sys_execve(nabi_no_regargs struct pt_regs regs)
 	error = PTR_ERR(filename);
 	error = PTR_ERR(filename);
 	if (IS_ERR(filename))
 	if (IS_ERR(filename))
 		goto out;
 		goto out;
-	error = do_execve(filename, (char __user *__user *) (long)regs.regs[5],
-	                  (char __user *__user *) (long)regs.regs[6], &regs);
+	error = do_execve(filename,
+			  (const char __user *const __user *) (long)regs.regs[5],
+	                  (const char __user *const __user *) (long)regs.regs[6],
+			  &regs);
 	putname(filename);
 	putname(filename);
 
 
 out:
 out:
@@ -436,7 +438,9 @@ asmlinkage void bad_stack(void)
  * Do a system call from kernel instead of calling sys_execve so we
  * Do a system call from kernel instead of calling sys_execve so we
  * end up with proper pt_regs.
  * end up with proper pt_regs.
  */
  */
-int kernel_execve(const char *filename, char *const argv[], char *const envp[])
+int kernel_execve(const char *filename,
+		  const char *const argv[],
+		  const char *const envp[])
 {
 {
 	register unsigned long __a0 asm("$4") = (unsigned long) filename;
 	register unsigned long __a0 asm("$4") = (unsigned long) filename;
 	register unsigned long __a1 asm("$5") = (unsigned long) argv;
 	register unsigned long __a1 asm("$5") = (unsigned long) argv;

+ 2 - 2
arch/mn10300/kernel/process.c

@@ -269,8 +269,8 @@ asmlinkage long sys_vfork(void)
 }
 }
 
 
 asmlinkage long sys_execve(const char __user *name,
 asmlinkage long sys_execve(const char __user *name,
-			   char __user * __user *argv,
-			   char __user * __user *envp)
+			   const char __user *const __user *argv,
+			   const char __user *const __user *envp)
 {
 {
 	char *filename;
 	char *filename;
 	int error;
 	int error;

+ 2 - 1
arch/mn10300/mm/dma-alloc.c

@@ -25,7 +25,8 @@ void *dma_alloc_coherent(struct device *dev, size_t size,
 	unsigned long addr;
 	unsigned long addr;
 	void *ret;
 	void *ret;
 
 
-	printk("dma_alloc_coherent(%s,%zu,,%x)\n", dev_name(dev), size, gfp);
+	pr_debug("dma_alloc_coherent(%s,%zu,%x)\n",
+		 dev ? dev_name(dev) : "?", size, gfp);
 
 
 	if (0xbe000000 - pci_sram_allocated >= size) {
 	if (0xbe000000 - pci_sram_allocated >= size) {
 		size = (size + 255) & ~255;
 		size = (size + 255) & ~255;

+ 4 - 2
arch/parisc/hpux/fs.c

@@ -41,8 +41,10 @@ int hpux_execve(struct pt_regs *regs)
 	if (IS_ERR(filename))
 	if (IS_ERR(filename))
 		goto out;
 		goto out;
 
 
-	error = do_execve(filename, (char __user * __user *) regs->gr[25],
-		(char __user * __user *) regs->gr[24], regs);
+	error = do_execve(filename,
+			  (const char __user *const __user *) regs->gr[25],
+			  (const char __user *const __user *) regs->gr[24],
+			  regs);
 
 
 	putname(filename);
 	putname(filename);
 
 

+ 10 - 5
arch/parisc/kernel/process.c

@@ -348,17 +348,22 @@ asmlinkage int sys_execve(struct pt_regs *regs)
 	error = PTR_ERR(filename);
 	error = PTR_ERR(filename);
 	if (IS_ERR(filename))
 	if (IS_ERR(filename))
 		goto out;
 		goto out;
-	error = do_execve(filename, (char __user * __user *) regs->gr[25],
-		(char __user * __user *) regs->gr[24], regs);
+	error = do_execve(filename,
+			  (const char __user *const __user *) regs->gr[25],
+			  (const char __user *const __user *) regs->gr[24],
+			  regs);
 	putname(filename);
 	putname(filename);
 out:
 out:
 
 
 	return error;
 	return error;
 }
 }
 
 
-extern int __execve(const char *filename, char *const argv[],
-		char *const envp[], struct task_struct *task);
-int kernel_execve(const char *filename, char *const argv[], char *const envp[])
+extern int __execve(const char *filename,
+		    const char *const argv[],
+		    const char *const envp[], struct task_struct *task);
+int kernel_execve(const char *filename,
+		  const char *const argv[],
+		  const char *const envp[])
 {
 {
 	return __execve(filename, argv, envp, current);
 	return __execve(filename, argv, envp, current);
 }
 }

+ 1 - 1
arch/powerpc/Makefile

@@ -164,7 +164,7 @@ drivers-$(CONFIG_OPROFILE)	+= arch/powerpc/oprofile/
 all: zImage
 all: zImage
 
 
 # With make 3.82 we cannot mix normal and wildcard targets
 # With make 3.82 we cannot mix normal and wildcard targets
-BOOT_TARGETS1 := zImage zImage.initrd uImaged
+BOOT_TARGETS1 := zImage zImage.initrd uImage
 BOOT_TARGETS2 := zImage% dtbImage% treeImage.% cuImage.% simpleImage.%
 BOOT_TARGETS2 := zImage% dtbImage% treeImage.% cuImage.% simpleImage.%
 
 
 PHONY += $(BOOT_TARGETS1) $(BOOT_TARGETS2)
 PHONY += $(BOOT_TARGETS1) $(BOOT_TARGETS2)

+ 8 - 0
arch/powerpc/boot/dts/canyonlands.dts

@@ -163,6 +163,14 @@
 			interrupts = <0x1e 4>;
 			interrupts = <0x1e 4>;
 		};
 		};
 
 
+		SATA0: sata@bffd1000 {
+			compatible = "amcc,sata-460ex";
+			reg = <4 0xbffd1000 0x800 4 0xbffd0800 0x400>;
+			interrupt-parent = <&UIC3>;
+			interrupts = <0x0 0x4       /* SATA */
+				      0x5 0x4>;     /* AHBDMA */
+		};
+
 		POB0: opb {
 		POB0: opb {
 			compatible = "ibm,opb-460ex", "ibm,opb";
 			compatible = "ibm,opb-460ex", "ibm,opb";
 			#address-cells = <1>;
 			#address-cells = <1>;

+ 1 - 1
arch/powerpc/include/asm/mmu-hash64.h

@@ -433,7 +433,7 @@ typedef struct {
  * with.  However gcc is not clever enough to compute the
  * with.  However gcc is not clever enough to compute the
  * modulus (2^n-1) without a second multiply.
  * modulus (2^n-1) without a second multiply.
  */
  */
-#define vsid_scrample(protovsid, size) \
+#define vsid_scramble(protovsid, size) \
 	((((protovsid) * VSID_MULTIPLIER_##size) % VSID_MODULUS_##size))
 	((((protovsid) * VSID_MULTIPLIER_##size) % VSID_MODULUS_##size))
 
 
 #else /* 1 */
 #else /* 1 */

+ 8 - 1
arch/powerpc/include/asm/reg.h

@@ -951,7 +951,14 @@
 #ifdef CONFIG_PPC64
 #ifdef CONFIG_PPC64
 
 
 extern void ppc64_runlatch_on(void);
 extern void ppc64_runlatch_on(void);
-extern void ppc64_runlatch_off(void);
+extern void __ppc64_runlatch_off(void);
+
+#define ppc64_runlatch_off()					\
+	do {							\
+		if (cpu_has_feature(CPU_FTR_CTRL) &&		\
+		    test_thread_flag(TIF_RUNLATCH))		\
+			__ppc64_runlatch_off();			\
+	} while (0)
 
 
 extern unsigned long scom970_read(unsigned int address);
 extern unsigned long scom970_read(unsigned int address);
 extern void scom970_write(unsigned int address, unsigned long value);
 extern void scom970_write(unsigned int address, unsigned long value);

+ 37 - 27
arch/powerpc/include/asm/rwsem.h

@@ -21,15 +21,20 @@
 /*
 /*
  * the semaphore definition
  * the semaphore definition
  */
  */
-struct rw_semaphore {
-	/* XXX this should be able to be an atomic_t  -- paulus */
-	signed int		count;
-#define RWSEM_UNLOCKED_VALUE		0x00000000
-#define RWSEM_ACTIVE_BIAS		0x00000001
-#define RWSEM_ACTIVE_MASK		0x0000ffff
-#define RWSEM_WAITING_BIAS		(-0x00010000)
+#ifdef CONFIG_PPC64
+# define RWSEM_ACTIVE_MASK		0xffffffffL
+#else
+# define RWSEM_ACTIVE_MASK		0x0000ffffL
+#endif
+
+#define RWSEM_UNLOCKED_VALUE		0x00000000L
+#define RWSEM_ACTIVE_BIAS		0x00000001L
+#define RWSEM_WAITING_BIAS		(-RWSEM_ACTIVE_MASK-1)
 #define RWSEM_ACTIVE_READ_BIAS		RWSEM_ACTIVE_BIAS
 #define RWSEM_ACTIVE_READ_BIAS		RWSEM_ACTIVE_BIAS
 #define RWSEM_ACTIVE_WRITE_BIAS		(RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS)
 #define RWSEM_ACTIVE_WRITE_BIAS		(RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS)
+
+struct rw_semaphore {
+	long			count;
 	spinlock_t		wait_lock;
 	spinlock_t		wait_lock;
 	struct list_head	wait_list;
 	struct list_head	wait_list;
 #ifdef CONFIG_DEBUG_LOCK_ALLOC
 #ifdef CONFIG_DEBUG_LOCK_ALLOC
@@ -43,9 +48,13 @@ struct rw_semaphore {
 # define __RWSEM_DEP_MAP_INIT(lockname)
 # define __RWSEM_DEP_MAP_INIT(lockname)
 #endif
 #endif
 
 
-#define __RWSEM_INITIALIZER(name) \
-	{ RWSEM_UNLOCKED_VALUE, __SPIN_LOCK_UNLOCKED((name).wait_lock), \
-	  LIST_HEAD_INIT((name).wait_list) __RWSEM_DEP_MAP_INIT(name) }
+#define __RWSEM_INITIALIZER(name)				\
+{								\
+	RWSEM_UNLOCKED_VALUE,					\
+	__SPIN_LOCK_UNLOCKED((name).wait_lock),			\
+	LIST_HEAD_INIT((name).wait_list)			\
+	__RWSEM_DEP_MAP_INIT(name)				\
+}
 
 
 #define DECLARE_RWSEM(name)		\
 #define DECLARE_RWSEM(name)		\
 	struct rw_semaphore name = __RWSEM_INITIALIZER(name)
 	struct rw_semaphore name = __RWSEM_INITIALIZER(name)
@@ -70,13 +79,13 @@ extern void __init_rwsem(struct rw_semaphore *sem, const char *name,
  */
  */
 static inline void __down_read(struct rw_semaphore *sem)
 static inline void __down_read(struct rw_semaphore *sem)
 {
 {
-	if (unlikely(atomic_inc_return((atomic_t *)(&sem->count)) <= 0))
+	if (unlikely(atomic_long_inc_return((atomic_long_t *)&sem->count) <= 0))
 		rwsem_down_read_failed(sem);
 		rwsem_down_read_failed(sem);
 }
 }
 
 
 static inline int __down_read_trylock(struct rw_semaphore *sem)
 static inline int __down_read_trylock(struct rw_semaphore *sem)
 {
 {
-	int tmp;
+	long tmp;
 
 
 	while ((tmp = sem->count) >= 0) {
 	while ((tmp = sem->count) >= 0) {
 		if (tmp == cmpxchg(&sem->count, tmp,
 		if (tmp == cmpxchg(&sem->count, tmp,
@@ -92,10 +101,10 @@ static inline int __down_read_trylock(struct rw_semaphore *sem)
  */
  */
 static inline void __down_write_nested(struct rw_semaphore *sem, int subclass)
 static inline void __down_write_nested(struct rw_semaphore *sem, int subclass)
 {
 {
-	int tmp;
+	long tmp;
 
 
-	tmp = atomic_add_return(RWSEM_ACTIVE_WRITE_BIAS,
-				(atomic_t *)(&sem->count));
+	tmp = atomic_long_add_return(RWSEM_ACTIVE_WRITE_BIAS,
+				     (atomic_long_t *)&sem->count);
 	if (unlikely(tmp != RWSEM_ACTIVE_WRITE_BIAS))
 	if (unlikely(tmp != RWSEM_ACTIVE_WRITE_BIAS))
 		rwsem_down_write_failed(sem);
 		rwsem_down_write_failed(sem);
 }
 }
@@ -107,7 +116,7 @@ static inline void __down_write(struct rw_semaphore *sem)
 
 
 static inline int __down_write_trylock(struct rw_semaphore *sem)
 static inline int __down_write_trylock(struct rw_semaphore *sem)
 {
 {
-	int tmp;
+	long tmp;
 
 
 	tmp = cmpxchg(&sem->count, RWSEM_UNLOCKED_VALUE,
 	tmp = cmpxchg(&sem->count, RWSEM_UNLOCKED_VALUE,
 		      RWSEM_ACTIVE_WRITE_BIAS);
 		      RWSEM_ACTIVE_WRITE_BIAS);
@@ -119,9 +128,9 @@ static inline int __down_write_trylock(struct rw_semaphore *sem)
  */
  */
 static inline void __up_read(struct rw_semaphore *sem)
 static inline void __up_read(struct rw_semaphore *sem)
 {
 {
-	int tmp;
+	long tmp;
 
 
-	tmp = atomic_dec_return((atomic_t *)(&sem->count));
+	tmp = atomic_long_dec_return((atomic_long_t *)&sem->count);
 	if (unlikely(tmp < -1 && (tmp & RWSEM_ACTIVE_MASK) == 0))
 	if (unlikely(tmp < -1 && (tmp & RWSEM_ACTIVE_MASK) == 0))
 		rwsem_wake(sem);
 		rwsem_wake(sem);
 }
 }
@@ -131,17 +140,17 @@ static inline void __up_read(struct rw_semaphore *sem)
  */
  */
 static inline void __up_write(struct rw_semaphore *sem)
 static inline void __up_write(struct rw_semaphore *sem)
 {
 {
-	if (unlikely(atomic_sub_return(RWSEM_ACTIVE_WRITE_BIAS,
-			      (atomic_t *)(&sem->count)) < 0))
+	if (unlikely(atomic_long_sub_return(RWSEM_ACTIVE_WRITE_BIAS,
+				 (atomic_long_t *)&sem->count) < 0))
 		rwsem_wake(sem);
 		rwsem_wake(sem);
 }
 }
 
 
 /*
 /*
  * implement atomic add functionality
  * implement atomic add functionality
  */
  */
-static inline void rwsem_atomic_add(int delta, struct rw_semaphore *sem)
+static inline void rwsem_atomic_add(long delta, struct rw_semaphore *sem)
 {
 {
-	atomic_add(delta, (atomic_t *)(&sem->count));
+	atomic_long_add(delta, (atomic_long_t *)&sem->count);
 }
 }
 
 
 /*
 /*
@@ -149,9 +158,10 @@ static inline void rwsem_atomic_add(int delta, struct rw_semaphore *sem)
  */
  */
 static inline void __downgrade_write(struct rw_semaphore *sem)
 static inline void __downgrade_write(struct rw_semaphore *sem)
 {
 {
-	int tmp;
+	long tmp;
 
 
-	tmp = atomic_add_return(-RWSEM_WAITING_BIAS, (atomic_t *)(&sem->count));
+	tmp = atomic_long_add_return(-RWSEM_WAITING_BIAS,
+				     (atomic_long_t *)&sem->count);
 	if (tmp < 0)
 	if (tmp < 0)
 		rwsem_downgrade_wake(sem);
 		rwsem_downgrade_wake(sem);
 }
 }
@@ -159,14 +169,14 @@ static inline void __downgrade_write(struct rw_semaphore *sem)
 /*
 /*
  * implement exchange and add functionality
  * implement exchange and add functionality
  */
  */
-static inline int rwsem_atomic_update(int delta, struct rw_semaphore *sem)
+static inline long rwsem_atomic_update(long delta, struct rw_semaphore *sem)
 {
 {
-	return atomic_add_return(delta, (atomic_t *)(&sem->count));
+	return atomic_long_add_return(delta, (atomic_long_t *)&sem->count);
 }
 }
 
 
 static inline int rwsem_is_locked(struct rw_semaphore *sem)
 static inline int rwsem_is_locked(struct rw_semaphore *sem)
 {
 {
-	return (sem->count != 0);
+	return sem->count != 0;
 }
 }
 
 
 #endif	/* __KERNEL__ */
 #endif	/* __KERNEL__ */

+ 3 - 0
arch/powerpc/include/asm/systbl.h

@@ -326,3 +326,6 @@ SYSCALL_SPU(perf_event_open)
 COMPAT_SYS_SPU(preadv)
 COMPAT_SYS_SPU(preadv)
 COMPAT_SYS_SPU(pwritev)
 COMPAT_SYS_SPU(pwritev)
 COMPAT_SYS(rt_tgsigqueueinfo)
 COMPAT_SYS(rt_tgsigqueueinfo)
+SYSCALL(fanotify_init)
+COMPAT_SYS(fanotify_mark)
+SYSCALL_SPU(prlimit64)

+ 4 - 1
arch/powerpc/include/asm/unistd.h

@@ -345,10 +345,13 @@
 #define __NR_preadv		320
 #define __NR_preadv		320
 #define __NR_pwritev		321
 #define __NR_pwritev		321
 #define __NR_rt_tgsigqueueinfo	322
 #define __NR_rt_tgsigqueueinfo	322
+#define __NR_fanotify_init	323
+#define __NR_fanotify_mark	324
+#define __NR_prlimit64		325
 
 
 #ifdef __KERNEL__
 #ifdef __KERNEL__
 
 
-#define __NR_syscalls		323
+#define __NR_syscalls		326
 
 
 #define __NR__exit __NR_exit
 #define __NR__exit __NR_exit
 #define NR_syscalls	__NR_syscalls
 #define NR_syscalls	__NR_syscalls

+ 0 - 1
arch/powerpc/kernel/cputable.c

@@ -1826,7 +1826,6 @@ static struct cpu_spec __initdata cpu_specs[] = {
 		.cpu_features		= CPU_FTRS_47X,
 		.cpu_features		= CPU_FTRS_47X,
 		.cpu_user_features	= COMMON_USER_BOOKE |
 		.cpu_user_features	= COMMON_USER_BOOKE |
 			PPC_FEATURE_HAS_FPU,
 			PPC_FEATURE_HAS_FPU,
-		.cpu_user_features	= COMMON_USER_BOOKE,
 		.mmu_features		= MMU_FTR_TYPE_47x |
 		.mmu_features		= MMU_FTR_TYPE_47x |
 			MMU_FTR_USE_TLBIVAX_BCAST | MMU_FTR_LOCK_BCAST_INVAL,
 			MMU_FTR_USE_TLBIVAX_BCAST | MMU_FTR_LOCK_BCAST_INVAL,
 		.icache_bsize		= 32,
 		.icache_bsize		= 32,

+ 13 - 11
arch/powerpc/kernel/crash.c

@@ -402,6 +402,18 @@ void default_machine_crash_shutdown(struct pt_regs *regs)
 	 */
 	 */
 	hard_irq_disable();
 	hard_irq_disable();
 
 
+	/*
+	 * Make a note of crashing cpu. Will be used in machine_kexec
+	 * such that another IPI will not be sent.
+	 */
+	crashing_cpu = smp_processor_id();
+	crash_save_cpu(regs, crashing_cpu);
+	crash_kexec_prepare_cpus(crashing_cpu);
+	cpu_set(crashing_cpu, cpus_in_crash);
+#if defined(CONFIG_PPC_STD_MMU_64) && defined(CONFIG_SMP)
+	crash_kexec_wait_realmode(crashing_cpu);
+#endif
+
 	for_each_irq(i) {
 	for_each_irq(i) {
 		struct irq_desc *desc = irq_to_desc(i);
 		struct irq_desc *desc = irq_to_desc(i);
 
 
@@ -438,18 +450,8 @@ void default_machine_crash_shutdown(struct pt_regs *regs)
 	crash_shutdown_cpu = -1;
 	crash_shutdown_cpu = -1;
 	__debugger_fault_handler = old_handler;
 	__debugger_fault_handler = old_handler;
 
 
-	/*
-	 * Make a note of crashing cpu. Will be used in machine_kexec
-	 * such that another IPI will not be sent.
-	 */
-	crashing_cpu = smp_processor_id();
-	crash_save_cpu(regs, crashing_cpu);
-	crash_kexec_prepare_cpus(crashing_cpu);
-	cpu_set(crashing_cpu, cpus_in_crash);
 	crash_kexec_stop_spus();
 	crash_kexec_stop_spus();
-#if defined(CONFIG_PPC_STD_MMU_64) && defined(CONFIG_SMP)
-	crash_kexec_wait_realmode(crashing_cpu);
-#endif
+
 	if (ppc_md.kexec_cpu_down)
 	if (ppc_md.kexec_cpu_down)
 		ppc_md.kexec_cpu_down(1, 0);
 		ppc_md.kexec_cpu_down(1, 0);
 }
 }

+ 4 - 0
arch/powerpc/kernel/head_44x.S

@@ -113,6 +113,10 @@ _ENTRY(_start);
 	stw	r5, 0(r4)	/* Save abatron_pteptrs at a fixed location */
 	stw	r5, 0(r4)	/* Save abatron_pteptrs at a fixed location */
 	stw	r6, 0(r5)
 	stw	r6, 0(r5)
 
 
+	/* Clear the Machine Check Syndrome Register */
+	li	r0,0
+	mtspr	SPRN_MCSR,r0
+
 	/* Let's move on */
 	/* Let's move on */
 	lis	r4,start_kernel@h
 	lis	r4,start_kernel@h
 	ori	r4,r4,start_kernel@l
 	ori	r4,r4,start_kernel@l

+ 3 - 3
arch/powerpc/kernel/head_64.S

@@ -572,9 +572,6 @@ __secondary_start:
 	/* Set thread priority to MEDIUM */
 	/* Set thread priority to MEDIUM */
 	HMT_MEDIUM
 	HMT_MEDIUM
 
 
-	/* Do early setup for that CPU (stab, slb, hash table pointer) */
-	bl	.early_setup_secondary
-
 	/* Initialize the kernel stack.  Just a repeat for iSeries.	 */
 	/* Initialize the kernel stack.  Just a repeat for iSeries.	 */
 	LOAD_REG_ADDR(r3, current_set)
 	LOAD_REG_ADDR(r3, current_set)
 	sldi	r28,r24,3		/* get current_set[cpu#]	 */
 	sldi	r28,r24,3		/* get current_set[cpu#]	 */
@@ -582,6 +579,9 @@ __secondary_start:
 	addi	r1,r1,THREAD_SIZE-STACK_FRAME_OVERHEAD
 	addi	r1,r1,THREAD_SIZE-STACK_FRAME_OVERHEAD
 	std	r1,PACAKSAVE(r13)
 	std	r1,PACAKSAVE(r13)
 
 
+	/* Do early setup for that CPU (stab, slb, hash table pointer) */
+	bl	.early_setup_secondary
+
 	/* Clear backchain so we get nice backtraces */
 	/* Clear backchain so we get nice backtraces */
 	li	r7,0
 	li	r7,0
 	mtlr	r7
 	mtlr	r7

+ 1 - 1
arch/powerpc/kernel/idle.c

@@ -94,9 +94,9 @@ void cpu_idle(void)
 		HMT_medium();
 		HMT_medium();
 		ppc64_runlatch_on();
 		ppc64_runlatch_on();
 		tick_nohz_restart_sched_tick();
 		tick_nohz_restart_sched_tick();
+		preempt_enable_no_resched();
 		if (cpu_should_die())
 		if (cpu_should_die())
 			cpu_die();
 			cpu_die();
-		preempt_enable_no_resched();
 		schedule();
 		schedule();
 		preempt_disable();
 		preempt_disable();
 	}
 	}

+ 9 - 7
arch/powerpc/kernel/irq.c

@@ -67,6 +67,7 @@
 #include <asm/machdep.h>
 #include <asm/machdep.h>
 #include <asm/udbg.h>
 #include <asm/udbg.h>
 #include <asm/dbell.h>
 #include <asm/dbell.h>
+#include <asm/smp.h>
 
 
 #ifdef CONFIG_PPC64
 #ifdef CONFIG_PPC64
 #include <asm/paca.h>
 #include <asm/paca.h>
@@ -446,22 +447,23 @@ struct thread_info *mcheckirq_ctx[NR_CPUS] __read_mostly;
 void exc_lvl_ctx_init(void)
 void exc_lvl_ctx_init(void)
 {
 {
 	struct thread_info *tp;
 	struct thread_info *tp;
-	int i;
+	int i, hw_cpu;
 
 
 	for_each_possible_cpu(i) {
 	for_each_possible_cpu(i) {
-		memset((void *)critirq_ctx[i], 0, THREAD_SIZE);
-		tp = critirq_ctx[i];
+		hw_cpu = get_hard_smp_processor_id(i);
+		memset((void *)critirq_ctx[hw_cpu], 0, THREAD_SIZE);
+		tp = critirq_ctx[hw_cpu];
 		tp->cpu = i;
 		tp->cpu = i;
 		tp->preempt_count = 0;
 		tp->preempt_count = 0;
 
 
 #ifdef CONFIG_BOOKE
 #ifdef CONFIG_BOOKE
-		memset((void *)dbgirq_ctx[i], 0, THREAD_SIZE);
-		tp = dbgirq_ctx[i];
+		memset((void *)dbgirq_ctx[hw_cpu], 0, THREAD_SIZE);
+		tp = dbgirq_ctx[hw_cpu];
 		tp->cpu = i;
 		tp->cpu = i;
 		tp->preempt_count = 0;
 		tp->preempt_count = 0;
 
 
-		memset((void *)mcheckirq_ctx[i], 0, THREAD_SIZE);
-		tp = mcheckirq_ctx[i];
+		memset((void *)mcheckirq_ctx[hw_cpu], 0, THREAD_SIZE);
+		tp = mcheckirq_ctx[hw_cpu];
 		tp->cpu = i;
 		tp->cpu = i;
 		tp->preempt_count = HARDIRQ_OFFSET;
 		tp->preempt_count = HARDIRQ_OFFSET;
 #endif
 #endif

+ 1 - 1
arch/powerpc/kernel/pci_of_scan.c

@@ -336,7 +336,7 @@ static void __devinit __of_scan_bus(struct device_node *node,
 		if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
 		if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
 		    dev->hdr_type == PCI_HEADER_TYPE_CARDBUS) {
 		    dev->hdr_type == PCI_HEADER_TYPE_CARDBUS) {
 			struct device_node *child = pci_device_to_OF_node(dev);
 			struct device_node *child = pci_device_to_OF_node(dev);
-			if (dev)
+			if (child)
 				of_scan_pci_bridge(child, dev);
 				of_scan_pci_bridge(child, dev);
 		}
 		}
 	}
 	}

+ 12 - 13
arch/powerpc/kernel/process.c

@@ -728,7 +728,7 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,
 		p->thread.regs = childregs;
 		p->thread.regs = childregs;
 		if (clone_flags & CLONE_SETTLS) {
 		if (clone_flags & CLONE_SETTLS) {
 #ifdef CONFIG_PPC64
 #ifdef CONFIG_PPC64
-			if (!test_thread_flag(TIF_32BIT))
+			if (!is_32bit_task())
 				childregs->gpr[13] = childregs->gpr[6];
 				childregs->gpr[13] = childregs->gpr[6];
 			else
 			else
 #endif
 #endif
@@ -823,7 +823,7 @@ void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
 	regs->nip = start;
 	regs->nip = start;
 	regs->msr = MSR_USER;
 	regs->msr = MSR_USER;
 #else
 #else
-	if (!test_thread_flag(TIF_32BIT)) {
+	if (!is_32bit_task()) {
 		unsigned long entry, toc;
 		unsigned long entry, toc;
 
 
 		/* start is a relocated pointer to the function descriptor for
 		/* start is a relocated pointer to the function descriptor for
@@ -995,7 +995,7 @@ int sys_clone(unsigned long clone_flags, unsigned long usp,
 	if (usp == 0)
 	if (usp == 0)
 		usp = regs->gpr[1];	/* stack pointer for child */
 		usp = regs->gpr[1];	/* stack pointer for child */
 #ifdef CONFIG_PPC64
 #ifdef CONFIG_PPC64
-	if (test_thread_flag(TIF_32BIT)) {
+	if (is_32bit_task()) {
 		parent_tidp = TRUNC_PTR(parent_tidp);
 		parent_tidp = TRUNC_PTR(parent_tidp);
 		child_tidp = TRUNC_PTR(child_tidp);
 		child_tidp = TRUNC_PTR(child_tidp);
 	}
 	}
@@ -1034,8 +1034,9 @@ int sys_execve(unsigned long a0, unsigned long a1, unsigned long a2,
 	flush_fp_to_thread(current);
 	flush_fp_to_thread(current);
 	flush_altivec_to_thread(current);
 	flush_altivec_to_thread(current);
 	flush_spe_to_thread(current);
 	flush_spe_to_thread(current);
-	error = do_execve(filename, (char __user * __user *) a1,
-			  (char __user * __user *) a2, regs);
+	error = do_execve(filename,
+			  (const char __user *const __user *) a1,
+			  (const char __user *const __user *) a2, regs);
 	putname(filename);
 	putname(filename);
 out:
 out:
 	return error;
 	return error;
@@ -1198,19 +1199,17 @@ void ppc64_runlatch_on(void)
 	}
 	}
 }
 }
 
 
-void ppc64_runlatch_off(void)
+void __ppc64_runlatch_off(void)
 {
 {
 	unsigned long ctrl;
 	unsigned long ctrl;
 
 
-	if (cpu_has_feature(CPU_FTR_CTRL) && test_thread_flag(TIF_RUNLATCH)) {
-		HMT_medium();
+	HMT_medium();
 
 
-		clear_thread_flag(TIF_RUNLATCH);
+	clear_thread_flag(TIF_RUNLATCH);
 
 
-		ctrl = mfspr(SPRN_CTRLF);
-		ctrl &= ~CTRL_RUNLATCH;
-		mtspr(SPRN_CTRLT, ctrl);
-	}
+	ctrl = mfspr(SPRN_CTRLF);
+	ctrl &= ~CTRL_RUNLATCH;
+	mtspr(SPRN_CTRLT, ctrl);
 }
 }
 #endif
 #endif
 
 

+ 5 - 4
arch/powerpc/kernel/setup_32.c

@@ -258,17 +258,18 @@ static void __init irqstack_early_init(void)
 #if defined(CONFIG_BOOKE) || defined(CONFIG_40x)
 #if defined(CONFIG_BOOKE) || defined(CONFIG_40x)
 static void __init exc_lvl_early_init(void)
 static void __init exc_lvl_early_init(void)
 {
 {
-	unsigned int i;
+	unsigned int i, hw_cpu;
 
 
 	/* interrupt stacks must be in lowmem, we get that for free on ppc32
 	/* interrupt stacks must be in lowmem, we get that for free on ppc32
 	 * as the memblock is limited to lowmem by MEMBLOCK_REAL_LIMIT */
 	 * as the memblock is limited to lowmem by MEMBLOCK_REAL_LIMIT */
 	for_each_possible_cpu(i) {
 	for_each_possible_cpu(i) {
-		critirq_ctx[i] = (struct thread_info *)
+		hw_cpu = get_hard_smp_processor_id(i);
+		critirq_ctx[hw_cpu] = (struct thread_info *)
 			__va(memblock_alloc(THREAD_SIZE, THREAD_SIZE));
 			__va(memblock_alloc(THREAD_SIZE, THREAD_SIZE));
 #ifdef CONFIG_BOOKE
 #ifdef CONFIG_BOOKE
-		dbgirq_ctx[i] = (struct thread_info *)
+		dbgirq_ctx[hw_cpu] = (struct thread_info *)
 			__va(memblock_alloc(THREAD_SIZE, THREAD_SIZE));
 			__va(memblock_alloc(THREAD_SIZE, THREAD_SIZE));
-		mcheckirq_ctx[i] = (struct thread_info *)
+		mcheckirq_ctx[hw_cpu] = (struct thread_info *)
 			__va(memblock_alloc(THREAD_SIZE, THREAD_SIZE));
 			__va(memblock_alloc(THREAD_SIZE, THREAD_SIZE));
 #endif
 #endif
 	}
 	}

+ 36 - 27
arch/powerpc/kernel/setup_64.c

@@ -95,7 +95,7 @@ int ucache_bsize;
 
 
 #ifdef CONFIG_SMP
 #ifdef CONFIG_SMP
 
 
-static int smt_enabled_cmdline;
+static char *smt_enabled_cmdline;
 
 
 /* Look for ibm,smt-enabled OF option */
 /* Look for ibm,smt-enabled OF option */
 static void check_smt_enabled(void)
 static void check_smt_enabled(void)
@@ -103,37 +103,46 @@ static void check_smt_enabled(void)
 	struct device_node *dn;
 	struct device_node *dn;
 	const char *smt_option;
 	const char *smt_option;
 
 
-	/* Allow the command line to overrule the OF option */
-	if (smt_enabled_cmdline)
-		return;
-
-	dn = of_find_node_by_path("/options");
-
-	if (dn) {
-		smt_option = of_get_property(dn, "ibm,smt-enabled", NULL);
+	/* Default to enabling all threads */
+	smt_enabled_at_boot = threads_per_core;
 
 
-                if (smt_option) {
-			if (!strcmp(smt_option, "on"))
-				smt_enabled_at_boot = 1;
-			else if (!strcmp(smt_option, "off"))
-				smt_enabled_at_boot = 0;
-                }
-        }
+	/* Allow the command line to overrule the OF option */
+	if (smt_enabled_cmdline) {
+		if (!strcmp(smt_enabled_cmdline, "on"))
+			smt_enabled_at_boot = threads_per_core;
+		else if (!strcmp(smt_enabled_cmdline, "off"))
+			smt_enabled_at_boot = 0;
+		else {
+			long smt;
+			int rc;
+
+			rc = strict_strtol(smt_enabled_cmdline, 10, &smt);
+			if (!rc)
+				smt_enabled_at_boot =
+					min(threads_per_core, (int)smt);
+		}
+	} else {
+		dn = of_find_node_by_path("/options");
+		if (dn) {
+			smt_option = of_get_property(dn, "ibm,smt-enabled",
+						     NULL);
+
+			if (smt_option) {
+				if (!strcmp(smt_option, "on"))
+					smt_enabled_at_boot = threads_per_core;
+				else if (!strcmp(smt_option, "off"))
+					smt_enabled_at_boot = 0;
+			}
+
+			of_node_put(dn);
+		}
+	}
 }
 }
 
 
 /* Look for smt-enabled= cmdline option */
 /* Look for smt-enabled= cmdline option */
 static int __init early_smt_enabled(char *p)
 static int __init early_smt_enabled(char *p)
 {
 {
-	smt_enabled_cmdline = 1;
-
-	if (!p)
-		return 0;
-
-	if (!strcmp(p, "on") || !strcmp(p, "1"))
-		smt_enabled_at_boot = 1;
-	else if (!strcmp(p, "off") || !strcmp(p, "0"))
-		smt_enabled_at_boot = 0;
-
+	smt_enabled_cmdline = p;
 	return 0;
 	return 0;
 }
 }
 early_param("smt-enabled", early_smt_enabled);
 early_param("smt-enabled", early_smt_enabled);
@@ -380,8 +389,8 @@ void __init setup_system(void)
 	 */
 	 */
 	xmon_setup();
 	xmon_setup();
 
 
-	check_smt_enabled();
 	smp_setup_cpu_maps();
 	smp_setup_cpu_maps();
+	check_smt_enabled();
 
 
 #ifdef CONFIG_SMP
 #ifdef CONFIG_SMP
 	/* Release secondary cpus out of their spinloops at 0x60 now that
 	/* Release secondary cpus out of their spinloops at 0x60 now that

+ 2 - 2
arch/powerpc/kernel/smp.c

@@ -427,11 +427,11 @@ int __cpuinit __cpu_up(unsigned int cpu)
 #endif
 #endif
 
 
 	if (!cpu_callin_map[cpu]) {
 	if (!cpu_callin_map[cpu]) {
-		printk("Processor %u is stuck.\n", cpu);
+		printk(KERN_ERR "Processor %u is stuck.\n", cpu);
 		return -ENOENT;
 		return -ENOENT;
 	}
 	}
 
 
-	printk("Processor %u found.\n", cpu);
+	DBG("Processor %u found.\n", cpu);
 
 
 	if (smp_ops->give_timebase)
 	if (smp_ops->give_timebase)
 		smp_ops->give_timebase();
 		smp_ops->give_timebase();

+ 8 - 0
arch/powerpc/kernel/sys_ppc32.c

@@ -616,3 +616,11 @@ asmlinkage long compat_sys_sync_file_range2(int fd, unsigned int flags,
 
 
 	return sys_sync_file_range(fd, offset, nbytes, flags);
 	return sys_sync_file_range(fd, offset, nbytes, flags);
 }
 }
+
+asmlinkage long compat_sys_fanotify_mark(int fanotify_fd, unsigned int flags,
+					 unsigned mask_hi, unsigned mask_lo,
+					 int dfd, const char __user *pathname)
+{
+	u64 mask = ((u64)mask_hi << 32) | mask_lo;
+	return sys_fanotify_mark(fanotify_fd, flags, mask, dfd, pathname);
+}

+ 2 - 1
arch/powerpc/kernel/vio.c

@@ -1059,7 +1059,7 @@ static struct iommu_table *vio_build_iommu_table(struct vio_dev *dev)
 	if (!dma_window)
 	if (!dma_window)
 		return NULL;
 		return NULL;
 
 
-	tbl = kmalloc(sizeof(*tbl), GFP_KERNEL);
+	tbl = kzalloc(sizeof(*tbl), GFP_KERNEL);
 	if (tbl == NULL)
 	if (tbl == NULL)
 		return NULL;
 		return NULL;
 
 
@@ -1072,6 +1072,7 @@ static struct iommu_table *vio_build_iommu_table(struct vio_dev *dev)
 	tbl->it_offset = offset >> IOMMU_PAGE_SHIFT;
 	tbl->it_offset = offset >> IOMMU_PAGE_SHIFT;
 	tbl->it_busno = 0;
 	tbl->it_busno = 0;
 	tbl->it_type = TCE_VB;
 	tbl->it_type = TCE_VB;
+	tbl->it_blocksize = 16;
 
 
 	return iommu_init_table(tbl, -1);
 	return iommu_init_table(tbl, -1);
 }
 }

+ 2 - 0
arch/powerpc/mm/init_64.c

@@ -79,7 +79,9 @@
 #endif /* CONFIG_PPC_STD_MMU_64 */
 #endif /* CONFIG_PPC_STD_MMU_64 */
 
 
 phys_addr_t memstart_addr = ~0;
 phys_addr_t memstart_addr = ~0;
+EXPORT_SYMBOL_GPL(memstart_addr);
 phys_addr_t kernstart_addr;
 phys_addr_t kernstart_addr;
+EXPORT_SYMBOL_GPL(kernstart_addr);
 
 
 void free_initmem(void)
 void free_initmem(void)
 {
 {

+ 1 - 0
arch/powerpc/mm/tlb_nohash_low.S

@@ -200,6 +200,7 @@ _GLOBAL(_tlbivax_bcast)
 	rlwimi	r5,r4,0,16,31
 	rlwimi	r5,r4,0,16,31
 	wrteei	0
 	wrteei	0
 	mtspr	SPRN_MMUCR,r5
 	mtspr	SPRN_MMUCR,r5
+	isync
 /*	tlbivax	0,r3 - use .long to avoid binutils deps */
 /*	tlbivax	0,r3 - use .long to avoid binutils deps */
 	.long 0x7c000624 | (r3 << 11)
 	.long 0x7c000624 | (r3 << 11)
 	isync
 	isync

+ 1 - 2
arch/powerpc/platforms/Kconfig

@@ -106,8 +106,7 @@ config MMIO_NVRAM
 
 
 config MPIC_U3_HT_IRQS
 config MPIC_U3_HT_IRQS
 	bool
 	bool
-	depends on PPC_MAPLE
-	default y
+	default n
 
 
 config MPIC_BROKEN_REGREAD
 config MPIC_BROKEN_REGREAD
 	bool
 	bool

+ 1 - 1
arch/powerpc/platforms/cell/iommu.c

@@ -477,7 +477,7 @@ cell_iommu_setup_window(struct cbe_iommu *iommu, struct device_node *np,
 
 
 	ioid = cell_iommu_get_ioid(np);
 	ioid = cell_iommu_get_ioid(np);
 
 
-	window = kmalloc_node(sizeof(*window), GFP_KERNEL, iommu->nid);
+	window = kzalloc_node(sizeof(*window), GFP_KERNEL, iommu->nid);
 	BUG_ON(window == NULL);
 	BUG_ON(window == NULL);
 
 
 	window->offset = offset;
 	window->offset = offset;

+ 1 - 1
arch/powerpc/platforms/iseries/iommu.c

@@ -184,7 +184,7 @@ static void pci_dma_dev_setup_iseries(struct pci_dev *pdev)
 
 
 	BUG_ON(lsn == NULL);
 	BUG_ON(lsn == NULL);
 
 
-	tbl = kmalloc(sizeof(struct iommu_table), GFP_KERNEL);
+	tbl = kzalloc(sizeof(struct iommu_table), GFP_KERNEL);
 
 
 	iommu_table_getparms_iSeries(pdn->busno, *lsn, 0, tbl);
 	iommu_table_getparms_iSeries(pdn->busno, *lsn, 0, tbl);
 
 

+ 1 - 2
arch/powerpc/platforms/powermac/feature.c

@@ -2873,12 +2873,11 @@ set_initial_features(void)
 
 
 		/* Switch airport off */
 		/* Switch airport off */
 		for_each_node_by_name(np, "radio") {
 		for_each_node_by_name(np, "radio") {
-			if (np && np->parent == macio_chips[0].of_node) {
+			if (np->parent == macio_chips[0].of_node) {
 				macio_chips[0].flags |= MACIO_FLAG_AIRPORT_ON;
 				macio_chips[0].flags |= MACIO_FLAG_AIRPORT_ON;
 				core99_airport_enable(np, 0, 0);
 				core99_airport_enable(np, 0, 0);
 			}
 			}
 		}
 		}
-		of_node_put(np);
 	}
 	}
 
 
 	/* On all machines that support sound PM, switch sound off */
 	/* On all machines that support sound PM, switch sound off */

+ 0 - 2
arch/powerpc/platforms/powermac/pci.c

@@ -1155,13 +1155,11 @@ void __init pmac_pcibios_after_init(void)
 			pmac_call_feature(PMAC_FTR_1394_CABLE_POWER, nd, 0, 0);
 			pmac_call_feature(PMAC_FTR_1394_CABLE_POWER, nd, 0, 0);
 		}
 		}
 	}
 	}
-	of_node_put(nd);
 	for_each_node_by_name(nd, "ethernet") {
 	for_each_node_by_name(nd, "ethernet") {
 		if (nd->parent && of_device_is_compatible(nd, "gmac")
 		if (nd->parent && of_device_is_compatible(nd, "gmac")
 		    && of_device_is_compatible(nd->parent, "uni-north"))
 		    && of_device_is_compatible(nd->parent, "uni-north"))
 			pmac_call_feature(PMAC_FTR_GMAC_ENABLE, nd, 0, 0);
 			pmac_call_feature(PMAC_FTR_GMAC_ENABLE, nd, 0, 0);
 	}
 	}
-	of_node_put(nd);
 }
 }
 
 
 void pmac_pci_fixup_cardbus(struct pci_dev* dev)
 void pmac_pci_fixup_cardbus(struct pci_dev* dev)

+ 4 - 4
arch/powerpc/platforms/pseries/iommu.c

@@ -403,7 +403,7 @@ static void pci_dma_bus_setup_pSeries(struct pci_bus *bus)
 	pci->phb->dma_window_size = 0x8000000ul;
 	pci->phb->dma_window_size = 0x8000000ul;
 	pci->phb->dma_window_base_cur = 0x8000000ul;
 	pci->phb->dma_window_base_cur = 0x8000000ul;
 
 
-	tbl = kmalloc_node(sizeof(struct iommu_table), GFP_KERNEL,
+	tbl = kzalloc_node(sizeof(struct iommu_table), GFP_KERNEL,
 			   pci->phb->node);
 			   pci->phb->node);
 
 
 	iommu_table_setparms(pci->phb, dn, tbl);
 	iommu_table_setparms(pci->phb, dn, tbl);
@@ -448,7 +448,7 @@ static void pci_dma_bus_setup_pSeriesLP(struct pci_bus *bus)
 		 pdn->full_name, ppci->iommu_table);
 		 pdn->full_name, ppci->iommu_table);
 
 
 	if (!ppci->iommu_table) {
 	if (!ppci->iommu_table) {
-		tbl = kmalloc_node(sizeof(struct iommu_table), GFP_KERNEL,
+		tbl = kzalloc_node(sizeof(struct iommu_table), GFP_KERNEL,
 				   ppci->phb->node);
 				   ppci->phb->node);
 		iommu_table_setparms_lpar(ppci->phb, pdn, tbl, dma_window,
 		iommu_table_setparms_lpar(ppci->phb, pdn, tbl, dma_window,
 			bus->number);
 			bus->number);
@@ -478,7 +478,7 @@ static void pci_dma_dev_setup_pSeries(struct pci_dev *dev)
 		struct pci_controller *phb = PCI_DN(dn)->phb;
 		struct pci_controller *phb = PCI_DN(dn)->phb;
 
 
 		pr_debug(" --> first child, no bridge. Allocating iommu table.\n");
 		pr_debug(" --> first child, no bridge. Allocating iommu table.\n");
-		tbl = kmalloc_node(sizeof(struct iommu_table), GFP_KERNEL,
+		tbl = kzalloc_node(sizeof(struct iommu_table), GFP_KERNEL,
 				   phb->node);
 				   phb->node);
 		iommu_table_setparms(phb, dn, tbl);
 		iommu_table_setparms(phb, dn, tbl);
 		PCI_DN(dn)->iommu_table = iommu_init_table(tbl, phb->node);
 		PCI_DN(dn)->iommu_table = iommu_init_table(tbl, phb->node);
@@ -544,7 +544,7 @@ static void pci_dma_dev_setup_pSeriesLP(struct pci_dev *dev)
 
 
 	pci = PCI_DN(pdn);
 	pci = PCI_DN(pdn);
 	if (!pci->iommu_table) {
 	if (!pci->iommu_table) {
-		tbl = kmalloc_node(sizeof(struct iommu_table), GFP_KERNEL,
+		tbl = kzalloc_node(sizeof(struct iommu_table), GFP_KERNEL,
 				   pci->phb->node);
 				   pci->phb->node);
 		iommu_table_setparms_lpar(pci->phb, pdn, tbl, dma_window,
 		iommu_table_setparms_lpar(pci->phb, pdn, tbl, dma_window,
 			pci->phb->bus->number);
 			pci->phb->bus->number);

+ 7 - 4
arch/powerpc/platforms/pseries/smp.c

@@ -182,10 +182,13 @@ static int smp_pSeries_cpu_bootable(unsigned int nr)
 	/* Special case - we inhibit secondary thread startup
 	/* Special case - we inhibit secondary thread startup
 	 * during boot if the user requests it.
 	 * during boot if the user requests it.
 	 */
 	 */
-	if (system_state < SYSTEM_RUNNING &&
-	    cpu_has_feature(CPU_FTR_SMT) &&
-	    !smt_enabled_at_boot && cpu_thread_in_core(nr) != 0)
-		return 0;
+	if (system_state < SYSTEM_RUNNING && cpu_has_feature(CPU_FTR_SMT)) {
+		if (!smt_enabled_at_boot && cpu_thread_in_core(nr) != 0)
+			return 0;
+		if (smt_enabled_at_boot
+		    && cpu_thread_in_core(nr) >= smt_enabled_at_boot)
+			return 0;
+	}
 
 
 	return 1;
 	return 1;
 }
 }

+ 4 - 2
arch/powerpc/platforms/pseries/xics.c

@@ -928,8 +928,10 @@ void xics_migrate_irqs_away(void)
 		if (xics_status[0] != hw_cpu)
 		if (xics_status[0] != hw_cpu)
 			goto unlock;
 			goto unlock;
 
 
-		printk(KERN_WARNING "IRQ %u affinity broken off cpu %u\n",
-		       virq, cpu);
+		/* This is expected during cpu offline. */
+		if (cpu_online(cpu))
+			printk(KERN_WARNING "IRQ %u affinity broken off cpu %u\n",
+			       virq, cpu);
 
 
 		/* Reset affinity to all cpus */
 		/* Reset affinity to all cpus */
 		cpumask_setall(irq_to_desc(virq)->affinity);
 		cpumask_setall(irq_to_desc(virq)->affinity);

+ 3 - 1
arch/s390/include/asm/hugetlb.h

@@ -97,6 +97,7 @@ static inline pte_t huge_ptep_get_and_clear(struct mm_struct *mm,
 {
 {
 	pte_t pte = huge_ptep_get(ptep);
 	pte_t pte = huge_ptep_get(ptep);
 
 
+	mm->context.flush_mm = 1;
 	pmd_clear((pmd_t *) ptep);
 	pmd_clear((pmd_t *) ptep);
 	return pte;
 	return pte;
 }
 }
@@ -167,7 +168,8 @@ static inline void huge_ptep_invalidate(struct mm_struct *mm,
 ({									\
 ({									\
 	pte_t __pte = huge_ptep_get(__ptep);				\
 	pte_t __pte = huge_ptep_get(__ptep);				\
 	if (pte_write(__pte)) {						\
 	if (pte_write(__pte)) {						\
-		if (atomic_read(&(__mm)->mm_users) > 1 ||		\
+		(__mm)->context.flush_mm = 1;				\
+		if (atomic_read(&(__mm)->context.attach_count) > 1 ||	\
 		    (__mm) != current->active_mm)			\
 		    (__mm) != current->active_mm)			\
 			huge_ptep_invalidate(__mm, __addr, __ptep);	\
 			huge_ptep_invalidate(__mm, __addr, __ptep);	\
 		set_huge_pte_at(__mm, __addr, __ptep,			\
 		set_huge_pte_at(__mm, __addr, __ptep,			\

+ 2 - 0
arch/s390/include/asm/mmu.h

@@ -2,6 +2,8 @@
 #define __MMU_H
 #define __MMU_H
 
 
 typedef struct {
 typedef struct {
+	atomic_t attach_count;
+	unsigned int flush_mm;
 	spinlock_t list_lock;
 	spinlock_t list_lock;
 	struct list_head crst_list;
 	struct list_head crst_list;
 	struct list_head pgtable_list;
 	struct list_head pgtable_list;

+ 9 - 0
arch/s390/include/asm/mmu_context.h

@@ -11,11 +11,14 @@
 
 
 #include <asm/pgalloc.h>
 #include <asm/pgalloc.h>
 #include <asm/uaccess.h>
 #include <asm/uaccess.h>
+#include <asm/tlbflush.h>
 #include <asm-generic/mm_hooks.h>
 #include <asm-generic/mm_hooks.h>
 
 
 static inline int init_new_context(struct task_struct *tsk,
 static inline int init_new_context(struct task_struct *tsk,
 				   struct mm_struct *mm)
 				   struct mm_struct *mm)
 {
 {
+	atomic_set(&mm->context.attach_count, 0);
+	mm->context.flush_mm = 0;
 	mm->context.asce_bits = _ASCE_TABLE_LENGTH | _ASCE_USER_BITS;
 	mm->context.asce_bits = _ASCE_TABLE_LENGTH | _ASCE_USER_BITS;
 #ifdef CONFIG_64BIT
 #ifdef CONFIG_64BIT
 	mm->context.asce_bits |= _ASCE_TYPE_REGION3;
 	mm->context.asce_bits |= _ASCE_TYPE_REGION3;
@@ -76,6 +79,12 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
 {
 {
 	cpumask_set_cpu(smp_processor_id(), mm_cpumask(next));
 	cpumask_set_cpu(smp_processor_id(), mm_cpumask(next));
 	update_mm(next, tsk);
 	update_mm(next, tsk);
+	atomic_dec(&prev->context.attach_count);
+	WARN_ON(atomic_read(&prev->context.attach_count) < 0);
+	atomic_inc(&next->context.attach_count);
+	/* Check for TLBs not flushed yet */
+	if (next->context.flush_mm)
+		__tlb_flush_mm(next);
 }
 }
 
 
 #define enter_lazy_tlb(mm,tsk)	do { } while (0)
 #define enter_lazy_tlb(mm,tsk)	do { } while (0)

+ 4 - 2
arch/s390/include/asm/pgtable.h

@@ -880,7 +880,8 @@ static inline void ptep_invalidate(struct mm_struct *mm,
 #define ptep_get_and_clear(__mm, __address, __ptep)			\
 #define ptep_get_and_clear(__mm, __address, __ptep)			\
 ({									\
 ({									\
 	pte_t __pte = *(__ptep);					\
 	pte_t __pte = *(__ptep);					\
-	if (atomic_read(&(__mm)->mm_users) > 1 ||			\
+	(__mm)->context.flush_mm = 1;					\
+	if (atomic_read(&(__mm)->context.attach_count) > 1 ||		\
 	    (__mm) != current->active_mm)				\
 	    (__mm) != current->active_mm)				\
 		ptep_invalidate(__mm, __address, __ptep);		\
 		ptep_invalidate(__mm, __address, __ptep);		\
 	else								\
 	else								\
@@ -923,7 +924,8 @@ static inline pte_t ptep_get_and_clear_full(struct mm_struct *mm,
 ({									\
 ({									\
 	pte_t __pte = *(__ptep);					\
 	pte_t __pte = *(__ptep);					\
 	if (pte_write(__pte)) {						\
 	if (pte_write(__pte)) {						\
-		if (atomic_read(&(__mm)->mm_users) > 1 ||		\
+		(__mm)->context.flush_mm = 1;				\
+		if (atomic_read(&(__mm)->context.attach_count) > 1 ||	\
 		    (__mm) != current->active_mm)			\
 		    (__mm) != current->active_mm)			\
 			ptep_invalidate(__mm, __addr, __ptep);		\
 			ptep_invalidate(__mm, __addr, __ptep);		\
 		set_pte_at(__mm, __addr, __ptep, pte_wrprotect(__pte));	\
 		set_pte_at(__mm, __addr, __ptep, pte_wrprotect(__pte));	\

+ 1 - 2
arch/s390/include/asm/tlb.h

@@ -50,8 +50,7 @@ static inline struct mmu_gather *tlb_gather_mmu(struct mm_struct *mm,
 	struct mmu_gather *tlb = &get_cpu_var(mmu_gathers);
 	struct mmu_gather *tlb = &get_cpu_var(mmu_gathers);
 
 
 	tlb->mm = mm;
 	tlb->mm = mm;
-	tlb->fullmm = full_mm_flush || (num_online_cpus() == 1) ||
-		(atomic_read(&mm->mm_users) <= 1 && mm == current->active_mm);
+	tlb->fullmm = full_mm_flush;
 	tlb->nr_ptes = 0;
 	tlb->nr_ptes = 0;
 	tlb->nr_pxds = TLB_NR_PTRS;
 	tlb->nr_pxds = TLB_NR_PTRS;
 	if (tlb->fullmm)
 	if (tlb->fullmm)

+ 5 - 1
arch/s390/include/asm/tlbflush.h

@@ -94,8 +94,12 @@ static inline void __tlb_flush_mm(struct mm_struct * mm)
 
 
 static inline void __tlb_flush_mm_cond(struct mm_struct * mm)
 static inline void __tlb_flush_mm_cond(struct mm_struct * mm)
 {
 {
-	if (atomic_read(&mm->mm_users) <= 1 && mm == current->active_mm)
+	spin_lock(&mm->page_table_lock);
+	if (mm->context.flush_mm) {
 		__tlb_flush_mm(mm);
 		__tlb_flush_mm(mm);
+		mm->context.flush_mm = 0;
+	}
+	spin_unlock(&mm->page_table_lock);
 }
 }
 
 
 /*
 /*

+ 2 - 2
arch/s390/kernel/entry.h

@@ -42,8 +42,8 @@ long sys_clone(unsigned long newsp, unsigned long clone_flags,
 	       int __user *parent_tidptr, int __user *child_tidptr);
 	       int __user *parent_tidptr, int __user *child_tidptr);
 long sys_vfork(void);
 long sys_vfork(void);
 void execve_tail(void);
 void execve_tail(void);
-long sys_execve(const char __user *name, char __user * __user *argv,
-		char __user * __user *envp);
+long sys_execve(const char __user *name, const char __user *const __user *argv,
+		const char __user *const __user *envp);
 long sys_sigsuspend(int history0, int history1, old_sigset_t mask);
 long sys_sigsuspend(int history0, int history1, old_sigset_t mask);
 long sys_sigaction(int sig, const struct old_sigaction __user *act,
 long sys_sigaction(int sig, const struct old_sigaction __user *act,
 		   struct old_sigaction __user *oact);
 		   struct old_sigaction __user *oact);

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

@@ -267,8 +267,9 @@ asmlinkage void execve_tail(void)
 /*
 /*
  * sys_execve() executes a new program.
  * sys_execve() executes a new program.
  */
  */
-SYSCALL_DEFINE3(execve, const char __user *, name, char __user * __user *, argv,
-		char __user * __user *, envp)
+SYSCALL_DEFINE3(execve, const char __user *, name,
+		const char __user *const __user *, argv,
+		const char __user *const __user *, envp)
 {
 {
 	struct pt_regs *regs = task_pt_regs(current);
 	struct pt_regs *regs = task_pt_regs(current);
 	char *filename;
 	char *filename;

+ 2 - 0
arch/s390/kernel/smp.c

@@ -583,6 +583,7 @@ int __cpuinit __cpu_up(unsigned int cpu)
 	sf->gprs[9] = (unsigned long) sf;
 	sf->gprs[9] = (unsigned long) sf;
 	cpu_lowcore->save_area[15] = (unsigned long) sf;
 	cpu_lowcore->save_area[15] = (unsigned long) sf;
 	__ctl_store(cpu_lowcore->cregs_save_area, 0, 15);
 	__ctl_store(cpu_lowcore->cregs_save_area, 0, 15);
+	atomic_inc(&init_mm.context.attach_count);
 	asm volatile(
 	asm volatile(
 		"	stam	0,15,0(%0)"
 		"	stam	0,15,0(%0)"
 		: : "a" (&cpu_lowcore->access_regs_save_area) : "memory");
 		: : "a" (&cpu_lowcore->access_regs_save_area) : "memory");
@@ -659,6 +660,7 @@ void __cpu_die(unsigned int cpu)
 	while (sigp_p(0, cpu, sigp_set_prefix) == sigp_busy)
 	while (sigp_p(0, cpu, sigp_set_prefix) == sigp_busy)
 		udelay(10);
 		udelay(10);
 	smp_free_lowcore(cpu);
 	smp_free_lowcore(cpu);
+	atomic_dec(&init_mm.context.attach_count);
 	pr_info("Processor %d stopped\n", cpu);
 	pr_info("Processor %d stopped\n", cpu);
 }
 }
 
 

+ 2 - 0
arch/s390/mm/init.c

@@ -74,6 +74,8 @@ void __init paging_init(void)
 	__ctl_load(S390_lowcore.kernel_asce, 13, 13);
 	__ctl_load(S390_lowcore.kernel_asce, 13, 13);
 	__raw_local_irq_ssm(ssm_mask);
 	__raw_local_irq_ssm(ssm_mask);
 
 
+	atomic_set(&init_mm.context.attach_count, 1);
+
 	sparse_memory_present_with_active_regions(MAX_NUMNODES);
 	sparse_memory_present_with_active_regions(MAX_NUMNODES);
 	sparse_init();
 	sparse_init();
 	memset(max_zone_pfns, 0, sizeof(max_zone_pfns));
 	memset(max_zone_pfns, 0, sizeof(max_zone_pfns));

+ 7 - 3
arch/score/kernel/sys_score.c

@@ -99,8 +99,10 @@ score_execve(struct pt_regs *regs)
 	if (IS_ERR(filename))
 	if (IS_ERR(filename))
 		return error;
 		return error;
 
 
-	error = do_execve(filename, (char __user *__user*)regs->regs[5],
-			  (char __user *__user *) regs->regs[6], regs);
+	error = do_execve(filename,
+			  (const char __user *const __user *)regs->regs[5],
+			  (const char __user *const __user *)regs->regs[6],
+			  regs);
 
 
 	putname(filename);
 	putname(filename);
 	return error;
 	return error;
@@ -110,7 +112,9 @@ score_execve(struct pt_regs *regs)
  * Do a system call from kernel instead of calling sys_execve so we
  * Do a system call from kernel instead of calling sys_execve so we
  * end up with proper pt_regs.
  * end up with proper pt_regs.
  */
  */
-int kernel_execve(const char *filename, char *const argv[], char *const envp[])
+int kernel_execve(const char *filename,
+		  const char *const argv[],
+		  const char *const envp[])
 {
 {
 	register unsigned long __r4 asm("r4") = (unsigned long) filename;
 	register unsigned long __r4 asm("r4") = (unsigned long) filename;
 	register unsigned long __r5 asm("r5") = (unsigned long) argv;
 	register unsigned long __r5 asm("r5") = (unsigned long) argv;

+ 4 - 3
arch/sh/kernel/process_32.c

@@ -296,9 +296,10 @@ asmlinkage int sys_vfork(unsigned long r4, unsigned long r5,
 /*
 /*
  * sys_execve() executes a new program.
  * sys_execve() executes a new program.
  */
  */
-asmlinkage int sys_execve(char __user *ufilename, char __user * __user *uargv,
-			  char __user * __user *uenvp, unsigned long r7,
-			  struct pt_regs __regs)
+asmlinkage int sys_execve(const char __user *ufilename,
+			  const char __user *const __user *uargv,
+			  const char __user *const __user *uenvp,
+			  unsigned long r7, struct pt_regs __regs)
 {
 {
 	struct pt_regs *regs = RELOC_HIDE(&__regs, 0);
 	struct pt_regs *regs = RELOC_HIDE(&__regs, 0);
 	int error;
 	int error;

+ 2 - 2
arch/sh/kernel/process_64.c

@@ -497,8 +497,8 @@ asmlinkage int sys_execve(const char *ufilename, char **uargv,
 		goto out;
 		goto out;
 
 
 	error = do_execve(filename,
 	error = do_execve(filename,
-			  (char __user * __user *)uargv,
-			  (char __user * __user *)uenvp,
+			  (const char __user *const __user *)uargv,
+			  (const char __user *const __user *)uenvp,
 			  pregs);
 			  pregs);
 	putname(filename);
 	putname(filename);
 out:
 out:

+ 3 - 1
arch/sh/kernel/sys_sh32.c

@@ -71,7 +71,9 @@ asmlinkage int sys_fadvise64_64_wrapper(int fd, u32 offset0, u32 offset1,
  * Do a system call from kernel instead of calling sys_execve so we
  * Do a system call from kernel instead of calling sys_execve so we
  * end up with proper pt_regs.
  * end up with proper pt_regs.
  */
  */
-int kernel_execve(const char *filename, char *const argv[], char *const envp[])
+int kernel_execve(const char *filename,
+		  const char *const argv[],
+		  const char *const envp[])
 {
 {
 	register long __sc0 __asm__ ("r3") = __NR_execve;
 	register long __sc0 __asm__ ("r3") = __NR_execve;
 	register long __sc4 __asm__ ("r4") = (long) filename;
 	register long __sc4 __asm__ ("r4") = (long) filename;

+ 3 - 1
arch/sh/kernel/sys_sh64.c

@@ -33,7 +33,9 @@
  * Do a system call from kernel instead of calling sys_execve so we
  * Do a system call from kernel instead of calling sys_execve so we
  * end up with proper pt_regs.
  * end up with proper pt_regs.
  */
  */
-int kernel_execve(const char *filename, char *const argv[], char *const envp[])
+int kernel_execve(const char *filename,
+		  const char *const argv[],
+		  const char *const envp[])
 {
 {
 	register unsigned long __sc0 __asm__ ("r9") = ((0x13 << 16) | __NR_execve);
 	register unsigned long __sc0 __asm__ ("r9") = ((0x13 << 16) | __NR_execve);
 	register unsigned long __sc2 __asm__ ("r2") = (unsigned long) filename;
 	register unsigned long __sc2 __asm__ ("r2") = (unsigned long) filename;

+ 5 - 5
arch/sparc/include/asm/atomic_64.h

@@ -20,14 +20,14 @@
 #define atomic64_set(v, i)	(((v)->counter) = i)
 #define atomic64_set(v, i)	(((v)->counter) = i)
 
 
 extern void atomic_add(int, atomic_t *);
 extern void atomic_add(int, atomic_t *);
-extern void atomic64_add(int, atomic64_t *);
+extern void atomic64_add(long, atomic64_t *);
 extern void atomic_sub(int, atomic_t *);
 extern void atomic_sub(int, atomic_t *);
-extern void atomic64_sub(int, atomic64_t *);
+extern void atomic64_sub(long, atomic64_t *);
 
 
 extern int atomic_add_ret(int, atomic_t *);
 extern int atomic_add_ret(int, atomic_t *);
-extern int atomic64_add_ret(int, atomic64_t *);
+extern long atomic64_add_ret(long, atomic64_t *);
 extern int atomic_sub_ret(int, atomic_t *);
 extern int atomic_sub_ret(int, atomic_t *);
-extern int atomic64_sub_ret(int, atomic64_t *);
+extern long atomic64_sub_ret(long, atomic64_t *);
 
 
 #define atomic_dec_return(v) atomic_sub_ret(1, v)
 #define atomic_dec_return(v) atomic_sub_ret(1, v)
 #define atomic64_dec_return(v) atomic64_sub_ret(1, v)
 #define atomic64_dec_return(v) atomic64_sub_ret(1, v)
@@ -91,7 +91,7 @@ static inline int atomic_add_unless(atomic_t *v, int a, int u)
 	((__typeof__((v)->counter))cmpxchg(&((v)->counter), (o), (n)))
 	((__typeof__((v)->counter))cmpxchg(&((v)->counter), (o), (n)))
 #define atomic64_xchg(v, new) (xchg(&((v)->counter), new))
 #define atomic64_xchg(v, new) (xchg(&((v)->counter), new))
 
 
-static inline int atomic64_add_unless(atomic64_t *v, long a, long u)
+static inline long atomic64_add_unless(atomic64_t *v, long a, long u)
 {
 {
 	long c, old;
 	long c, old;
 	c = atomic64_read(v);
 	c = atomic64_read(v);

+ 8 - 3
arch/sparc/include/asm/backoff.h

@@ -8,6 +8,9 @@
 #define BACKOFF_SETUP(reg)	\
 #define BACKOFF_SETUP(reg)	\
 	mov	1, reg
 	mov	1, reg
 
 
+#define BACKOFF_LABEL(spin_label, continue_label) \
+	spin_label
+
 #define BACKOFF_SPIN(reg, tmp, label)	\
 #define BACKOFF_SPIN(reg, tmp, label)	\
 	mov	reg, tmp; \
 	mov	reg, tmp; \
 88:	brnz,pt	tmp, 88b; \
 88:	brnz,pt	tmp, 88b; \
@@ -22,9 +25,11 @@
 #else
 #else
 
 
 #define BACKOFF_SETUP(reg)
 #define BACKOFF_SETUP(reg)
-#define BACKOFF_SPIN(reg, tmp, label) \
-	ba,pt	%xcc, label; \
-	 nop;
+
+#define BACKOFF_LABEL(spin_label, continue_label) \
+	continue_label
+
+#define BACKOFF_SPIN(reg, tmp, label)
 
 
 #endif
 #endif
 
 

+ 4 - 0
arch/sparc/include/asm/fb.h

@@ -1,5 +1,6 @@
 #ifndef _SPARC_FB_H_
 #ifndef _SPARC_FB_H_
 #define _SPARC_FB_H_
 #define _SPARC_FB_H_
+#include <linux/console.h>
 #include <linux/fb.h>
 #include <linux/fb.h>
 #include <linux/fs.h>
 #include <linux/fs.h>
 #include <asm/page.h>
 #include <asm/page.h>
@@ -18,6 +19,9 @@ static inline int fb_is_primary_device(struct fb_info *info)
 	struct device *dev = info->device;
 	struct device *dev = info->device;
 	struct device_node *node;
 	struct device_node *node;
 
 
+	if (console_set_on_cmdline)
+		return 0;
+
 	node = dev->of_node;
 	node = dev->of_node;
 	if (node &&
 	if (node &&
 	    node == of_console_device)
 	    node == of_console_device)

+ 3 - 24
arch/sparc/include/asm/oplib_64.h

@@ -185,9 +185,8 @@ extern int prom_getunumber(int syndrome_code,
 			   char *buf, int buflen);
 			   char *buf, int buflen);
 
 
 /* Retain physical memory to the caller across soft resets. */
 /* Retain physical memory to the caller across soft resets. */
-extern unsigned long prom_retain(const char *name,
-				 unsigned long pa_low, unsigned long pa_high,
-				 long size, long align);
+extern int prom_retain(const char *name, unsigned long size,
+		       unsigned long align, unsigned long *paddr);
 
 
 /* Load explicit I/D TLB entries into the calling processor. */
 /* Load explicit I/D TLB entries into the calling processor. */
 extern long prom_itlb_load(unsigned long index,
 extern long prom_itlb_load(unsigned long index,
@@ -287,26 +286,6 @@ extern void prom_sun4v_guest_soft_state(void);
 extern int prom_ihandle2path(int handle, char *buffer, int bufsize);
 extern int prom_ihandle2path(int handle, char *buffer, int bufsize);
 
 
 /* Client interface level routines. */
 /* Client interface level routines. */
-extern long p1275_cmd(const char *, long, ...);
-
-#if 0
-#define P1275_SIZE(x) ((((long)((x) / 32)) << 32) | (x))
-#else
-#define P1275_SIZE(x) x
-#endif
-
-/* We support at most 16 input and 1 output argument */
-#define P1275_ARG_NUMBER		0
-#define P1275_ARG_IN_STRING		1
-#define P1275_ARG_OUT_BUF		2
-#define P1275_ARG_OUT_32B		3
-#define P1275_ARG_IN_FUNCTION		4
-#define P1275_ARG_IN_BUF		5
-#define P1275_ARG_IN_64B		6
-
-#define P1275_IN(x) ((x) & 0xf)
-#define P1275_OUT(x) (((x) << 4) & 0xf0)
-#define P1275_INOUT(i,o) (P1275_IN(i)|P1275_OUT(o))
-#define P1275_ARG(n,x) ((x) << ((n)*3 + 8))
+extern void p1275_cmd_direct(unsigned long *);
 
 
 #endif /* !(__SPARC64_OPLIB_H) */
 #endif /* !(__SPARC64_OPLIB_H) */

部分文件因为文件数量过多而无法显示