Эх сурвалжийг харах

Merge branch 'irq/for-block' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip into for-4.9/msi-irq

Jens Axboe 9 жил өмнө
parent
commit
474b313de7
100 өөрчлөгдсөн 380 нэмэгдсэн , 221 устгасан
  1. 3 0
      .mailmap
  2. 1 1
      Documentation/ABI/stable/sysfs-devices
  3. 0 1
      Documentation/PCI/pci.txt
  4. 10 6
      Documentation/arm/CCN.txt
  5. 1 1
      Documentation/cpu-freq/cpufreq-stats.txt
  6. 7 0
      Documentation/devicetree/bindings/iio/adc/rockchip-saradc.txt
  7. 0 19
      Documentation/devicetree/bindings/serial/8250.txt
  8. 3 5
      Documentation/filesystems/overlayfs.txt
  9. 5 0
      Documentation/i2c/slave-interface
  10. 0 20
      Documentation/networking/dsa/dsa.txt
  11. 2 0
      Documentation/powerpc/transactional_memory.txt
  12. 4 0
      Documentation/rapidio/mport_cdev.txt
  13. 25 14
      MAINTAINERS
  14. 1 1
      Makefile
  15. 0 11
      arch/Kconfig
  16. 1 1
      arch/arm/boot/dts/am335x-baltos.dtsi
  17. 1 1
      arch/arm/boot/dts/am335x-igep0033.dtsi
  18. 1 1
      arch/arm/boot/dts/am335x-phycore-som.dtsi
  19. 4 4
      arch/arm/boot/dts/armada-388-clearfog.dts
  20. 0 3
      arch/arm/boot/dts/exynos5410-odroidxu.dts
  21. 1 1
      arch/arm/boot/dts/imx6qdl.dtsi
  22. 1 1
      arch/arm/boot/dts/imx6sx-sabreauto.dts
  23. 1 1
      arch/arm/boot/dts/imx7d-sdb.dts
  24. 1 1
      arch/arm/boot/dts/kirkwood-ib62x0.dts
  25. 4 0
      arch/arm/boot/dts/kirkwood-openrd.dtsi
  26. 6 5
      arch/arm/boot/dts/logicpd-som-lv.dtsi
  27. 1 0
      arch/arm/boot/dts/logicpd-torpedo-som.dtsi
  28. 3 1
      arch/arm/boot/dts/omap3-overo-base.dtsi
  29. 0 2
      arch/arm/boot/dts/omap3-overo-chestnut43-common.dtsi
  30. 0 2
      arch/arm/boot/dts/omap3-overo-tobi-common.dtsi
  31. 0 3
      arch/arm/boot/dts/omap3-overo-tobiduo-common.dtsi
  32. 2 0
      arch/arm/boot/dts/rk3066a.dtsi
  33. 2 0
      arch/arm/boot/dts/rk3288.dtsi
  34. 2 0
      arch/arm/boot/dts/rk3xxx.dtsi
  35. 1 1
      arch/arm/boot/dts/sun5i-a13.dtsi
  36. 1 1
      arch/arm/boot/dts/tegra114-dalmore.dts
  37. 1 1
      arch/arm/boot/dts/tegra114-roth.dts
  38. 1 1
      arch/arm/boot/dts/tegra114-tn7.dts
  39. 2 2
      arch/arm/boot/dts/tegra124-jetson-tk1.dts
  40. 13 0
      arch/arm/kernel/hyp-stub.S
  41. 1 0
      arch/arm/mach-imx/mach-imx6ul.c
  42. 2 2
      arch/arm/mach-imx/pm-imx6.c
  43. 0 6
      arch/arm/mach-omap2/cm33xx.c
  44. 0 6
      arch/arm/mach-omap2/cminst44xx.c
  45. 8 0
      arch/arm/mach-omap2/omap_hwmod.c
  46. 4 0
      arch/arm/mach-omap2/omap_hwmod.h
  47. 2 0
      arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c
  48. 12 0
      arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
  49. 2 1
      arch/arm/mach-pxa/idp.c
  50. 2 1
      arch/arm/mach-pxa/xcep.c
  51. 2 1
      arch/arm/mach-realview/core.c
  52. 3 2
      arch/arm/mach-sa1100/clock.c
  53. 4 0
      arch/arm/mach-sa1100/generic.c
  54. 2 0
      arch/arm/mach-sa1100/generic.h
  55. 1 1
      arch/arm/mach-sa1100/pleb.c
  56. 1 0
      arch/arm/mm/proc-v7.S
  57. 2 0
      arch/arm64/boot/dts/rockchip/rk3368.dtsi
  58. 4 4
      arch/arm64/include/asm/percpu.h
  59. 10 0
      arch/arm64/include/asm/spinlock.h
  60. 9 0
      arch/arm64/mm/proc.S
  61. 2 1
      arch/blackfin/mach-bf561/boards/cm_bf561.c
  62. 2 1
      arch/blackfin/mach-bf561/boards/ezkit.c
  63. 4 8
      arch/ia64/include/asm/uaccess.h
  64. 0 1
      arch/parisc/Kconfig
  65. 0 1
      arch/parisc/configs/c8000_defconfig
  66. 0 1
      arch/parisc/configs/generic-64bit_defconfig
  67. 12 10
      arch/parisc/include/asm/uaccess.h
  68. 1 0
      arch/powerpc/include/asm/cputhreads.h
  69. 1 1
      arch/powerpc/include/asm/hmi.h
  70. 7 5
      arch/powerpc/include/asm/paca.h
  71. 1 0
      arch/powerpc/include/asm/pci-bridge.h
  72. 7 12
      arch/powerpc/include/asm/uaccess.h
  73. 1 1
      arch/powerpc/kernel/Makefile
  74. 6 6
      arch/powerpc/kernel/entry_64.S
  75. 24 5
      arch/powerpc/kernel/exceptions-64s.S
  76. 1 1
      arch/powerpc/kernel/kprobes.c
  77. 36 0
      arch/powerpc/kernel/pci-common.c
  78. 6 3
      arch/powerpc/kernel/prom_init.c
  79. 14 0
      arch/powerpc/kernel/signal_32.c
  80. 14 0
      arch/powerpc/kernel/signal_64.c
  81. 1 1
      arch/powerpc/kernel/smp.c
  82. 2 1
      arch/powerpc/kernel/traps.c
  83. 1 0
      arch/powerpc/kvm/Makefile
  84. 0 0
      arch/powerpc/kvm/book3s_hv_hmi.c
  85. 4 3
      arch/powerpc/lib/checksum_32.S
  86. 1 1
      arch/powerpc/mm/fault.c
  87. 6 1
      arch/powerpc/mm/slb_low.S
  88. 0 1
      arch/powerpc/platforms/512x/mpc512x_lpbfifo.c
  89. 0 1
      arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c
  90. 1 1
      arch/powerpc/platforms/embedded6xx/holly.c
  91. 1 1
      arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c
  92. 6 1
      arch/powerpc/platforms/powernv/opal-dump.c
  93. 6 1
      arch/powerpc/platforms/powernv/opal-elog.c
  94. 12 8
      arch/powerpc/platforms/powernv/pci-ioda.c
  95. 4 0
      arch/powerpc/platforms/pseries/pci.c
  96. 5 2
      arch/powerpc/platforms/pseries/pci_dlpar.c
  97. 1 1
      arch/powerpc/platforms/pseries/setup.c
  98. 4 2
      arch/powerpc/sysdev/cpm1.c
  99. 2 1
      arch/powerpc/sysdev/cpm_common.c
  100. 1 1
      arch/powerpc/sysdev/fsl_rio.c

+ 3 - 0
.mailmap

@@ -88,6 +88,7 @@ Kay Sievers <kay.sievers@vrfy.org>
 Kenneth W Chen <kenneth.w.chen@intel.com>
 Kenneth W Chen <kenneth.w.chen@intel.com>
 Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com>
 Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com>
 Koushik <raghavendra.koushik@neterion.com>
 Koushik <raghavendra.koushik@neterion.com>
+Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski@samsung.com>
 Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski.k@gmail.com>
 Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski.k@gmail.com>
 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
 Leonid I Ananiev <leonid.i.ananiev@intel.com>
 Leonid I Ananiev <leonid.i.ananiev@intel.com>
@@ -158,6 +159,8 @@ Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
 Viresh Kumar <vireshk@kernel.org> <viresh.kumar@st.com>
 Viresh Kumar <vireshk@kernel.org> <viresh.kumar@st.com>
 Viresh Kumar <vireshk@kernel.org> <viresh.linux@gmail.com>
 Viresh Kumar <vireshk@kernel.org> <viresh.linux@gmail.com>
 Viresh Kumar <vireshk@kernel.org> <viresh.kumar2@arm.com>
 Viresh Kumar <vireshk@kernel.org> <viresh.kumar2@arm.com>
+Vladimir Davydov <vdavydov.dev@gmail.com> <vdavydov@virtuozzo.com>
+Vladimir Davydov <vdavydov.dev@gmail.com> <vdavydov@parallels.com>
 Takashi YOSHII <takashi.yoshii.zj@renesas.com>
 Takashi YOSHII <takashi.yoshii.zj@renesas.com>
 Yusuke Goda <goda.yusuke@renesas.com>
 Yusuke Goda <goda.yusuke@renesas.com>
 Gustavo Padovan <gustavo@las.ic.unicamp.br>
 Gustavo Padovan <gustavo@las.ic.unicamp.br>

+ 1 - 1
Documentation/ABI/stable/sysfs-devices

@@ -1,7 +1,7 @@
 # Note: This documents additional properties of any device beyond what
 # Note: This documents additional properties of any device beyond what
 # is documented in Documentation/sysfs-rules.txt
 # is documented in Documentation/sysfs-rules.txt
 
 
-What:		/sys/devices/*/of_path
+What:		/sys/devices/*/of_node
 Date:		February 2015
 Date:		February 2015
 Contact:	Device Tree mailing list <devicetree@vger.kernel.org>
 Contact:	Device Tree mailing list <devicetree@vger.kernel.org>
 Description:
 Description:

+ 0 - 1
Documentation/PCI/pci.txt

@@ -124,7 +124,6 @@ initialization with a pointer to a structure describing the driver
 
 
 The ID table is an array of struct pci_device_id entries ending with an
 The ID table is an array of struct pci_device_id entries ending with an
 all-zero entry.  Definitions with static const are generally preferred.
 all-zero entry.  Definitions with static const are generally preferred.
-Use of the deprecated macro DEFINE_PCI_DEVICE_TABLE should be avoided.
 
 
 Each entry consists of:
 Each entry consists of:
 
 

+ 10 - 6
Documentation/arm/CCN.txt

@@ -18,13 +18,17 @@ and config2 fields of the perf_event_attr structure. The "events"
 directory provides configuration templates for all documented
 directory provides configuration templates for all documented
 events, that can be used with perf tool. For example "xp_valid_flit"
 events, that can be used with perf tool. For example "xp_valid_flit"
 is an equivalent of "type=0x8,event=0x4". Other parameters must be
 is an equivalent of "type=0x8,event=0x4". Other parameters must be
-explicitly specified. For events originating from device, "node"
-defines its index. All crosspoint events require "xp" (index),
-"port" (device port number) and "vc" (virtual channel ID) and
-"dir" (direction). Watchpoints (special "event" value 0xfe) also
-require comparator values ("cmp_l" and "cmp_h") and "mask", being
-index of the comparator mask.
+explicitly specified.
 
 
+For events originating from device, "node" defines its index.
+
+Crosspoint PMU events require "xp" (index), "bus" (bus number)
+and "vc" (virtual channel ID).
+
+Crosspoint watchpoint-based events (special "event" value 0xfe)
+require "xp" and "vc" as as above plus "port" (device port index),
+"dir" (transmit/receive direction), comparator values ("cmp_l"
+and "cmp_h") and "mask", being index of the comparator mask.
 Masks are defined separately from the event description
 Masks are defined separately from the event description
 (due to limited number of the config values) in the "cmp_mask"
 (due to limited number of the config values) in the "cmp_mask"
 directory, with first 8 configurable by user and additional
 directory, with first 8 configurable by user and additional

+ 1 - 1
Documentation/cpu-freq/cpufreq-stats.txt

@@ -103,7 +103,7 @@ Config Main Menu
 	Power management options (ACPI, APM)  --->
 	Power management options (ACPI, APM)  --->
 		CPU Frequency scaling  --->
 		CPU Frequency scaling  --->
 			[*] CPU Frequency scaling
 			[*] CPU Frequency scaling
-			<*>   CPU frequency translation statistics 
+			[*]   CPU frequency translation statistics
 			[*]     CPU frequency translation statistics details
 			[*]     CPU frequency translation statistics details
 
 
 
 

+ 7 - 0
Documentation/devicetree/bindings/iio/adc/rockchip-saradc.txt

@@ -16,6 +16,11 @@ Required properties:
 - vref-supply: The regulator supply ADC reference voltage.
 - vref-supply: The regulator supply ADC reference voltage.
 - #io-channel-cells: Should be 1, see ../iio-bindings.txt
 - #io-channel-cells: Should be 1, see ../iio-bindings.txt
 
 
+Optional properties:
+- resets: Must contain an entry for each entry in reset-names if need support
+	  this option. See ../reset/reset.txt for details.
+- reset-names: Must include the name "saradc-apb".
+
 Example:
 Example:
 	saradc: saradc@2006c000 {
 	saradc: saradc@2006c000 {
 		compatible = "rockchip,saradc";
 		compatible = "rockchip,saradc";
@@ -23,6 +28,8 @@ Example:
 		interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
 		interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>;
 		clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>;
 		clock-names = "saradc", "apb_pclk";
 		clock-names = "saradc", "apb_pclk";
+		resets = <&cru SRST_SARADC>;
+		reset-names = "saradc-apb";
 		#io-channel-cells = <1>;
 		#io-channel-cells = <1>;
 		vref-supply = <&vcc18>;
 		vref-supply = <&vcc18>;
 	};
 	};

+ 0 - 19
Documentation/devicetree/bindings/serial/8250.txt

@@ -42,9 +42,6 @@ Optional properties:
 - auto-flow-control: one way to enable automatic flow control support. The
 - auto-flow-control: one way to enable automatic flow control support. The
   driver is allowed to detect support for the capability even without this
   driver is allowed to detect support for the capability even without this
   property.
   property.
-- {rts,cts,dtr,dsr,rng,dcd}-gpios: specify a GPIO for RTS/CTS/DTR/DSR/RI/DCD
-  line respectively. It will use specified GPIO instead of the peripheral
-  function pin for the UART feature. If unsure, don't specify this property.
 
 
 Note:
 Note:
 * fsl,ns16550:
 * fsl,ns16550:
@@ -66,19 +63,3 @@ Example:
 		interrupts = <10>;
 		interrupts = <10>;
 		reg-shift = <2>;
 		reg-shift = <2>;
 	};
 	};
-
-Example for OMAP UART using GPIO-based modem control signals:
-
-	uart4: serial@49042000 {
-		compatible = "ti,omap3-uart";
-		reg = <0x49042000 0x400>;
-		interrupts = <80>;
-		ti,hwmods = "uart4";
-		clock-frequency = <48000000>;
-		cts-gpios = <&gpio3 5 GPIO_ACTIVE_LOW>;
-		rts-gpios = <&gpio3 6 GPIO_ACTIVE_LOW>;
-		dtr-gpios = <&gpio1 12 GPIO_ACTIVE_LOW>;
-		dsr-gpios = <&gpio1 13 GPIO_ACTIVE_LOW>;
-		dcd-gpios = <&gpio1 14 GPIO_ACTIVE_LOW>;
-		rng-gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
-	};

+ 3 - 5
Documentation/filesystems/overlayfs.txt

@@ -183,12 +183,10 @@ The copy_up operation essentially creates a new, identical file and
 moves it over to the old name.  The new file may be on a different
 moves it over to the old name.  The new file may be on a different
 filesystem, so both st_dev and st_ino of the file may change.
 filesystem, so both st_dev and st_ino of the file may change.
 
 
-Any open files referring to this inode will access the old data and
-metadata.  Similarly any file locks obtained before copy_up will not
-apply to the copied up file.
+Any open files referring to this inode will access the old data.
 
 
-On a file opened with O_RDONLY fchmod(2), fchown(2), futimesat(2) and
-fsetxattr(2) will fail with EROFS.
+Any file locks (and leases) obtained before copy_up will not apply
+to the copied up file.
 
 
 If a file with multiple hard links is copied up, then this will
 If a file with multiple hard links is copied up, then this will
 "break" the link.  Changes will not be propagated to other names
 "break" the link.  Changes will not be propagated to other names

+ 5 - 0
Documentation/i2c/slave-interface

@@ -145,6 +145,11 @@ If you want to add slave support to the bus driver:
 
 
 * Catch the slave interrupts and send appropriate i2c_slave_events to the backend.
 * Catch the slave interrupts and send appropriate i2c_slave_events to the backend.
 
 
+Note that most hardware supports being master _and_ slave on the same bus. So,
+if you extend a bus driver, please make sure that the driver supports that as
+well. In almost all cases, slave support does not need to disable the master
+functionality.
+
 Check the i2c-rcar driver as an example.
 Check the i2c-rcar driver as an example.
 
 
 
 

+ 0 - 20
Documentation/networking/dsa/dsa.txt

@@ -587,26 +587,6 @@ of DSA, would be the its port-based VLAN, used by the associated bridge device.
 TODO
 TODO
 ====
 ====
 
 
-The platform device problem
----------------------------
-DSA is currently implemented as a platform device driver which is far from ideal
-as was discussed in this thread:
-
-http://permalink.gmane.org/gmane.linux.network/329848
-
-This basically prevents the device driver model to be properly used and applied,
-and support non-MDIO, non-MMIO Ethernet connected switches.
-
-Another problem with the platform device driver approach is that it prevents the
-use of a modular switch drivers build due to a circular dependency, illustrated
-here:
-
-http://comments.gmane.org/gmane.linux.network/345803
-
-Attempts of reworking this has been done here:
-
-https://lwn.net/Articles/643149/
-
 Making SWITCHDEV and DSA converge towards an unified codebase
 Making SWITCHDEV and DSA converge towards an unified codebase
 -------------------------------------------------------------
 -------------------------------------------------------------
 
 

+ 2 - 0
Documentation/powerpc/transactional_memory.txt

@@ -167,6 +167,8 @@ signal will be rolled back anyway.
 For signals taken in non-TM or suspended mode, we use the
 For signals taken in non-TM or suspended mode, we use the
 normal/non-checkpointed stack pointer.
 normal/non-checkpointed stack pointer.
 
 
+Any transaction initiated inside a sighandler and suspended on return
+from the sighandler to the kernel will get reclaimed and discarded.
 
 
 Failure cause codes used by kernel
 Failure cause codes used by kernel
 ==================================
 ==================================

+ 4 - 0
Documentation/rapidio/mport_cdev.txt

@@ -80,6 +80,10 @@ functionality of their platform when planning to use this driver:
 
 
 III. Module parameters
 III. Module parameters
 
 
+- 'dma_timeout' - DMA transfer completion timeout (in msec, default value 3000).
+        This parameter set a maximum completion wait time for SYNC mode DMA
+        transfer requests and for RIO_WAIT_FOR_ASYNC ioctl requests.
+
 - 'dbg_level' - This parameter allows to control amount of debug information
 - 'dbg_level' - This parameter allows to control amount of debug information
         generated by this device driver. This parameter is formed by set of
         generated by this device driver. This parameter is formed by set of
         bit masks that correspond to the specific functional blocks.
         bit masks that correspond to the specific functional blocks.

+ 25 - 14
MAINTAINERS

@@ -798,6 +798,7 @@ M:	Laura Abbott <labbott@redhat.com>
 M:	Sumit Semwal <sumit.semwal@linaro.org>
 M:	Sumit Semwal <sumit.semwal@linaro.org>
 L:	devel@driverdev.osuosl.org
 L:	devel@driverdev.osuosl.org
 S:	Supported
 S:	Supported
+F:	Documentation/devicetree/bindings/staging/ion/
 F:	drivers/staging/android/ion
 F:	drivers/staging/android/ion
 F:	drivers/staging/android/uapi/ion.h
 F:	drivers/staging/android/uapi/ion.h
 F:	drivers/staging/android/uapi/ion_test.h
 F:	drivers/staging/android/uapi/ion_test.h
@@ -1623,7 +1624,7 @@ N:	rockchip
 
 
 ARM/SAMSUNG EXYNOS ARM ARCHITECTURES
 ARM/SAMSUNG EXYNOS ARM ARCHITECTURES
 M:	Kukjin Kim <kgene@kernel.org>
 M:	Kukjin Kim <kgene@kernel.org>
-M:	Krzysztof Kozlowski <k.kozlowski@samsung.com>
+M:	Krzysztof Kozlowski <krzk@kernel.org>
 L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 L:	linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
 L:	linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
 S:	Maintained
 S:	Maintained
@@ -1643,7 +1644,6 @@ F:	drivers/*/*s3c64xx*
 F:	drivers/*/*s5pv210*
 F:	drivers/*/*s5pv210*
 F:	drivers/memory/samsung/*
 F:	drivers/memory/samsung/*
 F:	drivers/soc/samsung/*
 F:	drivers/soc/samsung/*
-F:	drivers/spi/spi-s3c*
 F:	Documentation/arm/Samsung/
 F:	Documentation/arm/Samsung/
 F:	Documentation/devicetree/bindings/arm/samsung/
 F:	Documentation/devicetree/bindings/arm/samsung/
 F:	Documentation/devicetree/bindings/sram/samsung-sram.txt
 F:	Documentation/devicetree/bindings/sram/samsung-sram.txt
@@ -1831,6 +1831,7 @@ T:	git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
 ARM/UNIPHIER ARCHITECTURE
 ARM/UNIPHIER ARCHITECTURE
 M:	Masahiro Yamada <yamada.masahiro@socionext.com>
 M:	Masahiro Yamada <yamada.masahiro@socionext.com>
 L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
+T:	git git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-uniphier.git
 S:	Maintained
 S:	Maintained
 F:	arch/arm/boot/dts/uniphier*
 F:	arch/arm/boot/dts/uniphier*
 F:	arch/arm/include/asm/hardware/cache-uniphier.h
 F:	arch/arm/include/asm/hardware/cache-uniphier.h
@@ -3247,7 +3248,7 @@ F:	kernel/cpuset.c
 CONTROL GROUP - MEMORY RESOURCE CONTROLLER (MEMCG)
 CONTROL GROUP - MEMORY RESOURCE CONTROLLER (MEMCG)
 M:	Johannes Weiner <hannes@cmpxchg.org>
 M:	Johannes Weiner <hannes@cmpxchg.org>
 M:	Michal Hocko <mhocko@kernel.org>
 M:	Michal Hocko <mhocko@kernel.org>
-M:	Vladimir Davydov <vdavydov@virtuozzo.com>
+M:	Vladimir Davydov <vdavydov.dev@gmail.com>
 L:	cgroups@vger.kernel.org
 L:	cgroups@vger.kernel.org
 L:	linux-mm@kvack.org
 L:	linux-mm@kvack.org
 S:	Maintained
 S:	Maintained
@@ -7464,7 +7465,8 @@ F:	Documentation/devicetree/bindings/sound/max9860.txt
 F:	sound/soc/codecs/max9860.*
 F:	sound/soc/codecs/max9860.*
 
 
 MAXIM MUIC CHARGER DRIVERS FOR EXYNOS BASED BOARDS
 MAXIM MUIC CHARGER DRIVERS FOR EXYNOS BASED BOARDS
-M:	Krzysztof Kozlowski <k.kozlowski@samsung.com>
+M:	Krzysztof Kozlowski <krzk@kernel.org>
+M:	Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
 L:	linux-pm@vger.kernel.org
 L:	linux-pm@vger.kernel.org
 S:	Supported
 S:	Supported
 F:	drivers/power/max14577_charger.c
 F:	drivers/power/max14577_charger.c
@@ -7480,7 +7482,8 @@ F:	include/dt-bindings/*/*max77802.h
 
 
 MAXIM PMIC AND MUIC DRIVERS FOR EXYNOS BASED BOARDS
 MAXIM PMIC AND MUIC DRIVERS FOR EXYNOS BASED BOARDS
 M:	Chanwoo Choi <cw00.choi@samsung.com>
 M:	Chanwoo Choi <cw00.choi@samsung.com>
-M:	Krzysztof Kozlowski <k.kozlowski@samsung.com>
+M:	Krzysztof Kozlowski <krzk@kernel.org>
+M:	Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
 L:	linux-kernel@vger.kernel.org
 L:	linux-kernel@vger.kernel.org
 S:	Supported
 S:	Supported
 F:	drivers/*/max14577*.c
 F:	drivers/*/max14577*.c
@@ -9246,7 +9249,7 @@ F:	drivers/pinctrl/sh-pfc/
 
 
 PIN CONTROLLER - SAMSUNG
 PIN CONTROLLER - SAMSUNG
 M:	Tomasz Figa <tomasz.figa@gmail.com>
 M:	Tomasz Figa <tomasz.figa@gmail.com>
-M:	Krzysztof Kozlowski <k.kozlowski@samsung.com>
+M:	Krzysztof Kozlowski <krzk@kernel.org>
 M:	Sylwester Nawrocki <s.nawrocki@samsung.com>
 M:	Sylwester Nawrocki <s.nawrocki@samsung.com>
 L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 L:	linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
 L:	linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
@@ -10179,7 +10182,7 @@ S:	Maintained
 F:	drivers/platform/x86/samsung-laptop.c
 F:	drivers/platform/x86/samsung-laptop.c
 
 
 SAMSUNG AUDIO (ASoC) DRIVERS
 SAMSUNG AUDIO (ASoC) DRIVERS
-M:	Krzysztof Kozlowski <k.kozlowski@samsung.com>
+M:	Krzysztof Kozlowski <krzk@kernel.org>
 M:	Sangbeom Kim <sbkim73@samsung.com>
 M:	Sangbeom Kim <sbkim73@samsung.com>
 M:	Sylwester Nawrocki <s.nawrocki@samsung.com>
 M:	Sylwester Nawrocki <s.nawrocki@samsung.com>
 L:	alsa-devel@alsa-project.org (moderated for non-subscribers)
 L:	alsa-devel@alsa-project.org (moderated for non-subscribers)
@@ -10194,7 +10197,8 @@ F:	drivers/video/fbdev/s3c-fb.c
 
 
 SAMSUNG MULTIFUNCTION PMIC DEVICE DRIVERS
 SAMSUNG MULTIFUNCTION PMIC DEVICE DRIVERS
 M:	Sangbeom Kim <sbkim73@samsung.com>
 M:	Sangbeom Kim <sbkim73@samsung.com>
-M:	Krzysztof Kozlowski <k.kozlowski@samsung.com>
+M:	Krzysztof Kozlowski <krzk@kernel.org>
+M:	Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
 L:	linux-kernel@vger.kernel.org
 L:	linux-kernel@vger.kernel.org
 L:	linux-samsung-soc@vger.kernel.org
 L:	linux-samsung-soc@vger.kernel.org
 S:	Supported
 S:	Supported
@@ -10253,6 +10257,17 @@ S:	Supported
 L:	linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
 L:	linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
 F:	drivers/clk/samsung/
 F:	drivers/clk/samsung/
 
 
+SAMSUNG SPI DRIVERS
+M:	Kukjin Kim <kgene@kernel.org>
+M:	Krzysztof Kozlowski <krzk@kernel.org>
+M:	Andi Shyti <andi.shyti@samsung.com>
+L:	linux-spi@vger.kernel.org
+L:	linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
+S:	Maintained
+F:	Documentation/devicetree/bindings/spi/spi-samsung.txt
+F:	drivers/spi/spi-s3c*
+F:	include/linux/platform_data/spi-s3c64xx.h
+
 SAMSUNG SXGBE DRIVERS
 SAMSUNG SXGBE DRIVERS
 M:	Byungho An <bh74.an@samsung.com>
 M:	Byungho An <bh74.an@samsung.com>
 M:	Girish K S <ks.giri@samsung.com>
 M:	Girish K S <ks.giri@samsung.com>
@@ -11232,12 +11247,8 @@ S:	Odd Fixes
 F:	drivers/staging/vt665?/
 F:	drivers/staging/vt665?/
 
 
 STAGING - WILC1000 WIFI DRIVER
 STAGING - WILC1000 WIFI DRIVER
-M:	Johnny Kim <johnny.kim@atmel.com>
-M:	Austin Shin <austin.shin@atmel.com>
-M:	Chris Park <chris.park@atmel.com>
-M:	Tony Cho <tony.cho@atmel.com>
-M:	Glen Lee <glen.lee@atmel.com>
-M:	Leo Kim <leo.kim@atmel.com>
+M:	Aditya Shankar <aditya.shankar@microchip.com>
+M:	Ganesh Krishna <ganesh.krishna@microchip.com>
 L:	linux-wireless@vger.kernel.org
 L:	linux-wireless@vger.kernel.org
 S:	Supported
 S:	Supported
 F:	drivers/staging/wilc1000/
 F:	drivers/staging/wilc1000/

+ 1 - 1
Makefile

@@ -1,7 +1,7 @@
 VERSION = 4
 VERSION = 4
 PATCHLEVEL = 8
 PATCHLEVEL = 8
 SUBLEVEL = 0
 SUBLEVEL = 0
-EXTRAVERSION = -rc4
+EXTRAVERSION = -rc6
 NAME = Psychotic Stoned Sheep
 NAME = Psychotic Stoned Sheep
 
 
 # *DOCUMENTATION*
 # *DOCUMENTATION*

+ 0 - 11
arch/Kconfig

@@ -336,17 +336,6 @@ config HAVE_ARCH_SECCOMP_FILTER
 	    results in the system call being skipped immediately.
 	    results in the system call being skipped immediately.
 	  - seccomp syscall wired up
 	  - seccomp syscall wired up
 
 
-	  For best performance, an arch should use seccomp_phase1 and
-	  seccomp_phase2 directly.  It should call seccomp_phase1 for all
-	  syscalls if TIF_SECCOMP is set, but seccomp_phase1 does not
-	  need to be called from a ptrace-safe context.  It must then
-	  call seccomp_phase2 if seccomp_phase1 returns anything other
-	  than SECCOMP_PHASE1_OK or SECCOMP_PHASE1_SKIP.
-
-	  As an additional optimization, an arch may provide seccomp_data
-	  directly to seccomp_phase1; this avoids multiple calls
-	  to the syscall_xyz helpers for every syscall.
-
 config SECCOMP_FILTER
 config SECCOMP_FILTER
 	def_bool y
 	def_bool y
 	depends on HAVE_ARCH_SECCOMP_FILTER && SECCOMP && NET
 	depends on HAVE_ARCH_SECCOMP_FILTER && SECCOMP && NET

+ 1 - 1
arch/arm/boot/dts/am335x-baltos.dtsi

@@ -226,7 +226,7 @@
 
 
 		#address-cells = <1>;
 		#address-cells = <1>;
 		#size-cells = <1>;
 		#size-cells = <1>;
-		elm_id = <&elm>;
+		ti,elm-id = <&elm>;
 	};
 	};
 };
 };
 
 

+ 1 - 1
arch/arm/boot/dts/am335x-igep0033.dtsi

@@ -161,7 +161,7 @@
 
 
 		#address-cells = <1>;
 		#address-cells = <1>;
 		#size-cells = <1>;
 		#size-cells = <1>;
-		elm_id = <&elm>;
+		ti,elm-id = <&elm>;
 
 
 		/* MTD partition table */
 		/* MTD partition table */
 		partition@0 {
 		partition@0 {

+ 1 - 1
arch/arm/boot/dts/am335x-phycore-som.dtsi

@@ -197,7 +197,7 @@
 		gpmc,wr-access-ns = <30>;
 		gpmc,wr-access-ns = <30>;
 		gpmc,wr-data-mux-bus-ns = <0>;
 		gpmc,wr-data-mux-bus-ns = <0>;
 
 
-		elm_id = <&elm>;
+		ti,elm-id = <&elm>;
 
 
 		#address-cells = <1>;
 		#address-cells = <1>;
 		#size-cells = <1>;
 		#size-cells = <1>;

+ 4 - 4
arch/arm/boot/dts/armada-388-clearfog.dts

@@ -390,12 +390,12 @@
 
 
 			port@0 {
 			port@0 {
 				reg = <0>;
 				reg = <0>;
-				label = "lan1";
+				label = "lan5";
 			};
 			};
 
 
 			port@1 {
 			port@1 {
 				reg = <1>;
 				reg = <1>;
-				label = "lan2";
+				label = "lan4";
 			};
 			};
 
 
 			port@2 {
 			port@2 {
@@ -405,12 +405,12 @@
 
 
 			port@3 {
 			port@3 {
 				reg = <3>;
 				reg = <3>;
-				label = "lan4";
+				label = "lan2";
 			};
 			};
 
 
 			port@4 {
 			port@4 {
 				reg = <4>;
 				reg = <4>;
-				label = "lan5";
+				label = "lan1";
 			};
 			};
 
 
 			port@5 {
 			port@5 {

+ 0 - 3
arch/arm/boot/dts/exynos5410-odroidxu.dts

@@ -447,14 +447,11 @@
 	samsung,dw-mshc-ciu-div = <3>;
 	samsung,dw-mshc-ciu-div = <3>;
 	samsung,dw-mshc-sdr-timing = <0 4>;
 	samsung,dw-mshc-sdr-timing = <0 4>;
 	samsung,dw-mshc-ddr-timing = <0 2>;
 	samsung,dw-mshc-ddr-timing = <0 2>;
-	samsung,dw-mshc-hs400-timing = <0 2>;
-	samsung,read-strobe-delay = <90>;
 	pinctrl-names = "default";
 	pinctrl-names = "default";
 	pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_bus1 &sd0_bus4 &sd0_bus8 &sd0_cd>;
 	pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_bus1 &sd0_bus4 &sd0_bus8 &sd0_cd>;
 	bus-width = <8>;
 	bus-width = <8>;
 	cap-mmc-highspeed;
 	cap-mmc-highspeed;
 	mmc-hs200-1_8v;
 	mmc-hs200-1_8v;
-	mmc-hs400-1_8v;
 	vmmc-supply = <&ldo20_reg>;
 	vmmc-supply = <&ldo20_reg>;
 	vqmmc-supply = <&ldo11_reg>;
 	vqmmc-supply = <&ldo11_reg>;
 };
 };

+ 1 - 1
arch/arm/boot/dts/imx6qdl.dtsi

@@ -243,7 +243,7 @@
 					clocks = <&clks IMX6QDL_CLK_SPDIF_GCLK>, <&clks IMX6QDL_CLK_OSC>,
 					clocks = <&clks IMX6QDL_CLK_SPDIF_GCLK>, <&clks IMX6QDL_CLK_OSC>,
 						 <&clks IMX6QDL_CLK_SPDIF>, <&clks IMX6QDL_CLK_ASRC>,
 						 <&clks IMX6QDL_CLK_SPDIF>, <&clks IMX6QDL_CLK_ASRC>,
 						 <&clks IMX6QDL_CLK_DUMMY>, <&clks IMX6QDL_CLK_ESAI_EXTAL>,
 						 <&clks IMX6QDL_CLK_DUMMY>, <&clks IMX6QDL_CLK_ESAI_EXTAL>,
-						 <&clks IMX6QDL_CLK_IPG>, <&clks IMX6QDL_CLK_MLB>,
+						 <&clks IMX6QDL_CLK_IPG>, <&clks IMX6QDL_CLK_DUMMY>,
 						 <&clks IMX6QDL_CLK_DUMMY>, <&clks IMX6QDL_CLK_SPBA>;
 						 <&clks IMX6QDL_CLK_DUMMY>, <&clks IMX6QDL_CLK_SPBA>;
 					clock-names = "core",  "rxtx0",
 					clock-names = "core",  "rxtx0",
 						      "rxtx1", "rxtx2",
 						      "rxtx1", "rxtx2",

+ 1 - 1
arch/arm/boot/dts/imx6sx-sabreauto.dts

@@ -64,7 +64,7 @@
 	cd-gpios = <&gpio7 11 GPIO_ACTIVE_LOW>;
 	cd-gpios = <&gpio7 11 GPIO_ACTIVE_LOW>;
 	no-1-8-v;
 	no-1-8-v;
 	keep-power-in-suspend;
 	keep-power-in-suspend;
-	enable-sdio-wakup;
+	wakeup-source;
 	status = "okay";
 	status = "okay";
 };
 };
 
 

+ 1 - 1
arch/arm/boot/dts/imx7d-sdb.dts

@@ -131,7 +131,7 @@
 		ti,y-min = /bits/ 16 <0>;
 		ti,y-min = /bits/ 16 <0>;
 		ti,y-max = /bits/ 16 <0>;
 		ti,y-max = /bits/ 16 <0>;
 		ti,pressure-max = /bits/ 16 <0>;
 		ti,pressure-max = /bits/ 16 <0>;
-		ti,x-plat-ohms = /bits/ 16 <400>;
+		ti,x-plate-ohms = /bits/ 16 <400>;
 		wakeup-source;
 		wakeup-source;
 	};
 	};
 };
 };

+ 1 - 1
arch/arm/boot/dts/kirkwood-ib62x0.dts

@@ -113,7 +113,7 @@
 
 
 	partition@e0000 {
 	partition@e0000 {
 		label = "u-boot environment";
 		label = "u-boot environment";
-		reg = <0xe0000 0x100000>;
+		reg = <0xe0000 0x20000>;
 	};
 	};
 
 
 	partition@100000 {
 	partition@100000 {

+ 4 - 0
arch/arm/boot/dts/kirkwood-openrd.dtsi

@@ -116,6 +116,10 @@
 	};
 	};
 };
 };
 
 
+&pciec {
+	status = "okay";
+};
+
 &pcie0 {
 &pcie0 {
 	status = "okay";
 	status = "okay";
 };
 };

+ 6 - 5
arch/arm/boot/dts/logicpd-som-lv.dtsi

@@ -35,10 +35,15 @@
 	ranges = <0 0 0x00000000 0x1000000>;	/* CS0: 16MB for NAND */
 	ranges = <0 0 0x00000000 0x1000000>;	/* CS0: 16MB for NAND */
 
 
 	nand@0,0 {
 	nand@0,0 {
-		linux,mtd-name = "micron,mt29f4g16abbda3w";
+		compatible = "ti,omap2-nand";
 		reg = <0 0 4>; /* CS0, offset 0, IO size 4 */
 		reg = <0 0 4>; /* CS0, offset 0, IO size 4 */
+		interrupt-parent = <&gpmc>;
+		interrupts = <0 IRQ_TYPE_NONE>, /* fifoevent */
+			     <1 IRQ_TYPE_NONE>;	/* termcount */
+		linux,mtd-name = "micron,mt29f4g16abbda3w";
 		nand-bus-width = <16>;
 		nand-bus-width = <16>;
 		ti,nand-ecc-opt = "bch8";
 		ti,nand-ecc-opt = "bch8";
+		rb-gpios = <&gpmc 0 GPIO_ACTIVE_HIGH>; /* gpmc_wait0 */
 		gpmc,sync-clk-ps = <0>;
 		gpmc,sync-clk-ps = <0>;
 		gpmc,cs-on-ns = <0>;
 		gpmc,cs-on-ns = <0>;
 		gpmc,cs-rd-off-ns = <44>;
 		gpmc,cs-rd-off-ns = <44>;
@@ -54,10 +59,6 @@
 		gpmc,wr-access-ns = <40>;
 		gpmc,wr-access-ns = <40>;
 		gpmc,wr-data-mux-bus-ns = <0>;
 		gpmc,wr-data-mux-bus-ns = <0>;
 		gpmc,device-width = <2>;
 		gpmc,device-width = <2>;
-
-		gpmc,page-burst-access-ns = <5>;
-		gpmc,cycle2cycle-delay-ns = <50>;
-
 		#address-cells = <1>;
 		#address-cells = <1>;
 		#size-cells = <1>;
 		#size-cells = <1>;
 
 

+ 1 - 0
arch/arm/boot/dts/logicpd-torpedo-som.dtsi

@@ -46,6 +46,7 @@
 		linux,mtd-name = "micron,mt29f4g16abbda3w";
 		linux,mtd-name = "micron,mt29f4g16abbda3w";
 		nand-bus-width = <16>;
 		nand-bus-width = <16>;
 		ti,nand-ecc-opt = "bch8";
 		ti,nand-ecc-opt = "bch8";
+		rb-gpios = <&gpmc 0 GPIO_ACTIVE_HIGH>; /* gpmc_wait0 */
 		gpmc,sync-clk-ps = <0>;
 		gpmc,sync-clk-ps = <0>;
 		gpmc,cs-on-ns = <0>;
 		gpmc,cs-on-ns = <0>;
 		gpmc,cs-rd-off-ns = <44>;
 		gpmc,cs-rd-off-ns = <44>;

+ 3 - 1
arch/arm/boot/dts/omap3-overo-base.dtsi

@@ -223,7 +223,9 @@
 };
 };
 
 
 &gpmc {
 &gpmc {
-	ranges = <0 0 0x00000000 0x20000000>;
+	ranges = <0 0 0x30000000 0x1000000>,	/* CS0 */
+		 <4 0 0x2b000000 0x1000000>,	/* CS4 */
+		 <5 0 0x2c000000 0x1000000>;	/* CS5 */
 
 
 	nand@0,0 {
 	nand@0,0 {
 		compatible = "ti,omap2-nand";
 		compatible = "ti,omap2-nand";

+ 0 - 2
arch/arm/boot/dts/omap3-overo-chestnut43-common.dtsi

@@ -55,8 +55,6 @@
 #include "omap-gpmc-smsc9221.dtsi"
 #include "omap-gpmc-smsc9221.dtsi"
 
 
 &gpmc {
 &gpmc {
-	ranges = <5 0 0x2c000000 0x1000000>;	/* CS5 */
-
 	ethernet@gpmc {
 	ethernet@gpmc {
 		reg = <5 0 0xff>;
 		reg = <5 0 0xff>;
 		interrupt-parent = <&gpio6>;
 		interrupt-parent = <&gpio6>;

+ 0 - 2
arch/arm/boot/dts/omap3-overo-tobi-common.dtsi

@@ -27,8 +27,6 @@
 #include "omap-gpmc-smsc9221.dtsi"
 #include "omap-gpmc-smsc9221.dtsi"
 
 
 &gpmc {
 &gpmc {
-	ranges = <5 0 0x2c000000 0x1000000>;	/* CS5 */
-
 	ethernet@gpmc {
 	ethernet@gpmc {
 		reg = <5 0 0xff>;
 		reg = <5 0 0xff>;
 		interrupt-parent = <&gpio6>;
 		interrupt-parent = <&gpio6>;

+ 0 - 3
arch/arm/boot/dts/omap3-overo-tobiduo-common.dtsi

@@ -15,9 +15,6 @@
 #include "omap-gpmc-smsc9221.dtsi"
 #include "omap-gpmc-smsc9221.dtsi"
 
 
 &gpmc {
 &gpmc {
-	ranges = <4 0 0x2b000000 0x1000000>,	/* CS4 */
-		 <5 0 0x2c000000 0x1000000>;	/* CS5 */
-
 	smsc1: ethernet@gpmc {
 	smsc1: ethernet@gpmc {
 		reg = <5 0 0xff>;
 		reg = <5 0 0xff>;
 		interrupt-parent = <&gpio6>;
 		interrupt-parent = <&gpio6>;

+ 2 - 0
arch/arm/boot/dts/rk3066a.dtsi

@@ -197,6 +197,8 @@
 		clock-names = "saradc", "apb_pclk";
 		clock-names = "saradc", "apb_pclk";
 		interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
 		interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
 		#io-channel-cells = <1>;
 		#io-channel-cells = <1>;
+		resets = <&cru SRST_SARADC>;
+		reset-names = "saradc-apb";
 		status = "disabled";
 		status = "disabled";
 	};
 	};
 
 

+ 2 - 0
arch/arm/boot/dts/rk3288.dtsi

@@ -279,6 +279,8 @@
 		#io-channel-cells = <1>;
 		#io-channel-cells = <1>;
 		clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>;
 		clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>;
 		clock-names = "saradc", "apb_pclk";
 		clock-names = "saradc", "apb_pclk";
+		resets = <&cru SRST_SARADC>;
+		reset-names = "saradc-apb";
 		status = "disabled";
 		status = "disabled";
 	};
 	};
 
 

+ 2 - 0
arch/arm/boot/dts/rk3xxx.dtsi

@@ -399,6 +399,8 @@
 		#io-channel-cells = <1>;
 		#io-channel-cells = <1>;
 		clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>;
 		clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>;
 		clock-names = "saradc", "apb_pclk";
 		clock-names = "saradc", "apb_pclk";
+		resets = <&cru SRST_SARADC>;
+		reset-names = "saradc-apb";
 		status = "disabled";
 		status = "disabled";
 	};
 	};
 
 

+ 1 - 1
arch/arm/boot/dts/sun5i-a13.dtsi

@@ -84,7 +84,7 @@
 			trips {
 			trips {
 				cpu_alert0: cpu_alert0 {
 				cpu_alert0: cpu_alert0 {
 					/* milliCelsius */
 					/* milliCelsius */
-					temperature = <850000>;
+					temperature = <85000>;
 					hysteresis = <2000>;
 					hysteresis = <2000>;
 					type = "passive";
 					type = "passive";
 				};
 				};

+ 1 - 1
arch/arm/boot/dts/tegra114-dalmore.dts

@@ -897,7 +897,7 @@
 		palmas: tps65913@58 {
 		palmas: tps65913@58 {
 			compatible = "ti,palmas";
 			compatible = "ti,palmas";
 			reg = <0x58>;
 			reg = <0x58>;
-			interrupts = <0 86 IRQ_TYPE_LEVEL_LOW>;
+			interrupts = <0 86 IRQ_TYPE_LEVEL_HIGH>;
 
 
 			#interrupt-cells = <2>;
 			#interrupt-cells = <2>;
 			interrupt-controller;
 			interrupt-controller;

+ 1 - 1
arch/arm/boot/dts/tegra114-roth.dts

@@ -802,7 +802,7 @@
 		palmas: pmic@58 {
 		palmas: pmic@58 {
 			compatible = "ti,palmas";
 			compatible = "ti,palmas";
 			reg = <0x58>;
 			reg = <0x58>;
-			interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_LOW>;
+			interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
 
 
 			#interrupt-cells = <2>;
 			#interrupt-cells = <2>;
 			interrupt-controller;
 			interrupt-controller;

+ 1 - 1
arch/arm/boot/dts/tegra114-tn7.dts

@@ -63,7 +63,7 @@
 		palmas: pmic@58 {
 		palmas: pmic@58 {
 			compatible = "ti,palmas";
 			compatible = "ti,palmas";
 			reg = <0x58>;
 			reg = <0x58>;
-			interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_LOW>;
+			interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
 
 
 			#interrupt-cells = <2>;
 			#interrupt-cells = <2>;
 			interrupt-controller;
 			interrupt-controller;

+ 2 - 2
arch/arm/boot/dts/tegra124-jetson-tk1.dts

@@ -1382,7 +1382,7 @@
 	 *   Pin 41: BR_UART1_TXD
 	 *   Pin 41: BR_UART1_TXD
 	 *   Pin 44: BR_UART1_RXD
 	 *   Pin 44: BR_UART1_RXD
 	 */
 	 */
-	serial@0,70006000 {
+	serial@70006000 {
 		compatible = "nvidia,tegra124-hsuart", "nvidia,tegra30-hsuart";
 		compatible = "nvidia,tegra124-hsuart", "nvidia,tegra30-hsuart";
 		status = "okay";
 		status = "okay";
 	};
 	};
@@ -1394,7 +1394,7 @@
 	 *   Pin 71: UART2_CTS_L
 	 *   Pin 71: UART2_CTS_L
 	 *   Pin 74: UART2_RTS_L
 	 *   Pin 74: UART2_RTS_L
 	 */
 	 */
-	serial@0,70006040 {
+	serial@70006040 {
 		compatible = "nvidia,tegra124-hsuart", "nvidia,tegra30-hsuart";
 		compatible = "nvidia,tegra124-hsuart", "nvidia,tegra30-hsuart";
 		status = "okay";
 		status = "okay";
 	};
 	};

+ 13 - 0
arch/arm/kernel/hyp-stub.S

@@ -142,6 +142,19 @@ ARM_BE8(orr	r7, r7, #(1 << 25))     @ HSCTLR.EE
 	and	r7, #0x1f		@ Preserve HPMN
 	and	r7, #0x1f		@ Preserve HPMN
 	mcr	p15, 4, r7, c1, c1, 1	@ HDCR
 	mcr	p15, 4, r7, c1, c1, 1	@ HDCR
 
 
+	@ Make sure NS-SVC is initialised appropriately
+	mrc	p15, 0, r7, c1, c0, 0	@ SCTLR
+	orr	r7, #(1 << 5)		@ CP15 barriers enabled
+	bic	r7, #(3 << 7)		@ Clear SED/ITD for v8 (RES0 for v7)
+	bic	r7, #(3 << 19)		@ WXN and UWXN disabled
+	mcr	p15, 0, r7, c1, c0, 0	@ SCTLR
+
+	mrc	p15, 0, r7, c0, c0, 0	@ MIDR
+	mcr	p15, 4, r7, c0, c0, 0	@ VPIDR
+
+	mrc	p15, 0, r7, c0, c0, 5	@ MPIDR
+	mcr	p15, 4, r7, c0, c0, 5	@ VMPIDR
+
 #if !defined(ZIMAGE) && defined(CONFIG_ARM_ARCH_TIMER)
 #if !defined(ZIMAGE) && defined(CONFIG_ARM_ARCH_TIMER)
 	@ make CNTP_* and CNTPCT accessible from PL1
 	@ make CNTP_* and CNTPCT accessible from PL1
 	mrc	p15, 0, r7, c0, c1, 1	@ ID_PFR1
 	mrc	p15, 0, r7, c0, c1, 1	@ ID_PFR1

+ 1 - 0
arch/arm/mach-imx/mach-imx6ul.c

@@ -64,6 +64,7 @@ static void __init imx6ul_init_machine(void)
 	if (parent == NULL)
 	if (parent == NULL)
 		pr_warn("failed to initialize soc device\n");
 		pr_warn("failed to initialize soc device\n");
 
 
+	of_platform_default_populate(NULL, NULL, parent);
 	imx6ul_enet_init();
 	imx6ul_enet_init();
 	imx_anatop_init();
 	imx_anatop_init();
 	imx6ul_pm_init();
 	imx6ul_pm_init();

+ 2 - 2
arch/arm/mach-imx/pm-imx6.c

@@ -295,7 +295,7 @@ int imx6_set_lpm(enum mxc_cpu_pwr_mode mode)
 		val &= ~BM_CLPCR_SBYOS;
 		val &= ~BM_CLPCR_SBYOS;
 		if (cpu_is_imx6sl())
 		if (cpu_is_imx6sl())
 			val |= BM_CLPCR_BYPASS_PMIC_READY;
 			val |= BM_CLPCR_BYPASS_PMIC_READY;
-		if (cpu_is_imx6sl() || cpu_is_imx6sx())
+		if (cpu_is_imx6sl() || cpu_is_imx6sx() || cpu_is_imx6ul())
 			val |= BM_CLPCR_BYP_MMDC_CH0_LPM_HS;
 			val |= BM_CLPCR_BYP_MMDC_CH0_LPM_HS;
 		else
 		else
 			val |= BM_CLPCR_BYP_MMDC_CH1_LPM_HS;
 			val |= BM_CLPCR_BYP_MMDC_CH1_LPM_HS;
@@ -310,7 +310,7 @@ int imx6_set_lpm(enum mxc_cpu_pwr_mode mode)
 		val |= 0x3 << BP_CLPCR_STBY_COUNT;
 		val |= 0x3 << BP_CLPCR_STBY_COUNT;
 		val |= BM_CLPCR_VSTBY;
 		val |= BM_CLPCR_VSTBY;
 		val |= BM_CLPCR_SBYOS;
 		val |= BM_CLPCR_SBYOS;
-		if (cpu_is_imx6sl())
+		if (cpu_is_imx6sl() || cpu_is_imx6sx())
 			val |= BM_CLPCR_BYPASS_PMIC_READY;
 			val |= BM_CLPCR_BYPASS_PMIC_READY;
 		if (cpu_is_imx6sl() || cpu_is_imx6sx() || cpu_is_imx6ul())
 		if (cpu_is_imx6sl() || cpu_is_imx6sx() || cpu_is_imx6ul())
 			val |= BM_CLPCR_BYP_MMDC_CH0_LPM_HS;
 			val |= BM_CLPCR_BYP_MMDC_CH0_LPM_HS;

+ 0 - 6
arch/arm/mach-omap2/cm33xx.c

@@ -220,9 +220,6 @@ static int am33xx_cm_wait_module_ready(u8 part, s16 inst, u16 clkctrl_offs,
 {
 {
 	int i = 0;
 	int i = 0;
 
 
-	if (!clkctrl_offs)
-		return 0;
-
 	omap_test_timeout(_is_module_ready(inst, clkctrl_offs),
 	omap_test_timeout(_is_module_ready(inst, clkctrl_offs),
 			  MAX_MODULE_READY_TIME, i);
 			  MAX_MODULE_READY_TIME, i);
 
 
@@ -246,9 +243,6 @@ static int am33xx_cm_wait_module_idle(u8 part, s16 inst, u16 clkctrl_offs,
 {
 {
 	int i = 0;
 	int i = 0;
 
 
-	if (!clkctrl_offs)
-		return 0;
-
 	omap_test_timeout((_clkctrl_idlest(inst, clkctrl_offs) ==
 	omap_test_timeout((_clkctrl_idlest(inst, clkctrl_offs) ==
 				CLKCTRL_IDLEST_DISABLED),
 				CLKCTRL_IDLEST_DISABLED),
 				MAX_MODULE_READY_TIME, i);
 				MAX_MODULE_READY_TIME, i);

+ 0 - 6
arch/arm/mach-omap2/cminst44xx.c

@@ -278,9 +278,6 @@ static int omap4_cminst_wait_module_ready(u8 part, s16 inst, u16 clkctrl_offs,
 {
 {
 	int i = 0;
 	int i = 0;
 
 
-	if (!clkctrl_offs)
-		return 0;
-
 	omap_test_timeout(_is_module_ready(part, inst, clkctrl_offs),
 	omap_test_timeout(_is_module_ready(part, inst, clkctrl_offs),
 			  MAX_MODULE_READY_TIME, i);
 			  MAX_MODULE_READY_TIME, i);
 
 
@@ -304,9 +301,6 @@ static int omap4_cminst_wait_module_idle(u8 part, s16 inst, u16 clkctrl_offs,
 {
 {
 	int i = 0;
 	int i = 0;
 
 
-	if (!clkctrl_offs)
-		return 0;
-
 	omap_test_timeout((_clkctrl_idlest(part, inst, clkctrl_offs) ==
 	omap_test_timeout((_clkctrl_idlest(part, inst, clkctrl_offs) ==
 			   CLKCTRL_IDLEST_DISABLED),
 			   CLKCTRL_IDLEST_DISABLED),
 			  MAX_MODULE_DISABLE_TIME, i);
 			  MAX_MODULE_DISABLE_TIME, i);

+ 8 - 0
arch/arm/mach-omap2/omap_hwmod.c

@@ -1053,6 +1053,10 @@ static int _omap4_wait_target_disable(struct omap_hwmod *oh)
 	if (oh->flags & HWMOD_NO_IDLEST)
 	if (oh->flags & HWMOD_NO_IDLEST)
 		return 0;
 		return 0;
 
 
+	if (!oh->prcm.omap4.clkctrl_offs &&
+	    !(oh->prcm.omap4.flags & HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET))
+		return 0;
+
 	return omap_cm_wait_module_idle(oh->clkdm->prcm_partition,
 	return omap_cm_wait_module_idle(oh->clkdm->prcm_partition,
 					oh->clkdm->cm_inst,
 					oh->clkdm->cm_inst,
 					oh->prcm.omap4.clkctrl_offs, 0);
 					oh->prcm.omap4.clkctrl_offs, 0);
@@ -2971,6 +2975,10 @@ static int _omap4_wait_target_ready(struct omap_hwmod *oh)
 	if (!_find_mpu_rt_port(oh))
 	if (!_find_mpu_rt_port(oh))
 		return 0;
 		return 0;
 
 
+	if (!oh->prcm.omap4.clkctrl_offs &&
+	    !(oh->prcm.omap4.flags & HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET))
+		return 0;
+
 	/* XXX check module SIDLEMODE, hardreset status */
 	/* XXX check module SIDLEMODE, hardreset status */
 
 
 	return omap_cm_wait_module_ready(oh->clkdm->prcm_partition,
 	return omap_cm_wait_module_ready(oh->clkdm->prcm_partition,

+ 4 - 0
arch/arm/mach-omap2/omap_hwmod.h

@@ -443,8 +443,12 @@ struct omap_hwmod_omap2_prcm {
  * HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT: Some IP blocks don't have a PRCM
  * HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT: Some IP blocks don't have a PRCM
  *     module-level context loss register associated with them; this
  *     module-level context loss register associated with them; this
  *     flag bit should be set in those cases
  *     flag bit should be set in those cases
+ * HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET: Some IP blocks have a valid CLKCTRL
+ *	offset of zero; this flag bit should be set in those cases to
+ *	distinguish from hwmods that have no clkctrl offset.
  */
  */
 #define HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT		(1 << 0)
 #define HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT		(1 << 0)
+#define HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET		(1 << 1)
 
 
 /**
 /**
  * struct omap_hwmod_omap4_prcm - OMAP4-specific PRCM data
  * struct omap_hwmod_omap4_prcm - OMAP4-specific PRCM data

+ 2 - 0
arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c

@@ -29,6 +29,7 @@
 #define CLKCTRL(oh, clkctrl) ((oh).prcm.omap4.clkctrl_offs = (clkctrl))
 #define CLKCTRL(oh, clkctrl) ((oh).prcm.omap4.clkctrl_offs = (clkctrl))
 #define RSTCTRL(oh, rstctrl) ((oh).prcm.omap4.rstctrl_offs = (rstctrl))
 #define RSTCTRL(oh, rstctrl) ((oh).prcm.omap4.rstctrl_offs = (rstctrl))
 #define RSTST(oh, rstst) ((oh).prcm.omap4.rstst_offs = (rstst))
 #define RSTST(oh, rstst) ((oh).prcm.omap4.rstst_offs = (rstst))
+#define PRCM_FLAGS(oh, flag) ((oh).prcm.omap4.flags = (flag))
 
 
 /*
 /*
  * 'l3' class
  * 'l3' class
@@ -1296,6 +1297,7 @@ static void omap_hwmod_am33xx_clkctrl(void)
 	CLKCTRL(am33xx_i2c1_hwmod, AM33XX_CM_WKUP_I2C0_CLKCTRL_OFFSET);
 	CLKCTRL(am33xx_i2c1_hwmod, AM33XX_CM_WKUP_I2C0_CLKCTRL_OFFSET);
 	CLKCTRL(am33xx_wd_timer1_hwmod, AM33XX_CM_WKUP_WDT1_CLKCTRL_OFFSET);
 	CLKCTRL(am33xx_wd_timer1_hwmod, AM33XX_CM_WKUP_WDT1_CLKCTRL_OFFSET);
 	CLKCTRL(am33xx_rtc_hwmod, AM33XX_CM_RTC_RTC_CLKCTRL_OFFSET);
 	CLKCTRL(am33xx_rtc_hwmod, AM33XX_CM_RTC_RTC_CLKCTRL_OFFSET);
+	PRCM_FLAGS(am33xx_rtc_hwmod, HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET);
 	CLKCTRL(am33xx_mmc2_hwmod, AM33XX_CM_PER_MMC2_CLKCTRL_OFFSET);
 	CLKCTRL(am33xx_mmc2_hwmod, AM33XX_CM_PER_MMC2_CLKCTRL_OFFSET);
 	CLKCTRL(am33xx_gpmc_hwmod, AM33XX_CM_PER_GPMC_CLKCTRL_OFFSET);
 	CLKCTRL(am33xx_gpmc_hwmod, AM33XX_CM_PER_GPMC_CLKCTRL_OFFSET);
 	CLKCTRL(am33xx_l4_ls_hwmod, AM33XX_CM_PER_L4LS_CLKCTRL_OFFSET);
 	CLKCTRL(am33xx_l4_ls_hwmod, AM33XX_CM_PER_L4LS_CLKCTRL_OFFSET);

+ 12 - 0
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c

@@ -722,8 +722,20 @@ static struct omap_hwmod omap3xxx_dss_dispc_hwmod = {
  * display serial interface controller
  * display serial interface controller
  */
  */
 
 
+static struct omap_hwmod_class_sysconfig omap3xxx_dsi_sysc = {
+	.rev_offs	= 0x0000,
+	.sysc_offs	= 0x0010,
+	.syss_offs	= 0x0014,
+	.sysc_flags	= (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
+			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
+			   SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
+	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
+	.sysc_fields	= &omap_hwmod_sysc_type1,
+};
+
 static struct omap_hwmod_class omap3xxx_dsi_hwmod_class = {
 static struct omap_hwmod_class omap3xxx_dsi_hwmod_class = {
 	.name = "dsi",
 	.name = "dsi",
+	.sysc	= &omap3xxx_dsi_sysc,
 };
 };
 
 
 static struct omap_hwmod_irq_info omap3xxx_dsi1_irqs[] = {
 static struct omap_hwmod_irq_info omap3xxx_dsi1_irqs[] = {

+ 2 - 1
arch/arm/mach-pxa/idp.c

@@ -83,7 +83,8 @@ static struct resource smc91x_resources[] = {
 };
 };
 
 
 static struct smc91x_platdata smc91x_platdata = {
 static struct smc91x_platdata smc91x_platdata = {
-	.flags = SMC91X_USE_32BIT | SMC91X_USE_DMA | SMC91X_NOWAIT,
+	.flags = SMC91X_USE_8BIT | SMC91X_USE_16BIT | SMC91X_USE_32BIT |
+		 SMC91X_USE_DMA | SMC91X_NOWAIT,
 };
 };
 
 
 static struct platform_device smc91x_device = {
 static struct platform_device smc91x_device = {

+ 2 - 1
arch/arm/mach-pxa/xcep.c

@@ -120,7 +120,8 @@ static struct resource smc91x_resources[] = {
 };
 };
 
 
 static struct smc91x_platdata xcep_smc91x_info = {
 static struct smc91x_platdata xcep_smc91x_info = {
-	.flags	= SMC91X_USE_32BIT | SMC91X_NOWAIT | SMC91X_USE_DMA,
+	.flags	= SMC91X_USE_8BIT | SMC91X_USE_16BIT | SMC91X_USE_32BIT |
+		  SMC91X_NOWAIT | SMC91X_USE_DMA,
 };
 };
 
 
 static struct platform_device smc91x_device = {
 static struct platform_device smc91x_device = {

+ 2 - 1
arch/arm/mach-realview/core.c

@@ -93,7 +93,8 @@ static struct smsc911x_platform_config smsc911x_config = {
 };
 };
 
 
 static struct smc91x_platdata smc91x_platdata = {
 static struct smc91x_platdata smc91x_platdata = {
-	.flags = SMC91X_USE_32BIT | SMC91X_NOWAIT,
+	.flags = SMC91X_USE_8BIT | SMC91X_USE_16BIT | SMC91X_USE_32BIT |
+		 SMC91X_NOWAIT,
 };
 };
 
 
 static struct platform_device realview_eth_device = {
 static struct platform_device realview_eth_device = {

+ 3 - 2
arch/arm/mach-sa1100/clock.c

@@ -125,6 +125,8 @@ static unsigned long clk_36864_get_rate(struct clk *clk)
 }
 }
 
 
 static struct clkops clk_36864_ops = {
 static struct clkops clk_36864_ops = {
+	.enable		= clk_cpu_enable,
+	.disable	= clk_cpu_disable,
 	.get_rate	= clk_36864_get_rate,
 	.get_rate	= clk_36864_get_rate,
 };
 };
 
 
@@ -140,9 +142,8 @@ static struct clk_lookup sa11xx_clkregs[] = {
 	CLKDEV_INIT(NULL, "OSTIMER0", &clk_36864),
 	CLKDEV_INIT(NULL, "OSTIMER0", &clk_36864),
 };
 };
 
 
-static int __init sa11xx_clk_init(void)
+int __init sa11xx_clk_init(void)
 {
 {
 	clkdev_add_table(sa11xx_clkregs, ARRAY_SIZE(sa11xx_clkregs));
 	clkdev_add_table(sa11xx_clkregs, ARRAY_SIZE(sa11xx_clkregs));
 	return 0;
 	return 0;
 }
 }
-core_initcall(sa11xx_clk_init);

+ 4 - 0
arch/arm/mach-sa1100/generic.c

@@ -34,6 +34,7 @@
 
 
 #include <mach/hardware.h>
 #include <mach/hardware.h>
 #include <mach/irqs.h>
 #include <mach/irqs.h>
+#include <mach/reset.h>
 
 
 #include "generic.h"
 #include "generic.h"
 #include <clocksource/pxa.h>
 #include <clocksource/pxa.h>
@@ -95,6 +96,8 @@ static void sa1100_power_off(void)
 
 
 void sa11x0_restart(enum reboot_mode mode, const char *cmd)
 void sa11x0_restart(enum reboot_mode mode, const char *cmd)
 {
 {
+	clear_reset_status(RESET_STATUS_ALL);
+
 	if (mode == REBOOT_SOFT) {
 	if (mode == REBOOT_SOFT) {
 		/* Jump into ROM at address 0 */
 		/* Jump into ROM at address 0 */
 		soft_restart(0);
 		soft_restart(0);
@@ -388,6 +391,7 @@ void __init sa1100_init_irq(void)
 	sa11x0_init_irq_nodt(IRQ_GPIO0_SC, irq_resource.start);
 	sa11x0_init_irq_nodt(IRQ_GPIO0_SC, irq_resource.start);
 
 
 	sa1100_init_gpio();
 	sa1100_init_gpio();
+	sa11xx_clk_init();
 }
 }
 
 
 /*
 /*

+ 2 - 0
arch/arm/mach-sa1100/generic.h

@@ -44,3 +44,5 @@ int sa11x0_pm_init(void);
 #else
 #else
 static inline int sa11x0_pm_init(void) { return 0; }
 static inline int sa11x0_pm_init(void) { return 0; }
 #endif
 #endif
+
+int sa11xx_clk_init(void);

+ 1 - 1
arch/arm/mach-sa1100/pleb.c

@@ -45,7 +45,7 @@ static struct resource smc91x_resources[] = {
 };
 };
 
 
 static struct smc91x_platdata smc91x_platdata = {
 static struct smc91x_platdata smc91x_platdata = {
-	.flags = SMC91X_USE_16BIT | SMC91X_NOWAIT,
+	.flags = SMC91X_USE_16BIT | SMC91X_USE_8BIT | SMC91X_NOWAIT,
 };
 };
 
 
 static struct platform_device smc91x_device = {
 static struct platform_device smc91x_device = {

+ 1 - 0
arch/arm/mm/proc-v7.S

@@ -16,6 +16,7 @@
 #include <asm/hwcap.h>
 #include <asm/hwcap.h>
 #include <asm/pgtable-hwdef.h>
 #include <asm/pgtable-hwdef.h>
 #include <asm/pgtable.h>
 #include <asm/pgtable.h>
+#include <asm/memory.h>
 
 
 #include "proc-macros.S"
 #include "proc-macros.S"
 
 

+ 2 - 0
arch/arm64/boot/dts/rockchip/rk3368.dtsi

@@ -270,6 +270,8 @@
 		#io-channel-cells = <1>;
 		#io-channel-cells = <1>;
 		clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>;
 		clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>;
 		clock-names = "saradc", "apb_pclk";
 		clock-names = "saradc", "apb_pclk";
+		resets = <&cru SRST_SARADC>;
+		reset-names = "saradc-apb";
 		status = "disabled";
 		status = "disabled";
 	};
 	};
 
 

+ 4 - 4
arch/arm64/include/asm/percpu.h

@@ -199,19 +199,19 @@ static inline unsigned long __percpu_xchg(void *ptr, unsigned long val,
 #define _percpu_read(pcp)						\
 #define _percpu_read(pcp)						\
 ({									\
 ({									\
 	typeof(pcp) __retval;						\
 	typeof(pcp) __retval;						\
-	preempt_disable();						\
+	preempt_disable_notrace();					\
 	__retval = (typeof(pcp))__percpu_read(raw_cpu_ptr(&(pcp)), 	\
 	__retval = (typeof(pcp))__percpu_read(raw_cpu_ptr(&(pcp)), 	\
 					      sizeof(pcp));		\
 					      sizeof(pcp));		\
-	preempt_enable();						\
+	preempt_enable_notrace();					\
 	__retval;							\
 	__retval;							\
 })
 })
 
 
 #define _percpu_write(pcp, val)						\
 #define _percpu_write(pcp, val)						\
 do {									\
 do {									\
-	preempt_disable();						\
+	preempt_disable_notrace();					\
 	__percpu_write(raw_cpu_ptr(&(pcp)), (unsigned long)(val), 	\
 	__percpu_write(raw_cpu_ptr(&(pcp)), (unsigned long)(val), 	\
 				sizeof(pcp));				\
 				sizeof(pcp));				\
-	preempt_enable();						\
+	preempt_enable_notrace();					\
 } while(0)								\
 } while(0)								\
 
 
 #define _pcp_protect(operation, pcp, val)			\
 #define _pcp_protect(operation, pcp, val)			\

+ 10 - 0
arch/arm64/include/asm/spinlock.h

@@ -363,4 +363,14 @@ static inline int arch_read_trylock(arch_rwlock_t *rw)
 #define arch_read_relax(lock)	cpu_relax()
 #define arch_read_relax(lock)	cpu_relax()
 #define arch_write_relax(lock)	cpu_relax()
 #define arch_write_relax(lock)	cpu_relax()
 
 
+/*
+ * Accesses appearing in program order before a spin_lock() operation
+ * can be reordered with accesses inside the critical section, by virtue
+ * of arch_spin_lock being constructed using acquire semantics.
+ *
+ * In cases where this is problematic (e.g. try_to_wake_up), an
+ * smp_mb__before_spinlock() can restore the required ordering.
+ */
+#define smp_mb__before_spinlock()	smp_mb()
+
 #endif /* __ASM_SPINLOCK_H */
 #endif /* __ASM_SPINLOCK_H */

+ 9 - 0
arch/arm64/mm/proc.S

@@ -100,7 +100,16 @@ ENTRY(cpu_do_resume)
 
 
 	msr	tcr_el1, x8
 	msr	tcr_el1, x8
 	msr	vbar_el1, x9
 	msr	vbar_el1, x9
+
+	/*
+	 * __cpu_setup() cleared MDSCR_EL1.MDE and friends, before unmasking
+	 * debug exceptions. By restoring MDSCR_EL1 here, we may take a debug
+	 * exception. Mask them until local_dbg_restore() in cpu_suspend()
+	 * resets them.
+	 */
+	disable_dbg
 	msr	mdscr_el1, x10
 	msr	mdscr_el1, x10
+
 	msr	sctlr_el1, x12
 	msr	sctlr_el1, x12
 	/*
 	/*
 	 * Restore oslsr_el1 by writing oslar_el1
 	 * Restore oslsr_el1 by writing oslar_el1

+ 2 - 1
arch/blackfin/mach-bf561/boards/cm_bf561.c

@@ -146,7 +146,8 @@ static struct platform_device hitachi_fb_device = {
 #include <linux/smc91x.h>
 #include <linux/smc91x.h>
 
 
 static struct smc91x_platdata smc91x_info = {
 static struct smc91x_platdata smc91x_info = {
-	.flags = SMC91X_USE_32BIT | SMC91X_NOWAIT,
+	.flags = SMC91X_USE_8BIT | SMC91X_USE_16BIT | SMC91X_USE_32BIT |
+		 SMC91X_NOWAIT,
 	.leda = RPC_LED_100_10,
 	.leda = RPC_LED_100_10,
 	.ledb = RPC_LED_TX_RX,
 	.ledb = RPC_LED_TX_RX,
 };
 };

+ 2 - 1
arch/blackfin/mach-bf561/boards/ezkit.c

@@ -134,7 +134,8 @@ static struct platform_device net2272_bfin_device = {
 #include <linux/smc91x.h>
 #include <linux/smc91x.h>
 
 
 static struct smc91x_platdata smc91x_info = {
 static struct smc91x_platdata smc91x_info = {
-	.flags = SMC91X_USE_32BIT | SMC91X_NOWAIT,
+	.flags = SMC91X_USE_8BIT | SMC91X_USE_16BIT | SMC91X_USE_32BIT |
+		 SMC91X_NOWAIT,
 	.leda = RPC_LED_100_10,
 	.leda = RPC_LED_100_10,
 	.ledb = RPC_LED_TX_RX,
 	.ledb = RPC_LED_TX_RX,
 };
 };

+ 4 - 8
arch/ia64/include/asm/uaccess.h

@@ -241,8 +241,7 @@ extern unsigned long __must_check __copy_user (void __user *to, const void __use
 static inline unsigned long
 static inline unsigned long
 __copy_to_user (void __user *to, const void *from, unsigned long count)
 __copy_to_user (void __user *to, const void *from, unsigned long count)
 {
 {
-	if (!__builtin_constant_p(count))
-		check_object_size(from, count, true);
+	check_object_size(from, count, true);
 
 
 	return __copy_user(to, (__force void __user *) from, count);
 	return __copy_user(to, (__force void __user *) from, count);
 }
 }
@@ -250,8 +249,7 @@ __copy_to_user (void __user *to, const void *from, unsigned long count)
 static inline unsigned long
 static inline unsigned long
 __copy_from_user (void *to, const void __user *from, unsigned long count)
 __copy_from_user (void *to, const void __user *from, unsigned long count)
 {
 {
-	if (!__builtin_constant_p(count))
-		check_object_size(to, count, false);
+	check_object_size(to, count, false);
 
 
 	return __copy_user((__force void __user *) to, from, count);
 	return __copy_user((__force void __user *) to, from, count);
 }
 }
@@ -265,8 +263,7 @@ __copy_from_user (void *to, const void __user *from, unsigned long count)
 	long __cu_len = (n);								\
 	long __cu_len = (n);								\
 											\
 											\
 	if (__access_ok(__cu_to, __cu_len, get_fs())) {					\
 	if (__access_ok(__cu_to, __cu_len, get_fs())) {					\
-		if (!__builtin_constant_p(n))						\
-			check_object_size(__cu_from, __cu_len, true);			\
+		check_object_size(__cu_from, __cu_len, true);			\
 		__cu_len = __copy_user(__cu_to, (__force void __user *)  __cu_from, __cu_len);	\
 		__cu_len = __copy_user(__cu_to, (__force void __user *)  __cu_from, __cu_len);	\
 	}										\
 	}										\
 	__cu_len;									\
 	__cu_len;									\
@@ -280,8 +277,7 @@ __copy_from_user (void *to, const void __user *from, unsigned long count)
 											\
 											\
 	__chk_user_ptr(__cu_from);							\
 	__chk_user_ptr(__cu_from);							\
 	if (__access_ok(__cu_from, __cu_len, get_fs())) {				\
 	if (__access_ok(__cu_from, __cu_len, get_fs())) {				\
-		if (!__builtin_constant_p(n))						\
-			check_object_size(__cu_to, __cu_len, false);			\
+		check_object_size(__cu_to, __cu_len, false);			\
 		__cu_len = __copy_user((__force void __user *) __cu_to, __cu_from, __cu_len);	\
 		__cu_len = __copy_user((__force void __user *) __cu_to, __cu_from, __cu_len);	\
 	}										\
 	}										\
 	__cu_len;									\
 	__cu_len;									\

+ 0 - 1
arch/parisc/Kconfig

@@ -1,6 +1,5 @@
 config PARISC
 config PARISC
 	def_bool y
 	def_bool y
-	select ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS
 	select ARCH_MIGHT_HAVE_PC_PARPORT
 	select ARCH_MIGHT_HAVE_PC_PARPORT
 	select HAVE_IDE
 	select HAVE_IDE
 	select HAVE_OPROFILE
 	select HAVE_OPROFILE

+ 0 - 1
arch/parisc/configs/c8000_defconfig

@@ -245,7 +245,6 @@ CONFIG_DEBUG_RT_MUTEXES=y
 CONFIG_PROVE_RCU_DELAY=y
 CONFIG_PROVE_RCU_DELAY=y
 CONFIG_DEBUG_BLOCK_EXT_DEVT=y
 CONFIG_DEBUG_BLOCK_EXT_DEVT=y
 CONFIG_LATENCYTOP=y
 CONFIG_LATENCYTOP=y
-CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y
 CONFIG_KEYS=y
 CONFIG_KEYS=y
 # CONFIG_CRYPTO_HW is not set
 # CONFIG_CRYPTO_HW is not set
 CONFIG_FONTS=y
 CONFIG_FONTS=y

+ 0 - 1
arch/parisc/configs/generic-64bit_defconfig

@@ -291,7 +291,6 @@ CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
 CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
 CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
 # CONFIG_SCHED_DEBUG is not set
 # CONFIG_SCHED_DEBUG is not set
 CONFIG_TIMER_STATS=y
 CONFIG_TIMER_STATS=y
-CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y
 CONFIG_CRYPTO_MANAGER=y
 CONFIG_CRYPTO_MANAGER=y
 CONFIG_CRYPTO_ECB=m
 CONFIG_CRYPTO_ECB=m
 CONFIG_CRYPTO_PCBC=m
 CONFIG_CRYPTO_PCBC=m

+ 12 - 10
arch/parisc/include/asm/uaccess.h

@@ -208,13 +208,13 @@ unsigned long copy_in_user(void __user *dst, const void __user *src, unsigned lo
 #define __copy_to_user_inatomic __copy_to_user
 #define __copy_to_user_inatomic __copy_to_user
 #define __copy_from_user_inatomic __copy_from_user
 #define __copy_from_user_inatomic __copy_from_user
 
 
-extern void copy_from_user_overflow(void)
-#ifdef CONFIG_DEBUG_STRICT_USER_COPY_CHECKS
-        __compiletime_error("copy_from_user() buffer size is not provably correct")
-#else
-        __compiletime_warning("copy_from_user() buffer size is not provably correct")
-#endif
-;
+extern void __compiletime_error("usercopy buffer size is too small")
+__bad_copy_user(void);
+
+static inline void copy_user_overflow(int size, unsigned long count)
+{
+	WARN(1, "Buffer overflow detected (%d < %lu)!\n", size, count);
+}
 
 
 static inline unsigned long __must_check copy_from_user(void *to,
 static inline unsigned long __must_check copy_from_user(void *to,
                                           const void __user *from,
                                           const void __user *from,
@@ -223,10 +223,12 @@ static inline unsigned long __must_check copy_from_user(void *to,
         int sz = __compiletime_object_size(to);
         int sz = __compiletime_object_size(to);
         int ret = -EFAULT;
         int ret = -EFAULT;
 
 
-        if (likely(sz == -1 || !__builtin_constant_p(n) || sz >= n))
+        if (likely(sz == -1 || sz >= n))
                 ret = __copy_from_user(to, from, n);
                 ret = __copy_from_user(to, from, n);
-        else
-                copy_from_user_overflow();
+        else if (!__builtin_constant_p(n))
+		copy_user_overflow(sz, n);
+	else
+                __bad_copy_user();
 
 
         return ret;
         return ret;
 }
 }

+ 1 - 0
arch/powerpc/include/asm/cputhreads.h

@@ -3,6 +3,7 @@
 
 
 #ifndef __ASSEMBLY__
 #ifndef __ASSEMBLY__
 #include <linux/cpumask.h>
 #include <linux/cpumask.h>
+#include <asm/cpu_has_feature.h>
 
 
 /*
 /*
  * Mapping of threads to cores
  * Mapping of threads to cores

+ 1 - 1
arch/powerpc/include/asm/hmi.h

@@ -21,7 +21,7 @@
 #ifndef __ASM_PPC64_HMI_H__
 #ifndef __ASM_PPC64_HMI_H__
 #define __ASM_PPC64_HMI_H__
 #define __ASM_PPC64_HMI_H__
 
 
-#ifdef CONFIG_PPC_BOOK3S_64
+#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
 
 
 #define	CORE_TB_RESYNC_REQ_BIT		63
 #define	CORE_TB_RESYNC_REQ_BIT		63
 #define MAX_SUBCORE_PER_CORE		4
 #define MAX_SUBCORE_PER_CORE		4

+ 7 - 5
arch/powerpc/include/asm/paca.h

@@ -183,11 +183,6 @@ struct paca_struct {
 	 */
 	 */
 	u16 in_mce;
 	u16 in_mce;
 	u8 hmi_event_available;		 /* HMI event is available */
 	u8 hmi_event_available;		 /* HMI event is available */
-	/*
-	 * Bitmap for sibling subcore status. See kvm/book3s_hv_ras.c for
-	 * more details
-	 */
-	struct sibling_subcore_state *sibling_subcore_state;
 #endif
 #endif
 
 
 	/* Stuff for accurate time accounting */
 	/* Stuff for accurate time accounting */
@@ -202,6 +197,13 @@ struct paca_struct {
 	struct kvmppc_book3s_shadow_vcpu shadow_vcpu;
 	struct kvmppc_book3s_shadow_vcpu shadow_vcpu;
 #endif
 #endif
 	struct kvmppc_host_state kvm_hstate;
 	struct kvmppc_host_state kvm_hstate;
+#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
+	/*
+	 * Bitmap for sibling subcore status. See kvm/book3s_hv_ras.c for
+	 * more details
+	 */
+	struct sibling_subcore_state *sibling_subcore_state;
+#endif
 #endif
 #endif
 };
 };
 
 

+ 1 - 0
arch/powerpc/include/asm/pci-bridge.h

@@ -301,6 +301,7 @@ extern void pci_process_bridge_OF_ranges(struct pci_controller *hose,
 /* Allocate & free a PCI host bridge structure */
 /* Allocate & free a PCI host bridge structure */
 extern struct pci_controller *pcibios_alloc_controller(struct device_node *dev);
 extern struct pci_controller *pcibios_alloc_controller(struct device_node *dev);
 extern void pcibios_free_controller(struct pci_controller *phb);
 extern void pcibios_free_controller(struct pci_controller *phb);
+extern void pcibios_free_controller_deferred(struct pci_host_bridge *bridge);
 
 
 #ifdef CONFIG_PCI
 #ifdef CONFIG_PCI
 extern int pcibios_vaddr_is_ioport(void __iomem *address);
 extern int pcibios_vaddr_is_ioport(void __iomem *address);

+ 7 - 12
arch/powerpc/include/asm/uaccess.h

@@ -311,14 +311,12 @@ static inline unsigned long copy_from_user(void *to,
 	unsigned long over;
 	unsigned long over;
 
 
 	if (access_ok(VERIFY_READ, from, n)) {
 	if (access_ok(VERIFY_READ, from, n)) {
-		if (!__builtin_constant_p(n))
-			check_object_size(to, n, false);
+		check_object_size(to, n, false);
 		return __copy_tofrom_user((__force void __user *)to, from, n);
 		return __copy_tofrom_user((__force void __user *)to, from, n);
 	}
 	}
 	if ((unsigned long)from < TASK_SIZE) {
 	if ((unsigned long)from < TASK_SIZE) {
 		over = (unsigned long)from + n - TASK_SIZE;
 		over = (unsigned long)from + n - TASK_SIZE;
-		if (!__builtin_constant_p(n - over))
-			check_object_size(to, n - over, false);
+		check_object_size(to, n - over, false);
 		return __copy_tofrom_user((__force void __user *)to, from,
 		return __copy_tofrom_user((__force void __user *)to, from,
 				n - over) + over;
 				n - over) + over;
 	}
 	}
@@ -331,14 +329,12 @@ static inline unsigned long copy_to_user(void __user *to,
 	unsigned long over;
 	unsigned long over;
 
 
 	if (access_ok(VERIFY_WRITE, to, n)) {
 	if (access_ok(VERIFY_WRITE, to, n)) {
-		if (!__builtin_constant_p(n))
-			check_object_size(from, n, true);
+		check_object_size(from, n, true);
 		return __copy_tofrom_user(to, (__force void __user *)from, n);
 		return __copy_tofrom_user(to, (__force void __user *)from, n);
 	}
 	}
 	if ((unsigned long)to < TASK_SIZE) {
 	if ((unsigned long)to < TASK_SIZE) {
 		over = (unsigned long)to + n - TASK_SIZE;
 		over = (unsigned long)to + n - TASK_SIZE;
-		if (!__builtin_constant_p(n))
-			check_object_size(from, n - over, true);
+		check_object_size(from, n - over, true);
 		return __copy_tofrom_user(to, (__force void __user *)from,
 		return __copy_tofrom_user(to, (__force void __user *)from,
 				n - over) + over;
 				n - over) + over;
 	}
 	}
@@ -383,8 +379,7 @@ static inline unsigned long __copy_from_user_inatomic(void *to,
 			return 0;
 			return 0;
 	}
 	}
 
 
-	if (!__builtin_constant_p(n))
-		check_object_size(to, n, false);
+	check_object_size(to, n, false);
 
 
 	return __copy_tofrom_user((__force void __user *)to, from, n);
 	return __copy_tofrom_user((__force void __user *)to, from, n);
 }
 }
@@ -412,8 +407,8 @@ static inline unsigned long __copy_to_user_inatomic(void __user *to,
 		if (ret == 0)
 		if (ret == 0)
 			return 0;
 			return 0;
 	}
 	}
-	if (!__builtin_constant_p(n))
-		check_object_size(from, n, true);
+
+	check_object_size(from, n, true);
 
 
 	return __copy_tofrom_user(to, (__force const void __user *)from, n);
 	return __copy_tofrom_user(to, (__force const void __user *)from, n);
 }
 }

+ 1 - 1
arch/powerpc/kernel/Makefile

@@ -41,7 +41,7 @@ obj-$(CONFIG_VDSO32)		+= vdso32/
 obj-$(CONFIG_HAVE_HW_BREAKPOINT)	+= hw_breakpoint.o
 obj-$(CONFIG_HAVE_HW_BREAKPOINT)	+= hw_breakpoint.o
 obj-$(CONFIG_PPC_BOOK3S_64)	+= cpu_setup_ppc970.o cpu_setup_pa6t.o
 obj-$(CONFIG_PPC_BOOK3S_64)	+= cpu_setup_ppc970.o cpu_setup_pa6t.o
 obj-$(CONFIG_PPC_BOOK3S_64)	+= cpu_setup_power.o
 obj-$(CONFIG_PPC_BOOK3S_64)	+= cpu_setup_power.o
-obj-$(CONFIG_PPC_BOOK3S_64)	+= mce.o mce_power.o hmi.o
+obj-$(CONFIG_PPC_BOOK3S_64)	+= mce.o mce_power.o
 obj-$(CONFIG_PPC_BOOK3E_64)	+= exceptions-64e.o idle_book3e.o
 obj-$(CONFIG_PPC_BOOK3E_64)	+= exceptions-64e.o idle_book3e.o
 obj-$(CONFIG_PPC64)		+= vdso64/
 obj-$(CONFIG_PPC64)		+= vdso64/
 obj-$(CONFIG_ALTIVEC)		+= vecemu.o
 obj-$(CONFIG_ALTIVEC)		+= vecemu.o

+ 6 - 6
arch/powerpc/kernel/entry_64.S

@@ -368,13 +368,13 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
 tabort_syscall:
 tabort_syscall:
 	/* Firstly we need to enable TM in the kernel */
 	/* Firstly we need to enable TM in the kernel */
 	mfmsr	r10
 	mfmsr	r10
-	li	r13, 1
-	rldimi	r10, r13, MSR_TM_LG, 63-MSR_TM_LG
+	li	r9, 1
+	rldimi	r10, r9, MSR_TM_LG, 63-MSR_TM_LG
 	mtmsrd	r10, 0
 	mtmsrd	r10, 0
 
 
 	/* tabort, this dooms the transaction, nothing else */
 	/* tabort, this dooms the transaction, nothing else */
-	li	r13, (TM_CAUSE_SYSCALL|TM_CAUSE_PERSISTENT)
-	TABORT(R13)
+	li	r9, (TM_CAUSE_SYSCALL|TM_CAUSE_PERSISTENT)
+	TABORT(R9)
 
 
 	/*
 	/*
 	 * Return directly to userspace. We have corrupted user register state,
 	 * Return directly to userspace. We have corrupted user register state,
@@ -382,8 +382,8 @@ tabort_syscall:
 	 * resume after the tbegin of the aborted transaction with the
 	 * resume after the tbegin of the aborted transaction with the
 	 * checkpointed register state.
 	 * checkpointed register state.
 	 */
 	 */
-	li	r13, MSR_RI
-	andc	r10, r10, r13
+	li	r9, MSR_RI
+	andc	r10, r10, r9
 	mtmsrd	r10, 1
 	mtmsrd	r10, 1
 	mtspr	SPRN_SRR0, r11
 	mtspr	SPRN_SRR0, r11
 	mtspr	SPRN_SRR1, r12
 	mtspr	SPRN_SRR1, r12

+ 24 - 5
arch/powerpc/kernel/exceptions-64s.S

@@ -485,7 +485,23 @@ machine_check_fwnmi:
 	EXCEPTION_PROLOG_0(PACA_EXMC)
 	EXCEPTION_PROLOG_0(PACA_EXMC)
 machine_check_pSeries_0:
 machine_check_pSeries_0:
 	EXCEPTION_PROLOG_1(PACA_EXMC, KVMTEST, 0x200)
 	EXCEPTION_PROLOG_1(PACA_EXMC, KVMTEST, 0x200)
-	EXCEPTION_PROLOG_PSERIES_1(machine_check_common, EXC_STD)
+	/*
+	 * The following is essentially EXCEPTION_PROLOG_PSERIES_1 with the
+	 * difference that MSR_RI is not enabled, because PACA_EXMC is being
+	 * used, so nested machine check corrupts it. machine_check_common
+	 * enables MSR_RI.
+	 */
+	ld	r12,PACAKBASE(r13)
+	ld	r10,PACAKMSR(r13)
+	xori	r10,r10,MSR_RI
+	mfspr	r11,SPRN_SRR0
+	LOAD_HANDLER(r12, machine_check_common)
+	mtspr	SPRN_SRR0,r12
+	mfspr	r12,SPRN_SRR1
+	mtspr	SPRN_SRR1,r10
+	rfid
+	b	.	/* prevent speculative execution */
+
 	KVM_HANDLER_SKIP(PACA_EXMC, EXC_STD, 0x200)
 	KVM_HANDLER_SKIP(PACA_EXMC, EXC_STD, 0x200)
 	KVM_HANDLER_SKIP(PACA_EXGEN, EXC_STD, 0x300)
 	KVM_HANDLER_SKIP(PACA_EXGEN, EXC_STD, 0x300)
 	KVM_HANDLER_SKIP(PACA_EXSLB, EXC_STD, 0x380)
 	KVM_HANDLER_SKIP(PACA_EXSLB, EXC_STD, 0x380)
@@ -969,14 +985,17 @@ ALT_MMU_FTR_SECTION_END_IFCLR(MMU_FTR_TYPE_RADIX)
 machine_check_common:
 machine_check_common:
 
 
 	mfspr	r10,SPRN_DAR
 	mfspr	r10,SPRN_DAR
-	std	r10,PACA_EXGEN+EX_DAR(r13)
+	std	r10,PACA_EXMC+EX_DAR(r13)
 	mfspr	r10,SPRN_DSISR
 	mfspr	r10,SPRN_DSISR
-	stw	r10,PACA_EXGEN+EX_DSISR(r13)
+	stw	r10,PACA_EXMC+EX_DSISR(r13)
 	EXCEPTION_PROLOG_COMMON(0x200, PACA_EXMC)
 	EXCEPTION_PROLOG_COMMON(0x200, PACA_EXMC)
 	FINISH_NAP
 	FINISH_NAP
 	RECONCILE_IRQ_STATE(r10, r11)
 	RECONCILE_IRQ_STATE(r10, r11)
-	ld	r3,PACA_EXGEN+EX_DAR(r13)
-	lwz	r4,PACA_EXGEN+EX_DSISR(r13)
+	ld	r3,PACA_EXMC+EX_DAR(r13)
+	lwz	r4,PACA_EXMC+EX_DSISR(r13)
+	/* Enable MSR_RI when finished with PACA_EXMC */
+	li	r10,MSR_RI
+	mtmsrd 	r10,1
 	std	r3,_DAR(r1)
 	std	r3,_DAR(r1)
 	std	r4,_DSISR(r1)
 	std	r4,_DSISR(r1)
 	bl	save_nvgprs
 	bl	save_nvgprs

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

@@ -29,7 +29,7 @@
 #include <linux/kprobes.h>
 #include <linux/kprobes.h>
 #include <linux/ptrace.h>
 #include <linux/ptrace.h>
 #include <linux/preempt.h>
 #include <linux/preempt.h>
-#include <linux/module.h>
+#include <linux/extable.h>
 #include <linux/kdebug.h>
 #include <linux/kdebug.h>
 #include <linux/slab.h>
 #include <linux/slab.h>
 #include <asm/code-patching.h>
 #include <asm/code-patching.h>

+ 36 - 0
arch/powerpc/kernel/pci-common.c

@@ -153,6 +153,42 @@ void pcibios_free_controller(struct pci_controller *phb)
 }
 }
 EXPORT_SYMBOL_GPL(pcibios_free_controller);
 EXPORT_SYMBOL_GPL(pcibios_free_controller);
 
 
+/*
+ * This function is used to call pcibios_free_controller()
+ * in a deferred manner: a callback from the PCI subsystem.
+ *
+ * _*DO NOT*_ call pcibios_free_controller() explicitly if
+ * this is used (or it may access an invalid *phb pointer).
+ *
+ * The callback occurs when all references to the root bus
+ * are dropped (e.g., child buses/devices and their users).
+ *
+ * It's called as .release_fn() of 'struct pci_host_bridge'
+ * which is associated with the 'struct pci_controller.bus'
+ * (root bus) - it expects .release_data to hold a pointer
+ * to 'struct pci_controller'.
+ *
+ * In order to use it, register .release_fn()/release_data
+ * like this:
+ *
+ * pci_set_host_bridge_release(bridge,
+ *                             pcibios_free_controller_deferred
+ *                             (void *) phb);
+ *
+ * e.g. in the pcibios_root_bridge_prepare() callback from
+ * pci_create_root_bus().
+ */
+void pcibios_free_controller_deferred(struct pci_host_bridge *bridge)
+{
+	struct pci_controller *phb = (struct pci_controller *)
+					 bridge->release_data;
+
+	pr_debug("domain %d, dynamic %d\n", phb->global_number, phb->is_dynamic);
+
+	pcibios_free_controller(phb);
+}
+EXPORT_SYMBOL_GPL(pcibios_free_controller_deferred);
+
 /*
 /*
  * The function is used to return the minimal alignment
  * The function is used to return the minimal alignment
  * for memory or I/O windows of the associated P2P bridge.
  * for memory or I/O windows of the associated P2P bridge.

+ 6 - 3
arch/powerpc/kernel/prom_init.c

@@ -695,7 +695,7 @@ unsigned char ibm_architecture_vec[] = {
 	OV4_MIN_ENT_CAP,		/* minimum VP entitled capacity */
 	OV4_MIN_ENT_CAP,		/* minimum VP entitled capacity */
 
 
 	/* option vector 5: PAPR/OF options */
 	/* option vector 5: PAPR/OF options */
-	VECTOR_LENGTH(18),		/* length */
+	VECTOR_LENGTH(21),		/* length */
 	0,				/* don't ignore, don't halt */
 	0,				/* don't ignore, don't halt */
 	OV5_FEAT(OV5_LPAR) | OV5_FEAT(OV5_SPLPAR) | OV5_FEAT(OV5_LARGE_PAGES) |
 	OV5_FEAT(OV5_LPAR) | OV5_FEAT(OV5_SPLPAR) | OV5_FEAT(OV5_LARGE_PAGES) |
 	OV5_FEAT(OV5_DRCONF_MEMORY) | OV5_FEAT(OV5_DONATE_DEDICATE_CPU) |
 	OV5_FEAT(OV5_DRCONF_MEMORY) | OV5_FEAT(OV5_DONATE_DEDICATE_CPU) |
@@ -726,8 +726,11 @@ unsigned char ibm_architecture_vec[] = {
 	0,
 	0,
 	0,
 	0,
 	OV5_FEAT(OV5_PFO_HW_RNG) | OV5_FEAT(OV5_PFO_HW_ENCR) |
 	OV5_FEAT(OV5_PFO_HW_RNG) | OV5_FEAT(OV5_PFO_HW_ENCR) |
-	OV5_FEAT(OV5_PFO_HW_842),
-	OV5_FEAT(OV5_SUB_PROCESSORS),
+	OV5_FEAT(OV5_PFO_HW_842),				/* Byte 17 */
+	0,							/* Byte 18 */
+	0,							/* Byte 19 */
+	0,							/* Byte 20 */
+	OV5_FEAT(OV5_SUB_PROCESSORS),				/* Byte 21 */
 
 
 	/* option vector 6: IBM PAPR hints */
 	/* option vector 6: IBM PAPR hints */
 	VECTOR_LENGTH(3),		/* length */
 	VECTOR_LENGTH(3),		/* length */

+ 14 - 0
arch/powerpc/kernel/signal_32.c

@@ -1226,7 +1226,21 @@ long sys_rt_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8,
 		(regs->gpr[1] + __SIGNAL_FRAMESIZE + 16);
 		(regs->gpr[1] + __SIGNAL_FRAMESIZE + 16);
 	if (!access_ok(VERIFY_READ, rt_sf, sizeof(*rt_sf)))
 	if (!access_ok(VERIFY_READ, rt_sf, sizeof(*rt_sf)))
 		goto bad;
 		goto bad;
+
 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
+	/*
+	 * If there is a transactional state then throw it away.
+	 * The purpose of a sigreturn is to destroy all traces of the
+	 * signal frame, this includes any transactional state created
+	 * within in. We only check for suspended as we can never be
+	 * active in the kernel, we are active, there is nothing better to
+	 * do than go ahead and Bad Thing later.
+	 * The cause is not important as there will never be a
+	 * recheckpoint so it's not user visible.
+	 */
+	if (MSR_TM_SUSPENDED(mfmsr()))
+		tm_reclaim_current(0);
+
 	if (__get_user(tmp, &rt_sf->uc.uc_link))
 	if (__get_user(tmp, &rt_sf->uc.uc_link))
 		goto bad;
 		goto bad;
 	uc_transact = (struct ucontext __user *)(uintptr_t)tmp;
 	uc_transact = (struct ucontext __user *)(uintptr_t)tmp;

+ 14 - 0
arch/powerpc/kernel/signal_64.c

@@ -676,7 +676,21 @@ int sys_rt_sigreturn(unsigned long r3, unsigned long r4, unsigned long r5,
 	if (__copy_from_user(&set, &uc->uc_sigmask, sizeof(set)))
 	if (__copy_from_user(&set, &uc->uc_sigmask, sizeof(set)))
 		goto badframe;
 		goto badframe;
 	set_current_blocked(&set);
 	set_current_blocked(&set);
+
 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
+	/*
+	 * If there is a transactional state then throw it away.
+	 * The purpose of a sigreturn is to destroy all traces of the
+	 * signal frame, this includes any transactional state created
+	 * within in. We only check for suspended as we can never be
+	 * active in the kernel, we are active, there is nothing better to
+	 * do than go ahead and Bad Thing later.
+	 * The cause is not important as there will never be a
+	 * recheckpoint so it's not user visible.
+	 */
+	if (MSR_TM_SUSPENDED(mfmsr()))
+		tm_reclaim_current(0);
+
 	if (__get_user(msr, &uc->uc_mcontext.gp_regs[PT_MSR]))
 	if (__get_user(msr, &uc->uc_mcontext.gp_regs[PT_MSR]))
 		goto badframe;
 		goto badframe;
 	if (MSR_TM_ACTIVE(msr)) {
 	if (MSR_TM_ACTIVE(msr)) {

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

@@ -830,7 +830,7 @@ int __cpu_disable(void)
 
 
 	/* Update sibling maps */
 	/* Update sibling maps */
 	base = cpu_first_thread_sibling(cpu);
 	base = cpu_first_thread_sibling(cpu);
-	for (i = 0; i < threads_per_core; i++) {
+	for (i = 0; i < threads_per_core && base + i < nr_cpu_ids; i++) {
 		cpumask_clear_cpu(cpu, cpu_sibling_mask(base + i));
 		cpumask_clear_cpu(cpu, cpu_sibling_mask(base + i));
 		cpumask_clear_cpu(base + i, cpu_sibling_mask(cpu));
 		cpumask_clear_cpu(base + i, cpu_sibling_mask(cpu));
 		cpumask_clear_cpu(cpu, cpu_core_mask(base + i));
 		cpumask_clear_cpu(cpu, cpu_core_mask(base + i));

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

@@ -25,7 +25,8 @@
 #include <linux/user.h>
 #include <linux/user.h>
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/module.h>
+#include <linux/extable.h>
+#include <linux/module.h>	/* print_modules */
 #include <linux/prctl.h>
 #include <linux/prctl.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
 #include <linux/kprobes.h>
 #include <linux/kprobes.h>

+ 1 - 0
arch/powerpc/kvm/Makefile

@@ -78,6 +78,7 @@ kvm-book3s_64-builtin-xics-objs-$(CONFIG_KVM_XICS) := \
 
 
 ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
 ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
 kvm-book3s_64-builtin-objs-$(CONFIG_KVM_BOOK3S_64_HANDLER) += \
 kvm-book3s_64-builtin-objs-$(CONFIG_KVM_BOOK3S_64_HANDLER) += \
+	book3s_hv_hmi.o \
 	book3s_hv_rmhandlers.o \
 	book3s_hv_rmhandlers.o \
 	book3s_hv_rm_mmu.o \
 	book3s_hv_rm_mmu.o \
 	book3s_hv_ras.o \
 	book3s_hv_ras.o \

+ 0 - 0
arch/powerpc/kernel/hmi.c → arch/powerpc/kvm/book3s_hv_hmi.c


+ 4 - 3
arch/powerpc/lib/checksum_32.S

@@ -127,18 +127,19 @@ _GLOBAL(csum_partial_copy_generic)
 	stw	r7,12(r1)
 	stw	r7,12(r1)
 	stw	r8,8(r1)
 	stw	r8,8(r1)
 
 
-	rlwinm	r0,r4,3,0x8
-	rlwnm	r6,r6,r0,0,31	/* odd destination address: rotate one byte */
-	cmplwi	cr7,r0,0	/* is destination address even ? */
 	addic	r12,r6,0
 	addic	r12,r6,0
 	addi	r6,r4,-4
 	addi	r6,r4,-4
 	neg	r0,r4
 	neg	r0,r4
 	addi	r4,r3,-4
 	addi	r4,r3,-4
 	andi.	r0,r0,CACHELINE_MASK	/* # bytes to start of cache line */
 	andi.	r0,r0,CACHELINE_MASK	/* # bytes to start of cache line */
+	crset	4*cr7+eq
 	beq	58f
 	beq	58f
 
 
 	cmplw	0,r5,r0			/* is this more than total to do? */
 	cmplw	0,r5,r0			/* is this more than total to do? */
 	blt	63f			/* if not much to do */
 	blt	63f			/* if not much to do */
+	rlwinm	r7,r6,3,0x8
+	rlwnm	r12,r12,r7,0,31	/* odd destination address: rotate one byte */
+	cmplwi	cr7,r7,0	/* is destination address even ? */
 	andi.	r8,r0,3			/* get it word-aligned first */
 	andi.	r8,r0,3			/* get it word-aligned first */
 	mtctr	r8
 	mtctr	r8
 	beq+	61f
 	beq+	61f

+ 1 - 1
arch/powerpc/mm/fault.c

@@ -26,7 +26,7 @@
 #include <linux/mm.h>
 #include <linux/mm.h>
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>
 #include <linux/highmem.h>
 #include <linux/highmem.h>
-#include <linux/module.h>
+#include <linux/extable.h>
 #include <linux/kprobes.h>
 #include <linux/kprobes.h>
 #include <linux/kdebug.h>
 #include <linux/kdebug.h>
 #include <linux/perf_event.h>
 #include <linux/perf_event.h>

+ 6 - 1
arch/powerpc/mm/slb_low.S

@@ -113,7 +113,12 @@ BEGIN_FTR_SECTION
 END_MMU_FTR_SECTION_IFCLR(MMU_FTR_1T_SEGMENT)
 END_MMU_FTR_SECTION_IFCLR(MMU_FTR_1T_SEGMENT)
 	b	slb_finish_load_1T
 	b	slb_finish_load_1T
 
 
-0:
+0:	/*
+	 * For userspace addresses, make sure this is region 0.
+	 */
+	cmpdi	r9, 0
+	bne	8f
+
 	/* when using slices, we extract the psize off the slice bitmaps
 	/* when using slices, we extract the psize off the slice bitmaps
 	 * and then we need to get the sllp encoding off the mmu_psize_defs
 	 * and then we need to get the sllp encoding off the mmu_psize_defs
 	 * array.
 	 * array.

+ 0 - 1
arch/powerpc/platforms/512x/mpc512x_lpbfifo.c

@@ -528,7 +528,6 @@ static struct platform_driver mpc512x_lpbfifo_driver = {
 	.remove = mpc512x_lpbfifo_remove,
 	.remove = mpc512x_lpbfifo_remove,
 	.driver = {
 	.driver = {
 		.name = DRV_NAME,
 		.name = DRV_NAME,
-		.owner = THIS_MODULE,
 		.of_match_table = mpc512x_lpbfifo_match,
 		.of_match_table = mpc512x_lpbfifo_match,
 	},
 	},
 };
 };

+ 0 - 1
arch/powerpc/platforms/83xx/mcu_mpc8349emitx.c

@@ -222,7 +222,6 @@ static const struct of_device_id mcu_of_match_table[] = {
 static struct i2c_driver mcu_driver = {
 static struct i2c_driver mcu_driver = {
 	.driver = {
 	.driver = {
 		.name = "mcu-mpc8349emitx",
 		.name = "mcu-mpc8349emitx",
-		.owner = THIS_MODULE,
 		.of_match_table = mcu_of_match_table,
 		.of_match_table = mcu_of_match_table,
 	},
 	},
 	.probe = mcu_probe,
 	.probe = mcu_probe,

+ 1 - 1
arch/powerpc/platforms/embedded6xx/holly.c

@@ -26,7 +26,7 @@
 #include <linux/tty.h>
 #include <linux/tty.h>
 #include <linux/serial_core.h>
 #include <linux/serial_core.h>
 #include <linux/of_platform.h>
 #include <linux/of_platform.h>
-#include <linux/module.h>
+#include <linux/extable.h>
 
 
 #include <asm/time.h>
 #include <asm/time.h>
 #include <asm/machdep.h>
 #include <asm/machdep.h>

+ 1 - 1
arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c

@@ -23,7 +23,7 @@
 #include <linux/pci.h>
 #include <linux/pci.h>
 #include <linux/kdev_t.h>
 #include <linux/kdev_t.h>
 #include <linux/console.h>
 #include <linux/console.h>
-#include <linux/module.h>
+#include <linux/extable.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
 #include <linux/irq.h>
 #include <linux/irq.h>
 #include <linux/seq_file.h>
 #include <linux/seq_file.h>

+ 6 - 1
arch/powerpc/platforms/powernv/opal-dump.c

@@ -370,6 +370,7 @@ static irqreturn_t process_dump(int irq, void *data)
 	uint32_t dump_id, dump_size, dump_type;
 	uint32_t dump_id, dump_size, dump_type;
 	struct dump_obj *dump;
 	struct dump_obj *dump;
 	char name[22];
 	char name[22];
+	struct kobject *kobj;
 
 
 	rc = dump_read_info(&dump_id, &dump_size, &dump_type);
 	rc = dump_read_info(&dump_id, &dump_size, &dump_type);
 	if (rc != OPAL_SUCCESS)
 	if (rc != OPAL_SUCCESS)
@@ -381,8 +382,12 @@ static irqreturn_t process_dump(int irq, void *data)
 	 * that gracefully and not create two conflicting
 	 * that gracefully and not create two conflicting
 	 * entries.
 	 * entries.
 	 */
 	 */
-	if (kset_find_obj(dump_kset, name))
+	kobj = kset_find_obj(dump_kset, name);
+	if (kobj) {
+		/* Drop reference added by kset_find_obj() */
+		kobject_put(kobj);
 		return 0;
 		return 0;
+	}
 
 
 	dump = create_dump_obj(dump_id, dump_size, dump_type);
 	dump = create_dump_obj(dump_id, dump_size, dump_type);
 	if (!dump)
 	if (!dump)

+ 6 - 1
arch/powerpc/platforms/powernv/opal-elog.c

@@ -247,6 +247,7 @@ static irqreturn_t elog_event(int irq, void *data)
 	uint64_t elog_type;
 	uint64_t elog_type;
 	int rc;
 	int rc;
 	char name[2+16+1];
 	char name[2+16+1];
+	struct kobject *kobj;
 
 
 	rc = opal_get_elog_size(&id, &size, &type);
 	rc = opal_get_elog_size(&id, &size, &type);
 	if (rc != OPAL_SUCCESS) {
 	if (rc != OPAL_SUCCESS) {
@@ -269,8 +270,12 @@ static irqreturn_t elog_event(int irq, void *data)
 	 * that gracefully and not create two conflicting
 	 * that gracefully and not create two conflicting
 	 * entries.
 	 * entries.
 	 */
 	 */
-	if (kset_find_obj(elog_kset, name))
+	kobj = kset_find_obj(elog_kset, name);
+	if (kobj) {
+		/* Drop reference added by kset_find_obj() */
+		kobject_put(kobj);
 		return IRQ_HANDLED;
 		return IRQ_HANDLED;
+	}
 
 
 	create_elog_obj(log_id, elog_size, elog_type);
 	create_elog_obj(log_id, elog_size, elog_type);
 
 

+ 12 - 8
arch/powerpc/platforms/powernv/pci-ioda.c

@@ -149,7 +149,7 @@ static void pnv_ioda_reserve_pe(struct pnv_phb *phb, int pe_no)
 
 
 static struct pnv_ioda_pe *pnv_ioda_alloc_pe(struct pnv_phb *phb)
 static struct pnv_ioda_pe *pnv_ioda_alloc_pe(struct pnv_phb *phb)
 {
 {
-	unsigned long pe = phb->ioda.total_pe_num - 1;
+	long pe;
 
 
 	for (pe = phb->ioda.total_pe_num - 1; pe >= 0; pe--) {
 	for (pe = phb->ioda.total_pe_num - 1; pe >= 0; pe--) {
 		if (!test_and_set_bit(pe, phb->ioda.pe_alloc))
 		if (!test_and_set_bit(pe, phb->ioda.pe_alloc))
@@ -162,11 +162,12 @@ static struct pnv_ioda_pe *pnv_ioda_alloc_pe(struct pnv_phb *phb)
 static void pnv_ioda_free_pe(struct pnv_ioda_pe *pe)
 static void pnv_ioda_free_pe(struct pnv_ioda_pe *pe)
 {
 {
 	struct pnv_phb *phb = pe->phb;
 	struct pnv_phb *phb = pe->phb;
+	unsigned int pe_num = pe->pe_number;
 
 
 	WARN_ON(pe->pdev);
 	WARN_ON(pe->pdev);
 
 
 	memset(pe, 0, sizeof(struct pnv_ioda_pe));
 	memset(pe, 0, sizeof(struct pnv_ioda_pe));
-	clear_bit(pe->pe_number, phb->ioda.pe_alloc);
+	clear_bit(pe_num, phb->ioda.pe_alloc);
 }
 }
 
 
 /* The default M64 BAR is shared by all PEs */
 /* The default M64 BAR is shared by all PEs */
@@ -3402,12 +3403,6 @@ static void pnv_ioda_release_pe(struct pnv_ioda_pe *pe)
 	struct pnv_phb *phb = pe->phb;
 	struct pnv_phb *phb = pe->phb;
 	struct pnv_ioda_pe *slave, *tmp;
 	struct pnv_ioda_pe *slave, *tmp;
 
 
-	/* Release slave PEs in compound PE */
-	if (pe->flags & PNV_IODA_PE_MASTER) {
-		list_for_each_entry_safe(slave, tmp, &pe->slaves, list)
-			pnv_ioda_release_pe(slave);
-	}
-
 	list_del(&pe->list);
 	list_del(&pe->list);
 	switch (phb->type) {
 	switch (phb->type) {
 	case PNV_PHB_IODA1:
 	case PNV_PHB_IODA1:
@@ -3422,6 +3417,15 @@ static void pnv_ioda_release_pe(struct pnv_ioda_pe *pe)
 
 
 	pnv_ioda_release_pe_seg(pe);
 	pnv_ioda_release_pe_seg(pe);
 	pnv_ioda_deconfigure_pe(pe->phb, pe);
 	pnv_ioda_deconfigure_pe(pe->phb, pe);
+
+	/* Release slave PEs in the compound PE */
+	if (pe->flags & PNV_IODA_PE_MASTER) {
+		list_for_each_entry_safe(slave, tmp, &pe->slaves, list) {
+			list_del(&slave->list);
+			pnv_ioda_free_pe(slave);
+		}
+	}
+
 	pnv_ioda_free_pe(pe);
 	pnv_ioda_free_pe(pe);
 }
 }
 
 

+ 4 - 0
arch/powerpc/platforms/pseries/pci.c

@@ -119,6 +119,10 @@ int pseries_root_bridge_prepare(struct pci_host_bridge *bridge)
 
 
 	bus = bridge->bus;
 	bus = bridge->bus;
 
 
+	/* Rely on the pcibios_free_controller_deferred() callback. */
+	pci_set_host_bridge_release(bridge, pcibios_free_controller_deferred,
+					(void *) pci_bus_to_host(bus));
+
 	dn = pcibios_get_phb_of_node(bus);
 	dn = pcibios_get_phb_of_node(bus);
 	if (!dn)
 	if (!dn)
 		return 0;
 		return 0;

+ 5 - 2
arch/powerpc/platforms/pseries/pci_dlpar.c

@@ -106,8 +106,11 @@ int remove_phb_dynamic(struct pci_controller *phb)
 		release_resource(res);
 		release_resource(res);
 	}
 	}
 
 
-	/* Free pci_controller data structure */
-	pcibios_free_controller(phb);
+	/*
+	 * The pci_controller data structure is freed by
+	 * the pcibios_free_controller_deferred() callback;
+	 * see pseries_root_bridge_prepare().
+	 */
 
 
 	return 0;
 	return 0;
 }
 }

+ 1 - 1
arch/powerpc/platforms/pseries/setup.c

@@ -41,7 +41,6 @@
 #include <linux/root_dev.h>
 #include <linux/root_dev.h>
 #include <linux/of.h>
 #include <linux/of.h>
 #include <linux/of_pci.h>
 #include <linux/of_pci.h>
-#include <linux/kexec.h>
 
 
 #include <asm/mmu.h>
 #include <asm/mmu.h>
 #include <asm/processor.h>
 #include <asm/processor.h>
@@ -66,6 +65,7 @@
 #include <asm/eeh.h>
 #include <asm/eeh.h>
 #include <asm/reg.h>
 #include <asm/reg.h>
 #include <asm/plpar_wrappers.h>
 #include <asm/plpar_wrappers.h>
+#include <asm/kexec.h>
 
 
 #include "pseries.h"
 #include "pseries.h"
 
 

+ 4 - 2
arch/powerpc/sysdev/cpm1.c

@@ -534,7 +534,8 @@ struct cpm1_gpio16_chip {
 
 
 static void cpm1_gpio16_save_regs(struct of_mm_gpio_chip *mm_gc)
 static void cpm1_gpio16_save_regs(struct of_mm_gpio_chip *mm_gc)
 {
 {
-	struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc);
+	struct cpm1_gpio16_chip *cpm1_gc =
+		container_of(mm_gc, struct cpm1_gpio16_chip, mm_gc);
 	struct cpm_ioport16 __iomem *iop = mm_gc->regs;
 	struct cpm_ioport16 __iomem *iop = mm_gc->regs;
 
 
 	cpm1_gc->cpdata = in_be16(&iop->dat);
 	cpm1_gc->cpdata = in_be16(&iop->dat);
@@ -649,7 +650,8 @@ struct cpm1_gpio32_chip {
 
 
 static void cpm1_gpio32_save_regs(struct of_mm_gpio_chip *mm_gc)
 static void cpm1_gpio32_save_regs(struct of_mm_gpio_chip *mm_gc)
 {
 {
-	struct cpm1_gpio32_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc);
+	struct cpm1_gpio32_chip *cpm1_gc =
+		container_of(mm_gc, struct cpm1_gpio32_chip, mm_gc);
 	struct cpm_ioport32b __iomem *iop = mm_gc->regs;
 	struct cpm_ioport32b __iomem *iop = mm_gc->regs;
 
 
 	cpm1_gc->cpdata = in_be32(&iop->dat);
 	cpm1_gc->cpdata = in_be32(&iop->dat);

+ 2 - 1
arch/powerpc/sysdev/cpm_common.c

@@ -94,7 +94,8 @@ struct cpm2_gpio32_chip {
 
 
 static void cpm2_gpio32_save_regs(struct of_mm_gpio_chip *mm_gc)
 static void cpm2_gpio32_save_regs(struct of_mm_gpio_chip *mm_gc)
 {
 {
-	struct cpm2_gpio32_chip *cpm2_gc = gpiochip_get_data(&mm_gc->gc);
+	struct cpm2_gpio32_chip *cpm2_gc =
+		container_of(mm_gc, struct cpm2_gpio32_chip, mm_gc);
 	struct cpm2_ioports __iomem *iop = mm_gc->regs;
 	struct cpm2_ioports __iomem *iop = mm_gc->regs;
 
 
 	cpm2_gc->cpdata = in_be32(&iop->dat);
 	cpm2_gc->cpdata = in_be32(&iop->dat);

+ 1 - 1
arch/powerpc/sysdev/fsl_rio.c

@@ -23,7 +23,7 @@
  */
  */
 
 
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/module.h>
+#include <linux/extable.h>
 #include <linux/types.h>
 #include <linux/types.h>
 #include <linux/dma-mapping.h>
 #include <linux/dma-mapping.h>
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно