浏览代码

Merge tag 'v4.14-rc7' into x86/mm, to pick up fixes

Signed-off-by: Ingo Molnar <mingo@kernel.org>
Ingo Molnar 7 年之前
父节点
当前提交
e17bae3266
共有 100 个文件被更改,包括 599 次插入375 次删除
  1. 8 0
      Documentation/ABI/testing/sysfs-bus-iio-proximity-as3935
  2. 3 1
      Documentation/ABI/testing/sysfs-devices-power
  3. 0 14
      Documentation/core-api/kernel-api.rst
  4. 5 0
      Documentation/devicetree/bindings/iio/proximity/as3935.txt
  5. 3 3
      Documentation/devicetree/bindings/interrupt-controller/arm,gic-v3.txt
  6. 18 13
      Documentation/kbuild/makefiles.txt
  7. 1 0
      Documentation/process/index.rst
  8. 147 0
      Documentation/process/kernel-enforcement-statement.rst
  9. 2 2
      MAINTAINERS
  10. 6 6
      Makefile
  11. 2 2
      arch/alpha/kernel/sys_alcor.c
  12. 6 6
      arch/alpha/kernel/sys_cabriolet.c
  13. 10 10
      arch/alpha/kernel/sys_dp264.c
  14. 2 2
      arch/alpha/kernel/sys_eb64p.c
  15. 2 2
      arch/alpha/kernel/sys_eiger.c
  16. 3 3
      arch/alpha/kernel/sys_miata.c
  17. 2 2
      arch/alpha/kernel/sys_mikasa.c
  18. 1 1
      arch/alpha/kernel/sys_nautilus.c
  19. 3 3
      arch/alpha/kernel/sys_noritake.c
  20. 2 2
      arch/alpha/kernel/sys_rawhide.c
  21. 3 3
      arch/alpha/kernel/sys_ruffian.c
  22. 2 2
      arch/alpha/kernel/sys_rx164.c
  23. 5 5
      arch/alpha/kernel/sys_sable.c
  24. 4 4
      arch/alpha/kernel/sys_sio.c
  25. 2 2
      arch/alpha/kernel/sys_sx164.c
  26. 3 3
      arch/alpha/kernel/sys_takara.c
  27. 2 2
      arch/alpha/kernel/sys_wildfire.c
  28. 6 5
      arch/arc/boot/dts/hsdk.dts
  29. 0 1
      arch/arc/configs/hsdk_defconfig
  30. 5 0
      arch/arc/kernel/smp.c
  31. 1 0
      arch/arc/plat-hsdk/Kconfig
  32. 10 0
      arch/arc/plat-hsdk/platform.c
  33. 1 1
      arch/arm/Makefile
  34. 4 0
      arch/arm/boot/compressed/debug.S
  35. 2 2
      arch/arm/boot/dts/armada-38x.dtsi
  36. 2 2
      arch/arm/boot/dts/at91-sama5d27_som1.dtsi
  37. 15 1
      arch/arm/boot/dts/at91-sama5d2_xplained.dts
  38. 3 6
      arch/arm/boot/dts/bcm2835-rpi-zero-w.dts
  39. 5 0
      arch/arm/boot/dts/bcm2837-rpi-3-b.dts
  40. 6 1
      arch/arm/boot/dts/bcm283x.dtsi
  41. 2 1
      arch/arm/boot/dts/gemini.dtsi
  42. 4 4
      arch/arm/boot/dts/imx7d.dtsi
  43. 2 1
      arch/arm/boot/dts/moxart.dtsi
  44. 1 0
      arch/arm/boot/dts/sama5d2.dtsi
  45. 8 8
      arch/arm/boot/dts/sun6i-a31.dtsi
  46. 8 0
      arch/arm/kernel/debug.S
  47. 4 0
      arch/arm/mach-ux500/cpu-db8500.c
  48. 0 4
      arch/arm/mach-ux500/pm.c
  49. 5 0
      arch/arm/mm/nommu.c
  50. 1 1
      arch/arm/xen/p2m.c
  51. 1 8
      arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts
  52. 3 3
      arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi
  53. 3 3
      arch/arm64/boot/dts/marvell/armada-cp110-slave.dtsi
  54. 10 0
      arch/arm64/boot/dts/renesas/salvator-common.dtsi
  55. 1 1
      arch/arm64/boot/dts/rockchip/rk3328.dtsi
  56. 1 1
      arch/arm64/boot/dts/rockchip/rk3368.dtsi
  57. 2 2
      arch/arm64/boot/dts/rockchip/rk3399-firefly.dts
  58. 2 2
      arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi
  59. 2 2
      arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi
  60. 1 1
      arch/parisc/kernel/parisc_ksyms.c
  61. 3 3
      arch/parisc/kernel/syscall.S
  62. 4 1
      arch/parisc/kernel/time.c
  63. 14 9
      arch/powerpc/kvm/book3s_64_vio.c
  64. 10 3
      arch/powerpc/kvm/book3s_hv_rmhandlers.S
  65. 1 2
      arch/powerpc/kvm/powerpc.c
  66. 2 0
      arch/s390/configs/zfcpdump_defconfig
  67. 5 2
      arch/s390/kernel/entry.S
  68. 3 0
      arch/s390/kernel/smp.c
  69. 1 1
      arch/x86/entry/entry_64.S
  70. 3 3
      arch/x86/events/intel/bts.c
  71. 0 4
      arch/x86/include/asm/io.h
  72. 41 0
      arch/x86/kernel/amd_nb.c
  73. 15 14
      arch/x86/kernel/unwind_orc.c
  74. 0 12
      arch/x86/mm/mmap.c
  75. 3 1
      crypto/asymmetric_keys/asymmetric_type.c
  76. 3 0
      crypto/asymmetric_keys/pkcs7_parser.c
  77. 1 10
      drivers/android/binder.c
  78. 10 14
      drivers/android/binder_alloc.c
  79. 0 1
      drivers/android/binder_alloc.h
  80. 2 1
      drivers/base/cpu.c
  81. 30 23
      drivers/base/power/domain_governor.c
  82. 1 1
      drivers/base/power/qos.c
  83. 1 1
      drivers/base/power/runtime.c
  84. 21 4
      drivers/base/power/sysfs.c
  85. 12 3
      drivers/block/nbd.c
  86. 1 1
      drivers/block/skd_main.c
  87. 1 1
      drivers/bus/mvebu-mbus.c
  88. 2 1
      drivers/clocksource/cs5535-clockevt.c
  89. 2 2
      drivers/cpuidle/governors/menu.c
  90. 2 2
      drivers/dma/altera-msgdma.c
  91. 2 1
      drivers/firmware/efi/libstub/arm-stub.c
  92. 3 0
      drivers/firmware/efi/test/efi_test.c
  93. 5 11
      drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
  94. 3 3
      drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
  95. 4 19
      drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
  96. 6 2
      drivers/gpu/drm/exynos/exynos_drm_drv.c
  97. 3 0
      drivers/gpu/drm/i915/gvt/cmd_parser.c
  98. 1 2
      drivers/gpu/drm/i915/gvt/execlist.c
  99. 10 60
      drivers/gpu/drm/i915/gvt/handlers.c
  100. 0 3
      drivers/gpu/drm/i915/gvt/reg.h

+ 8 - 0
Documentation/ABI/testing/sysfs-bus-iio-proximity-as3935

@@ -14,3 +14,11 @@ Description:
 		Show or set the gain boost of the amp, from 0-31 range.
 		Show or set the gain boost of the amp, from 0-31 range.
 		18 = indoors (default)
 		18 = indoors (default)
 		14 = outdoors
 		14 = outdoors
+
+What		/sys/bus/iio/devices/iio:deviceX/noise_level_tripped
+Date:		May 2017
+KernelVersion:	4.13
+Contact:	Matt Ranostay <matt.ranostay@konsulko.com>
+Description:
+		When 1 the noise level is over the trip level and not reporting
+		valid data

+ 3 - 1
Documentation/ABI/testing/sysfs-devices-power

@@ -211,7 +211,9 @@ Description:
 		device, after it has been suspended at run time, from a resume
 		device, after it has been suspended at run time, from a resume
 		request to the moment the device will be ready to process I/O,
 		request to the moment the device will be ready to process I/O,
 		in microseconds.  If it is equal to 0, however, this means that
 		in microseconds.  If it is equal to 0, however, this means that
-		the PM QoS resume latency may be arbitrary.
+		the PM QoS resume latency may be arbitrary and the special value
+		"n/a" means that user space cannot accept any resume latency at
+		all for the given device.
 
 
 		Not all drivers support this attribute.  If it isn't supported,
 		Not all drivers support this attribute.  If it isn't supported,
 		it is not present.
 		it is not present.

+ 0 - 14
Documentation/core-api/kernel-api.rst

@@ -352,44 +352,30 @@ Read-Copy Update (RCU)
 ----------------------
 ----------------------
 
 
 .. kernel-doc:: include/linux/rcupdate.h
 .. kernel-doc:: include/linux/rcupdate.h
-   :external:
 
 
 .. kernel-doc:: include/linux/rcupdate_wait.h
 .. kernel-doc:: include/linux/rcupdate_wait.h
-   :external:
 
 
 .. kernel-doc:: include/linux/rcutree.h
 .. kernel-doc:: include/linux/rcutree.h
-   :external:
 
 
 .. kernel-doc:: kernel/rcu/tree.c
 .. kernel-doc:: kernel/rcu/tree.c
-   :external:
 
 
 .. kernel-doc:: kernel/rcu/tree_plugin.h
 .. kernel-doc:: kernel/rcu/tree_plugin.h
-   :external:
 
 
 .. kernel-doc:: kernel/rcu/tree_exp.h
 .. kernel-doc:: kernel/rcu/tree_exp.h
-   :external:
 
 
 .. kernel-doc:: kernel/rcu/update.c
 .. kernel-doc:: kernel/rcu/update.c
-   :external:
 
 
 .. kernel-doc:: include/linux/srcu.h
 .. kernel-doc:: include/linux/srcu.h
-   :external:
 
 
 .. kernel-doc:: kernel/rcu/srcutree.c
 .. kernel-doc:: kernel/rcu/srcutree.c
-   :external:
 
 
 .. kernel-doc:: include/linux/rculist_bl.h
 .. kernel-doc:: include/linux/rculist_bl.h
-   :external:
 
 
 .. kernel-doc:: include/linux/rculist.h
 .. kernel-doc:: include/linux/rculist.h
-   :external:
 
 
 .. kernel-doc:: include/linux/rculist_nulls.h
 .. kernel-doc:: include/linux/rculist_nulls.h
-   :external:
 
 
 .. kernel-doc:: include/linux/rcu_sync.h
 .. kernel-doc:: include/linux/rcu_sync.h
-   :external:
 
 
 .. kernel-doc:: kernel/rcu/sync.c
 .. kernel-doc:: kernel/rcu/sync.c
-   :external:
 
 

+ 5 - 0
Documentation/devicetree/bindings/iio/proximity/as3935.txt

@@ -16,6 +16,10 @@ Optional properties:
 	- ams,tuning-capacitor-pf: Calibration tuning capacitor stepping
 	- ams,tuning-capacitor-pf: Calibration tuning capacitor stepping
 	  value 0 - 120pF. This will require using the calibration data from
 	  value 0 - 120pF. This will require using the calibration data from
 	  the manufacturer.
 	  the manufacturer.
+	- ams,nflwdth: Set the noise and watchdog threshold register on
+	  startup. This will need to set according to the noise from the
+	  MCU board, and possibly the local environment. Refer to the
+	  datasheet for the threshold settings.
 
 
 Example:
 Example:
 
 
@@ -27,4 +31,5 @@ as3935@0 {
 	interrupt-parent = <&gpio1>;
 	interrupt-parent = <&gpio1>;
 	interrupts = <16 1>;
 	interrupts = <16 1>;
 	ams,tuning-capacitor-pf = <80>;
 	ams,tuning-capacitor-pf = <80>;
+	ams,nflwdth = <0x44>;
 };
 };

+ 3 - 3
Documentation/devicetree/bindings/interrupt-controller/arm,gic-v3.txt

@@ -99,7 +99,7 @@ Examples:
 			compatible = "arm,gic-v3-its";
 			compatible = "arm,gic-v3-its";
 			msi-controller;
 			msi-controller;
 			#msi-cells = <1>;
 			#msi-cells = <1>;
-			reg = <0x0 0x2c200000 0 0x200000>;
+			reg = <0x0 0x2c200000 0 0x20000>;
 		};
 		};
 	};
 	};
 
 
@@ -124,14 +124,14 @@ Examples:
 			compatible = "arm,gic-v3-its";
 			compatible = "arm,gic-v3-its";
 			msi-controller;
 			msi-controller;
 			#msi-cells = <1>;
 			#msi-cells = <1>;
-			reg = <0x0 0x2c200000 0 0x200000>;
+			reg = <0x0 0x2c200000 0 0x20000>;
 		};
 		};
 
 
 		gic-its@2c400000 {
 		gic-its@2c400000 {
 			compatible = "arm,gic-v3-its";
 			compatible = "arm,gic-v3-its";
 			msi-controller;
 			msi-controller;
 			#msi-cells = <1>;
 			#msi-cells = <1>;
-			reg = <0x0 0x2c400000 0 0x200000>;
+			reg = <0x0 0x2c400000 0 0x20000>;
 		};
 		};
 
 
 		ppi-partitions {
 		ppi-partitions {

+ 18 - 13
Documentation/kbuild/makefiles.txt

@@ -1108,14 +1108,6 @@ When kbuild executes, the following steps are followed (roughly):
     ld
     ld
 	Link target. Often, LDFLAGS_$@ is used to set specific options to ld.
 	Link target. Often, LDFLAGS_$@ is used to set specific options to ld.
 
 
-    objcopy
-	Copy binary. Uses OBJCOPYFLAGS usually specified in
-	arch/$(ARCH)/Makefile.
-	OBJCOPYFLAGS_$@ may be used to set additional options.
-
-    gzip
-	Compress target. Use maximum compression to compress target.
-
 	Example:
 	Example:
 		#arch/x86/boot/Makefile
 		#arch/x86/boot/Makefile
 		LDFLAGS_bootsect := -Ttext 0x0 -s --oformat binary
 		LDFLAGS_bootsect := -Ttext 0x0 -s --oformat binary
@@ -1139,6 +1131,19 @@ When kbuild executes, the following steps are followed (roughly):
 	      resulting in the target file being recompiled for no
 	      resulting in the target file being recompiled for no
 	      obvious reason.
 	      obvious reason.
 
 
+    objcopy
+	Copy binary. Uses OBJCOPYFLAGS usually specified in
+	arch/$(ARCH)/Makefile.
+	OBJCOPYFLAGS_$@ may be used to set additional options.
+
+    gzip
+	Compress target. Use maximum compression to compress target.
+
+	Example:
+		#arch/x86/boot/compressed/Makefile
+		$(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y) FORCE
+			$(call if_changed,gzip)
+
     dtc
     dtc
 	Create flattened device tree blob object suitable for linking
 	Create flattened device tree blob object suitable for linking
 	into vmlinux. Device tree blobs linked into vmlinux are placed
 	into vmlinux. Device tree blobs linked into vmlinux are placed
@@ -1219,7 +1224,7 @@ When kbuild executes, the following steps are followed (roughly):
 	that may be shared between individual architectures.
 	that may be shared between individual architectures.
 	The recommended approach how to use a generic header file is
 	The recommended approach how to use a generic header file is
 	to list the file in the Kbuild file.
 	to list the file in the Kbuild file.
-	See "7.3 generic-y" for further info on syntax etc.
+	See "7.2 generic-y" for further info on syntax etc.
 
 
 --- 6.11 Post-link pass
 --- 6.11 Post-link pass
 
 
@@ -1254,13 +1259,13 @@ A Kbuild file may be defined under arch/<arch>/include/uapi/asm/ and
 arch/<arch>/include/asm/ to list asm files coming from asm-generic.
 arch/<arch>/include/asm/ to list asm files coming from asm-generic.
 See subsequent chapter for the syntax of the Kbuild file.
 See subsequent chapter for the syntax of the Kbuild file.
 
 
-	--- 7.1 no-export-headers
+--- 7.1 no-export-headers
 
 
 	no-export-headers is essentially used by include/uapi/linux/Kbuild to
 	no-export-headers is essentially used by include/uapi/linux/Kbuild to
 	avoid exporting specific headers (e.g. kvm.h) on architectures that do
 	avoid exporting specific headers (e.g. kvm.h) on architectures that do
 	not support it. It should be avoided as much as possible.
 	not support it. It should be avoided as much as possible.
 
 
-	--- 7.2 generic-y
+--- 7.2 generic-y
 
 
 	If an architecture uses a verbatim copy of a header from
 	If an architecture uses a verbatim copy of a header from
 	include/asm-generic then this is listed in the file
 	include/asm-generic then this is listed in the file
@@ -1287,7 +1292,7 @@ See subsequent chapter for the syntax of the Kbuild file.
 		Example: termios.h
 		Example: termios.h
 			#include <asm-generic/termios.h>
 			#include <asm-generic/termios.h>
 
 
-	--- 7.3 generated-y
+--- 7.3 generated-y
 
 
 	If an architecture generates other header files alongside generic-y
 	If an architecture generates other header files alongside generic-y
 	wrappers, generated-y specifies them.
 	wrappers, generated-y specifies them.
@@ -1299,7 +1304,7 @@ See subsequent chapter for the syntax of the Kbuild file.
 			#arch/x86/include/asm/Kbuild
 			#arch/x86/include/asm/Kbuild
 			generated-y += syscalls_32.h
 			generated-y += syscalls_32.h
 
 
-	--- 7.5 mandatory-y
+--- 7.4 mandatory-y
 
 
 	mandatory-y is essentially used by include/uapi/asm-generic/Kbuild.asm
 	mandatory-y is essentially used by include/uapi/asm-generic/Kbuild.asm
 	to define the minimum set of headers that must be exported in
 	to define the minimum set of headers that must be exported in

+ 1 - 0
Documentation/process/index.rst

@@ -25,6 +25,7 @@ Below are the essential guides that every developer should read.
    submitting-patches
    submitting-patches
    coding-style
    coding-style
    email-clients
    email-clients
+   kernel-enforcement-statement
 
 
 Other guides to the community that are of interest to most developers are: 
 Other guides to the community that are of interest to most developers are: 
 
 

+ 147 - 0
Documentation/process/kernel-enforcement-statement.rst

@@ -0,0 +1,147 @@
+Linux Kernel Enforcement Statement
+----------------------------------
+
+As developers of the Linux kernel, we have a keen interest in how our software
+is used and how the license for our software is enforced.  Compliance with the
+reciprocal sharing obligations of GPL-2.0 is critical to the long-term
+sustainability of our software and community.
+
+Although there is a right to enforce the separate copyright interests in the
+contributions made to our community, we share an interest in ensuring that
+individual enforcement actions are conducted in a manner that benefits our
+community and do not have an unintended negative impact on the health and
+growth of our software ecosystem.  In order to deter unhelpful enforcement
+actions, we agree that it is in the best interests of our development
+community to undertake the following commitment to users of the Linux kernel
+on behalf of ourselves and any successors to our copyright interests:
+
+    Notwithstanding the termination provisions of the GPL-2.0, we agree that
+    it is in the best interests of our development community to adopt the
+    following provisions of GPL-3.0 as additional permissions under our
+    license with respect to any non-defensive assertion of rights under the
+    license.
+
+	However, if you cease all violation of this License, then your license
+	from a particular copyright holder is reinstated (a) provisionally,
+	unless and until the copyright holder explicitly and finally
+	terminates your license, and (b) permanently, if the copyright holder
+	fails to notify you of the violation by some reasonable means prior to
+	60 days after the cessation.
+
+	Moreover, your license from a particular copyright holder is
+	reinstated permanently if the copyright holder notifies you of the
+	violation by some reasonable means, this is the first time you have
+	received notice of violation of this License (for any work) from that
+	copyright holder, and you cure the violation prior to 30 days after
+	your receipt of the notice.
+
+Our intent in providing these assurances is to encourage more use of the
+software.  We want companies and individuals to use, modify and distribute
+this software.  We want to work with users in an open and transparent way to
+eliminate any uncertainty about our expectations regarding compliance or
+enforcement that might limit adoption of our software.  We view legal action
+as a last resort, to be initiated only when other community efforts have
+failed to resolve the problem.
+
+Finally, once a non-compliance issue is resolved, we hope the user will feel
+welcome to join us in our efforts on this project.  Working together, we will
+be stronger.
+
+Except where noted below, we speak only for ourselves, and not for any company
+we might work for today, have in the past, or will in the future.
+
+  - Bjorn Andersson (Linaro)
+  - Andrea Arcangeli (Red Hat)
+  - Neil Armstrong
+  - Jens Axboe
+  - Pablo Neira Ayuso
+  - Khalid Aziz
+  - Ralf Baechle
+  - Felipe Balbi
+  - Arnd Bergmann
+  - Ard Biesheuvel
+  - Paolo Bonzini (Red Hat)
+  - Christian Borntraeger
+  - Mark Brown (Linaro)
+  - Paul Burton
+  - Javier Martinez Canillas
+  - Rob Clark
+  - Jonathan Corbet
+  - Vivien Didelot (Savoir-faire Linux)
+  - Hans de Goede (Red Hat)
+  - Mel Gorman (SUSE)
+  - Sven Eckelmann
+  - Alex Elder (Linaro)
+  - Fabio Estevam
+  - Larry Finger
+  - Bhumika Goyal
+  - Andy Gross
+  - Juergen Gross
+  - Shawn Guo
+  - Ulf Hansson
+  - Tejun Heo
+  - Rob Herring
+  - Masami Hiramatsu
+  - Michal Hocko
+  - Simon Horman
+  - Johan Hovold (Hovold Consulting AB)
+  - Christophe JAILLET
+  - Olof Johansson
+  - Lee Jones (Linaro)
+  - Heiner Kallweit
+  - Srinivas Kandagatla
+  - Jan Kara
+  - Shuah Khan (Samsung)
+  - David Kershner
+  - Jaegeuk Kim
+  - Namhyung Kim
+  - Colin Ian King
+  - Jeff Kirsher
+  - Greg Kroah-Hartman (Linux Foundation)
+  - Christian König
+  - Vinod Koul
+  - Krzysztof Kozlowski
+  - Viresh Kumar
+  - Aneesh Kumar K.V
+  - Julia Lawall
+  - Doug Ledford (Red Hat)
+  - Chuck Lever (Oracle)
+  - Daniel Lezcano
+  - Shaohua Li
+  - Xin Long (Red Hat)
+  - Tony Luck
+  - Mike Marshall
+  - Chris Mason
+  - Paul E. McKenney
+  - David S. Miller
+  - Ingo Molnar
+  - Kuninori Morimoto
+  - Borislav Petkov
+  - Jiri Pirko
+  - Josh Poimboeuf
+  - Sebastian Reichel (Collabora)
+  - Guenter Roeck
+  - Joerg Roedel
+  - Leon Romanovsky
+  - Steven Rostedt (VMware)
+  - Ivan Safonov
+  - Ivan Safonov
+  - Anna Schumaker
+  - Jes Sorensen
+  - K.Y. Srinivasan
+  - Heiko Stuebner
+  - Jiri Kosina (SUSE)
+  - Dmitry Torokhov
+  - Linus Torvalds
+  - Thierry Reding
+  - Rik van Riel
+  - Geert Uytterhoeven (Glider bvba)
+  - Daniel Vetter
+  - Linus Walleij
+  - Richard Weinberger
+  - Dan Williams
+  - Rafael J. Wysocki
+  - Arvind Yadav
+  - Masahiro Yamada
+  - Wei Yongjun
+  - Lv Zheng

+ 2 - 2
MAINTAINERS

@@ -9213,7 +9213,6 @@ F:	include/linux/isicom.h
 MUSB MULTIPOINT HIGH SPEED DUAL-ROLE CONTROLLER
 MUSB MULTIPOINT HIGH SPEED DUAL-ROLE CONTROLLER
 M:	Bin Liu <b-liu@ti.com>
 M:	Bin Liu <b-liu@ti.com>
 L:	linux-usb@vger.kernel.org
 L:	linux-usb@vger.kernel.org
-T:	git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git
 S:	Maintained
 S:	Maintained
 F:	drivers/usb/musb/
 F:	drivers/usb/musb/
 
 
@@ -10180,7 +10179,6 @@ F:	Documentation/parport*.txt
 
 
 PARAVIRT_OPS INTERFACE
 PARAVIRT_OPS INTERFACE
 M:	Juergen Gross <jgross@suse.com>
 M:	Juergen Gross <jgross@suse.com>
-M:	Chris Wright <chrisw@sous-sol.org>
 M:	Alok Kataria <akataria@vmware.com>
 M:	Alok Kataria <akataria@vmware.com>
 M:	Rusty Russell <rusty@rustcorp.com.au>
 M:	Rusty Russell <rusty@rustcorp.com.au>
 L:	virtualization@lists.linux-foundation.org
 L:	virtualization@lists.linux-foundation.org
@@ -10560,6 +10558,8 @@ M:	Peter Zijlstra <peterz@infradead.org>
 M:	Ingo Molnar <mingo@redhat.com>
 M:	Ingo Molnar <mingo@redhat.com>
 M:	Arnaldo Carvalho de Melo <acme@kernel.org>
 M:	Arnaldo Carvalho de Melo <acme@kernel.org>
 R:	Alexander Shishkin <alexander.shishkin@linux.intel.com>
 R:	Alexander Shishkin <alexander.shishkin@linux.intel.com>
+R:	Jiri Olsa <jolsa@redhat.com>
+R:	Namhyung Kim <namhyung@kernel.org>
 L:	linux-kernel@vger.kernel.org
 L:	linux-kernel@vger.kernel.org
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core
 S:	Supported
 S:	Supported

+ 6 - 6
Makefile

@@ -1,7 +1,7 @@
 VERSION = 4
 VERSION = 4
 PATCHLEVEL = 14
 PATCHLEVEL = 14
 SUBLEVEL = 0
 SUBLEVEL = 0
-EXTRAVERSION = -rc5
+EXTRAVERSION = -rc7
 NAME = Fearless Coyote
 NAME = Fearless Coyote
 
 
 # *DOCUMENTATION*
 # *DOCUMENTATION*
@@ -130,8 +130,8 @@ endif
 ifneq ($(KBUILD_OUTPUT),)
 ifneq ($(KBUILD_OUTPUT),)
 # check that the output directory actually exists
 # check that the output directory actually exists
 saved-output := $(KBUILD_OUTPUT)
 saved-output := $(KBUILD_OUTPUT)
-$(shell [ -d $(KBUILD_OUTPUT) ] || mkdir -p $(KBUILD_OUTPUT))
-KBUILD_OUTPUT := $(realpath $(KBUILD_OUTPUT))
+KBUILD_OUTPUT := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) \
+								&& /bin/pwd)
 $(if $(KBUILD_OUTPUT),, \
 $(if $(KBUILD_OUTPUT),, \
      $(error failed to create output directory "$(saved-output)"))
      $(error failed to create output directory "$(saved-output)"))
 
 
@@ -697,11 +697,11 @@ KBUILD_CFLAGS += $(stackp-flag)
 
 
 ifeq ($(cc-name),clang)
 ifeq ($(cc-name),clang)
 ifneq ($(CROSS_COMPILE),)
 ifneq ($(CROSS_COMPILE),)
-CLANG_TARGET	:= -target $(notdir $(CROSS_COMPILE:%-=%))
+CLANG_TARGET	:= --target=$(notdir $(CROSS_COMPILE:%-=%))
 GCC_TOOLCHAIN	:= $(realpath $(dir $(shell which $(LD)))/..)
 GCC_TOOLCHAIN	:= $(realpath $(dir $(shell which $(LD)))/..)
 endif
 endif
 ifneq ($(GCC_TOOLCHAIN),)
 ifneq ($(GCC_TOOLCHAIN),)
-CLANG_GCC_TC	:= -gcc-toolchain $(GCC_TOOLCHAIN)
+CLANG_GCC_TC	:= --gcc-toolchain=$(GCC_TOOLCHAIN)
 endif
 endif
 KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
 KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
 KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
 KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
@@ -1399,7 +1399,7 @@ help:
 	@echo  '                    Build, install, and boot kernel before'
 	@echo  '                    Build, install, and boot kernel before'
 	@echo  '                    running kselftest on it'
 	@echo  '                    running kselftest on it'
 	@echo  '  kselftest-clean - Remove all generated kselftest files'
 	@echo  '  kselftest-clean - Remove all generated kselftest files'
-	@echo  '  kselftest-merge - Merge all the config dependencies of kselftest to existed'
+	@echo  '  kselftest-merge - Merge all the config dependencies of kselftest to existing'
 	@echo  '                    .config.'
 	@echo  '                    .config.'
 	@echo  ''
 	@echo  ''
 	@echo 'Userspace tools targets:'
 	@echo 'Userspace tools targets:'

+ 2 - 2
arch/alpha/kernel/sys_alcor.c

@@ -181,10 +181,10 @@ alcor_init_irq(void)
  * comes in on.  This makes interrupt processing much easier.
  * comes in on.  This makes interrupt processing much easier.
  */
  */
 
 
-static int __init
+static int
 alcor_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 alcor_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-	static char irq_tab[7][5] __initdata = {
+	static char irq_tab[7][5] = {
 		/*INT    INTA   INTB   INTC   INTD */
 		/*INT    INTA   INTB   INTC   INTD */
 		/* note: IDSEL 17 is XLT only */
 		/* note: IDSEL 17 is XLT only */
 		{16+13, 16+13, 16+13, 16+13, 16+13},	/* IdSel 17,  TULIP  */
 		{16+13, 16+13, 16+13, 16+13, 16+13},	/* IdSel 17,  TULIP  */

+ 6 - 6
arch/alpha/kernel/sys_cabriolet.c

@@ -173,10 +173,10 @@ pc164_init_irq(void)
  * because it is the Saturn IO (SIO) PCI/ISA Bridge Chip.
  * because it is the Saturn IO (SIO) PCI/ISA Bridge Chip.
  */
  */
 
 
-static inline int __init
+static inline int
 eb66p_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 eb66p_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-	static char irq_tab[5][5] __initdata = {
+	static char irq_tab[5][5] = {
 		/*INT  INTA  INTB  INTC   INTD */
 		/*INT  INTA  INTB  INTC   INTD */
 		{16+0, 16+0, 16+5,  16+9, 16+13},  /* IdSel 6,  slot 0, J25 */
 		{16+0, 16+0, 16+5,  16+9, 16+13},  /* IdSel 6,  slot 0, J25 */
 		{16+1, 16+1, 16+6, 16+10, 16+14},  /* IdSel 7,  slot 1, J26 */
 		{16+1, 16+1, 16+6, 16+10, 16+14},  /* IdSel 7,  slot 1, J26 */
@@ -203,10 +203,10 @@ eb66p_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
  * because it is the Saturn IO (SIO) PCI/ISA Bridge Chip.
  * because it is the Saturn IO (SIO) PCI/ISA Bridge Chip.
  */
  */
 
 
-static inline int __init
+static inline int
 cabriolet_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 cabriolet_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-	static char irq_tab[5][5] __initdata = {
+	static char irq_tab[5][5] = {
 		/*INT   INTA  INTB  INTC   INTD */
 		/*INT   INTA  INTB  INTC   INTD */
 		{ 16+2, 16+2, 16+7, 16+11, 16+15}, /* IdSel 5,  slot 2, J21 */
 		{ 16+2, 16+2, 16+7, 16+11, 16+15}, /* IdSel 5,  slot 2, J21 */
 		{ 16+0, 16+0, 16+5,  16+9, 16+13}, /* IdSel 6,  slot 0, J19 */
 		{ 16+0, 16+0, 16+5,  16+9, 16+13}, /* IdSel 6,  slot 0, J19 */
@@ -287,10 +287,10 @@ cia_cab_init_pci(void)
  * 
  * 
  */
  */
 
 
-static inline int __init
+static inline int
 alphapc164_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 alphapc164_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-	static char irq_tab[7][5] __initdata = {
+	static char irq_tab[7][5] = {
 		/*INT   INTA  INTB   INTC   INTD */
 		/*INT   INTA  INTB   INTC   INTD */
 		{ 16+2, 16+2, 16+9,  16+13, 16+17}, /* IdSel  5, slot 2, J20 */
 		{ 16+2, 16+2, 16+9,  16+13, 16+17}, /* IdSel  5, slot 2, J20 */
 		{ 16+0, 16+0, 16+7,  16+11, 16+15}, /* IdSel  6, slot 0, J29 */
 		{ 16+0, 16+0, 16+7,  16+11, 16+15}, /* IdSel  6, slot 0, J29 */

+ 10 - 10
arch/alpha/kernel/sys_dp264.c

@@ -356,7 +356,7 @@ clipper_init_irq(void)
  *  10	 64 bit PCI option slot 3 (not bus 0)
  *  10	 64 bit PCI option slot 3 (not bus 0)
  */
  */
 
 
-static int __init
+static int
 isa_irq_fixup(const struct pci_dev *dev, int irq)
 isa_irq_fixup(const struct pci_dev *dev, int irq)
 {
 {
 	u8 irq8;
 	u8 irq8;
@@ -372,10 +372,10 @@ isa_irq_fixup(const struct pci_dev *dev, int irq)
 	return irq8 & 0xf;
 	return irq8 & 0xf;
 }
 }
 
 
-static int __init
+static int
 dp264_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 dp264_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-	static char irq_tab[6][5] __initdata = {
+	static char irq_tab[6][5] = {
 		/*INT    INTA   INTB   INTC   INTD */
 		/*INT    INTA   INTB   INTC   INTD */
 		{    -1,    -1,    -1,    -1,    -1}, /* IdSel 5 ISA Bridge */
 		{    -1,    -1,    -1,    -1,    -1}, /* IdSel 5 ISA Bridge */
 		{ 16+ 3, 16+ 3, 16+ 2, 16+ 2, 16+ 2}, /* IdSel 6 SCSI builtin*/
 		{ 16+ 3, 16+ 3, 16+ 2, 16+ 2, 16+ 2}, /* IdSel 6 SCSI builtin*/
@@ -394,10 +394,10 @@ dp264_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 	return isa_irq_fixup(dev, irq);
 	return isa_irq_fixup(dev, irq);
 }
 }
 
 
-static int __init
+static int
 monet_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 monet_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-	static char irq_tab[13][5] __initdata = {
+	static char irq_tab[13][5] = {
 		/*INT    INTA   INTB   INTC   INTD */
 		/*INT    INTA   INTB   INTC   INTD */
 		{    45,    45,    45,    45,    45}, /* IdSel 3 21143 PCI1 */
 		{    45,    45,    45,    45,    45}, /* IdSel 3 21143 PCI1 */
 		{    -1,    -1,    -1,    -1,    -1}, /* IdSel 4 unused */
 		{    -1,    -1,    -1,    -1,    -1}, /* IdSel 4 unused */
@@ -423,7 +423,7 @@ monet_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 	return isa_irq_fixup(dev, COMMON_TABLE_LOOKUP);
 	return isa_irq_fixup(dev, COMMON_TABLE_LOOKUP);
 }
 }
 
 
-static u8 __init
+static u8
 monet_swizzle(struct pci_dev *dev, u8 *pinp)
 monet_swizzle(struct pci_dev *dev, u8 *pinp)
 {
 {
 	struct pci_controller *hose = dev->sysdata;
 	struct pci_controller *hose = dev->sysdata;
@@ -456,10 +456,10 @@ monet_swizzle(struct pci_dev *dev, u8 *pinp)
 	return slot;
 	return slot;
 }
 }
 
 
-static int __init
+static int
 webbrick_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 webbrick_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-	static char irq_tab[13][5] __initdata = {
+	static char irq_tab[13][5] = {
 		/*INT    INTA   INTB   INTC   INTD */
 		/*INT    INTA   INTB   INTC   INTD */
 		{    -1,    -1,    -1,    -1,    -1}, /* IdSel 7 ISA Bridge */
 		{    -1,    -1,    -1,    -1,    -1}, /* IdSel 7 ISA Bridge */
 		{    -1,    -1,    -1,    -1,    -1}, /* IdSel 8 unused */
 		{    -1,    -1,    -1,    -1,    -1}, /* IdSel 8 unused */
@@ -478,10 +478,10 @@ webbrick_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 	return isa_irq_fixup(dev, COMMON_TABLE_LOOKUP);
 	return isa_irq_fixup(dev, COMMON_TABLE_LOOKUP);
 }
 }
 
 
-static int __init
+static int
 clipper_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 clipper_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-	static char irq_tab[7][5] __initdata = {
+	static char irq_tab[7][5] = {
 		/*INT    INTA   INTB   INTC   INTD */
 		/*INT    INTA   INTB   INTC   INTD */
 		{ 16+ 8, 16+ 8, 16+ 9, 16+10, 16+11}, /* IdSel 1 slot 1 */
 		{ 16+ 8, 16+ 8, 16+ 9, 16+10, 16+11}, /* IdSel 1 slot 1 */
 		{ 16+12, 16+12, 16+13, 16+14, 16+15}, /* IdSel 2 slot 2 */
 		{ 16+12, 16+12, 16+13, 16+14, 16+15}, /* IdSel 2 slot 2 */

+ 2 - 2
arch/alpha/kernel/sys_eb64p.c

@@ -167,10 +167,10 @@ eb64p_init_irq(void)
  * comes in on.  This makes interrupt processing much easier.
  * comes in on.  This makes interrupt processing much easier.
  */
  */
 
 
-static int __init
+static int
 eb64p_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 eb64p_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-	static char irq_tab[5][5] __initdata = {
+	static char irq_tab[5][5] = {
 		/*INT  INTA  INTB  INTC   INTD */
 		/*INT  INTA  INTB  INTC   INTD */
 		{16+7, 16+7, 16+7, 16+7,  16+7},  /* IdSel 5,  slot ?, ?? */
 		{16+7, 16+7, 16+7, 16+7,  16+7},  /* IdSel 5,  slot ?, ?? */
 		{16+0, 16+0, 16+2, 16+4,  16+9},  /* IdSel 6,  slot ?, ?? */
 		{16+0, 16+0, 16+2, 16+4,  16+9},  /* IdSel 6,  slot ?, ?? */

+ 2 - 2
arch/alpha/kernel/sys_eiger.c

@@ -141,7 +141,7 @@ eiger_init_irq(void)
 	}
 	}
 }
 }
 
 
-static int __init
+static int
 eiger_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 eiger_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
 	u8 irq_orig;
 	u8 irq_orig;
@@ -158,7 +158,7 @@ eiger_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 	return irq_orig - 0x80;
 	return irq_orig - 0x80;
 }
 }
 
 
-static u8 __init
+static u8
 eiger_swizzle(struct pci_dev *dev, u8 *pinp)
 eiger_swizzle(struct pci_dev *dev, u8 *pinp)
 {
 {
 	struct pci_controller *hose = dev->sysdata;
 	struct pci_controller *hose = dev->sysdata;

+ 3 - 3
arch/alpha/kernel/sys_miata.c

@@ -149,10 +149,10 @@ miata_init_irq(void)
  * comes in on.  This makes interrupt processing much easier.
  * comes in on.  This makes interrupt processing much easier.
  */
  */
 
 
-static int __init
+static int
 miata_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 miata_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-        static char irq_tab[18][5] __initdata = {
+        static char irq_tab[18][5] = {
 		/*INT    INTA   INTB   INTC   INTD */
 		/*INT    INTA   INTB   INTC   INTD */
 		{16+ 8, 16+ 8, 16+ 8, 16+ 8, 16+ 8},  /* IdSel 14,  DC21142 */
 		{16+ 8, 16+ 8, 16+ 8, 16+ 8, 16+ 8},  /* IdSel 14,  DC21142 */
 		{   -1,    -1,    -1,    -1,    -1},  /* IdSel 15,  EIDE    */
 		{   -1,    -1,    -1,    -1,    -1},  /* IdSel 15,  EIDE    */
@@ -196,7 +196,7 @@ miata_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 	return COMMON_TABLE_LOOKUP;
 	return COMMON_TABLE_LOOKUP;
 }
 }
 
 
-static u8 __init
+static u8
 miata_swizzle(struct pci_dev *dev, u8 *pinp)
 miata_swizzle(struct pci_dev *dev, u8 *pinp)
 {
 {
 	int slot, pin = *pinp;
 	int slot, pin = *pinp;

+ 2 - 2
arch/alpha/kernel/sys_mikasa.c

@@ -145,10 +145,10 @@ mikasa_init_irq(void)
  * comes in on.  This makes interrupt processing much easier.
  * comes in on.  This makes interrupt processing much easier.
  */
  */
 
 
-static int __init
+static int
 mikasa_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 mikasa_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-	static char irq_tab[8][5] __initdata = {
+	static char irq_tab[8][5] = {
 		/*INT    INTA   INTB   INTC   INTD */
 		/*INT    INTA   INTB   INTC   INTD */
 		{16+12, 16+12, 16+12, 16+12, 16+12},	/* IdSel 17,  SCSI */
 		{16+12, 16+12, 16+12, 16+12, 16+12},	/* IdSel 17,  SCSI */
 		{   -1,    -1,    -1,    -1,    -1},	/* IdSel 18,  PCEB */
 		{   -1,    -1,    -1,    -1,    -1},	/* IdSel 18,  PCEB */

+ 1 - 1
arch/alpha/kernel/sys_nautilus.c

@@ -62,7 +62,7 @@ nautilus_init_irq(void)
 	common_init_isa_dma();
 	common_init_isa_dma();
 }
 }
 
 
-static int __init
+static int
 nautilus_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 nautilus_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
 	/* Preserve the IRQ set up by the console.  */
 	/* Preserve the IRQ set up by the console.  */

+ 3 - 3
arch/alpha/kernel/sys_noritake.c

@@ -193,10 +193,10 @@ noritake_init_irq(void)
  * comes in on.  This makes interrupt processing much easier.
  * comes in on.  This makes interrupt processing much easier.
  */
  */
 
 
-static int __init
+static int
 noritake_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 noritake_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-	static char irq_tab[15][5] __initdata = {
+	static char irq_tab[15][5] = {
 		/*INT    INTA   INTB   INTC   INTD */
 		/*INT    INTA   INTB   INTC   INTD */
 		/* note: IDSELs 16, 17, and 25 are CORELLE only */
 		/* note: IDSELs 16, 17, and 25 are CORELLE only */
 		{ 16+1,  16+1,  16+1,  16+1,  16+1},  /* IdSel 16,  QLOGIC */
 		{ 16+1,  16+1,  16+1,  16+1,  16+1},  /* IdSel 16,  QLOGIC */
@@ -221,7 +221,7 @@ noritake_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 	return COMMON_TABLE_LOOKUP;
 	return COMMON_TABLE_LOOKUP;
 }
 }
 
 
-static u8 __init
+static u8
 noritake_swizzle(struct pci_dev *dev, u8 *pinp)
 noritake_swizzle(struct pci_dev *dev, u8 *pinp)
 {
 {
 	int slot, pin = *pinp;
 	int slot, pin = *pinp;

+ 2 - 2
arch/alpha/kernel/sys_rawhide.c

@@ -221,10 +221,10 @@ rawhide_init_irq(void)
  * 
  * 
  */
  */
 
 
-static int __init
+static int
 rawhide_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 rawhide_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-	static char irq_tab[5][5] __initdata = {
+	static char irq_tab[5][5] = {
 		/*INT    INTA   INTB   INTC   INTD */
 		/*INT    INTA   INTB   INTC   INTD */
 		{ 16+16, 16+16, 16+16, 16+16, 16+16}, /* IdSel 1 SCSI PCI 1 */
 		{ 16+16, 16+16, 16+16, 16+16, 16+16}, /* IdSel 1 SCSI PCI 1 */
 		{ 16+ 0, 16+ 0, 16+ 1, 16+ 2, 16+ 3}, /* IdSel 2 slot 2 */
 		{ 16+ 0, 16+ 0, 16+ 1, 16+ 2, 16+ 3}, /* IdSel 2 slot 2 */

+ 3 - 3
arch/alpha/kernel/sys_ruffian.c

@@ -117,10 +117,10 @@ ruffian_kill_arch (int mode)
  *
  *
  */
  */
 
 
-static int __init
+static int
 ruffian_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 ruffian_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-        static char irq_tab[11][5] __initdata = {
+        static char irq_tab[11][5] = {
 	      /*INT  INTA INTB INTC INTD */
 	      /*INT  INTA INTB INTC INTD */
 		{-1,  -1,  -1,  -1,  -1},  /* IdSel 13,  21052	     */
 		{-1,  -1,  -1,  -1,  -1},  /* IdSel 13,  21052	     */
 		{-1,  -1,  -1,  -1,  -1},  /* IdSel 14,  SIO	     */
 		{-1,  -1,  -1,  -1,  -1},  /* IdSel 14,  SIO	     */
@@ -139,7 +139,7 @@ ruffian_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 	return COMMON_TABLE_LOOKUP;
 	return COMMON_TABLE_LOOKUP;
 }
 }
 
 
-static u8 __init
+static u8
 ruffian_swizzle(struct pci_dev *dev, u8 *pinp)
 ruffian_swizzle(struct pci_dev *dev, u8 *pinp)
 {
 {
 	int slot, pin = *pinp;
 	int slot, pin = *pinp;

+ 2 - 2
arch/alpha/kernel/sys_rx164.c

@@ -142,7 +142,7 @@ rx164_init_irq(void)
  * 
  * 
  */
  */
 
 
-static int __init
+static int
 rx164_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 rx164_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
 #if 0
 #if 0
@@ -156,7 +156,7 @@ rx164_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 	  { 16+1, 16+1, 16+6, 16+11, 16+16},      /* IdSel 10, slot 4 */
 	  { 16+1, 16+1, 16+6, 16+11, 16+16},      /* IdSel 10, slot 4 */
 	};
 	};
 #else
 #else
-	static char irq_tab[6][5] __initdata = {
+	static char irq_tab[6][5] = {
 	  /*INT   INTA  INTB  INTC   INTD */
 	  /*INT   INTA  INTB  INTC   INTD */
 	  { 16+0, 16+0, 16+6, 16+11, 16+16},      /* IdSel 5,  slot 0 */
 	  { 16+0, 16+0, 16+6, 16+11, 16+16},      /* IdSel 5,  slot 0 */
 	  { 16+1, 16+1, 16+7, 16+12, 16+17},      /* IdSel 6,  slot 1 */
 	  { 16+1, 16+1, 16+7, 16+12, 16+17},      /* IdSel 6,  slot 1 */

+ 5 - 5
arch/alpha/kernel/sys_sable.c

@@ -192,10 +192,10 @@ sable_init_irq(void)
  * with the values in the irq swizzling tables above.
  * with the values in the irq swizzling tables above.
  */
  */
 
 
-static int __init
+static int
 sable_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 sable_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-	static char irq_tab[9][5] __initdata = {
+	static char irq_tab[9][5] = {
 		/*INT    INTA   INTB   INTC   INTD */
 		/*INT    INTA   INTB   INTC   INTD */
 		{ 32+0,  32+0,  32+0,  32+0,  32+0},  /* IdSel 0,  TULIP  */
 		{ 32+0,  32+0,  32+0,  32+0,  32+0},  /* IdSel 0,  TULIP  */
 		{ 32+1,  32+1,  32+1,  32+1,  32+1},  /* IdSel 1,  SCSI   */
 		{ 32+1,  32+1,  32+1,  32+1,  32+1},  /* IdSel 1,  SCSI   */
@@ -374,10 +374,10 @@ lynx_init_irq(void)
  * with the values in the irq swizzling tables above.
  * with the values in the irq swizzling tables above.
  */
  */
 
 
-static int __init
+static int
 lynx_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 lynx_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-	static char irq_tab[19][5] __initdata = {
+	static char irq_tab[19][5] = {
 		/*INT    INTA   INTB   INTC   INTD */
 		/*INT    INTA   INTB   INTC   INTD */
 		{   -1,    -1,    -1,    -1,    -1},  /* IdSel 13,  PCEB   */
 		{   -1,    -1,    -1,    -1,    -1},  /* IdSel 13,  PCEB   */
 		{   -1,    -1,    -1,    -1,    -1},  /* IdSel 14,  PPB    */
 		{   -1,    -1,    -1,    -1,    -1},  /* IdSel 14,  PPB    */
@@ -404,7 +404,7 @@ lynx_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 	return COMMON_TABLE_LOOKUP;
 	return COMMON_TABLE_LOOKUP;
 }
 }
 
 
-static u8 __init
+static u8
 lynx_swizzle(struct pci_dev *dev, u8 *pinp)
 lynx_swizzle(struct pci_dev *dev, u8 *pinp)
 {
 {
 	int slot, pin = *pinp;
 	int slot, pin = *pinp;

+ 4 - 4
arch/alpha/kernel/sys_sio.c

@@ -144,7 +144,7 @@ sio_fixup_irq_levels(unsigned int level_bits)
 	outb((level_bits >> 8) & 0xff, 0x4d1);
 	outb((level_bits >> 8) & 0xff, 0x4d1);
 }
 }
 
 
-static inline int __init
+static inline int
 noname_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 noname_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
 	/*
 	/*
@@ -165,7 +165,7 @@ noname_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 	 * that they use the default INTA line, if they are interrupt
 	 * that they use the default INTA line, if they are interrupt
 	 * driven at all).
 	 * driven at all).
 	 */
 	 */
-	static char irq_tab[][5] __initdata = {
+	static char irq_tab[][5] = {
 		/*INT A   B   C   D */
 		/*INT A   B   C   D */
 		{ 3,  3,  3,  3,  3}, /* idsel  6 (53c810) */ 
 		{ 3,  3,  3,  3,  3}, /* idsel  6 (53c810) */ 
 		{-1, -1, -1, -1, -1}, /* idsel  7 (SIO: PCI/ISA bridge) */
 		{-1, -1, -1, -1, -1}, /* idsel  7 (SIO: PCI/ISA bridge) */
@@ -183,10 +183,10 @@ noname_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 	return irq >= 0 ? tmp : -1;
 	return irq >= 0 ? tmp : -1;
 }
 }
 
 
-static inline int __init
+static inline int
 p2k_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 p2k_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-	static char irq_tab[][5] __initdata = {
+	static char irq_tab[][5] = {
 		/*INT A   B   C   D */
 		/*INT A   B   C   D */
 		{ 0,  0, -1, -1, -1}, /* idsel  6 (53c810) */
 		{ 0,  0, -1, -1, -1}, /* idsel  6 (53c810) */
 		{-1, -1, -1, -1, -1}, /* idsel  7 (SIO: PCI/ISA bridge) */
 		{-1, -1, -1, -1, -1}, /* idsel  7 (SIO: PCI/ISA bridge) */

+ 2 - 2
arch/alpha/kernel/sys_sx164.c

@@ -94,10 +94,10 @@ sx164_init_irq(void)
  *   9  32 bit PCI option slot 3
  *   9  32 bit PCI option slot 3
  */
  */
 
 
-static int __init
+static int
 sx164_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 sx164_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-	static char irq_tab[5][5] __initdata = {
+	static char irq_tab[5][5] = {
 		/*INT    INTA   INTB   INTC   INTD */
 		/*INT    INTA   INTB   INTC   INTD */
 		{ 16+ 9, 16+ 9, 16+13, 16+17, 16+21}, /* IdSel 5 slot 2 J17 */
 		{ 16+ 9, 16+ 9, 16+13, 16+17, 16+21}, /* IdSel 5 slot 2 J17 */
 		{ 16+11, 16+11, 16+15, 16+19, 16+23}, /* IdSel 6 slot 0 J19 */
 		{ 16+11, 16+11, 16+15, 16+19, 16+23}, /* IdSel 6 slot 0 J19 */

+ 3 - 3
arch/alpha/kernel/sys_takara.c

@@ -155,10 +155,10 @@ takara_init_irq(void)
  * assign it whatever the hell IRQ we like and it doesn't matter.
  * assign it whatever the hell IRQ we like and it doesn't matter.
  */
  */
 
 
-static int __init
+static int
 takara_map_irq_srm(const struct pci_dev *dev, u8 slot, u8 pin)
 takara_map_irq_srm(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-	static char irq_tab[15][5] __initdata = {
+	static char irq_tab[15][5] = {
 		{ 16+3, 16+3, 16+3, 16+3, 16+3},   /* slot  6 == device 3 */
 		{ 16+3, 16+3, 16+3, 16+3, 16+3},   /* slot  6 == device 3 */
 		{ 16+2, 16+2, 16+2, 16+2, 16+2},   /* slot  7 == device 2 */
 		{ 16+2, 16+2, 16+2, 16+2, 16+2},   /* slot  7 == device 2 */
 		{ 16+1, 16+1, 16+1, 16+1, 16+1},   /* slot  8 == device 1 */
 		{ 16+1, 16+1, 16+1, 16+1, 16+1},   /* slot  8 == device 1 */
@@ -210,7 +210,7 @@ takara_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 	return COMMON_TABLE_LOOKUP;
 	return COMMON_TABLE_LOOKUP;
 }
 }
 
 
-static u8 __init
+static u8
 takara_swizzle(struct pci_dev *dev, u8 *pinp)
 takara_swizzle(struct pci_dev *dev, u8 *pinp)
 {
 {
 	int slot = PCI_SLOT(dev->devfn);
 	int slot = PCI_SLOT(dev->devfn);

+ 2 - 2
arch/alpha/kernel/sys_wildfire.c

@@ -288,10 +288,10 @@ wildfire_device_interrupt(unsigned long vector)
  *   7	 64 bit PCI 1 option slot 7
  *   7	 64 bit PCI 1 option slot 7
  */
  */
 
 
-static int __init
+static int
 wildfire_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 wildfire_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
 {
-	static char irq_tab[8][5] __initdata = {
+	static char irq_tab[8][5] = {
 		/*INT    INTA   INTB   INTC   INTD */
 		/*INT    INTA   INTB   INTC   INTD */
 		{ -1,    -1,    -1,    -1,    -1}, /* IdSel 0 ISA Bridge */
 		{ -1,    -1,    -1,    -1,    -1}, /* IdSel 0 ISA Bridge */
 		{ 36,    36,    36+1, 36+2, 36+3}, /* IdSel 1 SCSI builtin */
 		{ 36,    36,    36+1, 36+2, 36+3}, /* IdSel 1 SCSI builtin */

+ 6 - 5
arch/arc/boot/dts/hsdk.dts

@@ -137,14 +137,15 @@
 			/*
 			/*
 			 * DW sdio controller has external ciu clock divider
 			 * DW sdio controller has external ciu clock divider
 			 * controlled via register in SDIO IP. Due to its
 			 * controlled via register in SDIO IP. Due to its
-			 * unexpected default value (it should devide by 1
-			 * but it devides by 8) SDIO IP uses wrong clock and
+			 * unexpected default value (it should divide by 1
+			 * but it divides by 8) SDIO IP uses wrong clock and
 			 * works unstable (see STAR 9001204800)
 			 * works unstable (see STAR 9001204800)
+			 * We switched to the minimum possible value of the
+			 * divisor (div-by-2) in HSDK platform code.
 			 * So add temporary fix and change clock frequency
 			 * So add temporary fix and change clock frequency
-			 * from 100000000 to 12500000 Hz until we fix dw sdio
-			 * driver itself.
+			 * to 50000000 Hz until we fix dw sdio driver itself.
 			 */
 			 */
-			clock-frequency = <12500000>;
+			clock-frequency = <50000000>;
 			#clock-cells = <0>;
 			#clock-cells = <0>;
 		};
 		};
 
 

+ 0 - 1
arch/arc/configs/hsdk_defconfig

@@ -63,7 +63,6 @@ CONFIG_MMC_SDHCI=y
 CONFIG_MMC_SDHCI_PLTFM=y
 CONFIG_MMC_SDHCI_PLTFM=y
 CONFIG_MMC_DW=y
 CONFIG_MMC_DW=y
 # CONFIG_IOMMU_SUPPORT is not set
 # CONFIG_IOMMU_SUPPORT is not set
-CONFIG_RESET_HSDK=y
 CONFIG_EXT3_FS=y
 CONFIG_EXT3_FS=y
 CONFIG_VFAT_FS=y
 CONFIG_VFAT_FS=y
 CONFIG_TMPFS=y
 CONFIG_TMPFS=y

+ 5 - 0
arch/arc/kernel/smp.c

@@ -23,6 +23,8 @@
 #include <linux/cpumask.h>
 #include <linux/cpumask.h>
 #include <linux/reboot.h>
 #include <linux/reboot.h>
 #include <linux/irqdomain.h>
 #include <linux/irqdomain.h>
+#include <linux/export.h>
+
 #include <asm/processor.h>
 #include <asm/processor.h>
 #include <asm/setup.h>
 #include <asm/setup.h>
 #include <asm/mach_desc.h>
 #include <asm/mach_desc.h>
@@ -30,6 +32,9 @@
 #ifndef CONFIG_ARC_HAS_LLSC
 #ifndef CONFIG_ARC_HAS_LLSC
 arch_spinlock_t smp_atomic_ops_lock = __ARCH_SPIN_LOCK_UNLOCKED;
 arch_spinlock_t smp_atomic_ops_lock = __ARCH_SPIN_LOCK_UNLOCKED;
 arch_spinlock_t smp_bitops_lock = __ARCH_SPIN_LOCK_UNLOCKED;
 arch_spinlock_t smp_bitops_lock = __ARCH_SPIN_LOCK_UNLOCKED;
+
+EXPORT_SYMBOL_GPL(smp_atomic_ops_lock);
+EXPORT_SYMBOL_GPL(smp_bitops_lock);
 #endif
 #endif
 
 
 struct plat_smp_ops  __weak plat_smp_ops;
 struct plat_smp_ops  __weak plat_smp_ops;

+ 1 - 0
arch/arc/plat-hsdk/Kconfig

@@ -8,3 +8,4 @@
 menuconfig ARC_SOC_HSDK
 menuconfig ARC_SOC_HSDK
 	bool "ARC HS Development Kit SOC"
 	bool "ARC HS Development Kit SOC"
 	select CLK_HSDK
 	select CLK_HSDK
+	select RESET_HSDK

+ 10 - 0
arch/arc/plat-hsdk/platform.c

@@ -74,6 +74,10 @@ static void __init hsdk_set_cpu_freq_1ghz(void)
 		pr_err("Failed to setup CPU frequency to 1GHz!");
 		pr_err("Failed to setup CPU frequency to 1GHz!");
 }
 }
 
 
+#define SDIO_BASE		(ARC_PERIPHERAL_BASE + 0xA000)
+#define SDIO_UHS_REG_EXT	(SDIO_BASE + 0x108)
+#define SDIO_UHS_REG_EXT_DIV_2	(2 << 30)
+
 static void __init hsdk_init_early(void)
 static void __init hsdk_init_early(void)
 {
 {
 	/*
 	/*
@@ -89,6 +93,12 @@ static void __init hsdk_init_early(void)
 	/* Really apply settings made above */
 	/* Really apply settings made above */
 	writel(1, (void __iomem *) CREG_PAE_UPDATE);
 	writel(1, (void __iomem *) CREG_PAE_UPDATE);
 
 
+	/*
+	 * Switch SDIO external ciu clock divider from default div-by-8 to
+	 * minimum possible div-by-2.
+	 */
+	iowrite32(SDIO_UHS_REG_EXT_DIV_2, (void __iomem *) SDIO_UHS_REG_EXT);
+
 	/*
 	/*
 	 * Setup CPU frequency to 1GHz.
 	 * Setup CPU frequency to 1GHz.
 	 * TODO: remove it after smart hsdk pll driver will be introduced.
 	 * TODO: remove it after smart hsdk pll driver will be introduced.

+ 1 - 1
arch/arm/Makefile

@@ -131,7 +131,7 @@ endif
 KBUILD_CFLAGS	+=$(CFLAGS_ABI) $(CFLAGS_ISA) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm
 KBUILD_CFLAGS	+=$(CFLAGS_ABI) $(CFLAGS_ISA) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm
 KBUILD_AFLAGS	+=$(CFLAGS_ABI) $(AFLAGS_ISA) $(arch-y) $(tune-y) -include asm/unified.h -msoft-float
 KBUILD_AFLAGS	+=$(CFLAGS_ABI) $(AFLAGS_ISA) $(arch-y) $(tune-y) -include asm/unified.h -msoft-float
 
 
-CHECKFLAGS	+= -D__arm__
+CHECKFLAGS	+= -D__arm__ -m32
 
 
 #Default value
 #Default value
 head-y		:= arch/arm/kernel/head$(MMUEXT).o
 head-y		:= arch/arm/kernel/head$(MMUEXT).o

+ 4 - 0
arch/arm/boot/compressed/debug.S

@@ -23,7 +23,11 @@ ENTRY(putc)
 	strb	r0, [r1]
 	strb	r0, [r1]
 	mov	r0, #0x03		@ SYS_WRITEC
 	mov	r0, #0x03		@ SYS_WRITEC
    ARM(	svc	#0x123456	)
    ARM(	svc	#0x123456	)
+#ifdef CONFIG_CPU_V7M
+ THUMB(	bkpt	#0xab		)
+#else
  THUMB(	svc	#0xab		)
  THUMB(	svc	#0xab		)
+#endif
 	mov	pc, lr
 	mov	pc, lr
 	.align	2
 	.align	2
 1:	.word	_GLOBAL_OFFSET_TABLE_ - .
 1:	.word	_GLOBAL_OFFSET_TABLE_ - .

+ 2 - 2
arch/arm/boot/dts/armada-38x.dtsi

@@ -178,7 +178,7 @@
 			};
 			};
 
 
 			i2c0: i2c@11000 {
 			i2c0: i2c@11000 {
-				compatible = "marvell,mv64xxx-i2c";
+				compatible = "marvell,mv78230-a0-i2c", "marvell,mv64xxx-i2c";
 				reg = <0x11000 0x20>;
 				reg = <0x11000 0x20>;
 				#address-cells = <1>;
 				#address-cells = <1>;
 				#size-cells = <0>;
 				#size-cells = <0>;
@@ -189,7 +189,7 @@
 			};
 			};
 
 
 			i2c1: i2c@11100 {
 			i2c1: i2c@11100 {
-				compatible = "marvell,mv64xxx-i2c";
+				compatible = "marvell,mv78230-a0-i2c", "marvell,mv64xxx-i2c";
 				reg = <0x11100 0x20>;
 				reg = <0x11100 0x20>;
 				#address-cells = <1>;
 				#address-cells = <1>;
 				#size-cells = <0>;
 				#size-cells = <0>;

+ 2 - 2
arch/arm/boot/dts/at91-sama5d27_som1.dtsi

@@ -67,8 +67,8 @@
 				pinctrl-0 = <&pinctrl_macb0_default>;
 				pinctrl-0 = <&pinctrl_macb0_default>;
 				phy-mode = "rmii";
 				phy-mode = "rmii";
 
 
-				ethernet-phy@1 {
-					reg = <0x1>;
+				ethernet-phy@0 {
+					reg = <0x0>;
 					interrupt-parent = <&pioA>;
 					interrupt-parent = <&pioA>;
 					interrupts = <PIN_PD31 IRQ_TYPE_LEVEL_LOW>;
 					interrupts = <PIN_PD31 IRQ_TYPE_LEVEL_LOW>;
 					pinctrl-names = "default";
 					pinctrl-names = "default";

+ 15 - 1
arch/arm/boot/dts/at91-sama5d2_xplained.dts

@@ -309,7 +309,7 @@
 				vddana-supply = <&vdd_3v3_lp_reg>;
 				vddana-supply = <&vdd_3v3_lp_reg>;
 				vref-supply = <&vdd_3v3_lp_reg>;
 				vref-supply = <&vdd_3v3_lp_reg>;
 				pinctrl-names = "default";
 				pinctrl-names = "default";
-				pinctrl-0 = <&pinctrl_adc_default>;
+				pinctrl-0 = <&pinctrl_adc_default &pinctrl_adtrg_default>;
 				status = "okay";
 				status = "okay";
 			};
 			};
 
 
@@ -340,6 +340,20 @@
 					bias-disable;
 					bias-disable;
 				};
 				};
 
 
+				/*
+				 * The ADTRG pin can work on any edge type.
+				 * In here it's being pulled up, so need to
+				 * connect it to ground to get an edge e.g.
+				 * Trigger can be configured on falling, rise
+				 * or any edge, and the pull-up can be changed
+				 * to pull-down or left floating according to
+				 * needs.
+				 */
+				pinctrl_adtrg_default: adtrg_default {
+					pinmux = <PIN_PD31__ADTRG>;
+					bias-pull-up;
+				};
+
 				pinctrl_charger_chglev: charger_chglev {
 				pinctrl_charger_chglev: charger_chglev {
 					pinmux = <PIN_PA12__GPIO>;
 					pinmux = <PIN_PA12__GPIO>;
 					bias-disable;
 					bias-disable;

+ 3 - 6
arch/arm/boot/dts/bcm2835-rpi-zero-w.dts

@@ -18,12 +18,9 @@
 	compatible = "raspberrypi,model-zero-w", "brcm,bcm2835";
 	compatible = "raspberrypi,model-zero-w", "brcm,bcm2835";
 	model = "Raspberry Pi Zero W";
 	model = "Raspberry Pi Zero W";
 
 
-	/* Needed by firmware to properly init UARTs */
-	aliases {
-		uart0 = "/soc/serial@7e201000";
-		uart1 = "/soc/serial@7e215040";
-		serial0 = "/soc/serial@7e201000";
-		serial1 = "/soc/serial@7e215040";
+	chosen {
+		/* 8250 auxiliary UART instead of pl011 */
+		stdout-path = "serial1:115200n8";
 	};
 	};
 
 
 	leds {
 	leds {

+ 5 - 0
arch/arm/boot/dts/bcm2837-rpi-3-b.dts

@@ -8,6 +8,11 @@
 	compatible = "raspberrypi,3-model-b", "brcm,bcm2837";
 	compatible = "raspberrypi,3-model-b", "brcm,bcm2837";
 	model = "Raspberry Pi 3 Model B";
 	model = "Raspberry Pi 3 Model B";
 
 
+	chosen {
+		/* 8250 auxiliary UART instead of pl011 */
+		stdout-path = "serial1:115200n8";
+	};
+
 	memory {
 	memory {
 		reg = <0 0x40000000>;
 		reg = <0 0x40000000>;
 	};
 	};

+ 6 - 1
arch/arm/boot/dts/bcm283x.dtsi

@@ -20,8 +20,13 @@
 	#address-cells = <1>;
 	#address-cells = <1>;
 	#size-cells = <1>;
 	#size-cells = <1>;
 
 
+	aliases {
+		serial0 = &uart0;
+		serial1 = &uart1;
+	};
+
 	chosen {
 	chosen {
-		bootargs = "earlyprintk console=ttyAMA0";
+		stdout-path = "serial0:115200n8";
 	};
 	};
 
 
 	thermal-zones {
 	thermal-zones {

+ 2 - 1
arch/arm/boot/dts/gemini.dtsi

@@ -145,11 +145,12 @@
 		};
 		};
 
 
 		watchdog@41000000 {
 		watchdog@41000000 {
-			compatible = "cortina,gemini-watchdog";
+			compatible = "cortina,gemini-watchdog", "faraday,ftwdt010";
 			reg = <0x41000000 0x1000>;
 			reg = <0x41000000 0x1000>;
 			interrupts = <3 IRQ_TYPE_LEVEL_HIGH>;
 			interrupts = <3 IRQ_TYPE_LEVEL_HIGH>;
 			resets = <&syscon GEMINI_RESET_WDOG>;
 			resets = <&syscon GEMINI_RESET_WDOG>;
 			clocks = <&syscon GEMINI_CLK_APB>;
 			clocks = <&syscon GEMINI_CLK_APB>;
+			clock-names = "PCLK";
 		};
 		};
 
 
 		uart0: serial@42000000 {
 		uart0: serial@42000000 {

+ 4 - 4
arch/arm/boot/dts/imx7d.dtsi

@@ -144,10 +144,10 @@
 		interrupt-names = "msi";
 		interrupt-names = "msi";
 		#interrupt-cells = <1>;
 		#interrupt-cells = <1>;
 		interrupt-map-mask = <0 0 0 0x7>;
 		interrupt-map-mask = <0 0 0 0x7>;
-		interrupt-map = <0 0 0 1 &intc GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>,
-				<0 0 0 2 &intc GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>,
-				<0 0 0 3 &intc GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
-				<0 0 0 4 &intc GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-map = <0 0 0 1 &intc GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,
+				<0 0 0 2 &intc GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
+				<0 0 0 3 &intc GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>,
+				<0 0 0 4 &intc GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>;
 		clocks = <&clks IMX7D_PCIE_CTRL_ROOT_CLK>,
 		clocks = <&clks IMX7D_PCIE_CTRL_ROOT_CLK>,
 			 <&clks IMX7D_PLL_ENET_MAIN_100M_CLK>,
 			 <&clks IMX7D_PLL_ENET_MAIN_100M_CLK>,
 			 <&clks IMX7D_PCIE_PHY_ROOT_CLK>;
 			 <&clks IMX7D_PCIE_PHY_ROOT_CLK>;

+ 2 - 1
arch/arm/boot/dts/moxart.dtsi

@@ -87,9 +87,10 @@
 		};
 		};
 
 
 		watchdog: watchdog@98500000 {
 		watchdog: watchdog@98500000 {
-			compatible = "moxa,moxart-watchdog";
+			compatible = "moxa,moxart-watchdog", "faraday,ftwdt010";
 			reg = <0x98500000 0x10>;
 			reg = <0x98500000 0x10>;
 			clocks = <&clk_apb>;
 			clocks = <&clk_apb>;
+			clock-names = "PCLK";
 		};
 		};
 
 
 		sdhci: sdhci@98e00000 {
 		sdhci: sdhci@98e00000 {

+ 1 - 0
arch/arm/boot/dts/sama5d2.dtsi

@@ -1430,6 +1430,7 @@
 				atmel,min-sample-rate-hz = <200000>;
 				atmel,min-sample-rate-hz = <200000>;
 				atmel,max-sample-rate-hz = <20000000>;
 				atmel,max-sample-rate-hz = <20000000>;
 				atmel,startup-time-ms = <4>;
 				atmel,startup-time-ms = <4>;
+				atmel,trigger-edge-type = <IRQ_TYPE_EDGE_RISING>;
 				status = "disabled";
 				status = "disabled";
 			};
 			};
 
 

+ 8 - 8
arch/arm/boot/dts/sun6i-a31.dtsi

@@ -311,8 +311,8 @@
 					#size-cells = <0>;
 					#size-cells = <0>;
 					reg = <0>;
 					reg = <0>;
 
 
-					tcon1_in_drc1: endpoint@0 {
-						reg = <0>;
+					tcon1_in_drc1: endpoint@1 {
+						reg = <1>;
 						remote-endpoint = <&drc1_out_tcon1>;
 						remote-endpoint = <&drc1_out_tcon1>;
 					};
 					};
 				};
 				};
@@ -1012,8 +1012,8 @@
 					#size-cells = <0>;
 					#size-cells = <0>;
 					reg = <1>;
 					reg = <1>;
 
 
-					be1_out_drc1: endpoint@0 {
-						reg = <0>;
+					be1_out_drc1: endpoint@1 {
+						reg = <1>;
 						remote-endpoint = <&drc1_in_be1>;
 						remote-endpoint = <&drc1_in_be1>;
 					};
 					};
 				};
 				};
@@ -1042,8 +1042,8 @@
 					#size-cells = <0>;
 					#size-cells = <0>;
 					reg = <0>;
 					reg = <0>;
 
 
-					drc1_in_be1: endpoint@0 {
-						reg = <0>;
+					drc1_in_be1: endpoint@1 {
+						reg = <1>;
 						remote-endpoint = <&be1_out_drc1>;
 						remote-endpoint = <&be1_out_drc1>;
 					};
 					};
 				};
 				};
@@ -1053,8 +1053,8 @@
 					#size-cells = <0>;
 					#size-cells = <0>;
 					reg = <1>;
 					reg = <1>;
 
 
-					drc1_out_tcon1: endpoint@0 {
-						reg = <0>;
+					drc1_out_tcon1: endpoint@1 {
+						reg = <1>;
 						remote-endpoint = <&tcon1_in_drc1>;
 						remote-endpoint = <&tcon1_in_drc1>;
 					};
 					};
 				};
 				};

+ 8 - 0
arch/arm/kernel/debug.S

@@ -115,7 +115,11 @@ ENTRY(printascii)
 		mov	r1, r0
 		mov	r1, r0
 		mov	r0, #0x04		@ SYS_WRITE0
 		mov	r0, #0x04		@ SYS_WRITE0
 	ARM(	svc	#0x123456	)
 	ARM(	svc	#0x123456	)
+#ifdef CONFIG_CPU_V7M
+	THUMB(	bkpt	#0xab		)
+#else
 	THUMB(	svc	#0xab		)
 	THUMB(	svc	#0xab		)
+#endif
 		ret	lr
 		ret	lr
 ENDPROC(printascii)
 ENDPROC(printascii)
 
 
@@ -124,7 +128,11 @@ ENTRY(printch)
 		strb	r0, [r1]
 		strb	r0, [r1]
 		mov	r0, #0x03		@ SYS_WRITEC
 		mov	r0, #0x03		@ SYS_WRITEC
 	ARM(	svc	#0x123456	)
 	ARM(	svc	#0x123456	)
+#ifdef CONFIG_CPU_V7M
+	THUMB(	bkpt	#0xab		)
+#else
 	THUMB(	svc	#0xab		)
 	THUMB(	svc	#0xab		)
+#endif
 		ret	lr
 		ret	lr
 ENDPROC(printch)
 ENDPROC(printch)
 
 

+ 4 - 0
arch/arm/mach-ux500/cpu-db8500.c

@@ -32,6 +32,7 @@
 #include <asm/mach/arch.h>
 #include <asm/mach/arch.h>
 
 
 #include "db8500-regs.h"
 #include "db8500-regs.h"
+#include "pm_domains.h"
 
 
 static int __init ux500_l2x0_unlock(void)
 static int __init ux500_l2x0_unlock(void)
 {
 {
@@ -157,6 +158,9 @@ static const struct of_device_id u8500_local_bus_nodes[] = {
 
 
 static void __init u8500_init_machine(void)
 static void __init u8500_init_machine(void)
 {
 {
+	/* Initialize ux500 power domains */
+	ux500_pm_domains_init();
+
 	/* automatically probe child nodes of dbx5x0 devices */
 	/* automatically probe child nodes of dbx5x0 devices */
 	if (of_machine_is_compatible("st-ericsson,u8540"))
 	if (of_machine_is_compatible("st-ericsson,u8540"))
 		of_platform_populate(NULL, u8500_local_bus_nodes,
 		of_platform_populate(NULL, u8500_local_bus_nodes,

+ 0 - 4
arch/arm/mach-ux500/pm.c

@@ -19,7 +19,6 @@
 #include <linux/of_address.h>
 #include <linux/of_address.h>
 
 
 #include "db8500-regs.h"
 #include "db8500-regs.h"
-#include "pm_domains.h"
 
 
 /* ARM WFI Standby signal register */
 /* ARM WFI Standby signal register */
 #define PRCM_ARM_WFI_STANDBY    (prcmu_base + 0x130)
 #define PRCM_ARM_WFI_STANDBY    (prcmu_base + 0x130)
@@ -203,7 +202,4 @@ void __init ux500_pm_init(u32 phy_base, u32 size)
 
 
 	/* Set up ux500 suspend callbacks. */
 	/* Set up ux500 suspend callbacks. */
 	suspend_set_ops(UX500_SUSPEND_OPS);
 	suspend_set_ops(UX500_SUSPEND_OPS);
-
-	/* Initialize ux500 power domains */
-	ux500_pm_domains_init();
 }
 }

+ 5 - 0
arch/arm/mm/nommu.c

@@ -344,6 +344,11 @@ void __init arm_mm_memblock_reserve(void)
 	 * reserved here.
 	 * reserved here.
 	 */
 	 */
 #endif
 #endif
+	/*
+	 * In any case, always ensure address 0 is never used as many things
+	 * get very confused if 0 is returned as a legitimate address.
+	 */
+	memblock_reserve(0, 1);
 }
 }
 
 
 void __init adjust_lowmem_bounds(void)
 void __init adjust_lowmem_bounds(void)

+ 1 - 1
arch/arm/xen/p2m.c

@@ -1,7 +1,7 @@
 #include <linux/bootmem.h>
 #include <linux/bootmem.h>
 #include <linux/gfp.h>
 #include <linux/gfp.h>
 #include <linux/export.h>
 #include <linux/export.h>
-#include <linux/rwlock.h>
+#include <linux/spinlock.h>
 #include <linux/slab.h>
 #include <linux/slab.h>
 #include <linux/types.h>
 #include <linux/types.h>
 #include <linux/dma-mapping.h>
 #include <linux/dma-mapping.h>

+ 1 - 8
arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts

@@ -61,13 +61,6 @@
 	chosen {
 	chosen {
 		stdout-path = "serial0:115200n8";
 		stdout-path = "serial0:115200n8";
 	};
 	};
-
-	reg_vcc3v3: vcc3v3 {
-		compatible = "regulator-fixed";
-		regulator-name = "vcc3v3";
-		regulator-min-microvolt = <3300000>;
-		regulator-max-microvolt = <3300000>;
-	};
 };
 };
 
 
 &ehci0 {
 &ehci0 {
@@ -91,7 +84,7 @@
 &mmc0 {
 &mmc0 {
 	pinctrl-names = "default";
 	pinctrl-names = "default";
 	pinctrl-0 = <&mmc0_pins>;
 	pinctrl-0 = <&mmc0_pins>;
-	vmmc-supply = <&reg_vcc3v3>;
+	vmmc-supply = <&reg_dcdc1>;
 	cd-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>;
 	cd-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>;
 	cd-inverted;
 	cd-inverted;
 	disable-wp;
 	disable-wp;

+ 3 - 3
arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi

@@ -336,7 +336,7 @@
 				/* non-prefetchable memory */
 				/* non-prefetchable memory */
 				0x82000000 0 0xf6000000 0  0xf6000000 0 0xf00000>;
 				0x82000000 0 0xf6000000 0  0xf6000000 0 0xf00000>;
 			interrupt-map-mask = <0 0 0 0>;
 			interrupt-map-mask = <0 0 0 0>;
-			interrupt-map = <0 0 0 0 &cpm_icu 0 ICU_GRP_NSR 22 IRQ_TYPE_LEVEL_HIGH>;
+			interrupt-map = <0 0 0 0 &cpm_icu ICU_GRP_NSR 22 IRQ_TYPE_LEVEL_HIGH>;
 			interrupts = <ICU_GRP_NSR 22 IRQ_TYPE_LEVEL_HIGH>;
 			interrupts = <ICU_GRP_NSR 22 IRQ_TYPE_LEVEL_HIGH>;
 			num-lanes = <1>;
 			num-lanes = <1>;
 			clocks = <&cpm_clk 1 13>;
 			clocks = <&cpm_clk 1 13>;
@@ -362,7 +362,7 @@
 				/* non-prefetchable memory */
 				/* non-prefetchable memory */
 				0x82000000 0 0xf7000000 0  0xf7000000 0 0xf00000>;
 				0x82000000 0 0xf7000000 0  0xf7000000 0 0xf00000>;
 			interrupt-map-mask = <0 0 0 0>;
 			interrupt-map-mask = <0 0 0 0>;
-			interrupt-map = <0 0 0 0 &cpm_icu 0 ICU_GRP_NSR 24 IRQ_TYPE_LEVEL_HIGH>;
+			interrupt-map = <0 0 0 0 &cpm_icu ICU_GRP_NSR 24 IRQ_TYPE_LEVEL_HIGH>;
 			interrupts = <ICU_GRP_NSR 24 IRQ_TYPE_LEVEL_HIGH>;
 			interrupts = <ICU_GRP_NSR 24 IRQ_TYPE_LEVEL_HIGH>;
 
 
 			num-lanes = <1>;
 			num-lanes = <1>;
@@ -389,7 +389,7 @@
 				/* non-prefetchable memory */
 				/* non-prefetchable memory */
 				0x82000000 0 0xf8000000 0  0xf8000000 0 0xf00000>;
 				0x82000000 0 0xf8000000 0  0xf8000000 0 0xf00000>;
 			interrupt-map-mask = <0 0 0 0>;
 			interrupt-map-mask = <0 0 0 0>;
-			interrupt-map = <0 0 0 0 &cpm_icu 0 ICU_GRP_NSR 23 IRQ_TYPE_LEVEL_HIGH>;
+			interrupt-map = <0 0 0 0 &cpm_icu ICU_GRP_NSR 23 IRQ_TYPE_LEVEL_HIGH>;
 			interrupts = <ICU_GRP_NSR 23 IRQ_TYPE_LEVEL_HIGH>;
 			interrupts = <ICU_GRP_NSR 23 IRQ_TYPE_LEVEL_HIGH>;
 
 
 			num-lanes = <1>;
 			num-lanes = <1>;

+ 3 - 3
arch/arm64/boot/dts/marvell/armada-cp110-slave.dtsi

@@ -335,7 +335,7 @@
 				/* non-prefetchable memory */
 				/* non-prefetchable memory */
 				0x82000000 0 0xfa000000 0  0xfa000000 0 0xf00000>;
 				0x82000000 0 0xfa000000 0  0xfa000000 0 0xf00000>;
 			interrupt-map-mask = <0 0 0 0>;
 			interrupt-map-mask = <0 0 0 0>;
-			interrupt-map = <0 0 0 0 &cps_icu 0 ICU_GRP_NSR 22 IRQ_TYPE_LEVEL_HIGH>;
+			interrupt-map = <0 0 0 0 &cps_icu ICU_GRP_NSR 22 IRQ_TYPE_LEVEL_HIGH>;
 			interrupts = <ICU_GRP_NSR 22 IRQ_TYPE_LEVEL_HIGH>;
 			interrupts = <ICU_GRP_NSR 22 IRQ_TYPE_LEVEL_HIGH>;
 			num-lanes = <1>;
 			num-lanes = <1>;
 			clocks = <&cps_clk 1 13>;
 			clocks = <&cps_clk 1 13>;
@@ -361,7 +361,7 @@
 				/* non-prefetchable memory */
 				/* non-prefetchable memory */
 				0x82000000 0 0xfb000000 0  0xfb000000 0 0xf00000>;
 				0x82000000 0 0xfb000000 0  0xfb000000 0 0xf00000>;
 			interrupt-map-mask = <0 0 0 0>;
 			interrupt-map-mask = <0 0 0 0>;
-			interrupt-map = <0 0 0 0 &cps_icu 0 ICU_GRP_NSR 24 IRQ_TYPE_LEVEL_HIGH>;
+			interrupt-map = <0 0 0 0 &cps_icu ICU_GRP_NSR 24 IRQ_TYPE_LEVEL_HIGH>;
 			interrupts = <ICU_GRP_NSR 24 IRQ_TYPE_LEVEL_HIGH>;
 			interrupts = <ICU_GRP_NSR 24 IRQ_TYPE_LEVEL_HIGH>;
 
 
 			num-lanes = <1>;
 			num-lanes = <1>;
@@ -388,7 +388,7 @@
 				/* non-prefetchable memory */
 				/* non-prefetchable memory */
 				0x82000000 0 0xfc000000 0  0xfc000000 0 0xf00000>;
 				0x82000000 0 0xfc000000 0  0xfc000000 0 0xf00000>;
 			interrupt-map-mask = <0 0 0 0>;
 			interrupt-map-mask = <0 0 0 0>;
-			interrupt-map = <0 0 0 0 &cps_icu 0 ICU_GRP_NSR 23 IRQ_TYPE_LEVEL_HIGH>;
+			interrupt-map = <0 0 0 0 &cps_icu ICU_GRP_NSR 23 IRQ_TYPE_LEVEL_HIGH>;
 			interrupts = <ICU_GRP_NSR 23 IRQ_TYPE_LEVEL_HIGH>;
 			interrupts = <ICU_GRP_NSR 23 IRQ_TYPE_LEVEL_HIGH>;
 
 
 			num-lanes = <1>;
 			num-lanes = <1>;

+ 10 - 0
arch/arm64/boot/dts/renesas/salvator-common.dtsi

@@ -62,6 +62,7 @@
 		brightness-levels = <256 128 64 16 8 4 0>;
 		brightness-levels = <256 128 64 16 8 4 0>;
 		default-brightness-level = <6>;
 		default-brightness-level = <6>;
 
 
+		power-supply = <&reg_12v>;
 		enable-gpios = <&gpio6 7 GPIO_ACTIVE_HIGH>;
 		enable-gpios = <&gpio6 7 GPIO_ACTIVE_HIGH>;
 	};
 	};
 
 
@@ -83,6 +84,15 @@
 		regulator-always-on;
 		regulator-always-on;
 	};
 	};
 
 
+	reg_12v: regulator2 {
+		compatible = "regulator-fixed";
+		regulator-name = "fixed-12V";
+		regulator-min-microvolt = <12000000>;
+		regulator-max-microvolt = <12000000>;
+		regulator-boot-on;
+		regulator-always-on;
+	};
+
 	rsnd_ak4613: sound {
 	rsnd_ak4613: sound {
 		compatible = "simple-audio-card";
 		compatible = "simple-audio-card";
 
 

+ 1 - 1
arch/arm64/boot/dts/rockchip/rk3328.dtsi

@@ -582,7 +582,7 @@
 	vop_mmu: iommu@ff373f00 {
 	vop_mmu: iommu@ff373f00 {
 		compatible = "rockchip,iommu";
 		compatible = "rockchip,iommu";
 		reg = <0x0 0xff373f00 0x0 0x100>;
 		reg = <0x0 0xff373f00 0x0 0x100>;
-		interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH 0>;
+		interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
 		interrupt-names = "vop_mmu";
 		interrupt-names = "vop_mmu";
 		#iommu-cells = <0>;
 		#iommu-cells = <0>;
 		status = "disabled";
 		status = "disabled";

+ 1 - 1
arch/arm64/boot/dts/rockchip/rk3368.dtsi

@@ -740,7 +740,7 @@
 	iep_mmu: iommu@ff900800 {
 	iep_mmu: iommu@ff900800 {
 		compatible = "rockchip,iommu";
 		compatible = "rockchip,iommu";
 		reg = <0x0 0xff900800 0x0 0x100>;
 		reg = <0x0 0xff900800 0x0 0x100>;
-		interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH 0>;
+		interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
 		interrupt-names = "iep_mmu";
 		interrupt-names = "iep_mmu";
 		#iommu-cells = <0>;
 		#iommu-cells = <0>;
 		status = "disabled";
 		status = "disabled";

+ 2 - 2
arch/arm64/boot/dts/rockchip/rk3399-firefly.dts

@@ -371,10 +371,10 @@
 				regulator-always-on;
 				regulator-always-on;
 				regulator-boot-on;
 				regulator-boot-on;
 				regulator-min-microvolt = <1800000>;
 				regulator-min-microvolt = <1800000>;
-				regulator-max-microvolt = <3300000>;
+				regulator-max-microvolt = <3000000>;
 				regulator-state-mem {
 				regulator-state-mem {
 					regulator-on-in-suspend;
 					regulator-on-in-suspend;
-					regulator-suspend-microvolt = <3300000>;
+					regulator-suspend-microvolt = <3000000>;
 				};
 				};
 			};
 			};
 
 

+ 2 - 2
arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi

@@ -325,12 +325,12 @@
 			vcc_sd: LDO_REG4 {
 			vcc_sd: LDO_REG4 {
 				regulator-name = "vcc_sd";
 				regulator-name = "vcc_sd";
 				regulator-min-microvolt = <1800000>;
 				regulator-min-microvolt = <1800000>;
-				regulator-max-microvolt = <3300000>;
+				regulator-max-microvolt = <3000000>;
 				regulator-always-on;
 				regulator-always-on;
 				regulator-boot-on;
 				regulator-boot-on;
 				regulator-state-mem {
 				regulator-state-mem {
 					regulator-on-in-suspend;
 					regulator-on-in-suspend;
-					regulator-suspend-microvolt = <3300000>;
+					regulator-suspend-microvolt = <3000000>;
 				};
 				};
 			};
 			};
 
 

+ 2 - 2
arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi

@@ -315,10 +315,10 @@
 				regulator-always-on;
 				regulator-always-on;
 				regulator-boot-on;
 				regulator-boot-on;
 				regulator-min-microvolt = <1800000>;
 				regulator-min-microvolt = <1800000>;
-				regulator-max-microvolt = <3300000>;
+				regulator-max-microvolt = <3000000>;
 				regulator-state-mem {
 				regulator-state-mem {
 					regulator-on-in-suspend;
 					regulator-on-in-suspend;
-					regulator-suspend-microvolt = <3300000>;
+					regulator-suspend-microvolt = <3000000>;
 				};
 				};
 			};
 			};
 
 

+ 1 - 1
arch/parisc/kernel/parisc_ksyms.c

@@ -35,12 +35,12 @@ EXPORT_SYMBOL(memset);
 EXPORT_SYMBOL(__xchg8);
 EXPORT_SYMBOL(__xchg8);
 EXPORT_SYMBOL(__xchg32);
 EXPORT_SYMBOL(__xchg32);
 EXPORT_SYMBOL(__cmpxchg_u32);
 EXPORT_SYMBOL(__cmpxchg_u32);
+EXPORT_SYMBOL(__cmpxchg_u64);
 #ifdef CONFIG_SMP
 #ifdef CONFIG_SMP
 EXPORT_SYMBOL(__atomic_hash);
 EXPORT_SYMBOL(__atomic_hash);
 #endif
 #endif
 #ifdef CONFIG_64BIT
 #ifdef CONFIG_64BIT
 EXPORT_SYMBOL(__xchg64);
 EXPORT_SYMBOL(__xchg64);
-EXPORT_SYMBOL(__cmpxchg_u64);
 #endif
 #endif
 
 
 #include <linux/uaccess.h>
 #include <linux/uaccess.h>

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

@@ -742,7 +742,7 @@ lws_compare_and_swap_2:
 10:	ldd	0(%r25), %r25
 10:	ldd	0(%r25), %r25
 11:	ldd	0(%r24), %r24
 11:	ldd	0(%r24), %r24
 #else
 #else
-	/* Load new value into r22/r23 - high/low */
+	/* Load old value into r22/r23 - high/low */
 10:	ldw	0(%r25), %r22
 10:	ldw	0(%r25), %r22
 11:	ldw	4(%r25), %r23
 11:	ldw	4(%r25), %r23
 	/* Load new value into fr4 for atomic store later */
 	/* Load new value into fr4 for atomic store later */
@@ -834,11 +834,11 @@ cas2_action:
 	copy	%r0, %r28
 	copy	%r0, %r28
 #else
 #else
 	/* Compare first word */
 	/* Compare first word */
-19:	ldw,ma	0(%r26), %r29
+19:	ldw	0(%r26), %r29
 	sub,=	%r29, %r22, %r0
 	sub,=	%r29, %r22, %r0
 	b,n	cas2_end
 	b,n	cas2_end
 	/* Compare second word */
 	/* Compare second word */
-20:	ldw,ma	4(%r26), %r29
+20:	ldw	4(%r26), %r29
 	sub,=	%r29, %r23, %r0
 	sub,=	%r29, %r23, %r0
 	b,n	cas2_end
 	b,n	cas2_end
 	/* Perform the store */
 	/* Perform the store */

+ 4 - 1
arch/parisc/kernel/time.c

@@ -253,7 +253,10 @@ static int __init init_cr16_clocksource(void)
 		cpu0_loc = per_cpu(cpu_data, 0).cpu_loc;
 		cpu0_loc = per_cpu(cpu_data, 0).cpu_loc;
 
 
 		for_each_online_cpu(cpu) {
 		for_each_online_cpu(cpu) {
-			if (cpu0_loc == per_cpu(cpu_data, cpu).cpu_loc)
+			if (cpu == 0)
+				continue;
+			if ((cpu0_loc != 0) &&
+			    (cpu0_loc == per_cpu(cpu_data, cpu).cpu_loc))
 				continue;
 				continue;
 
 
 			clocksource_cr16.name = "cr16_unstable";
 			clocksource_cr16.name = "cr16_unstable";

+ 14 - 9
arch/powerpc/kvm/book3s_64_vio.c

@@ -478,28 +478,30 @@ long kvmppc_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn,
 		return ret;
 		return ret;
 
 
 	dir = iommu_tce_direction(tce);
 	dir = iommu_tce_direction(tce);
+
+	idx = srcu_read_lock(&vcpu->kvm->srcu);
+
 	if ((dir != DMA_NONE) && kvmppc_gpa_to_ua(vcpu->kvm,
 	if ((dir != DMA_NONE) && kvmppc_gpa_to_ua(vcpu->kvm,
-			tce & ~(TCE_PCI_READ | TCE_PCI_WRITE), &ua, NULL))
-		return H_PARAMETER;
+			tce & ~(TCE_PCI_READ | TCE_PCI_WRITE), &ua, NULL)) {
+		ret = H_PARAMETER;
+		goto unlock_exit;
+	}
 
 
 	entry = ioba >> stt->page_shift;
 	entry = ioba >> stt->page_shift;
 
 
 	list_for_each_entry_lockless(stit, &stt->iommu_tables, next) {
 	list_for_each_entry_lockless(stit, &stt->iommu_tables, next) {
-		if (dir == DMA_NONE) {
+		if (dir == DMA_NONE)
 			ret = kvmppc_tce_iommu_unmap(vcpu->kvm,
 			ret = kvmppc_tce_iommu_unmap(vcpu->kvm,
 					stit->tbl, entry);
 					stit->tbl, entry);
-		} else {
-			idx = srcu_read_lock(&vcpu->kvm->srcu);
+		else
 			ret = kvmppc_tce_iommu_map(vcpu->kvm, stit->tbl,
 			ret = kvmppc_tce_iommu_map(vcpu->kvm, stit->tbl,
 					entry, ua, dir);
 					entry, ua, dir);
-			srcu_read_unlock(&vcpu->kvm->srcu, idx);
-		}
 
 
 		if (ret == H_SUCCESS)
 		if (ret == H_SUCCESS)
 			continue;
 			continue;
 
 
 		if (ret == H_TOO_HARD)
 		if (ret == H_TOO_HARD)
-			return ret;
+			goto unlock_exit;
 
 
 		WARN_ON_ONCE(1);
 		WARN_ON_ONCE(1);
 		kvmppc_clear_tce(stit->tbl, entry);
 		kvmppc_clear_tce(stit->tbl, entry);
@@ -507,7 +509,10 @@ long kvmppc_h_put_tce(struct kvm_vcpu *vcpu, unsigned long liobn,
 
 
 	kvmppc_tce_put(stt, entry, tce);
 	kvmppc_tce_put(stt, entry, tce);
 
 
-	return H_SUCCESS;
+unlock_exit:
+	srcu_read_unlock(&vcpu->kvm->srcu, idx);
+
+	return ret;
 }
 }
 EXPORT_SYMBOL_GPL(kvmppc_h_put_tce);
 EXPORT_SYMBOL_GPL(kvmppc_h_put_tce);
 
 

+ 10 - 3
arch/powerpc/kvm/book3s_hv_rmhandlers.S

@@ -989,13 +989,14 @@ ALT_FTR_SECTION_END_IFCLR(CPU_FTR_ARCH_300)
 	beq	no_xive
 	beq	no_xive
 	ld	r11, VCPU_XIVE_SAVED_STATE(r4)
 	ld	r11, VCPU_XIVE_SAVED_STATE(r4)
 	li	r9, TM_QW1_OS
 	li	r9, TM_QW1_OS
-	stdcix	r11,r9,r10
 	eieio
 	eieio
+	stdcix	r11,r9,r10
 	lwz	r11, VCPU_XIVE_CAM_WORD(r4)
 	lwz	r11, VCPU_XIVE_CAM_WORD(r4)
 	li	r9, TM_QW1_OS + TM_WORD2
 	li	r9, TM_QW1_OS + TM_WORD2
 	stwcix	r11,r9,r10
 	stwcix	r11,r9,r10
 	li	r9, 1
 	li	r9, 1
 	stw	r9, VCPU_XIVE_PUSHED(r4)
 	stw	r9, VCPU_XIVE_PUSHED(r4)
+	eieio
 no_xive:
 no_xive:
 #endif /* CONFIG_KVM_XICS */
 #endif /* CONFIG_KVM_XICS */
 
 
@@ -1310,6 +1311,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
 	bne	3f
 	bne	3f
 BEGIN_FTR_SECTION
 BEGIN_FTR_SECTION
 	PPC_MSGSYNC
 	PPC_MSGSYNC
+	lwsync
 END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
 END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
 	lbz	r0, HSTATE_HOST_IPI(r13)
 	lbz	r0, HSTATE_HOST_IPI(r13)
 	cmpwi	r0, 0
 	cmpwi	r0, 0
@@ -1400,8 +1402,8 @@ guest_exit_cont:		/* r9 = vcpu, r12 = trap, r13 = paca */
 	cmpldi	cr0, r10, 0
 	cmpldi	cr0, r10, 0
 	beq	1f
 	beq	1f
 	/* First load to pull the context, we ignore the value */
 	/* First load to pull the context, we ignore the value */
-	lwzx	r11, r7, r10
 	eieio
 	eieio
+	lwzx	r11, r7, r10
 	/* Second load to recover the context state (Words 0 and 1) */
 	/* Second load to recover the context state (Words 0 and 1) */
 	ldx	r11, r6, r10
 	ldx	r11, r6, r10
 	b	3f
 	b	3f
@@ -1409,8 +1411,8 @@ guest_exit_cont:		/* r9 = vcpu, r12 = trap, r13 = paca */
 	cmpldi	cr0, r10, 0
 	cmpldi	cr0, r10, 0
 	beq	1f
 	beq	1f
 	/* First load to pull the context, we ignore the value */
 	/* First load to pull the context, we ignore the value */
-	lwzcix	r11, r7, r10
 	eieio
 	eieio
+	lwzcix	r11, r7, r10
 	/* Second load to recover the context state (Words 0 and 1) */
 	/* Second load to recover the context state (Words 0 and 1) */
 	ldcix	r11, r6, r10
 	ldcix	r11, r6, r10
 3:	std	r11, VCPU_XIVE_SAVED_STATE(r9)
 3:	std	r11, VCPU_XIVE_SAVED_STATE(r9)
@@ -1420,6 +1422,7 @@ guest_exit_cont:		/* r9 = vcpu, r12 = trap, r13 = paca */
 	stw	r10, VCPU_XIVE_PUSHED(r9)
 	stw	r10, VCPU_XIVE_PUSHED(r9)
 	stb	r10, (VCPU_XIVE_SAVED_STATE+3)(r9)
 	stb	r10, (VCPU_XIVE_SAVED_STATE+3)(r9)
 	stb	r0, (VCPU_XIVE_SAVED_STATE+4)(r9)
 	stb	r0, (VCPU_XIVE_SAVED_STATE+4)(r9)
+	eieio
 1:
 1:
 #endif /* CONFIG_KVM_XICS */
 #endif /* CONFIG_KVM_XICS */
 	/* Save more register state  */
 	/* Save more register state  */
@@ -2788,6 +2791,10 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
 	PPC_MSGCLR(6)
 	PPC_MSGCLR(6)
 	/* see if it's a host IPI */
 	/* see if it's a host IPI */
 	li	r3, 1
 	li	r3, 1
+BEGIN_FTR_SECTION
+	PPC_MSGSYNC
+	lwsync
+END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
 	lbz	r0, HSTATE_HOST_IPI(r13)
 	lbz	r0, HSTATE_HOST_IPI(r13)
 	cmpwi	r0, 0
 	cmpwi	r0, 0
 	bnelr
 	bnelr

+ 1 - 2
arch/powerpc/kvm/powerpc.c

@@ -644,8 +644,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
 		break;
 		break;
 #endif
 #endif
 	case KVM_CAP_PPC_HTM:
 	case KVM_CAP_PPC_HTM:
-		r = cpu_has_feature(CPU_FTR_TM_COMP) &&
-		    is_kvmppc_hv_enabled(kvm);
+		r = cpu_has_feature(CPU_FTR_TM_COMP) && hv_enabled;
 		break;
 		break;
 	default:
 	default:
 		r = 0;
 		r = 0;

+ 2 - 0
arch/s390/configs/zfcpdump_defconfig

@@ -27,6 +27,7 @@ CONFIG_NET=y
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_DEVTMPFS=y
 CONFIG_DEVTMPFS=y
 # CONFIG_FIRMWARE_IN_KERNEL is not set
 # CONFIG_FIRMWARE_IN_KERNEL is not set
+CONFIG_BLK_DEV_RAM=y
 # CONFIG_BLK_DEV_XPRAM is not set
 # CONFIG_BLK_DEV_XPRAM is not set
 # CONFIG_DCSSBLK is not set
 # CONFIG_DCSSBLK is not set
 # CONFIG_DASD is not set
 # CONFIG_DASD is not set
@@ -59,6 +60,7 @@ CONFIG_CONFIGFS_FS=y
 # CONFIG_NETWORK_FILESYSTEMS is not set
 # CONFIG_NETWORK_FILESYSTEMS is not set
 CONFIG_PRINTK_TIME=y
 CONFIG_PRINTK_TIME=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_INFO=y
+CONFIG_DEBUG_FS=y
 CONFIG_DEBUG_KERNEL=y
 CONFIG_DEBUG_KERNEL=y
 CONFIG_PANIC_ON_OOPS=y
 CONFIG_PANIC_ON_OOPS=y
 # CONFIG_SCHED_DEBUG is not set
 # CONFIG_SCHED_DEBUG is not set

+ 5 - 2
arch/s390/kernel/entry.S

@@ -521,12 +521,15 @@ ENTRY(pgm_check_handler)
 	tmhh	%r8,0x0001		# test problem state bit
 	tmhh	%r8,0x0001		# test problem state bit
 	jnz	2f			# -> fault in user space
 	jnz	2f			# -> fault in user space
 #if IS_ENABLED(CONFIG_KVM)
 #if IS_ENABLED(CONFIG_KVM)
-	# cleanup critical section for sie64a
+	# cleanup critical section for program checks in sie64a
 	lgr	%r14,%r9
 	lgr	%r14,%r9
 	slg	%r14,BASED(.Lsie_critical_start)
 	slg	%r14,BASED(.Lsie_critical_start)
 	clg	%r14,BASED(.Lsie_critical_length)
 	clg	%r14,BASED(.Lsie_critical_length)
 	jhe	0f
 	jhe	0f
-	brasl	%r14,.Lcleanup_sie
+	lg	%r14,__SF_EMPTY(%r15)		# get control block pointer
+	ni	__SIE_PROG0C+3(%r14),0xfe	# no longer in SIE
+	lctlg	%c1,%c1,__LC_USER_ASCE		# load primary asce
+	larl	%r9,sie_exit			# skip forward to sie_exit
 #endif
 #endif
 0:	tmhh	%r8,0x4000		# PER bit set in old PSW ?
 0:	tmhh	%r8,0x4000		# PER bit set in old PSW ?
 	jnz	1f			# -> enabled, can't be a double fault
 	jnz	1f			# -> enabled, can't be a double fault

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

@@ -293,7 +293,10 @@ static void pcpu_attach_task(struct pcpu *pcpu, struct task_struct *tsk)
 	lc->lpp = LPP_MAGIC;
 	lc->lpp = LPP_MAGIC;
 	lc->current_pid = tsk->pid;
 	lc->current_pid = tsk->pid;
 	lc->user_timer = tsk->thread.user_timer;
 	lc->user_timer = tsk->thread.user_timer;
+	lc->guest_timer = tsk->thread.guest_timer;
 	lc->system_timer = tsk->thread.system_timer;
 	lc->system_timer = tsk->thread.system_timer;
+	lc->hardirq_timer = tsk->thread.hardirq_timer;
+	lc->softirq_timer = tsk->thread.softirq_timer;
 	lc->steal_timer = 0;
 	lc->steal_timer = 0;
 }
 }
 
 

+ 1 - 1
arch/x86/entry/entry_64.S

@@ -808,7 +808,7 @@ apicinterrupt IRQ_WORK_VECTOR			irq_work_interrupt		smp_irq_work_interrupt
 
 
 .macro idtentry sym do_sym has_error_code:req paranoid=0 shift_ist=-1
 .macro idtentry sym do_sym has_error_code:req paranoid=0 shift_ist=-1
 ENTRY(\sym)
 ENTRY(\sym)
-	UNWIND_HINT_IRET_REGS offset=8
+	UNWIND_HINT_IRET_REGS offset=\has_error_code*8
 
 
 	/* Sanity check */
 	/* Sanity check */
 	.if \shift_ist != -1 && \paranoid == 0
 	.if \shift_ist != -1 && \paranoid == 0

+ 3 - 3
arch/x86/events/intel/bts.c

@@ -546,9 +546,6 @@ static int bts_event_init(struct perf_event *event)
 	if (event->attr.type != bts_pmu.type)
 	if (event->attr.type != bts_pmu.type)
 		return -ENOENT;
 		return -ENOENT;
 
 
-	if (x86_add_exclusive(x86_lbr_exclusive_bts))
-		return -EBUSY;
-
 	/*
 	/*
 	 * BTS leaks kernel addresses even when CPL0 tracing is
 	 * BTS leaks kernel addresses even when CPL0 tracing is
 	 * disabled, so disallow intel_bts driver for unprivileged
 	 * disabled, so disallow intel_bts driver for unprivileged
@@ -562,6 +559,9 @@ static int bts_event_init(struct perf_event *event)
 	    !capable(CAP_SYS_ADMIN))
 	    !capable(CAP_SYS_ADMIN))
 		return -EACCES;
 		return -EACCES;
 
 
+	if (x86_add_exclusive(x86_lbr_exclusive_bts))
+		return -EBUSY;
+
 	ret = x86_reserve_hardware();
 	ret = x86_reserve_hardware();
 	if (ret) {
 	if (ret) {
 		x86_del_exclusive(x86_lbr_exclusive_bts);
 		x86_del_exclusive(x86_lbr_exclusive_bts);

+ 0 - 4
arch/x86/include/asm/io.h

@@ -110,10 +110,6 @@ build_mmio_write(__writeq, "q", unsigned long, "r", )
 
 
 #endif
 #endif
 
 
-#define ARCH_HAS_VALID_PHYS_ADDR_RANGE
-extern int valid_phys_addr_range(phys_addr_t addr, size_t size);
-extern int valid_mmap_phys_addr_range(unsigned long pfn, size_t size);
-
 /**
 /**
  *	virt_to_phys	-	map virtual addresses to physical
  *	virt_to_phys	-	map virtual addresses to physical
  *	@address: address to remap
  *	@address: address to remap

+ 41 - 0
arch/x86/kernel/amd_nb.c

@@ -27,6 +27,8 @@ static const struct pci_device_id amd_root_ids[] = {
 	{}
 	{}
 };
 };
 
 
+#define PCI_DEVICE_ID_AMD_CNB17H_F4     0x1704
+
 const struct pci_device_id amd_nb_misc_ids[] = {
 const struct pci_device_id amd_nb_misc_ids[] = {
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_K8_NB_MISC) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_K8_NB_MISC) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_10H_NB_MISC) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_10H_NB_MISC) },
@@ -37,6 +39,7 @@ const struct pci_device_id amd_nb_misc_ids[] = {
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_16H_NB_F3) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_16H_NB_F3) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_16H_M30H_NB_F3) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_16H_M30H_NB_F3) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_DF_F3) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_DF_F3) },
+	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CNB17H_F3) },
 	{}
 	{}
 };
 };
 EXPORT_SYMBOL_GPL(amd_nb_misc_ids);
 EXPORT_SYMBOL_GPL(amd_nb_misc_ids);
@@ -48,6 +51,7 @@ static const struct pci_device_id amd_nb_link_ids[] = {
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_16H_NB_F4) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_16H_NB_F4) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_16H_M30H_NB_F4) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_16H_M30H_NB_F4) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_DF_F4) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_DF_F4) },
+	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CNB17H_F4) },
 	{}
 	{}
 };
 };
 
 
@@ -402,11 +406,48 @@ void amd_flush_garts(void)
 }
 }
 EXPORT_SYMBOL_GPL(amd_flush_garts);
 EXPORT_SYMBOL_GPL(amd_flush_garts);
 
 
+static void __fix_erratum_688(void *info)
+{
+#define MSR_AMD64_IC_CFG 0xC0011021
+
+	msr_set_bit(MSR_AMD64_IC_CFG, 3);
+	msr_set_bit(MSR_AMD64_IC_CFG, 14);
+}
+
+/* Apply erratum 688 fix so machines without a BIOS fix work. */
+static __init void fix_erratum_688(void)
+{
+	struct pci_dev *F4;
+	u32 val;
+
+	if (boot_cpu_data.x86 != 0x14)
+		return;
+
+	if (!amd_northbridges.num)
+		return;
+
+	F4 = node_to_amd_nb(0)->link;
+	if (!F4)
+		return;
+
+	if (pci_read_config_dword(F4, 0x164, &val))
+		return;
+
+	if (val & BIT(2))
+		return;
+
+	on_each_cpu(__fix_erratum_688, NULL, 0);
+
+	pr_info("x86/cpu/AMD: CPU erratum 688 worked around\n");
+}
+
 static __init int init_amd_nbs(void)
 static __init int init_amd_nbs(void)
 {
 {
 	amd_cache_northbridges();
 	amd_cache_northbridges();
 	amd_cache_gart();
 	amd_cache_gart();
 
 
+	fix_erratum_688();
+
 	return 0;
 	return 0;
 }
 }
 
 

+ 15 - 14
arch/x86/kernel/unwind_orc.c

@@ -86,8 +86,8 @@ static struct orc_entry *orc_find(unsigned long ip)
 		idx = (ip - LOOKUP_START_IP) / LOOKUP_BLOCK_SIZE;
 		idx = (ip - LOOKUP_START_IP) / LOOKUP_BLOCK_SIZE;
 
 
 		if (unlikely((idx >= lookup_num_blocks-1))) {
 		if (unlikely((idx >= lookup_num_blocks-1))) {
-			orc_warn("WARNING: bad lookup idx: idx=%u num=%u ip=%lx\n",
-				 idx, lookup_num_blocks, ip);
+			orc_warn("WARNING: bad lookup idx: idx=%u num=%u ip=%pB\n",
+				 idx, lookup_num_blocks, (void *)ip);
 			return NULL;
 			return NULL;
 		}
 		}
 
 
@@ -96,8 +96,8 @@ static struct orc_entry *orc_find(unsigned long ip)
 
 
 		if (unlikely((__start_orc_unwind + start >= __stop_orc_unwind) ||
 		if (unlikely((__start_orc_unwind + start >= __stop_orc_unwind) ||
 			     (__start_orc_unwind + stop > __stop_orc_unwind))) {
 			     (__start_orc_unwind + stop > __stop_orc_unwind))) {
-			orc_warn("WARNING: bad lookup value: idx=%u num=%u start=%u stop=%u ip=%lx\n",
-				 idx, lookup_num_blocks, start, stop, ip);
+			orc_warn("WARNING: bad lookup value: idx=%u num=%u start=%u stop=%u ip=%pB\n",
+				 idx, lookup_num_blocks, start, stop, (void *)ip);
 			return NULL;
 			return NULL;
 		}
 		}
 
 
@@ -373,7 +373,7 @@ bool unwind_next_frame(struct unwind_state *state)
 
 
 	case ORC_REG_R10:
 	case ORC_REG_R10:
 		if (!state->regs || !state->full_regs) {
 		if (!state->regs || !state->full_regs) {
-			orc_warn("missing regs for base reg R10 at ip %p\n",
+			orc_warn("missing regs for base reg R10 at ip %pB\n",
 				 (void *)state->ip);
 				 (void *)state->ip);
 			goto done;
 			goto done;
 		}
 		}
@@ -382,7 +382,7 @@ bool unwind_next_frame(struct unwind_state *state)
 
 
 	case ORC_REG_R13:
 	case ORC_REG_R13:
 		if (!state->regs || !state->full_regs) {
 		if (!state->regs || !state->full_regs) {
-			orc_warn("missing regs for base reg R13 at ip %p\n",
+			orc_warn("missing regs for base reg R13 at ip %pB\n",
 				 (void *)state->ip);
 				 (void *)state->ip);
 			goto done;
 			goto done;
 		}
 		}
@@ -391,7 +391,7 @@ bool unwind_next_frame(struct unwind_state *state)
 
 
 	case ORC_REG_DI:
 	case ORC_REG_DI:
 		if (!state->regs || !state->full_regs) {
 		if (!state->regs || !state->full_regs) {
-			orc_warn("missing regs for base reg DI at ip %p\n",
+			orc_warn("missing regs for base reg DI at ip %pB\n",
 				 (void *)state->ip);
 				 (void *)state->ip);
 			goto done;
 			goto done;
 		}
 		}
@@ -400,7 +400,7 @@ bool unwind_next_frame(struct unwind_state *state)
 
 
 	case ORC_REG_DX:
 	case ORC_REG_DX:
 		if (!state->regs || !state->full_regs) {
 		if (!state->regs || !state->full_regs) {
-			orc_warn("missing regs for base reg DX at ip %p\n",
+			orc_warn("missing regs for base reg DX at ip %pB\n",
 				 (void *)state->ip);
 				 (void *)state->ip);
 			goto done;
 			goto done;
 		}
 		}
@@ -408,7 +408,7 @@ bool unwind_next_frame(struct unwind_state *state)
 		break;
 		break;
 
 
 	default:
 	default:
-		orc_warn("unknown SP base reg %d for ip %p\n",
+		orc_warn("unknown SP base reg %d for ip %pB\n",
 			 orc->sp_reg, (void *)state->ip);
 			 orc->sp_reg, (void *)state->ip);
 		goto done;
 		goto done;
 	}
 	}
@@ -436,7 +436,7 @@ bool unwind_next_frame(struct unwind_state *state)
 
 
 	case ORC_TYPE_REGS:
 	case ORC_TYPE_REGS:
 		if (!deref_stack_regs(state, sp, &state->ip, &state->sp, true)) {
 		if (!deref_stack_regs(state, sp, &state->ip, &state->sp, true)) {
-			orc_warn("can't dereference registers at %p for ip %p\n",
+			orc_warn("can't dereference registers at %p for ip %pB\n",
 				 (void *)sp, (void *)orig_ip);
 				 (void *)sp, (void *)orig_ip);
 			goto done;
 			goto done;
 		}
 		}
@@ -448,7 +448,7 @@ bool unwind_next_frame(struct unwind_state *state)
 
 
 	case ORC_TYPE_REGS_IRET:
 	case ORC_TYPE_REGS_IRET:
 		if (!deref_stack_regs(state, sp, &state->ip, &state->sp, false)) {
 		if (!deref_stack_regs(state, sp, &state->ip, &state->sp, false)) {
-			orc_warn("can't dereference iret registers at %p for ip %p\n",
+			orc_warn("can't dereference iret registers at %p for ip %pB\n",
 				 (void *)sp, (void *)orig_ip);
 				 (void *)sp, (void *)orig_ip);
 			goto done;
 			goto done;
 		}
 		}
@@ -465,7 +465,8 @@ bool unwind_next_frame(struct unwind_state *state)
 		break;
 		break;
 
 
 	default:
 	default:
-		orc_warn("unknown .orc_unwind entry type %d\n", orc->type);
+		orc_warn("unknown .orc_unwind entry type %d for ip %pB\n",
+			 orc->type, (void *)orig_ip);
 		break;
 		break;
 	}
 	}
 
 
@@ -487,7 +488,7 @@ bool unwind_next_frame(struct unwind_state *state)
 		break;
 		break;
 
 
 	default:
 	default:
-		orc_warn("unknown BP base reg %d for ip %p\n",
+		orc_warn("unknown BP base reg %d for ip %pB\n",
 			 orc->bp_reg, (void *)orig_ip);
 			 orc->bp_reg, (void *)orig_ip);
 		goto done;
 		goto done;
 	}
 	}
@@ -496,7 +497,7 @@ bool unwind_next_frame(struct unwind_state *state)
 	if (state->stack_info.type == prev_type &&
 	if (state->stack_info.type == prev_type &&
 	    on_stack(&state->stack_info, (void *)state->sp, sizeof(long)) &&
 	    on_stack(&state->stack_info, (void *)state->sp, sizeof(long)) &&
 	    state->sp <= prev_sp) {
 	    state->sp <= prev_sp) {
-		orc_warn("stack going in the wrong direction? ip=%p\n",
+		orc_warn("stack going in the wrong direction? ip=%pB\n",
 			 (void *)orig_ip);
 			 (void *)orig_ip);
 		goto done;
 		goto done;
 	}
 	}

+ 0 - 12
arch/x86/mm/mmap.c

@@ -174,15 +174,3 @@ const char *arch_vma_name(struct vm_area_struct *vma)
 		return "[mpx]";
 		return "[mpx]";
 	return NULL;
 	return NULL;
 }
 }
-
-int valid_phys_addr_range(phys_addr_t addr, size_t count)
-{
-	return addr + count <= __pa(high_memory);
-}
-
-int valid_mmap_phys_addr_range(unsigned long pfn, size_t count)
-{
-	phys_addr_t addr = (phys_addr_t)pfn << PAGE_SHIFT;
-
-	return valid_phys_addr_range(addr, count);
-}

+ 3 - 1
crypto/asymmetric_keys/asymmetric_type.c

@@ -57,6 +57,8 @@ struct key *find_asymmetric_key(struct key *keyring,
 	char *req, *p;
 	char *req, *p;
 	int len;
 	int len;
 
 
+	BUG_ON(!id_0 && !id_1);
+
 	if (id_0) {
 	if (id_0) {
 		lookup = id_0->data;
 		lookup = id_0->data;
 		len = id_0->len;
 		len = id_0->len;
@@ -105,7 +107,7 @@ struct key *find_asymmetric_key(struct key *keyring,
 	if (id_0 && id_1) {
 	if (id_0 && id_1) {
 		const struct asymmetric_key_ids *kids = asymmetric_key_ids(key);
 		const struct asymmetric_key_ids *kids = asymmetric_key_ids(key);
 
 
-		if (!kids->id[0]) {
+		if (!kids->id[1]) {
 			pr_debug("First ID matches, but second is missing\n");
 			pr_debug("First ID matches, but second is missing\n");
 			goto reject;
 			goto reject;
 		}
 		}

+ 3 - 0
crypto/asymmetric_keys/pkcs7_parser.c

@@ -88,6 +88,9 @@ static int pkcs7_check_authattrs(struct pkcs7_message *msg)
 	bool want = false;
 	bool want = false;
 
 
 	sinfo = msg->signed_infos;
 	sinfo = msg->signed_infos;
+	if (!sinfo)
+		goto inconsistent;
+
 	if (sinfo->authattrs) {
 	if (sinfo->authattrs) {
 		want = true;
 		want = true;
 		msg->have_authattrs = true;
 		msg->have_authattrs = true;

+ 1 - 10
drivers/android/binder.c

@@ -3662,12 +3662,6 @@ static void binder_stat_br(struct binder_proc *proc,
 	}
 	}
 }
 }
 
 
-static int binder_has_thread_work(struct binder_thread *thread)
-{
-	return !binder_worklist_empty(thread->proc, &thread->todo) ||
-		thread->looper_need_return;
-}
-
 static int binder_put_node_cmd(struct binder_proc *proc,
 static int binder_put_node_cmd(struct binder_proc *proc,
 			       struct binder_thread *thread,
 			       struct binder_thread *thread,
 			       void __user **ptrp,
 			       void __user **ptrp,
@@ -4297,12 +4291,9 @@ static unsigned int binder_poll(struct file *filp,
 
 
 	binder_inner_proc_unlock(thread->proc);
 	binder_inner_proc_unlock(thread->proc);
 
 
-	if (binder_has_work(thread, wait_for_proc_work))
-		return POLLIN;
-
 	poll_wait(filp, &thread->wait, wait);
 	poll_wait(filp, &thread->wait, wait);
 
 
-	if (binder_has_thread_work(thread))
+	if (binder_has_work(thread, wait_for_proc_work))
 		return POLLIN;
 		return POLLIN;
 
 
 	return 0;
 	return 0;

+ 10 - 14
drivers/android/binder_alloc.c

@@ -215,17 +215,12 @@ static int binder_update_page_range(struct binder_alloc *alloc, int allocate,
 		}
 		}
 	}
 	}
 
 
-	if (!vma && need_mm)
-		mm = get_task_mm(alloc->tsk);
+	if (!vma && need_mm && mmget_not_zero(alloc->vma_vm_mm))
+		mm = alloc->vma_vm_mm;
 
 
 	if (mm) {
 	if (mm) {
 		down_write(&mm->mmap_sem);
 		down_write(&mm->mmap_sem);
 		vma = alloc->vma;
 		vma = alloc->vma;
-		if (vma && mm != alloc->vma_vm_mm) {
-			pr_err("%d: vma mm and task mm mismatch\n",
-				alloc->pid);
-			vma = NULL;
-		}
 	}
 	}
 
 
 	if (!vma && need_mm) {
 	if (!vma && need_mm) {
@@ -565,7 +560,7 @@ static void binder_delete_free_buffer(struct binder_alloc *alloc,
 		binder_alloc_debug(BINDER_DEBUG_BUFFER_ALLOC,
 		binder_alloc_debug(BINDER_DEBUG_BUFFER_ALLOC,
 				   "%d: merge free, buffer %pK do not share page with %pK or %pK\n",
 				   "%d: merge free, buffer %pK do not share page with %pK or %pK\n",
 				   alloc->pid, buffer->data,
 				   alloc->pid, buffer->data,
-				   prev->data, next->data);
+				   prev->data, next ? next->data : NULL);
 		binder_update_page_range(alloc, 0, buffer_start_page(buffer),
 		binder_update_page_range(alloc, 0, buffer_start_page(buffer),
 					 buffer_start_page(buffer) + PAGE_SIZE,
 					 buffer_start_page(buffer) + PAGE_SIZE,
 					 NULL);
 					 NULL);
@@ -720,6 +715,7 @@ int binder_alloc_mmap_handler(struct binder_alloc *alloc,
 	barrier();
 	barrier();
 	alloc->vma = vma;
 	alloc->vma = vma;
 	alloc->vma_vm_mm = vma->vm_mm;
 	alloc->vma_vm_mm = vma->vm_mm;
+	mmgrab(alloc->vma_vm_mm);
 
 
 	return 0;
 	return 0;
 
 
@@ -795,6 +791,8 @@ void binder_alloc_deferred_release(struct binder_alloc *alloc)
 		vfree(alloc->buffer);
 		vfree(alloc->buffer);
 	}
 	}
 	mutex_unlock(&alloc->mutex);
 	mutex_unlock(&alloc->mutex);
+	if (alloc->vma_vm_mm)
+		mmdrop(alloc->vma_vm_mm);
 
 
 	binder_alloc_debug(BINDER_DEBUG_OPEN_CLOSE,
 	binder_alloc_debug(BINDER_DEBUG_OPEN_CLOSE,
 		     "%s: %d buffers %d, pages %d\n",
 		     "%s: %d buffers %d, pages %d\n",
@@ -889,7 +887,6 @@ int binder_alloc_get_allocated_count(struct binder_alloc *alloc)
 void binder_alloc_vma_close(struct binder_alloc *alloc)
 void binder_alloc_vma_close(struct binder_alloc *alloc)
 {
 {
 	WRITE_ONCE(alloc->vma, NULL);
 	WRITE_ONCE(alloc->vma, NULL);
-	WRITE_ONCE(alloc->vma_vm_mm, NULL);
 }
 }
 
 
 /**
 /**
@@ -926,9 +923,9 @@ enum lru_status binder_alloc_free_page(struct list_head *item,
 	page_addr = (uintptr_t)alloc->buffer + index * PAGE_SIZE;
 	page_addr = (uintptr_t)alloc->buffer + index * PAGE_SIZE;
 	vma = alloc->vma;
 	vma = alloc->vma;
 	if (vma) {
 	if (vma) {
-		mm = get_task_mm(alloc->tsk);
-		if (!mm)
-			goto err_get_task_mm_failed;
+		if (!mmget_not_zero(alloc->vma_vm_mm))
+			goto err_mmget;
+		mm = alloc->vma_vm_mm;
 		if (!down_write_trylock(&mm->mmap_sem))
 		if (!down_write_trylock(&mm->mmap_sem))
 			goto err_down_write_mmap_sem_failed;
 			goto err_down_write_mmap_sem_failed;
 	}
 	}
@@ -963,7 +960,7 @@ enum lru_status binder_alloc_free_page(struct list_head *item,
 
 
 err_down_write_mmap_sem_failed:
 err_down_write_mmap_sem_failed:
 	mmput_async(mm);
 	mmput_async(mm);
-err_get_task_mm_failed:
+err_mmget:
 err_page_already_freed:
 err_page_already_freed:
 	mutex_unlock(&alloc->mutex);
 	mutex_unlock(&alloc->mutex);
 err_get_alloc_mutex_failed:
 err_get_alloc_mutex_failed:
@@ -1002,7 +999,6 @@ struct shrinker binder_shrinker = {
  */
  */
 void binder_alloc_init(struct binder_alloc *alloc)
 void binder_alloc_init(struct binder_alloc *alloc)
 {
 {
-	alloc->tsk = current->group_leader;
 	alloc->pid = current->group_leader->pid;
 	alloc->pid = current->group_leader->pid;
 	mutex_init(&alloc->mutex);
 	mutex_init(&alloc->mutex);
 	INIT_LIST_HEAD(&alloc->buffers);
 	INIT_LIST_HEAD(&alloc->buffers);

+ 0 - 1
drivers/android/binder_alloc.h

@@ -100,7 +100,6 @@ struct binder_lru_page {
  */
  */
 struct binder_alloc {
 struct binder_alloc {
 	struct mutex mutex;
 	struct mutex mutex;
-	struct task_struct *tsk;
 	struct vm_area_struct *vma;
 	struct vm_area_struct *vma;
 	struct mm_struct *vma_vm_mm;
 	struct mm_struct *vma_vm_mm;
 	void *buffer;
 	void *buffer;

+ 2 - 1
drivers/base/cpu.c

@@ -377,7 +377,8 @@ int register_cpu(struct cpu *cpu, int num)
 
 
 	per_cpu(cpu_sys_devices, num) = &cpu->dev;
 	per_cpu(cpu_sys_devices, num) = &cpu->dev;
 	register_cpu_under_node(num, cpu_to_node(num));
 	register_cpu_under_node(num, cpu_to_node(num));
-	dev_pm_qos_expose_latency_limit(&cpu->dev, 0);
+	dev_pm_qos_expose_latency_limit(&cpu->dev,
+					PM_QOS_RESUME_LATENCY_NO_CONSTRAINT);
 
 
 	return 0;
 	return 0;
 }
 }

+ 30 - 23
drivers/base/power/domain_governor.c

@@ -14,23 +14,20 @@
 static int dev_update_qos_constraint(struct device *dev, void *data)
 static int dev_update_qos_constraint(struct device *dev, void *data)
 {
 {
 	s64 *constraint_ns_p = data;
 	s64 *constraint_ns_p = data;
-	s32 constraint_ns = -1;
+	s64 constraint_ns = -1;
 
 
 	if (dev->power.subsys_data && dev->power.subsys_data->domain_data)
 	if (dev->power.subsys_data && dev->power.subsys_data->domain_data)
 		constraint_ns = dev_gpd_data(dev)->td.effective_constraint_ns;
 		constraint_ns = dev_gpd_data(dev)->td.effective_constraint_ns;
 
 
-	if (constraint_ns < 0) {
+	if (constraint_ns < 0)
 		constraint_ns = dev_pm_qos_read_value(dev);
 		constraint_ns = dev_pm_qos_read_value(dev);
-		constraint_ns *= NSEC_PER_USEC;
-	}
-	if (constraint_ns == 0)
+
+	if (constraint_ns == PM_QOS_RESUME_LATENCY_NO_CONSTRAINT)
 		return 0;
 		return 0;
 
 
-	/*
-	 * constraint_ns cannot be negative here, because the device has been
-	 * suspended.
-	 */
-	if (constraint_ns < *constraint_ns_p || *constraint_ns_p == 0)
+	constraint_ns *= NSEC_PER_USEC;
+
+	if (constraint_ns < *constraint_ns_p || *constraint_ns_p < 0)
 		*constraint_ns_p = constraint_ns;
 		*constraint_ns_p = constraint_ns;
 
 
 	return 0;
 	return 0;
@@ -63,10 +60,14 @@ static bool default_suspend_ok(struct device *dev)
 
 
 	spin_unlock_irqrestore(&dev->power.lock, flags);
 	spin_unlock_irqrestore(&dev->power.lock, flags);
 
 
-	if (constraint_ns < 0)
+	if (constraint_ns == 0)
 		return false;
 		return false;
 
 
-	constraint_ns *= NSEC_PER_USEC;
+	if (constraint_ns == PM_QOS_RESUME_LATENCY_NO_CONSTRAINT)
+		constraint_ns = -1;
+	else
+		constraint_ns *= NSEC_PER_USEC;
+
 	/*
 	/*
 	 * We can walk the children without any additional locking, because
 	 * We can walk the children without any additional locking, because
 	 * they all have been suspended at this point and their
 	 * they all have been suspended at this point and their
@@ -76,14 +77,19 @@ static bool default_suspend_ok(struct device *dev)
 		device_for_each_child(dev, &constraint_ns,
 		device_for_each_child(dev, &constraint_ns,
 				      dev_update_qos_constraint);
 				      dev_update_qos_constraint);
 
 
-	if (constraint_ns > 0) {
-		constraint_ns -= td->suspend_latency_ns +
-				td->resume_latency_ns;
-		if (constraint_ns == 0)
-			return false;
+	if (constraint_ns < 0) {
+		/* The children have no constraints. */
+		td->effective_constraint_ns = PM_QOS_RESUME_LATENCY_NO_CONSTRAINT;
+		td->cached_suspend_ok = true;
+	} else {
+		constraint_ns -= td->suspend_latency_ns + td->resume_latency_ns;
+		if (constraint_ns > 0) {
+			td->effective_constraint_ns = constraint_ns;
+			td->cached_suspend_ok = true;
+		} else {
+			td->effective_constraint_ns = 0;
+		}
 	}
 	}
-	td->effective_constraint_ns = constraint_ns;
-	td->cached_suspend_ok = constraint_ns >= 0;
 
 
 	/*
 	/*
 	 * The children have been suspended already, so we don't need to take
 	 * The children have been suspended already, so we don't need to take
@@ -145,13 +151,14 @@ static bool __default_power_down_ok(struct dev_pm_domain *pd,
 		td = &to_gpd_data(pdd)->td;
 		td = &to_gpd_data(pdd)->td;
 		constraint_ns = td->effective_constraint_ns;
 		constraint_ns = td->effective_constraint_ns;
 		/* default_suspend_ok() need not be called before us. */
 		/* default_suspend_ok() need not be called before us. */
-		if (constraint_ns < 0) {
+		if (constraint_ns < 0)
 			constraint_ns = dev_pm_qos_read_value(pdd->dev);
 			constraint_ns = dev_pm_qos_read_value(pdd->dev);
-			constraint_ns *= NSEC_PER_USEC;
-		}
-		if (constraint_ns == 0)
+
+		if (constraint_ns == PM_QOS_RESUME_LATENCY_NO_CONSTRAINT)
 			continue;
 			continue;
 
 
+		constraint_ns *= NSEC_PER_USEC;
+
 		/*
 		/*
 		 * constraint_ns cannot be negative here, because the device has
 		 * constraint_ns cannot be negative here, because the device has
 		 * been suspended.
 		 * been suspended.

+ 1 - 1
drivers/base/power/qos.c

@@ -189,7 +189,7 @@ static int dev_pm_qos_constraints_allocate(struct device *dev)
 	plist_head_init(&c->list);
 	plist_head_init(&c->list);
 	c->target_value = PM_QOS_RESUME_LATENCY_DEFAULT_VALUE;
 	c->target_value = PM_QOS_RESUME_LATENCY_DEFAULT_VALUE;
 	c->default_value = PM_QOS_RESUME_LATENCY_DEFAULT_VALUE;
 	c->default_value = PM_QOS_RESUME_LATENCY_DEFAULT_VALUE;
-	c->no_constraint_value = PM_QOS_RESUME_LATENCY_DEFAULT_VALUE;
+	c->no_constraint_value = PM_QOS_RESUME_LATENCY_NO_CONSTRAINT;
 	c->type = PM_QOS_MIN;
 	c->type = PM_QOS_MIN;
 	c->notifiers = n;
 	c->notifiers = n;
 
 

+ 1 - 1
drivers/base/power/runtime.c

@@ -253,7 +253,7 @@ static int rpm_check_suspend_allowed(struct device *dev)
 	    || (dev->power.request_pending
 	    || (dev->power.request_pending
 			&& dev->power.request == RPM_REQ_RESUME))
 			&& dev->power.request == RPM_REQ_RESUME))
 		retval = -EAGAIN;
 		retval = -EAGAIN;
-	else if (__dev_pm_qos_read_value(dev) < 0)
+	else if (__dev_pm_qos_read_value(dev) == 0)
 		retval = -EPERM;
 		retval = -EPERM;
 	else if (dev->power.runtime_status == RPM_SUSPENDED)
 	else if (dev->power.runtime_status == RPM_SUSPENDED)
 		retval = 1;
 		retval = 1;

+ 21 - 4
drivers/base/power/sysfs.c

@@ -218,7 +218,14 @@ static ssize_t pm_qos_resume_latency_show(struct device *dev,
 					  struct device_attribute *attr,
 					  struct device_attribute *attr,
 					  char *buf)
 					  char *buf)
 {
 {
-	return sprintf(buf, "%d\n", dev_pm_qos_requested_resume_latency(dev));
+	s32 value = dev_pm_qos_requested_resume_latency(dev);
+
+	if (value == 0)
+		return sprintf(buf, "n/a\n");
+	else if (value == PM_QOS_RESUME_LATENCY_NO_CONSTRAINT)
+		value = 0;
+
+	return sprintf(buf, "%d\n", value);
 }
 }
 
 
 static ssize_t pm_qos_resume_latency_store(struct device *dev,
 static ssize_t pm_qos_resume_latency_store(struct device *dev,
@@ -228,11 +235,21 @@ static ssize_t pm_qos_resume_latency_store(struct device *dev,
 	s32 value;
 	s32 value;
 	int ret;
 	int ret;
 
 
-	if (kstrtos32(buf, 0, &value))
-		return -EINVAL;
+	if (!kstrtos32(buf, 0, &value)) {
+		/*
+		 * Prevent users from writing negative or "no constraint" values
+		 * directly.
+		 */
+		if (value < 0 || value == PM_QOS_RESUME_LATENCY_NO_CONSTRAINT)
+			return -EINVAL;
 
 
-	if (value < 0)
+		if (value == 0)
+			value = PM_QOS_RESUME_LATENCY_NO_CONSTRAINT;
+	} else if (!strcmp(buf, "n/a") || !strcmp(buf, "n/a\n")) {
+		value = 0;
+	} else {
 		return -EINVAL;
 		return -EINVAL;
+	}
 
 
 	ret = dev_pm_qos_update_request(dev->power.qos->resume_latency_req,
 	ret = dev_pm_qos_update_request(dev->power.qos->resume_latency_req,
 					value);
 					value);

+ 12 - 3
drivers/block/nbd.c

@@ -243,7 +243,6 @@ static void nbd_size_set(struct nbd_device *nbd, loff_t blocksize,
 	struct nbd_config *config = nbd->config;
 	struct nbd_config *config = nbd->config;
 	config->blksize = blocksize;
 	config->blksize = blocksize;
 	config->bytesize = blocksize * nr_blocks;
 	config->bytesize = blocksize * nr_blocks;
-	nbd_size_update(nbd);
 }
 }
 
 
 static void nbd_complete_rq(struct request *req)
 static void nbd_complete_rq(struct request *req)
@@ -387,6 +386,15 @@ static int sock_xmit(struct nbd_device *nbd, int index, int send,
 	return result;
 	return result;
 }
 }
 
 
+/*
+ * Different settings for sk->sk_sndtimeo can result in different return values
+ * if there is a signal pending when we enter sendmsg, because reasons?
+ */
+static inline int was_interrupted(int result)
+{
+	return result == -ERESTARTSYS || result == -EINTR;
+}
+
 /* always call with the tx_lock held */
 /* always call with the tx_lock held */
 static int nbd_send_cmd(struct nbd_device *nbd, struct nbd_cmd *cmd, int index)
 static int nbd_send_cmd(struct nbd_device *nbd, struct nbd_cmd *cmd, int index)
 {
 {
@@ -459,7 +467,7 @@ static int nbd_send_cmd(struct nbd_device *nbd, struct nbd_cmd *cmd, int index)
 	result = sock_xmit(nbd, index, 1, &from,
 	result = sock_xmit(nbd, index, 1, &from,
 			(type == NBD_CMD_WRITE) ? MSG_MORE : 0, &sent);
 			(type == NBD_CMD_WRITE) ? MSG_MORE : 0, &sent);
 	if (result <= 0) {
 	if (result <= 0) {
-		if (result == -ERESTARTSYS) {
+		if (was_interrupted(result)) {
 			/* If we havne't sent anything we can just return BUSY,
 			/* If we havne't sent anything we can just return BUSY,
 			 * however if we have sent something we need to make
 			 * however if we have sent something we need to make
 			 * sure we only allow this req to be sent until we are
 			 * sure we only allow this req to be sent until we are
@@ -503,7 +511,7 @@ send_pages:
 			}
 			}
 			result = sock_xmit(nbd, index, 1, &from, flags, &sent);
 			result = sock_xmit(nbd, index, 1, &from, flags, &sent);
 			if (result <= 0) {
 			if (result <= 0) {
-				if (result == -ERESTARTSYS) {
+				if (was_interrupted(result)) {
 					/* We've already sent the header, we
 					/* We've already sent the header, we
 					 * have no choice but to set pending and
 					 * have no choice but to set pending and
 					 * return BUSY.
 					 * return BUSY.
@@ -1094,6 +1102,7 @@ static int nbd_start_device(struct nbd_device *nbd)
 		args->index = i;
 		args->index = i;
 		queue_work(recv_workqueue, &args->work);
 		queue_work(recv_workqueue, &args->work);
 	}
 	}
+	nbd_size_update(nbd);
 	return error;
 	return error;
 }
 }
 
 

+ 1 - 1
drivers/block/skd_main.c

@@ -2604,7 +2604,7 @@ static void *skd_alloc_dma(struct skd_device *skdev, struct kmem_cache *s,
 		return NULL;
 		return NULL;
 	*dma_handle = dma_map_single(dev, buf, s->size, dir);
 	*dma_handle = dma_map_single(dev, buf, s->size, dir);
 	if (dma_mapping_error(dev, *dma_handle)) {
 	if (dma_mapping_error(dev, *dma_handle)) {
-		kfree(buf);
+		kmem_cache_free(s, buf);
 		buf = NULL;
 		buf = NULL;
 	}
 	}
 	return buf;
 	return buf;

+ 1 - 1
drivers/bus/mvebu-mbus.c

@@ -720,7 +720,7 @@ mvebu_mbus_default_setup_cpu_target(struct mvebu_mbus_state *mbus)
 			if (mbus->hw_io_coherency)
 			if (mbus->hw_io_coherency)
 				w->mbus_attr |= ATTR_HW_COHERENCY;
 				w->mbus_attr |= ATTR_HW_COHERENCY;
 			w->base = base & DDR_BASE_CS_LOW_MASK;
 			w->base = base & DDR_BASE_CS_LOW_MASK;
-			w->size = (size | ~DDR_SIZE_MASK) + 1;
+			w->size = (u64)(size | ~DDR_SIZE_MASK) + 1;
 		}
 		}
 	}
 	}
 	mvebu_mbus_dram_info.num_cs = cs;
 	mvebu_mbus_dram_info.num_cs = cs;

+ 2 - 1
drivers/clocksource/cs5535-clockevt.c

@@ -117,7 +117,8 @@ static irqreturn_t mfgpt_tick(int irq, void *dev_id)
 	/* Turn off the clock (and clear the event) */
 	/* Turn off the clock (and clear the event) */
 	disable_timer(cs5535_event_clock);
 	disable_timer(cs5535_event_clock);
 
 
-	if (clockevent_state_shutdown(&cs5535_clockevent))
+	if (clockevent_state_detached(&cs5535_clockevent) ||
+	    clockevent_state_shutdown(&cs5535_clockevent))
 		return IRQ_HANDLED;
 		return IRQ_HANDLED;
 
 
 	/* Clear the counter */
 	/* Clear the counter */

+ 2 - 2
drivers/cpuidle/governors/menu.c

@@ -298,8 +298,8 @@ static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev)
 		data->needs_update = 0;
 		data->needs_update = 0;
 	}
 	}
 
 
-	/* resume_latency is 0 means no restriction */
-	if (resume_latency && resume_latency < latency_req)
+	if (resume_latency < latency_req &&
+	    resume_latency != PM_QOS_RESUME_LATENCY_NO_CONSTRAINT)
 		latency_req = resume_latency;
 		latency_req = resume_latency;
 
 
 	/* Special case when user has set very strict latency requirement */
 	/* Special case when user has set very strict latency requirement */

+ 2 - 2
drivers/dma/altera-msgdma.c

@@ -344,7 +344,7 @@ msgdma_prep_memcpy(struct dma_chan *dchan, dma_addr_t dma_dst,
 
 
 	spin_lock_irqsave(&mdev->lock, irqflags);
 	spin_lock_irqsave(&mdev->lock, irqflags);
 	if (desc_cnt > mdev->desc_free_cnt) {
 	if (desc_cnt > mdev->desc_free_cnt) {
-		spin_unlock_bh(&mdev->lock);
+		spin_unlock_irqrestore(&mdev->lock, irqflags);
 		dev_dbg(mdev->dev, "mdev %p descs are not available\n", mdev);
 		dev_dbg(mdev->dev, "mdev %p descs are not available\n", mdev);
 		return NULL;
 		return NULL;
 	}
 	}
@@ -407,7 +407,7 @@ msgdma_prep_slave_sg(struct dma_chan *dchan, struct scatterlist *sgl,
 
 
 	spin_lock_irqsave(&mdev->lock, irqflags);
 	spin_lock_irqsave(&mdev->lock, irqflags);
 	if (desc_cnt > mdev->desc_free_cnt) {
 	if (desc_cnt > mdev->desc_free_cnt) {
-		spin_unlock_bh(&mdev->lock);
+		spin_unlock_irqrestore(&mdev->lock, irqflags);
 		dev_dbg(mdev->dev, "mdev %p descs are not available\n", mdev);
 		dev_dbg(mdev->dev, "mdev %p descs are not available\n", mdev);
 		return NULL;
 		return NULL;
 	}
 	}

+ 2 - 1
drivers/firmware/efi/libstub/arm-stub.c

@@ -238,7 +238,8 @@ unsigned long efi_entry(void *handle, efi_system_table_t *sys_table,
 
 
 	efi_random_get_seed(sys_table);
 	efi_random_get_seed(sys_table);
 
 
-	if (!nokaslr()) {
+	/* hibernation expects the runtime regions to stay in the same place */
+	if (!IS_ENABLED(CONFIG_HIBERNATION) && !nokaslr()) {
 		/*
 		/*
 		 * Randomize the base of the UEFI runtime services region.
 		 * Randomize the base of the UEFI runtime services region.
 		 * Preserve the 2 MB alignment of the region by taking a
 		 * Preserve the 2 MB alignment of the region by taking a

+ 3 - 0
drivers/firmware/efi/test/efi_test.c

@@ -593,6 +593,9 @@ static long efi_runtime_query_capsulecaps(unsigned long arg)
 	if (copy_from_user(&qcaps, qcaps_user, sizeof(qcaps)))
 	if (copy_from_user(&qcaps, qcaps_user, sizeof(qcaps)))
 		return -EFAULT;
 		return -EFAULT;
 
 
+	if (qcaps.capsule_count == ULONG_MAX)
+		return -EINVAL;
+
 	capsules = kcalloc(qcaps.capsule_count + 1,
 	capsules = kcalloc(qcaps.capsule_count + 1,
 			   sizeof(efi_capsule_header_t), GFP_KERNEL);
 			   sizeof(efi_capsule_header_t), GFP_KERNEL);
 	if (!capsules)
 	if (!capsules)

+ 5 - 11
drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c

@@ -225,11 +225,7 @@ static int uvd_v6_0_suspend(void *handle)
 	if (r)
 	if (r)
 		return r;
 		return r;
 
 
-	/* Skip this for APU for now */
-	if (!(adev->flags & AMD_IS_APU))
-		r = amdgpu_uvd_suspend(adev);
-
-	return r;
+	return amdgpu_uvd_suspend(adev);
 }
 }
 
 
 static int uvd_v6_0_resume(void *handle)
 static int uvd_v6_0_resume(void *handle)
@@ -237,12 +233,10 @@ static int uvd_v6_0_resume(void *handle)
 	int r;
 	int r;
 	struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 	struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
 
-	/* Skip this for APU for now */
-	if (!(adev->flags & AMD_IS_APU)) {
-		r = amdgpu_uvd_resume(adev);
-		if (r)
-			return r;
-	}
+	r = amdgpu_uvd_resume(adev);
+	if (r)
+		return r;
+
 	return uvd_v6_0_hw_init(adev);
 	return uvd_v6_0_hw_init(adev);
 }
 }
 
 

+ 3 - 3
drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c

@@ -830,7 +830,7 @@ uint32_t smu7_get_xclk(struct pp_hwmgr *hwmgr)
 {
 {
 	uint32_t reference_clock, tmp;
 	uint32_t reference_clock, tmp;
 	struct cgs_display_info info = {0};
 	struct cgs_display_info info = {0};
-	struct cgs_mode_info mode_info;
+	struct cgs_mode_info mode_info = {0};
 
 
 	info.mode_info = &mode_info;
 	info.mode_info = &mode_info;
 
 
@@ -3948,10 +3948,9 @@ static int smu7_program_display_gap(struct pp_hwmgr *hwmgr)
 	uint32_t ref_clock;
 	uint32_t ref_clock;
 	uint32_t refresh_rate = 0;
 	uint32_t refresh_rate = 0;
 	struct cgs_display_info info = {0};
 	struct cgs_display_info info = {0};
-	struct cgs_mode_info mode_info;
+	struct cgs_mode_info mode_info = {0};
 
 
 	info.mode_info = &mode_info;
 	info.mode_info = &mode_info;
-
 	cgs_get_active_displays_info(hwmgr->device, &info);
 	cgs_get_active_displays_info(hwmgr->device, &info);
 	num_active_displays = info.display_count;
 	num_active_displays = info.display_count;
 
 
@@ -3967,6 +3966,7 @@ static int smu7_program_display_gap(struct pp_hwmgr *hwmgr)
 	frame_time_in_us = 1000000 / refresh_rate;
 	frame_time_in_us = 1000000 / refresh_rate;
 
 
 	pre_vbi_time_in_us = frame_time_in_us - 200 - mode_info.vblank_time_us;
 	pre_vbi_time_in_us = frame_time_in_us - 200 - mode_info.vblank_time_us;
+
 	data->frame_time_x2 = frame_time_in_us * 2 / 100;
 	data->frame_time_x2 = frame_time_in_us * 2 / 100;
 
 
 	display_gap2 = pre_vbi_time_in_us * (ref_clock / 100);
 	display_gap2 = pre_vbi_time_in_us * (ref_clock / 100);

+ 4 - 19
drivers/gpu/drm/amd/scheduler/gpu_scheduler.c

@@ -205,32 +205,17 @@ void amd_sched_entity_fini(struct amd_gpu_scheduler *sched,
 			   struct amd_sched_entity *entity)
 			   struct amd_sched_entity *entity)
 {
 {
 	struct amd_sched_rq *rq = entity->rq;
 	struct amd_sched_rq *rq = entity->rq;
-	int r;
 
 
 	if (!amd_sched_entity_is_initialized(sched, entity))
 	if (!amd_sched_entity_is_initialized(sched, entity))
 		return;
 		return;
+
 	/**
 	/**
 	 * The client will not queue more IBs during this fini, consume existing
 	 * The client will not queue more IBs during this fini, consume existing
-	 * queued IBs or discard them on SIGKILL
+	 * queued IBs
 	*/
 	*/
-	if ((current->flags & PF_SIGNALED) && current->exit_code == SIGKILL)
-		r = -ERESTARTSYS;
-	else
-		r = wait_event_killable(sched->job_scheduled,
-					amd_sched_entity_is_idle(entity));
-	amd_sched_rq_remove_entity(rq, entity);
-	if (r) {
-		struct amd_sched_job *job;
+	wait_event(sched->job_scheduled, amd_sched_entity_is_idle(entity));
 
 
-		/* Park the kernel for a moment to make sure it isn't processing
-		 * our enity.
-		 */
-		kthread_park(sched->thread);
-		kthread_unpark(sched->thread);
-		while (kfifo_out(&entity->job_queue, &job, sizeof(job)))
-			sched->ops->free_job(job);
-
-	}
+	amd_sched_rq_remove_entity(rq, entity);
 	kfifo_free(&entity->job_queue);
 	kfifo_free(&entity->job_queue);
 }
 }
 
 

+ 6 - 2
drivers/gpu/drm/exynos/exynos_drm_drv.c

@@ -168,11 +168,13 @@ static struct drm_driver exynos_drm_driver = {
 static int exynos_drm_suspend(struct device *dev)
 static int exynos_drm_suspend(struct device *dev)
 {
 {
 	struct drm_device *drm_dev = dev_get_drvdata(dev);
 	struct drm_device *drm_dev = dev_get_drvdata(dev);
-	struct exynos_drm_private *private = drm_dev->dev_private;
+	struct exynos_drm_private *private;
 
 
 	if (pm_runtime_suspended(dev) || !drm_dev)
 	if (pm_runtime_suspended(dev) || !drm_dev)
 		return 0;
 		return 0;
 
 
+	private = drm_dev->dev_private;
+
 	drm_kms_helper_poll_disable(drm_dev);
 	drm_kms_helper_poll_disable(drm_dev);
 	exynos_drm_fbdev_suspend(drm_dev);
 	exynos_drm_fbdev_suspend(drm_dev);
 	private->suspend_state = drm_atomic_helper_suspend(drm_dev);
 	private->suspend_state = drm_atomic_helper_suspend(drm_dev);
@@ -188,11 +190,12 @@ static int exynos_drm_suspend(struct device *dev)
 static int exynos_drm_resume(struct device *dev)
 static int exynos_drm_resume(struct device *dev)
 {
 {
 	struct drm_device *drm_dev = dev_get_drvdata(dev);
 	struct drm_device *drm_dev = dev_get_drvdata(dev);
-	struct exynos_drm_private *private = drm_dev->dev_private;
+	struct exynos_drm_private *private;
 
 
 	if (pm_runtime_suspended(dev) || !drm_dev)
 	if (pm_runtime_suspended(dev) || !drm_dev)
 		return 0;
 		return 0;
 
 
+	private = drm_dev->dev_private;
 	drm_atomic_helper_resume(drm_dev, private->suspend_state);
 	drm_atomic_helper_resume(drm_dev, private->suspend_state);
 	exynos_drm_fbdev_resume(drm_dev);
 	exynos_drm_fbdev_resume(drm_dev);
 	drm_kms_helper_poll_enable(drm_dev);
 	drm_kms_helper_poll_enable(drm_dev);
@@ -427,6 +430,7 @@ static void exynos_drm_unbind(struct device *dev)
 
 
 	kfree(drm->dev_private);
 	kfree(drm->dev_private);
 	drm->dev_private = NULL;
 	drm->dev_private = NULL;
+	dev_set_drvdata(dev, NULL);
 
 
 	drm_dev_unref(drm);
 	drm_dev_unref(drm);
 }
 }

+ 3 - 0
drivers/gpu/drm/i915/gvt/cmd_parser.c

@@ -2723,6 +2723,9 @@ static int combine_wa_ctx(struct intel_shadow_wa_ctx *wa_ctx)
 	uint32_t per_ctx_start[CACHELINE_DWORDS] = {0};
 	uint32_t per_ctx_start[CACHELINE_DWORDS] = {0};
 	unsigned char *bb_start_sva;
 	unsigned char *bb_start_sva;
 
 
+	if (!wa_ctx->per_ctx.valid)
+		return 0;
+
 	per_ctx_start[0] = 0x18800001;
 	per_ctx_start[0] = 0x18800001;
 	per_ctx_start[1] = wa_ctx->per_ctx.guest_gma;
 	per_ctx_start[1] = wa_ctx->per_ctx.guest_gma;
 
 

+ 1 - 2
drivers/gpu/drm/i915/gvt/execlist.c

@@ -701,8 +701,7 @@ static int submit_context(struct intel_vgpu *vgpu, int ring_id,
 			CACHELINE_BYTES;
 			CACHELINE_BYTES;
 		workload->wa_ctx.per_ctx.guest_gma =
 		workload->wa_ctx.per_ctx.guest_gma =
 			per_ctx & PER_CTX_ADDR_MASK;
 			per_ctx & PER_CTX_ADDR_MASK;
-
-		WARN_ON(workload->wa_ctx.indirect_ctx.size && !(per_ctx & 0x1));
+		workload->wa_ctx.per_ctx.valid = per_ctx & 1;
 	}
 	}
 
 
 	if (emulate_schedule_in)
 	if (emulate_schedule_in)

+ 10 - 60
drivers/gpu/drm/i915/gvt/handlers.c

@@ -1429,18 +1429,7 @@ static int skl_lcpll_write(struct intel_vgpu *vgpu, unsigned int offset,
 	return 0;
 	return 0;
 }
 }
 
 
-static int ring_timestamp_mmio_read(struct intel_vgpu *vgpu,
-		unsigned int offset, void *p_data, unsigned int bytes)
-{
-	struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;
-
-	mmio_hw_access_pre(dev_priv);
-	vgpu_vreg(vgpu, offset) = I915_READ(_MMIO(offset));
-	mmio_hw_access_post(dev_priv);
-	return intel_vgpu_default_mmio_read(vgpu, offset, p_data, bytes);
-}
-
-static int instdone_mmio_read(struct intel_vgpu *vgpu,
+static int mmio_read_from_hw(struct intel_vgpu *vgpu,
 		unsigned int offset, void *p_data, unsigned int bytes)
 		unsigned int offset, void *p_data, unsigned int bytes)
 {
 {
 	struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;
 	struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;
@@ -1589,6 +1578,8 @@ static int ring_reset_ctl_write(struct intel_vgpu *vgpu,
 	MMIO_F(prefix(BLT_RING_BASE), s, f, am, rm, d, r, w); \
 	MMIO_F(prefix(BLT_RING_BASE), s, f, am, rm, d, r, w); \
 	MMIO_F(prefix(GEN6_BSD_RING_BASE), s, f, am, rm, d, r, w); \
 	MMIO_F(prefix(GEN6_BSD_RING_BASE), s, f, am, rm, d, r, w); \
 	MMIO_F(prefix(VEBOX_RING_BASE), s, f, am, rm, d, r, w); \
 	MMIO_F(prefix(VEBOX_RING_BASE), s, f, am, rm, d, r, w); \
+	if (HAS_BSD2(dev_priv)) \
+		MMIO_F(prefix(GEN8_BSD2_RING_BASE), s, f, am, rm, d, r, w); \
 } while (0)
 } while (0)
 
 
 #define MMIO_RING_D(prefix, d) \
 #define MMIO_RING_D(prefix, d) \
@@ -1635,10 +1626,9 @@ static int init_generic_mmio_info(struct intel_gvt *gvt)
 #undef RING_REG
 #undef RING_REG
 
 
 #define RING_REG(base) (base + 0x6c)
 #define RING_REG(base) (base + 0x6c)
-	MMIO_RING_DFH(RING_REG, D_ALL, 0, instdone_mmio_read, NULL);
-	MMIO_DH(RING_REG(GEN8_BSD2_RING_BASE), D_ALL, instdone_mmio_read, NULL);
+	MMIO_RING_DFH(RING_REG, D_ALL, 0, mmio_read_from_hw, NULL);
 #undef RING_REG
 #undef RING_REG
-	MMIO_DH(GEN7_SC_INSTDONE, D_BDW_PLUS, instdone_mmio_read, NULL);
+	MMIO_DH(GEN7_SC_INSTDONE, D_BDW_PLUS, mmio_read_from_hw, NULL);
 
 
 	MMIO_GM_RDR(0x2148, D_ALL, NULL, NULL);
 	MMIO_GM_RDR(0x2148, D_ALL, NULL, NULL);
 	MMIO_GM_RDR(CCID, D_ALL, NULL, NULL);
 	MMIO_GM_RDR(CCID, D_ALL, NULL, NULL);
@@ -1648,7 +1638,7 @@ static int init_generic_mmio_info(struct intel_gvt *gvt)
 	MMIO_RING_DFH(RING_TAIL, D_ALL, F_CMD_ACCESS, NULL, NULL);
 	MMIO_RING_DFH(RING_TAIL, D_ALL, F_CMD_ACCESS, NULL, NULL);
 	MMIO_RING_DFH(RING_HEAD, D_ALL, F_CMD_ACCESS, NULL, NULL);
 	MMIO_RING_DFH(RING_HEAD, D_ALL, F_CMD_ACCESS, NULL, NULL);
 	MMIO_RING_DFH(RING_CTL, D_ALL, F_CMD_ACCESS, NULL, NULL);
 	MMIO_RING_DFH(RING_CTL, D_ALL, F_CMD_ACCESS, NULL, NULL);
-	MMIO_RING_DFH(RING_ACTHD, D_ALL, F_CMD_ACCESS, NULL, NULL);
+	MMIO_RING_DFH(RING_ACTHD, D_ALL, F_CMD_ACCESS, mmio_read_from_hw, NULL);
 	MMIO_RING_GM_RDR(RING_START, D_ALL, NULL, NULL);
 	MMIO_RING_GM_RDR(RING_START, D_ALL, NULL, NULL);
 
 
 	/* RING MODE */
 	/* RING MODE */
@@ -1662,9 +1652,9 @@ static int init_generic_mmio_info(struct intel_gvt *gvt)
 	MMIO_RING_DFH(RING_INSTPM, D_ALL, F_MODE_MASK | F_CMD_ACCESS,
 	MMIO_RING_DFH(RING_INSTPM, D_ALL, F_MODE_MASK | F_CMD_ACCESS,
 			NULL, NULL);
 			NULL, NULL);
 	MMIO_RING_DFH(RING_TIMESTAMP, D_ALL, F_CMD_ACCESS,
 	MMIO_RING_DFH(RING_TIMESTAMP, D_ALL, F_CMD_ACCESS,
-			ring_timestamp_mmio_read, NULL);
+			mmio_read_from_hw, NULL);
 	MMIO_RING_DFH(RING_TIMESTAMP_UDW, D_ALL, F_CMD_ACCESS,
 	MMIO_RING_DFH(RING_TIMESTAMP_UDW, D_ALL, F_CMD_ACCESS,
-			ring_timestamp_mmio_read, NULL);
+			mmio_read_from_hw, NULL);
 
 
 	MMIO_DFH(GEN7_GT_MODE, D_ALL, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL);
 	MMIO_DFH(GEN7_GT_MODE, D_ALL, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL);
 	MMIO_DFH(CACHE_MODE_0_GEN7, D_ALL, F_MODE_MASK | F_CMD_ACCESS,
 	MMIO_DFH(CACHE_MODE_0_GEN7, D_ALL, F_MODE_MASK | F_CMD_ACCESS,
@@ -2411,9 +2401,6 @@ static int init_broadwell_mmio_info(struct intel_gvt *gvt)
 	struct drm_i915_private *dev_priv = gvt->dev_priv;
 	struct drm_i915_private *dev_priv = gvt->dev_priv;
 	int ret;
 	int ret;
 
 
-	MMIO_DFH(RING_IMR(GEN8_BSD2_RING_BASE), D_BDW_PLUS, F_CMD_ACCESS, NULL,
-			intel_vgpu_reg_imr_handler);
-
 	MMIO_DH(GEN8_GT_IMR(0), D_BDW_PLUS, NULL, intel_vgpu_reg_imr_handler);
 	MMIO_DH(GEN8_GT_IMR(0), D_BDW_PLUS, NULL, intel_vgpu_reg_imr_handler);
 	MMIO_DH(GEN8_GT_IER(0), D_BDW_PLUS, NULL, intel_vgpu_reg_ier_handler);
 	MMIO_DH(GEN8_GT_IER(0), D_BDW_PLUS, NULL, intel_vgpu_reg_ier_handler);
 	MMIO_DH(GEN8_GT_IIR(0), D_BDW_PLUS, NULL, intel_vgpu_reg_iir_handler);
 	MMIO_DH(GEN8_GT_IIR(0), D_BDW_PLUS, NULL, intel_vgpu_reg_iir_handler);
@@ -2476,68 +2463,34 @@ static int init_broadwell_mmio_info(struct intel_gvt *gvt)
 	MMIO_DH(GEN8_MASTER_IRQ, D_BDW_PLUS, NULL,
 	MMIO_DH(GEN8_MASTER_IRQ, D_BDW_PLUS, NULL,
 		intel_vgpu_reg_master_irq_handler);
 		intel_vgpu_reg_master_irq_handler);
 
 
-	MMIO_DFH(RING_HWSTAM(GEN8_BSD2_RING_BASE), D_BDW_PLUS,
-		F_CMD_ACCESS, NULL, NULL);
-	MMIO_DFH(0x1c134, D_BDW_PLUS, F_CMD_ACCESS, NULL, NULL);
-
-	MMIO_DFH(RING_TAIL(GEN8_BSD2_RING_BASE), D_BDW_PLUS, F_CMD_ACCESS,
-		NULL, NULL);
-	MMIO_DFH(RING_HEAD(GEN8_BSD2_RING_BASE),  D_BDW_PLUS,
-		F_CMD_ACCESS, NULL, NULL);
-	MMIO_GM_RDR(RING_START(GEN8_BSD2_RING_BASE), D_BDW_PLUS, NULL, NULL);
-	MMIO_DFH(RING_CTL(GEN8_BSD2_RING_BASE), D_BDW_PLUS, F_CMD_ACCESS,
-		NULL, NULL);
-	MMIO_DFH(RING_ACTHD(GEN8_BSD2_RING_BASE), D_BDW_PLUS,
-		F_CMD_ACCESS, NULL, NULL);
-	MMIO_DFH(RING_ACTHD_UDW(GEN8_BSD2_RING_BASE), D_BDW_PLUS,
-		F_CMD_ACCESS, NULL, NULL);
-	MMIO_DFH(0x1c29c, D_BDW_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL,
-		ring_mode_mmio_write);
-	MMIO_DFH(RING_MI_MODE(GEN8_BSD2_RING_BASE), D_BDW_PLUS,
-		F_MODE_MASK | F_CMD_ACCESS, NULL, NULL);
-	MMIO_DFH(RING_INSTPM(GEN8_BSD2_RING_BASE), D_BDW_PLUS,
-		F_MODE_MASK | F_CMD_ACCESS, NULL, NULL);
-	MMIO_DFH(RING_TIMESTAMP(GEN8_BSD2_RING_BASE), D_BDW_PLUS, F_CMD_ACCESS,
-			ring_timestamp_mmio_read, NULL);
-
-	MMIO_RING_DFH(RING_ACTHD_UDW, D_BDW_PLUS, F_CMD_ACCESS, NULL, NULL);
+	MMIO_RING_DFH(RING_ACTHD_UDW, D_BDW_PLUS, F_CMD_ACCESS,
+		mmio_read_from_hw, NULL);
 
 
 #define RING_REG(base) (base + 0xd0)
 #define RING_REG(base) (base + 0xd0)
 	MMIO_RING_F(RING_REG, 4, F_RO, 0,
 	MMIO_RING_F(RING_REG, 4, F_RO, 0,
 		~_MASKED_BIT_ENABLE(RESET_CTL_REQUEST_RESET), D_BDW_PLUS, NULL,
 		~_MASKED_BIT_ENABLE(RESET_CTL_REQUEST_RESET), D_BDW_PLUS, NULL,
 		ring_reset_ctl_write);
 		ring_reset_ctl_write);
-	MMIO_F(RING_REG(GEN8_BSD2_RING_BASE), 4, F_RO, 0,
-		~_MASKED_BIT_ENABLE(RESET_CTL_REQUEST_RESET), D_BDW_PLUS, NULL,
-		ring_reset_ctl_write);
 #undef RING_REG
 #undef RING_REG
 
 
 #define RING_REG(base) (base + 0x230)
 #define RING_REG(base) (base + 0x230)
 	MMIO_RING_DFH(RING_REG, D_BDW_PLUS, 0, NULL, elsp_mmio_write);
 	MMIO_RING_DFH(RING_REG, D_BDW_PLUS, 0, NULL, elsp_mmio_write);
-	MMIO_DH(RING_REG(GEN8_BSD2_RING_BASE), D_BDW_PLUS, NULL, elsp_mmio_write);
 #undef RING_REG
 #undef RING_REG
 
 
 #define RING_REG(base) (base + 0x234)
 #define RING_REG(base) (base + 0x234)
 	MMIO_RING_F(RING_REG, 8, F_RO | F_CMD_ACCESS, 0, ~0, D_BDW_PLUS,
 	MMIO_RING_F(RING_REG, 8, F_RO | F_CMD_ACCESS, 0, ~0, D_BDW_PLUS,
 		NULL, NULL);
 		NULL, NULL);
-	MMIO_F(RING_REG(GEN8_BSD2_RING_BASE), 4, F_RO | F_CMD_ACCESS, 0,
-		~0LL, D_BDW_PLUS, NULL, NULL);
 #undef RING_REG
 #undef RING_REG
 
 
 #define RING_REG(base) (base + 0x244)
 #define RING_REG(base) (base + 0x244)
 	MMIO_RING_DFH(RING_REG, D_BDW_PLUS, F_CMD_ACCESS, NULL, NULL);
 	MMIO_RING_DFH(RING_REG, D_BDW_PLUS, F_CMD_ACCESS, NULL, NULL);
-	MMIO_DFH(RING_REG(GEN8_BSD2_RING_BASE), D_BDW_PLUS, F_CMD_ACCESS,
-		NULL, NULL);
 #undef RING_REG
 #undef RING_REG
 
 
 #define RING_REG(base) (base + 0x370)
 #define RING_REG(base) (base + 0x370)
 	MMIO_RING_F(RING_REG, 48, F_RO, 0, ~0, D_BDW_PLUS, NULL, NULL);
 	MMIO_RING_F(RING_REG, 48, F_RO, 0, ~0, D_BDW_PLUS, NULL, NULL);
-	MMIO_F(RING_REG(GEN8_BSD2_RING_BASE), 48, F_RO, 0, ~0, D_BDW_PLUS,
-			NULL, NULL);
 #undef RING_REG
 #undef RING_REG
 
 
 #define RING_REG(base) (base + 0x3a0)
 #define RING_REG(base) (base + 0x3a0)
 	MMIO_RING_DFH(RING_REG, D_BDW_PLUS, F_MODE_MASK, NULL, NULL);
 	MMIO_RING_DFH(RING_REG, D_BDW_PLUS, F_MODE_MASK, NULL, NULL);
-	MMIO_DFH(RING_REG(GEN8_BSD2_RING_BASE), D_BDW_PLUS, F_MODE_MASK, NULL, NULL);
 #undef RING_REG
 #undef RING_REG
 
 
 	MMIO_D(PIPEMISC(PIPE_A), D_BDW_PLUS);
 	MMIO_D(PIPEMISC(PIPE_A), D_BDW_PLUS);
@@ -2557,11 +2510,9 @@ static int init_broadwell_mmio_info(struct intel_gvt *gvt)
 
 
 #define RING_REG(base) (base + 0x270)
 #define RING_REG(base) (base + 0x270)
 	MMIO_RING_F(RING_REG, 32, 0, 0, 0, D_BDW_PLUS, NULL, NULL);
 	MMIO_RING_F(RING_REG, 32, 0, 0, 0, D_BDW_PLUS, NULL, NULL);
-	MMIO_F(RING_REG(GEN8_BSD2_RING_BASE), 32, 0, 0, 0, D_BDW_PLUS, NULL, NULL);
 #undef RING_REG
 #undef RING_REG
 
 
 	MMIO_RING_GM_RDR(RING_HWS_PGA, D_BDW_PLUS, NULL, NULL);
 	MMIO_RING_GM_RDR(RING_HWS_PGA, D_BDW_PLUS, NULL, NULL);
-	MMIO_GM_RDR(RING_HWS_PGA(GEN8_BSD2_RING_BASE), D_BDW_PLUS, NULL, NULL);
 
 
 	MMIO_DFH(HDC_CHICKEN0, D_BDW_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL);
 	MMIO_DFH(HDC_CHICKEN0, D_BDW_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL);
 
 
@@ -2849,7 +2800,6 @@ static int init_skl_mmio_info(struct intel_gvt *gvt)
 	MMIO_D(0x65f08, D_SKL | D_KBL);
 	MMIO_D(0x65f08, D_SKL | D_KBL);
 	MMIO_D(0x320f0, D_SKL | D_KBL);
 	MMIO_D(0x320f0, D_SKL | D_KBL);
 
 
-	MMIO_DFH(_REG_VCS2_EXCC, D_SKL_PLUS, F_CMD_ACCESS, NULL, NULL);
 	MMIO_D(0x70034, D_SKL_PLUS);
 	MMIO_D(0x70034, D_SKL_PLUS);
 	MMIO_D(0x71034, D_SKL_PLUS);
 	MMIO_D(0x71034, D_SKL_PLUS);
 	MMIO_D(0x72034, D_SKL_PLUS);
 	MMIO_D(0x72034, D_SKL_PLUS);

+ 0 - 3
drivers/gpu/drm/i915/gvt/reg.h

@@ -54,9 +54,6 @@
 
 
 #define VGT_SPRSTRIDE(pipe)	_PIPE(pipe, _SPRA_STRIDE, _PLANE_STRIDE_2_B)
 #define VGT_SPRSTRIDE(pipe)	_PIPE(pipe, _SPRA_STRIDE, _PLANE_STRIDE_2_B)
 
 
-#define _REG_VECS_EXCC		0x1A028
-#define _REG_VCS2_EXCC		0x1c028
-
 #define _REG_701C0(pipe, plane) (0x701c0 + pipe * 0x1000 + (plane - 1) * 0x100)
 #define _REG_701C0(pipe, plane) (0x701c0 + pipe * 0x1000 + (plane - 1) * 0x100)
 #define _REG_701C4(pipe, plane) (0x701c4 + pipe * 0x1000 + (plane - 1) * 0x100)
 #define _REG_701C4(pipe, plane) (0x701c4 + pipe * 0x1000 + (plane - 1) * 0x100)
 
 

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