--- /dev/null
+From 8f3fafc9c2f0ece10832c25f7ffcb07c97a32ad4 Mon Sep 17 00:00:00 2001
+From: Scott Bauer <scott.bauer@intel.com>
+Date: Thu, 26 Apr 2018 11:51:08 -0600
+Subject: cdrom: Fix info leak/OOB read in cdrom_ioctl_drive_status
+
+From: Scott Bauer <scott.bauer@intel.com>
+
+commit 8f3fafc9c2f0ece10832c25f7ffcb07c97a32ad4 upstream.
+
+Like d88b6d04: "cdrom: information leak in cdrom_ioctl_media_changed()"
+
+There is another cast from unsigned long to int which causes
+a bounds check to fail with specially crafted input. The value is
+then used as an index in the slot array in cdrom_slot_status().
+
+Signed-off-by: Scott Bauer <scott.bauer@intel.com>
+Signed-off-by: Scott Bauer <sbauer@plzdonthack.me>
+Cc: stable@vger.kernel.org
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/cdrom/cdrom.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/cdrom/cdrom.c
++++ b/drivers/cdrom/cdrom.c
+@@ -2542,7 +2542,7 @@ static int cdrom_ioctl_drive_status(stru
+ if (!CDROM_CAN(CDC_SELECT_DISC) ||
+ (arg == CDSL_CURRENT || arg == CDSL_NONE))
+ return cdi->ops->drive_status(cdi, CDSL_CURRENT);
+- if (((int)arg >= cdi->capacity))
++ if (arg >= cdi->capacity)
+ return -EINVAL;
+ return cdrom_slot_status(cdi, arg);
+ }
--- /dev/null
+From a64ad008980c65d38e6cf6858429c78e6b740c41 Mon Sep 17 00:00:00 2001
+From: Alberto Panizzo <alberto@amarulasolutions.com>
+Date: Fri, 6 Jul 2018 15:18:51 +0200
+Subject: clk: rockchip: fix clk_i2sout parent selection bits on rk3399
+
+From: Alberto Panizzo <alberto@amarulasolutions.com>
+
+commit a64ad008980c65d38e6cf6858429c78e6b740c41 upstream.
+
+Register, shift and mask were wrong according to datasheet.
+
+Fixes: 115510053e5e ("clk: rockchip: add clock controller for the RK3399")
+Cc: stable@vger.kernel.org
+Signed-off-by: Alberto Panizzo <alberto@amarulasolutions.com>
+Signed-off-by: Anthony Brandon <anthony@amarulasolutions.com>
+Signed-off-by: Heiko Stuebner <heiko@sntech.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/clk/rockchip/clk-rk3399.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/clk/rockchip/clk-rk3399.c
++++ b/drivers/clk/rockchip/clk-rk3399.c
+@@ -630,7 +630,7 @@ static struct rockchip_clk_branch rk3399
+ MUX(0, "clk_i2sout_src", mux_i2sch_p, CLK_SET_RATE_PARENT,
+ RK3399_CLKSEL_CON(31), 0, 2, MFLAGS),
+ COMPOSITE_NODIV(SCLK_I2S_8CH_OUT, "clk_i2sout", mux_i2sout_p, CLK_SET_RATE_PARENT,
+- RK3399_CLKSEL_CON(30), 8, 2, MFLAGS,
++ RK3399_CLKSEL_CON(31), 2, 1, MFLAGS,
+ RK3399_CLKGATE_CON(8), 12, GFLAGS),
+
+ /* uart */
--- /dev/null
+From 26abc916a898d34c5ad159315a2f683def3c5555 Mon Sep 17 00:00:00 2001
+From: Mike Christie <mchristi@redhat.com>
+Date: Thu, 26 Jul 2018 12:13:49 -0500
+Subject: iscsi target: fix session creation failure handling
+
+From: Mike Christie <mchristi@redhat.com>
+
+commit 26abc916a898d34c5ad159315a2f683def3c5555 upstream.
+
+The problem is that iscsi_login_zero_tsih_s1 sets conn->sess early in
+iscsi_login_set_conn_values. If the function fails later like when we
+alloc the idr it does kfree(sess) and leaves the conn->sess pointer set.
+iscsi_login_zero_tsih_s1 then returns -Exyz and we then call
+iscsi_target_login_sess_out and access the freed memory.
+
+This patch has iscsi_login_zero_tsih_s1 either completely setup the
+session or completely tear it down, so later in
+iscsi_target_login_sess_out we can just check for it being set to the
+connection.
+
+Cc: stable@vger.kernel.org
+Fixes: 0957627a9960 ("iscsi-target: Fix sess allocation leak in...")
+Signed-off-by: Mike Christie <mchristi@redhat.com>
+Acked-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Matthew Wilcox <willy@infradead.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/target/iscsi/iscsi_target_login.c | 35 ++++++++++++++++++------------
+ 1 file changed, 21 insertions(+), 14 deletions(-)
+
+--- a/drivers/target/iscsi/iscsi_target_login.c
++++ b/drivers/target/iscsi/iscsi_target_login.c
+@@ -345,8 +345,7 @@ static int iscsi_login_zero_tsih_s1(
+ pr_err("idr_alloc() for sess_idr failed\n");
+ iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
+ ISCSI_LOGIN_STATUS_NO_RESOURCES);
+- kfree(sess);
+- return -ENOMEM;
++ goto free_sess;
+ }
+
+ sess->creation_time = get_jiffies_64();
+@@ -362,20 +361,28 @@ static int iscsi_login_zero_tsih_s1(
+ ISCSI_LOGIN_STATUS_NO_RESOURCES);
+ pr_err("Unable to allocate memory for"
+ " struct iscsi_sess_ops.\n");
+- kfree(sess);
+- return -ENOMEM;
++ goto remove_idr;
+ }
+
+ sess->se_sess = transport_init_session(TARGET_PROT_NORMAL);
+ if (IS_ERR(sess->se_sess)) {
+ iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
+ ISCSI_LOGIN_STATUS_NO_RESOURCES);
+- kfree(sess->sess_ops);
+- kfree(sess);
+- return -ENOMEM;
++ goto free_ops;
+ }
+
+ return 0;
++
++free_ops:
++ kfree(sess->sess_ops);
++remove_idr:
++ spin_lock_bh(&sess_idr_lock);
++ idr_remove(&sess_idr, sess->session_index);
++ spin_unlock_bh(&sess_idr_lock);
++free_sess:
++ kfree(sess);
++ conn->sess = NULL;
++ return -ENOMEM;
+ }
+
+ static int iscsi_login_zero_tsih_s2(
+@@ -1162,13 +1169,13 @@ void iscsi_target_login_sess_out(struct
+ ISCSI_LOGIN_STATUS_INIT_ERR);
+ if (!zero_tsih || !conn->sess)
+ goto old_sess_out;
+- if (conn->sess->se_sess)
+- transport_free_session(conn->sess->se_sess);
+- if (conn->sess->session_index != 0) {
+- spin_lock_bh(&sess_idr_lock);
+- idr_remove(&sess_idr, conn->sess->session_index);
+- spin_unlock_bh(&sess_idr_lock);
+- }
++
++ transport_free_session(conn->sess->se_sess);
++
++ spin_lock_bh(&sess_idr_lock);
++ idr_remove(&sess_idr, conn->sess->session_index);
++ spin_unlock_bh(&sess_idr_lock);
++
+ kfree(conn->sess->sess_ops);
+ kfree(conn->sess);
+ conn->sess = NULL;
--- /dev/null
+From 75b2f5f5911fe7a2fc82969b2b24dde34e8f820d Mon Sep 17 00:00:00 2001
+From: Masami Hiramatsu <mhiramat@kernel.org>
+Date: Sat, 28 Apr 2018 21:37:33 +0900
+Subject: kprobes/arm: Fix %p uses in error messages
+
+From: Masami Hiramatsu <mhiramat@kernel.org>
+
+commit 75b2f5f5911fe7a2fc82969b2b24dde34e8f820d upstream.
+
+Fix %p uses in error messages by removing it and
+using general dumper.
+
+Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
+Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
+Cc: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
+Cc: Arnd Bergmann <arnd@arndb.de>
+Cc: David Howells <dhowells@redhat.com>
+Cc: David S . Miller <davem@davemloft.net>
+Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
+Cc: Jon Medhurst <tixy@linaro.org>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Cc: Thomas Richter <tmricht@linux.ibm.com>
+Cc: Tobin C . Harding <me@tobin.cc>
+Cc: Will Deacon <will.deacon@arm.com>
+Cc: acme@kernel.org
+Cc: akpm@linux-foundation.org
+Cc: brueckner@linux.vnet.ibm.com
+Cc: linux-arch@vger.kernel.org
+Cc: rostedt@goodmis.org
+Cc: schwidefsky@de.ibm.com
+Cc: stable@vger.kernel.org
+Link: https://lkml.kernel.org/lkml/152491905361.9916.15300852365956231645.stgit@devbox
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm/probes/kprobes/core.c | 4 ++--
+ arch/arm/probes/kprobes/test-core.c | 1 -
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+--- a/arch/arm/probes/kprobes/core.c
++++ b/arch/arm/probes/kprobes/core.c
+@@ -291,8 +291,8 @@ void __kprobes kprobe_handler(struct pt_
+ break;
+ case KPROBE_REENTER:
+ /* A nested probe was hit in FIQ, it is a BUG */
+- pr_warn("Unrecoverable kprobe detected at %p.\n",
+- p->addr);
++ pr_warn("Unrecoverable kprobe detected.\n");
++ dump_kprobe(p);
+ /* fall through */
+ default:
+ /* impossible cases */
+--- a/arch/arm/probes/kprobes/test-core.c
++++ b/arch/arm/probes/kprobes/test-core.c
+@@ -1517,7 +1517,6 @@ fail:
+ print_registers(&result_regs);
+
+ if (mem) {
+- pr_err("current_stack=%p\n", current_stack);
+ pr_err("expected_memory:\n");
+ print_memory(expected_memory, mem_size);
+ pr_err("result_memory:\n");
--- /dev/null
+From f2a3ab36077222437b4826fc76111caa14562b7c Mon Sep 17 00:00:00 2001
+From: Masami Hiramatsu <mhiramat@kernel.org>
+Date: Sat, 28 Apr 2018 21:35:01 +0900
+Subject: kprobes: Make list and blacklist root user read only
+
+From: Masami Hiramatsu <mhiramat@kernel.org>
+
+commit f2a3ab36077222437b4826fc76111caa14562b7c upstream.
+
+Since the blacklist and list files on debugfs indicates
+a sensitive address information to reader, it should be
+restricted to the root user.
+
+Suggested-by: Thomas Richter <tmricht@linux.ibm.com>
+Suggested-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
+Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
+Cc: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
+Cc: Arnd Bergmann <arnd@arndb.de>
+Cc: David Howells <dhowells@redhat.com>
+Cc: David S . Miller <davem@davemloft.net>
+Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
+Cc: Jon Medhurst <tixy@linaro.org>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Cc: Tobin C . Harding <me@tobin.cc>
+Cc: Will Deacon <will.deacon@arm.com>
+Cc: acme@kernel.org
+Cc: akpm@linux-foundation.org
+Cc: brueckner@linux.vnet.ibm.com
+Cc: linux-arch@vger.kernel.org
+Cc: rostedt@goodmis.org
+Cc: schwidefsky@de.ibm.com
+Cc: stable@vger.kernel.org
+Link: https://lkml.kernel.org/lkml/152491890171.9916.5183693615601334087.stgit@devbox
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/kprobes.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/kernel/kprobes.c
++++ b/kernel/kprobes.c
+@@ -2531,7 +2531,7 @@ static int __init debugfs_kprobe_init(vo
+ if (!dir)
+ return -ENOMEM;
+
+- file = debugfs_create_file("list", 0444, dir, NULL,
++ file = debugfs_create_file("list", 0400, dir, NULL,
+ &debugfs_kprobes_operations);
+ if (!file)
+ goto error;
+@@ -2541,7 +2541,7 @@ static int __init debugfs_kprobe_init(vo
+ if (!file)
+ goto error;
+
+- file = debugfs_create_file("blacklist", 0444, dir, NULL,
++ file = debugfs_create_file("blacklist", 0400, dir, NULL,
+ &debugfs_kprobe_blacklist_ops);
+ if (!file)
+ goto error;
--- /dev/null
+From 344ebf09949c31bcb8818d8458b65add29f1d67b Mon Sep 17 00:00:00 2001
+From: Paul Burton <paul.burton@mips.com>
+Date: Mon, 18 Jun 2018 17:37:59 -0700
+Subject: MIPS: Always use -march=<arch>, not -<arch> shortcuts
+
+From: Paul Burton <paul.burton@mips.com>
+
+commit 344ebf09949c31bcb8818d8458b65add29f1d67b upstream.
+
+The VDSO Makefile filters CFLAGS to select a subset which it uses whilst
+building the VDSO ELF. One of the flags it allows through is the -march=
+flag that selects the architecture/ISA to target.
+
+Unfortunately in cases where CONFIG_CPU_MIPS32_R{1,2}=y and the
+toolchain defaults to building for MIPS64, the main MIPS Makefile ends
+up using the short-form -<arch> flags in cflags-y. This is because the
+calls to cc-option always fail to use the long-form -march=<arch> flag
+due to the lack of an -mabi=<abi> flag in KBUILD_CFLAGS at the point
+where the cc-option function is executed. The resulting GCC invocation
+is something like:
+
+ $ mips64-linux-gcc -Werror -march=mips32r2 -c -x c /dev/null -o tmp
+ cc1: error: '-march=mips32r2' is not compatible with the selected ABI
+
+These short-form -<arch> flags are dropped by the VDSO Makefile's
+filtering, and so we attempt to build the VDSO without specifying any
+architecture. This results in an attempt to build the VDSO using
+whatever the compiler's default architecture is, regardless of whether
+that is suitable for the kernel configuration.
+
+One encountered build failure resulting from this mismatch is a
+rejection of the sync instruction if the kernel is configured for a
+MIPS32 or MIPS64 r1 or r2 target but the toolchain defaults to an older
+architecture revision such as MIPS1 which did not include the sync
+instruction:
+
+ CC arch/mips/vdso/gettimeofday.o
+ /tmp/ccGQKoOj.s: Assembler messages:
+ /tmp/ccGQKoOj.s:273: Error: opcode not supported on this processor: mips1 (mips1) `sync'
+ /tmp/ccGQKoOj.s:329: Error: opcode not supported on this processor: mips1 (mips1) `sync'
+ /tmp/ccGQKoOj.s:520: Error: opcode not supported on this processor: mips1 (mips1) `sync'
+ /tmp/ccGQKoOj.s:714: Error: opcode not supported on this processor: mips1 (mips1) `sync'
+ /tmp/ccGQKoOj.s:1009: Error: opcode not supported on this processor: mips1 (mips1) `sync'
+ /tmp/ccGQKoOj.s:1066: Error: opcode not supported on this processor: mips1 (mips1) `sync'
+ /tmp/ccGQKoOj.s:1114: Error: opcode not supported on this processor: mips1 (mips1) `sync'
+ /tmp/ccGQKoOj.s:1279: Error: opcode not supported on this processor: mips1 (mips1) `sync'
+ /tmp/ccGQKoOj.s:1334: Error: opcode not supported on this processor: mips1 (mips1) `sync'
+ /tmp/ccGQKoOj.s:1374: Error: opcode not supported on this processor: mips1 (mips1) `sync'
+ /tmp/ccGQKoOj.s:1459: Error: opcode not supported on this processor: mips1 (mips1) `sync'
+ /tmp/ccGQKoOj.s:1514: Error: opcode not supported on this processor: mips1 (mips1) `sync'
+ /tmp/ccGQKoOj.s:1814: Error: opcode not supported on this processor: mips1 (mips1) `sync'
+ /tmp/ccGQKoOj.s:2002: Error: opcode not supported on this processor: mips1 (mips1) `sync'
+ /tmp/ccGQKoOj.s:2066: Error: opcode not supported on this processor: mips1 (mips1) `sync'
+ make[2]: *** [scripts/Makefile.build:318: arch/mips/vdso/gettimeofday.o] Error 1
+ make[1]: *** [scripts/Makefile.build:558: arch/mips/vdso] Error 2
+ make[1]: *** Waiting for unfinished jobs....
+
+This can be reproduced for example by attempting to build
+pistachio_defconfig using Arnd's GCC 8.1.0 mips64 toolchain from
+kernel.org:
+
+ https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/8.1.0/x86_64-gcc-8.1.0-nolibc-mips64-linux.tar.xz
+
+Resolve this problem by using the long-form -march=<arch> in all cases,
+which makes it through the arch/mips/vdso/Makefile's filtering & is thus
+consistently used to build both the kernel proper & the VDSO.
+
+The use of cc-option to prefer the long-form & fall back to the
+short-form flags makes no sense since the short-form is just an
+abbreviation for the also-supported long-form in all GCC versions that
+we support building with. This means there is no case in which we have
+to use the short-form -<arch> flags, so we can simply remove them.
+
+The manual redefinition of _MIPS_ISA is removed naturally along with the
+use of the short-form flags that it accompanied, and whilst here we
+remove the separate assembler ISA selection. I suspect that both of
+these were only required due to the mips32 vs mips2 mismatch that was
+introduced by commit 59b3e8e9aac6 ("[MIPS] Makefile crapectomy.") and
+fixed but not cleaned up by commit 9200c0b2a07c ("[MIPS] Fix Makefile
+bugs for MIPS32/MIPS64 R1 and R2.").
+
+I've marked this for backport as far as v4.4 where the MIPS VDSO was
+introduced. In earlier kernels there should be no ill effect to using
+the short-form flags.
+
+Signed-off-by: Paul Burton <paul.burton@mips.com>
+Cc: Ralf Baechle <ralf@linux-mips.org>
+Cc: linux-mips@linux-mips.org
+Cc: stable@vger.kernel.org # v4.4+
+Reviewed-by: James Hogan <jhogan@kernel.org>
+Patchwork: https://patchwork.linux-mips.org/patch/19579/
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/mips/Makefile | 12 ++++--------
+ 1 file changed, 4 insertions(+), 8 deletions(-)
+
+--- a/arch/mips/Makefile
++++ b/arch/mips/Makefile
+@@ -155,15 +155,11 @@ cflags-$(CONFIG_CPU_R4300) += -march=r43
+ cflags-$(CONFIG_CPU_VR41XX) += -march=r4100 -Wa,--trap
+ cflags-$(CONFIG_CPU_R4X00) += -march=r4600 -Wa,--trap
+ cflags-$(CONFIG_CPU_TX49XX) += -march=r4600 -Wa,--trap
+-cflags-$(CONFIG_CPU_MIPS32_R1) += $(call cc-option,-march=mips32,-mips32 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS32) \
+- -Wa,-mips32 -Wa,--trap
+-cflags-$(CONFIG_CPU_MIPS32_R2) += $(call cc-option,-march=mips32r2,-mips32r2 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS32) \
+- -Wa,-mips32r2 -Wa,--trap
++cflags-$(CONFIG_CPU_MIPS32_R1) += -march=mips32 -Wa,--trap
++cflags-$(CONFIG_CPU_MIPS32_R2) += -march=mips32r2 -Wa,--trap
+ cflags-$(CONFIG_CPU_MIPS32_R6) += -march=mips32r6 -Wa,--trap -modd-spreg
+-cflags-$(CONFIG_CPU_MIPS64_R1) += $(call cc-option,-march=mips64,-mips64 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS64) \
+- -Wa,-mips64 -Wa,--trap
+-cflags-$(CONFIG_CPU_MIPS64_R2) += $(call cc-option,-march=mips64r2,-mips64r2 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS64) \
+- -Wa,-mips64r2 -Wa,--trap
++cflags-$(CONFIG_CPU_MIPS64_R1) += -march=mips64 -Wa,--trap
++cflags-$(CONFIG_CPU_MIPS64_R2) += -march=mips64r2 -Wa,--trap
+ cflags-$(CONFIG_CPU_MIPS64_R6) += -march=mips64r6 -Wa,--trap
+ cflags-$(CONFIG_CPU_R5000) += -march=r5000 -Wa,--trap
+ cflags-$(CONFIG_CPU_R5432) += $(call cc-option,-march=r5400,-march=r5000) \
--- /dev/null
+From a30718868915fbb991a9ae9e45594b059f28e9ae Mon Sep 17 00:00:00 2001
+From: Huacai Chen <chenhc@lemote.com>
+Date: Fri, 13 Jul 2018 15:37:57 +0800
+Subject: MIPS: Change definition of cpu_relax() for Loongson-3
+
+From: Huacai Chen <chenhc@lemote.com>
+
+commit a30718868915fbb991a9ae9e45594b059f28e9ae upstream.
+
+Linux expects that if a CPU modifies a memory location, then that
+modification will eventually become visible to other CPUs in the system.
+
+Loongson 3 CPUs include a Store Fill Buffer (SFB) which sits between a
+core & its L1 data cache, queueing memory accesses & allowing for faster
+forwarding of data from pending stores to younger loads from the core.
+Unfortunately the SFB prioritizes loads such that a continuous stream of
+loads may cause a pending write to be buffered indefinitely. This is
+problematic if we end up with 2 CPUs which each perform a store that the
+other polls for - one or both CPUs may end up with their stores buffered
+in the SFB, never reaching cache due to the continuous reads from the
+poll loop. Such a deadlock condition has been observed whilst running
+qspinlock code.
+
+This patch changes the definition of cpu_relax() to smp_mb() for
+Loongson-3, forcing a flush of the SFB on SMP systems which will cause
+any pending writes to make it as far as the L1 caches where they will
+become visible to other CPUs. If the kernel is not compiled for SMP
+support, this will expand to a barrier() as before.
+
+This workaround matches that currently implemented for ARM when
+CONFIG_ARM_ERRATA_754327=y, which was introduced by commit 534be1d5a2da
+("ARM: 6194/1: change definition of cpu_relax() for ARM11MPCore").
+
+Although the workaround is only required when the Loongson 3 SFB
+functionality is enabled, and we only began explicitly enabling that
+functionality in v4.7 with commit 1e820da3c9af ("MIPS: Loongson-3:
+Introduce CONFIG_LOONGSON3_ENHANCEMENT"), existing or future firmware
+may enable the SFB which means we may need the workaround backported to
+earlier kernels too.
+
+[paul.burton@mips.com:
+ - Reword commit message & comment.
+ - Limit stable backport to v3.15+ where we support Loongson 3 CPUs.]
+
+Signed-off-by: Huacai Chen <chenhc@lemote.com>
+Signed-off-by: Paul Burton <paul.burton@mips.com>
+References: 534be1d5a2da ("ARM: 6194/1: change definition of cpu_relax() for ARM11MPCore")
+References: 1e820da3c9af ("MIPS: Loongson-3: Introduce CONFIG_LOONGSON3_ENHANCEMENT")
+Patchwork: https://patchwork.linux-mips.org/patch/19830/
+Cc: Ralf Baechle <ralf@linux-mips.org>
+Cc: James Hogan <jhogan@kernel.org>
+Cc: linux-mips@linux-mips.org
+Cc: Fuxin Zhang <zhangfx@lemote.com>
+Cc: Zhangjin Wu <wuzhangjin@gmail.com>
+Cc: Huacai Chen <chenhuacai@gmail.com>
+Cc: stable@vger.kernel.org # v3.15+
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/mips/include/asm/processor.h | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+--- a/arch/mips/include/asm/processor.h
++++ b/arch/mips/include/asm/processor.h
+@@ -388,7 +388,20 @@ unsigned long get_wchan(struct task_stru
+ #define KSTK_ESP(tsk) (task_pt_regs(tsk)->regs[29])
+ #define KSTK_STATUS(tsk) (task_pt_regs(tsk)->cp0_status)
+
++#ifdef CONFIG_CPU_LOONGSON3
++/*
++ * Loongson-3's SFB (Store-Fill-Buffer) may buffer writes indefinitely when a
++ * tight read loop is executed, because reads take priority over writes & the
++ * hardware (incorrectly) doesn't ensure that writes will eventually occur.
++ *
++ * Since spin loops of any kind should have a cpu_relax() in them, force an SFB
++ * flush from cpu_relax() such that any pending writes will become visible as
++ * expected.
++ */
++#define cpu_relax() smp_mb()
++#else
+ #define cpu_relax() barrier()
++#endif
+
+ /*
+ * Return_address is a replacement for __builtin_return_address(count)
--- /dev/null
+From f5958b4cf4fc38ed4583ab83fb7c4cd1ab05f47b Mon Sep 17 00:00:00 2001
+From: "Maciej W. Rozycki" <macro@mips.com>
+Date: Tue, 15 May 2018 23:33:26 +0100
+Subject: MIPS: Correct the 64-bit DSP accumulator register size
+
+From: Maciej W. Rozycki <macro@mips.com>
+
+commit f5958b4cf4fc38ed4583ab83fb7c4cd1ab05f47b upstream.
+
+Use the `unsigned long' rather than `__u32' type for DSP accumulator
+registers, like with the regular MIPS multiply/divide accumulator and
+general-purpose registers, as all are 64-bit in 64-bit implementations
+and using a 32-bit data type leads to contents truncation on context
+saving.
+
+Update `arch_ptrace' and `compat_arch_ptrace' accordingly, removing
+casts that are similarly not used with multiply/divide accumulator or
+general-purpose register accesses.
+
+Signed-off-by: Maciej W. Rozycki <macro@mips.com>
+Signed-off-by: Paul Burton <paul.burton@mips.com>
+Fixes: e50c0a8fa60d ("Support the MIPS32 / MIPS64 DSP ASE.")
+Patchwork: https://patchwork.linux-mips.org/patch/19329/
+Cc: Alexander Viro <viro@zeniv.linux.org.uk>
+Cc: James Hogan <jhogan@kernel.org>
+Cc: Ralf Baechle <ralf@linux-mips.org>
+Cc: linux-fsdevel@vger.kernel.org
+Cc: linux-mips@linux-mips.org
+Cc: linux-kernel@vger.kernel.org
+Cc: stable@vger.kernel.org # 2.6.15+
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/mips/include/asm/processor.h | 2 +-
+ arch/mips/kernel/ptrace.c | 2 +-
+ arch/mips/kernel/ptrace32.c | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+--- a/arch/mips/include/asm/processor.h
++++ b/arch/mips/include/asm/processor.h
+@@ -141,7 +141,7 @@ struct mips_fpu_struct {
+
+ #define NUM_DSP_REGS 6
+
+-typedef __u32 dspreg_t;
++typedef unsigned long dspreg_t;
+
+ struct mips_dsp_state {
+ dspreg_t dspr[NUM_DSP_REGS];
+--- a/arch/mips/kernel/ptrace.c
++++ b/arch/mips/kernel/ptrace.c
+@@ -847,7 +847,7 @@ long arch_ptrace(struct task_struct *chi
+ goto out;
+ }
+ dregs = __get_dsp_regs(child);
+- tmp = (unsigned long) (dregs[addr - DSP_BASE]);
++ tmp = dregs[addr - DSP_BASE];
+ break;
+ }
+ case DSP_CONTROL:
+--- a/arch/mips/kernel/ptrace32.c
++++ b/arch/mips/kernel/ptrace32.c
+@@ -141,7 +141,7 @@ long compat_arch_ptrace(struct task_stru
+ goto out;
+ }
+ dregs = __get_dsp_regs(child);
+- tmp = (unsigned long) (dregs[addr - DSP_BASE]);
++ tmp = dregs[addr - DSP_BASE];
+ break;
+ }
+ case DSP_CONTROL:
--- /dev/null
+From 690d9163bf4b8563a2682e619f938e6a0443947f Mon Sep 17 00:00:00 2001
+From: Paul Burton <paul.burton@mips.com>
+Date: Tue, 21 Aug 2018 12:12:59 -0700
+Subject: MIPS: lib: Provide MIPS64r6 __multi3() for GCC < 7
+
+From: Paul Burton <paul.burton@mips.com>
+
+commit 690d9163bf4b8563a2682e619f938e6a0443947f upstream.
+
+Some versions of GCC suboptimally generate calls to the __multi3()
+intrinsic for MIPS64r6 builds, resulting in link failures due to the
+missing function:
+
+ LD vmlinux.o
+ MODPOST vmlinux.o
+ kernel/bpf/verifier.o: In function `kmalloc_array':
+ include/linux/slab.h:631: undefined reference to `__multi3'
+ fs/select.o: In function `kmalloc_array':
+ include/linux/slab.h:631: undefined reference to `__multi3'
+ ...
+
+We already have a workaround for this in which we provide the
+instrinsic, but we do so selectively for GCC 7 only. Unfortunately the
+issue occurs with older GCC versions too - it has been observed with
+both GCC 5.4.0 & GCC 6.4.0.
+
+MIPSr6 support was introduced in GCC 5, so all major GCC versions prior
+to GCC 8 are affected and we extend our workaround accordingly to all
+MIPS64r6 builds using GCC versions older than GCC 8.
+
+Signed-off-by: Paul Burton <paul.burton@mips.com>
+Reported-by: Vladimir Kondratiev <vladimir.kondratiev@intel.com>
+Fixes: ebabcf17bcd7 ("MIPS: Implement __multi3 for GCC7 MIPS64r6 builds")
+Patchwork: https://patchwork.linux-mips.org/patch/20297/
+Cc: James Hogan <jhogan@kernel.org>
+Cc: Ralf Baechle <ralf@linux-mips.org>
+Cc: linux-mips@linux-mips.org
+Cc: stable@vger.kernel.org # 4.15+
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+diff --git a/arch/mips/lib/multi3.c b/arch/mips/lib/multi3.c
+index 111ad475aa0c..4c2483f410c2 100644
+--- a/arch/mips/lib/multi3.c
++++ b/arch/mips/lib/multi3.c
+@@ -4,12 +4,12 @@
+ #include "libgcc.h"
+
+ /*
+- * GCC 7 suboptimally generates __multi3 calls for mips64r6, so for that
+- * specific case only we'll implement it here.
++ * GCC 7 & older can suboptimally generate __multi3 calls for mips64r6, so for
++ * that specific case only we implement that intrinsic here.
+ *
+ * See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82981
+ */
+-#if defined(CONFIG_64BIT) && defined(CONFIG_CPU_MIPSR6) && (__GNUC__ == 7)
++#if defined(CONFIG_64BIT) && defined(CONFIG_CPU_MIPSR6) && (__GNUC__ < 8)
+
+ /* multiply 64-bit values, low 64-bits returned */
+ static inline long long notrace dmulu(long long a, long long b)
--- /dev/null
+From 5e2e2f9f76e157063a656351728703cb02b068f1 Mon Sep 17 00:00:00 2001
+From: Dan Carpenter <dan.carpenter@oracle.com>
+Date: Thu, 23 Aug 2018 16:59:25 +0300
+Subject: PM / clk: signedness bug in of_pm_clk_add_clks()
+
+From: Dan Carpenter <dan.carpenter@oracle.com>
+
+commit 5e2e2f9f76e157063a656351728703cb02b068f1 upstream.
+
+"count" needs to be signed for the error handling to work. I made "i"
+signed as well so they match.
+
+Fixes: 02113ba93ea4 (PM / clk: Add support for obtaining clocks from device-tree)
+Cc: 4.6+ <stable@vger.kernel.org> # 4.6+
+Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/base/power/clock_ops.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/base/power/clock_ops.c
++++ b/drivers/base/power/clock_ops.c
+@@ -185,7 +185,7 @@ EXPORT_SYMBOL_GPL(of_pm_clk_add_clk);
+ int of_pm_clk_add_clks(struct device *dev)
+ {
+ struct clk **clks;
+- unsigned int i, count;
++ int i, count;
+ int ret;
+
+ if (!dev || !dev->of_node)
--- /dev/null
+From a427503edaaed9b75ed9746a654cece7e93e60a8 Mon Sep 17 00:00:00 2001
+From: "H. Nikolaus Schaller" <hns@goldelico.com>
+Date: Tue, 26 Jun 2018 15:28:30 +0200
+Subject: power: generic-adc-battery: check for duplicate properties copied from iio channels
+
+From: H. Nikolaus Schaller <hns@goldelico.com>
+
+commit a427503edaaed9b75ed9746a654cece7e93e60a8 upstream.
+
+If an iio channel defines a basic property, there are duplicate entries
+in /sys/class/power/*/uevent.
+
+So add a check to avoid duplicates. Since all channels may be duplicates,
+we have to modify the related error check.
+
+Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
+Cc: stable@vger.kernel.org
+Fixes: e60fea794e6e ("power: battery: Generic battery driver using IIO")
+Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/power/supply/generic-adc-battery.c | 15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+--- a/drivers/power/supply/generic-adc-battery.c
++++ b/drivers/power/supply/generic-adc-battery.c
+@@ -246,6 +246,7 @@ static int gab_probe(struct platform_dev
+ int ret = 0;
+ int chan;
+ int index = ARRAY_SIZE(gab_props);
++ bool any = false;
+
+ adc_bat = devm_kzalloc(&pdev->dev, sizeof(*adc_bat), GFP_KERNEL);
+ if (!adc_bat) {
+@@ -292,12 +293,22 @@ static int gab_probe(struct platform_dev
+ adc_bat->channel[chan] = NULL;
+ } else {
+ /* copying properties for supported channels only */
+- psy_desc->properties[index++] = gab_dyn_props[chan];
++ int index2;
++
++ for (index2 = 0; index2 < index; index2++) {
++ if (psy_desc->properties[index2] ==
++ gab_dyn_props[chan])
++ break; /* already known */
++ }
++ if (index2 == index) /* really new */
++ psy_desc->properties[index++] =
++ gab_dyn_props[chan];
++ any = true;
+ }
+ }
+
+ /* none of the channels are supported so let's bail out */
+- if (index == ARRAY_SIZE(gab_props)) {
++ if (!any) {
+ ret = -ENODEV;
+ goto second_mem_fail;
+ }
--- /dev/null
+From 932d47448c3caa0fa99e84d7f5bc302aa286efd8 Mon Sep 17 00:00:00 2001
+From: "H. Nikolaus Schaller" <hns@goldelico.com>
+Date: Tue, 26 Jun 2018 15:28:29 +0200
+Subject: power: generic-adc-battery: fix out-of-bounds write when copying channel properties
+
+From: H. Nikolaus Schaller <hns@goldelico.com>
+
+commit 932d47448c3caa0fa99e84d7f5bc302aa286efd8 upstream.
+
+We did have sporadic problems in the pinctrl framework during boot
+where a pin group name unexpectedly became NULL leading to a NULL
+dereference in strcmp.
+
+Detailled analysis of the failing cases did reveal that there were
+two devm allocated objects close to each other. The second one was
+the affected group_desc in pinmux and the first one was the
+psy_desc->properties buffer of the gab driver.
+
+Review of the gab code showed that the address calculation for
+one memcpy() is wrong. It does
+
+ properties + sizeof(type) * index
+
+but C is defined to do the index multiplication already for
+pointer + integer additions. Hence the factor was applied twice
+and the memcpy() does write outside of the properties buffer.
+Sometimes it happened to be the pinctrl and triggered the strcmp(NULL).
+
+Anyways, it is overkill to use a memcpy() here instead of a simple
+assignment, which is easier to read and has less risk for wrong
+address calculations. So we change code to a simple assignment.
+
+If we initialize the index to the first free location, we can even
+remove the local variable 'properties'.
+
+This bug seems to exist right from the beginning in 3.7-rc1 in
+
+commit e60fea794e6e ("power: battery: Generic battery driver using IIO")
+
+Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
+Cc: stable@vger.kernel.org
+Fixes: e60fea794e6e ("power: battery: Generic battery driver using IIO")
+Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/power/supply/generic-adc-battery.c | 14 ++++----------
+ 1 file changed, 4 insertions(+), 10 deletions(-)
+
+--- a/drivers/power/supply/generic-adc-battery.c
++++ b/drivers/power/supply/generic-adc-battery.c
+@@ -243,10 +243,9 @@ static int gab_probe(struct platform_dev
+ struct power_supply_desc *psy_desc;
+ struct power_supply_config psy_cfg = {};
+ struct gab_platform_data *pdata = pdev->dev.platform_data;
+- enum power_supply_property *properties;
+ int ret = 0;
+ int chan;
+- int index = 0;
++ int index = ARRAY_SIZE(gab_props);
+
+ adc_bat = devm_kzalloc(&pdev->dev, sizeof(*adc_bat), GFP_KERNEL);
+ if (!adc_bat) {
+@@ -280,8 +279,6 @@ static int gab_probe(struct platform_dev
+ }
+
+ memcpy(psy_desc->properties, gab_props, sizeof(gab_props));
+- properties = (enum power_supply_property *)
+- ((char *)psy_desc->properties + sizeof(gab_props));
+
+ /*
+ * getting channel from iio and copying the battery properties
+@@ -295,15 +292,12 @@ static int gab_probe(struct platform_dev
+ adc_bat->channel[chan] = NULL;
+ } else {
+ /* copying properties for supported channels only */
+- memcpy(properties + sizeof(*(psy_desc->properties)) * index,
+- &gab_dyn_props[chan],
+- sizeof(gab_dyn_props[chan]));
+- index++;
++ psy_desc->properties[index++] = gab_dyn_props[chan];
+ }
+ }
+
+ /* none of the channels are supported so let's bail out */
+- if (index == 0) {
++ if (index == ARRAY_SIZE(gab_props)) {
+ ret = -ENODEV;
+ goto second_mem_fail;
+ }
+@@ -314,7 +308,7 @@ static int gab_probe(struct platform_dev
+ * as come channels may be not be supported by the device.So
+ * we need to take care of that.
+ */
+- psy_desc->num_properties = ARRAY_SIZE(gab_props) + index;
++ psy_desc->num_properties = index;
+
+ adc_bat->psy = power_supply_register(&pdev->dev, psy_desc, &psy_cfg);
+ if (IS_ERR(adc_bat->psy)) {
--- /dev/null
+From 26f843848bae973817b3587780ce6b7b0200d3e4 Mon Sep 17 00:00:00 2001
+From: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Date: Mon, 6 Aug 2018 14:26:39 +0200
+Subject: s390: fix br_r1_trampoline for machines without exrl
+
+From: Martin Schwidefsky <schwidefsky@de.ibm.com>
+
+commit 26f843848bae973817b3587780ce6b7b0200d3e4 upstream.
+
+For machines without the exrl instruction the BFP jit generates
+code that uses an "br %r1" instruction located in the lowcore page.
+Unfortunately there is a cut & paste error that puts an additional
+"larl %r1,.+14" instruction in the code that clobbers the branch
+target address in %r1. Remove the larl instruction.
+
+Cc: <stable@vger.kernel.org> # v4.17+
+Fixes: de5cb6eb51 ("s390: use expoline thunks in the BPF JIT")
+Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/s390/net/bpf_jit_comp.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+--- a/arch/s390/net/bpf_jit_comp.c
++++ b/arch/s390/net/bpf_jit_comp.c
+@@ -518,8 +518,6 @@ static void bpf_jit_epilogue(struct bpf_
+ /* br %r1 */
+ _EMIT2(0x07f1);
+ } else {
+- /* larl %r1,.+14 */
+- EMIT6_PCREL_RILB(0xc0000000, REG_1, jit->prg + 14);
+ /* ex 0,S390_lowcore.br_r1_tampoline */
+ EMIT4_DISP(0x44000000, REG_0, REG_0,
+ offsetof(struct lowcore, br_r1_trampoline));
--- /dev/null
+From 37a366face294facb9c9d9fdd9f5b64a27456cbd Mon Sep 17 00:00:00 2001
+From: Gerald Schaefer <gerald.schaefer@de.ibm.com>
+Date: Tue, 7 Aug 2018 18:57:11 +0200
+Subject: s390/mm: fix addressing exception after suspend/resume
+
+From: Gerald Schaefer <gerald.schaefer@de.ibm.com>
+
+commit 37a366face294facb9c9d9fdd9f5b64a27456cbd upstream.
+
+Commit c9b5ad546e7d "s390/mm: tag normal pages vs pages used in page tables"
+accidentally changed the logic in arch_set_page_states(), which is used by
+the suspend/resume code. set_page_stable(page, order) was changed to
+set_page_stable_dat(page, 0). After this, only the first page of higher order
+pages will be set to stable, and a write to one of the unstable pages will
+result in an addressing exception.
+
+Fix this by using "order" again, instead of "0".
+
+Fixes: c9b5ad546e7d ("s390/mm: tag normal pages vs pages used in page tables")
+Cc: stable@vger.kernel.org # 4.14+
+Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com>
+Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
+Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/s390/mm/page-states.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/s390/mm/page-states.c
++++ b/arch/s390/mm/page-states.c
+@@ -271,7 +271,7 @@ void arch_set_page_states(int make_stabl
+ list_for_each(l, &zone->free_area[order].free_list[t]) {
+ page = list_entry(l, struct page, lru);
+ if (make_stable)
+- set_page_stable_dat(page, 0);
++ set_page_stable_dat(page, order);
+ else
+ set_page_unused(page, order);
+ }
--- /dev/null
+From fb7d7518b0d65955f91c7b875c36eae7694c69bd Mon Sep 17 00:00:00 2001
+From: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Date: Tue, 31 Jul 2018 16:14:18 +0200
+Subject: s390/numa: move initial setup of node_to_cpumask_map
+
+From: Martin Schwidefsky <schwidefsky@de.ibm.com>
+
+commit fb7d7518b0d65955f91c7b875c36eae7694c69bd upstream.
+
+The numa_init_early initcall sets the node_to_cpumask_map[0] to the
+full cpu_possible_mask. Unfortunately this early_initcall is too late,
+the NUMA setup for numa=emu is done even earlier. The order of calls
+is numa_setup() -> emu_update_cpu_topology(), then the early_initcalls(),
+followed by sched_init_domains().
+
+Starting with git commit 051f3ca02e46432c0965e8948f00c07d8a2f09c0
+"sched/topology: Introduce NUMA identity node sched domain"
+the incorrect node_to_cpumask_map[0] really screws up the domain
+setup and the kernel panics with the follow oops:
+
+Cc: <stable@vger.kernel.org> # v4.15+
+Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/s390/numa/numa.c | 16 ++--------------
+ 1 file changed, 2 insertions(+), 14 deletions(-)
+
+--- a/arch/s390/numa/numa.c
++++ b/arch/s390/numa/numa.c
+@@ -134,6 +134,8 @@ void __init numa_setup(void)
+ {
+ pr_info("NUMA mode: %s\n", mode->name);
+ nodes_clear(node_possible_map);
++ /* Initially attach all possible CPUs to node 0. */
++ cpumask_copy(&node_to_cpumask_map[0], cpu_possible_mask);
+ if (mode->setup)
+ mode->setup();
+ numa_setup_memory();
+@@ -141,20 +143,6 @@ void __init numa_setup(void)
+ }
+
+ /*
+- * numa_init_early() - Initialization initcall
+- *
+- * This runs when only one CPU is online and before the first
+- * topology update is called for by the scheduler.
+- */
+-static int __init numa_init_early(void)
+-{
+- /* Attach all possible CPUs to node 0 for now. */
+- cpumask_copy(&node_to_cpumask_map[0], cpu_possible_mask);
+- return 0;
+-}
+-early_initcall(numa_init_early);
+-
+-/*
+ * numa_init_late() - Initialization initcall
+ *
+ * Register NUMA nodes.
--- /dev/null
+From 866f3576a72b2233a76dffb80290f8086dc49e17 Mon Sep 17 00:00:00 2001
+From: Sebastian Ott <sebott@linux.ibm.com>
+Date: Mon, 13 Aug 2018 11:26:46 +0200
+Subject: s390/pci: fix out of bounds access during irq setup
+
+From: Sebastian Ott <sebott@linux.ibm.com>
+
+commit 866f3576a72b2233a76dffb80290f8086dc49e17 upstream.
+
+During interrupt setup we allocate interrupt vectors, walk the list of msi
+descriptors, and fill in the message data. Requesting more interrupts than
+supported on s390 can lead to an out of bounds access.
+
+When we restrict the number of interrupts we should also stop walking the
+msi list after all supported interrupts are handled.
+
+Cc: stable@vger.kernel.org
+Signed-off-by: Sebastian Ott <sebott@linux.ibm.com>
+Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/s390/pci/pci.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/arch/s390/pci/pci.c
++++ b/arch/s390/pci/pci.c
+@@ -420,6 +420,8 @@ int arch_setup_msi_irqs(struct pci_dev *
+ hwirq = 0;
+ for_each_pci_msi_entry(msi, pdev) {
+ rc = -EIO;
++ if (hwirq >= msi_vecs)
++ break;
+ irq = irq_alloc_desc(0); /* Alloc irq on node 0 */
+ if (irq < 0)
+ return -ENOMEM;
--- /dev/null
+From 64e03ff72623b8c2ea89ca3cb660094e019ed4ae Mon Sep 17 00:00:00 2001
+From: Julian Wiedmann <jwi@linux.ibm.com>
+Date: Wed, 16 May 2018 09:37:25 +0200
+Subject: s390/qdio: reset old sbal_state flags
+
+From: Julian Wiedmann <jwi@linux.ibm.com>
+
+commit 64e03ff72623b8c2ea89ca3cb660094e019ed4ae upstream.
+
+When allocating a new AOB fails, handle_outbound() is still capable of
+transmitting the selected buffer (just without async completion).
+
+But if a previous transfer on this queue slot used async completion, its
+sbal_state flags field is still set to QDIO_OUTBUF_STATE_FLAG_PENDING.
+So when the upper layer driver sees this stale flag, it expects an async
+completion that never happens.
+
+Fix this by unconditionally clearing the flags field.
+
+Fixes: 104ea556ee7f ("qdio: support asynchronous delivery of storage blocks")
+Cc: <stable@vger.kernel.org> #v3.2+
+Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
+Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/s390/include/asm/qdio.h | 1 -
+ drivers/s390/cio/qdio_main.c | 5 ++---
+ 2 files changed, 2 insertions(+), 4 deletions(-)
+
+--- a/arch/s390/include/asm/qdio.h
++++ b/arch/s390/include/asm/qdio.h
+@@ -262,7 +262,6 @@ struct qdio_outbuf_state {
+ void *user;
+ };
+
+-#define QDIO_OUTBUF_STATE_FLAG_NONE 0x00
+ #define QDIO_OUTBUF_STATE_FLAG_PENDING 0x01
+
+ #define CHSC_AC1_INITIATE_INPUTQ 0x80
+--- a/drivers/s390/cio/qdio_main.c
++++ b/drivers/s390/cio/qdio_main.c
+@@ -641,21 +641,20 @@ static inline unsigned long qdio_aob_for
+ unsigned long phys_aob = 0;
+
+ if (!q->use_cq)
+- goto out;
++ return 0;
+
+ if (!q->aobs[bufnr]) {
+ struct qaob *aob = qdio_allocate_aob();
+ q->aobs[bufnr] = aob;
+ }
+ if (q->aobs[bufnr]) {
+- q->sbal_state[bufnr].flags = QDIO_OUTBUF_STATE_FLAG_NONE;
+ q->sbal_state[bufnr].aob = q->aobs[bufnr];
+ q->aobs[bufnr]->user1 = (u64) q->sbal_state[bufnr].user;
+ phys_aob = virt_to_phys(q->aobs[bufnr]);
+ WARN_ON_ONCE(phys_aob & 0xFF);
+ }
+
+-out:
++ q->sbal_state[bufnr].flags = 0;
+ return phys_aob;
+ }
+
--- /dev/null
+From 0ee223b2e1f67cb2de9c0e3247c510d846e74d63 Mon Sep 17 00:00:00 2001
+From: Bart Van Assche <bart.vanassche@wdc.com>
+Date: Thu, 2 Aug 2018 10:51:41 -0700
+Subject: scsi: core: Avoid that SCSI device removal through sysfs triggers a deadlock
+
+From: Bart Van Assche <bart.vanassche@wdc.com>
+
+commit 0ee223b2e1f67cb2de9c0e3247c510d846e74d63 upstream.
+
+A long time ago the unfortunate decision was taken to add a self-deletion
+attribute to the sysfs SCSI device directory. That decision was unfortunate
+because self-deletion is really tricky. We can't drop that attribute
+because widely used user space software depends on it, namely the
+rescan-scsi-bus.sh script. Hence this patch that avoids that writing into
+that attribute triggers a deadlock. See also commit 7973cbd9fbd9 ("[PATCH]
+add sysfs attributes to scan and delete scsi_devices").
+
+This patch avoids that self-removal triggers the following deadlock:
+
+======================================================
+WARNING: possible circular locking dependency detected
+4.18.0-rc2-dbg+ #5 Not tainted
+------------------------------------------------------
+modprobe/6539 is trying to acquire lock:
+000000008323c4cd (kn->count#202){++++}, at: kernfs_remove_by_name_ns+0x45/0x90
+
+but task is already holding lock:
+00000000a6ec2c69 (&shost->scan_mutex){+.+.}, at: scsi_remove_host+0x21/0x150 [scsi_mod]
+
+which lock already depends on the new lock.
+
+the existing dependency chain (in reverse order) is:
+
+-> #1 (&shost->scan_mutex){+.+.}:
+ __mutex_lock+0xfe/0xc70
+ mutex_lock_nested+0x1b/0x20
+ scsi_remove_device+0x26/0x40 [scsi_mod]
+ sdev_store_delete+0x27/0x30 [scsi_mod]
+ dev_attr_store+0x3e/0x50
+ sysfs_kf_write+0x87/0xa0
+ kernfs_fop_write+0x190/0x230
+ __vfs_write+0xd2/0x3b0
+ vfs_write+0x101/0x270
+ ksys_write+0xab/0x120
+ __x64_sys_write+0x43/0x50
+ do_syscall_64+0x77/0x230
+ entry_SYSCALL_64_after_hwframe+0x49/0xbe
+
+-> #0 (kn->count#202){++++}:
+ lock_acquire+0xd2/0x260
+ __kernfs_remove+0x424/0x4a0
+ kernfs_remove_by_name_ns+0x45/0x90
+ remove_files.isra.1+0x3a/0x90
+ sysfs_remove_group+0x5c/0xc0
+ sysfs_remove_groups+0x39/0x60
+ device_remove_attrs+0x82/0xb0
+ device_del+0x251/0x580
+ __scsi_remove_device+0x19f/0x1d0 [scsi_mod]
+ scsi_forget_host+0x37/0xb0 [scsi_mod]
+ scsi_remove_host+0x9b/0x150 [scsi_mod]
+ sdebug_driver_remove+0x4b/0x150 [scsi_debug]
+ device_release_driver_internal+0x241/0x360
+ device_release_driver+0x12/0x20
+ bus_remove_device+0x1bc/0x290
+ device_del+0x259/0x580
+ device_unregister+0x1a/0x70
+ sdebug_remove_adapter+0x8b/0xf0 [scsi_debug]
+ scsi_debug_exit+0x76/0xe8 [scsi_debug]
+ __x64_sys_delete_module+0x1c1/0x280
+ do_syscall_64+0x77/0x230
+ entry_SYSCALL_64_after_hwframe+0x49/0xbe
+
+other info that might help us debug this:
+
+ Possible unsafe locking scenario:
+
+ CPU0 CPU1
+ ---- ----
+ lock(&shost->scan_mutex);
+ lock(kn->count#202);
+ lock(&shost->scan_mutex);
+ lock(kn->count#202);
+
+ *** DEADLOCK ***
+
+2 locks held by modprobe/6539:
+ #0: 00000000efaf9298 (&dev->mutex){....}, at: device_release_driver_internal+0x68/0x360
+ #1: 00000000a6ec2c69 (&shost->scan_mutex){+.+.}, at: scsi_remove_host+0x21/0x150 [scsi_mod]
+
+stack backtrace:
+CPU: 10 PID: 6539 Comm: modprobe Not tainted 4.18.0-rc2-dbg+ #5
+Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.0.0-prebuilt.qemu-project.org 04/01/2014
+Call Trace:
+ dump_stack+0xa4/0xf5
+ print_circular_bug.isra.34+0x213/0x221
+ __lock_acquire+0x1a7e/0x1b50
+ lock_acquire+0xd2/0x260
+ __kernfs_remove+0x424/0x4a0
+ kernfs_remove_by_name_ns+0x45/0x90
+ remove_files.isra.1+0x3a/0x90
+ sysfs_remove_group+0x5c/0xc0
+ sysfs_remove_groups+0x39/0x60
+ device_remove_attrs+0x82/0xb0
+ device_del+0x251/0x580
+ __scsi_remove_device+0x19f/0x1d0 [scsi_mod]
+ scsi_forget_host+0x37/0xb0 [scsi_mod]
+ scsi_remove_host+0x9b/0x150 [scsi_mod]
+ sdebug_driver_remove+0x4b/0x150 [scsi_debug]
+ device_release_driver_internal+0x241/0x360
+ device_release_driver+0x12/0x20
+ bus_remove_device+0x1bc/0x290
+ device_del+0x259/0x580
+ device_unregister+0x1a/0x70
+ sdebug_remove_adapter+0x8b/0xf0 [scsi_debug]
+ scsi_debug_exit+0x76/0xe8 [scsi_debug]
+ __x64_sys_delete_module+0x1c1/0x280
+ do_syscall_64+0x77/0x230
+ entry_SYSCALL_64_after_hwframe+0x49/0xbe
+
+See also https://www.mail-archive.com/linux-scsi@vger.kernel.org/msg54525.html.
+
+Fixes: ac0ece9174ac ("scsi: use device_remove_file_self() instead of device_schedule_callback()")
+Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
+Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Acked-by: Tejun Heo <tj@kernel.org>
+Cc: Johannes Thumshirn <jthumshirn@suse.de>
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+
+---
+ drivers/scsi/scsi_sysfs.c | 20 ++++++++++++++++++--
+ 1 file changed, 18 insertions(+), 2 deletions(-)
+
+--- a/drivers/scsi/scsi_sysfs.c
++++ b/drivers/scsi/scsi_sysfs.c
+@@ -721,8 +721,24 @@ static ssize_t
+ sdev_store_delete(struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t count)
+ {
+- if (device_remove_file_self(dev, attr))
+- scsi_remove_device(to_scsi_device(dev));
++ struct kernfs_node *kn;
++
++ kn = sysfs_break_active_protection(&dev->kobj, &attr->attr);
++ WARN_ON_ONCE(!kn);
++ /*
++ * Concurrent writes into the "delete" sysfs attribute may trigger
++ * concurrent calls to device_remove_file() and scsi_remove_device().
++ * device_remove_file() handles concurrent removal calls by
++ * serializing these and by ignoring the second and later removal
++ * attempts. Concurrent calls of scsi_remove_device() are
++ * serialized. The second and later calls of scsi_remove_device() are
++ * ignored because the first call of that function changes the device
++ * state into SDEV_DEL.
++ */
++ device_remove_file(dev, attr);
++ scsi_remove_device(to_scsi_device(dev));
++ if (kn)
++ sysfs_unbreak_active_protection(kn);
+ return count;
+ };
+ static DEVICE_ATTR(delete, S_IWUSR, NULL, sdev_store_delete);
--- /dev/null
+From 91b7bdb2c0089cbbb817df6888ab1458c645184e Mon Sep 17 00:00:00 2001
+From: Bart Van Assche <bart.vanassche@wdc.com>
+Date: Fri, 15 Jun 2018 14:41:58 -0700
+Subject: scsi: mpt3sas: Fix _transport_smp_handler() error path
+
+From: Bart Van Assche <bart.vanassche@wdc.com>
+
+commit 91b7bdb2c0089cbbb817df6888ab1458c645184e upstream.
+
+This patch avoids that smatch complains about a double unlock on
+ioc->transport_cmds.mutex.
+
+Fixes: 651a01364994 ("scsi: scsi_transport_sas: switch to bsg-lib for SMP passthrough")
+Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
+Cc: Christoph Hellwig <hch@lst.de>
+Cc: Sathya Prakash <sathya.prakash@broadcom.com>
+Cc: Chaitra P B <chaitra.basappa@broadcom.com>
+Cc: Suganath Prabu Subramani <suganath-prabu.subramani@broadcom.com>
+Cc: stable@vger.kernel.org
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/scsi/mpt3sas/mpt3sas_transport.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/drivers/scsi/mpt3sas/mpt3sas_transport.c
++++ b/drivers/scsi/mpt3sas/mpt3sas_transport.c
+@@ -1936,12 +1936,12 @@ _transport_smp_handler(struct bsg_job *j
+ pr_info(MPT3SAS_FMT "%s: host reset in progress!\n",
+ __func__, ioc->name);
+ rc = -EFAULT;
+- goto out;
++ goto job_done;
+ }
+
+ rc = mutex_lock_interruptible(&ioc->transport_cmds.mutex);
+ if (rc)
+- goto out;
++ goto job_done;
+
+ if (ioc->transport_cmds.status != MPT3_CMD_NOT_USED) {
+ pr_err(MPT3SAS_FMT "%s: transport_cmds in use\n", ioc->name,
+@@ -2066,6 +2066,7 @@ _transport_smp_handler(struct bsg_job *j
+ out:
+ ioc->transport_cmds.status = MPT3_CMD_NOT_USED;
+ mutex_unlock(&ioc->transport_cmds.mutex);
++job_done:
+ bsg_job_done(job, rc, reslen);
+ }
+
--- /dev/null
+From 2afc9166f79b8f6da5f347f48515215ceee4ae37 Mon Sep 17 00:00:00 2001
+From: Bart Van Assche <bart.vanassche@wdc.com>
+Date: Thu, 2 Aug 2018 10:51:40 -0700
+Subject: scsi: sysfs: Introduce sysfs_{un,}break_active_protection()
+
+From: Bart Van Assche <bart.vanassche@wdc.com>
+
+commit 2afc9166f79b8f6da5f347f48515215ceee4ae37 upstream.
+
+Introduce these two functions and export them such that the next patch
+can add calls to these functions from the SCSI core.
+
+Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
+Acked-by: Tejun Heo <tj@kernel.org>
+Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/sysfs/file.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
+ include/linux/sysfs.h | 14 ++++++++++++++
+ 2 files changed, 58 insertions(+)
+
+--- a/fs/sysfs/file.c
++++ b/fs/sysfs/file.c
+@@ -408,6 +408,50 @@ int sysfs_chmod_file(struct kobject *kob
+ EXPORT_SYMBOL_GPL(sysfs_chmod_file);
+
+ /**
++ * sysfs_break_active_protection - break "active" protection
++ * @kobj: The kernel object @attr is associated with.
++ * @attr: The attribute to break the "active" protection for.
++ *
++ * With sysfs, just like kernfs, deletion of an attribute is postponed until
++ * all active .show() and .store() callbacks have finished unless this function
++ * is called. Hence this function is useful in methods that implement self
++ * deletion.
++ */
++struct kernfs_node *sysfs_break_active_protection(struct kobject *kobj,
++ const struct attribute *attr)
++{
++ struct kernfs_node *kn;
++
++ kobject_get(kobj);
++ kn = kernfs_find_and_get(kobj->sd, attr->name);
++ if (kn)
++ kernfs_break_active_protection(kn);
++ return kn;
++}
++EXPORT_SYMBOL_GPL(sysfs_break_active_protection);
++
++/**
++ * sysfs_unbreak_active_protection - restore "active" protection
++ * @kn: Pointer returned by sysfs_break_active_protection().
++ *
++ * Undo the effects of sysfs_break_active_protection(). Since this function
++ * calls kernfs_put() on the kernfs node that corresponds to the 'attr'
++ * argument passed to sysfs_break_active_protection() that attribute may have
++ * been removed between the sysfs_break_active_protection() and
++ * sysfs_unbreak_active_protection() calls, it is not safe to access @kn after
++ * this function has returned.
++ */
++void sysfs_unbreak_active_protection(struct kernfs_node *kn)
++{
++ struct kobject *kobj = kn->parent->priv;
++
++ kernfs_unbreak_active_protection(kn);
++ kernfs_put(kn);
++ kobject_put(kobj);
++}
++EXPORT_SYMBOL_GPL(sysfs_unbreak_active_protection);
++
++/**
+ * sysfs_remove_file_ns - remove an object attribute with a custom ns tag
+ * @kobj: object we're acting for
+ * @attr: attribute descriptor
+--- a/include/linux/sysfs.h
++++ b/include/linux/sysfs.h
+@@ -239,6 +239,9 @@ int __must_check sysfs_create_files(stru
+ const struct attribute **attr);
+ int __must_check sysfs_chmod_file(struct kobject *kobj,
+ const struct attribute *attr, umode_t mode);
++struct kernfs_node *sysfs_break_active_protection(struct kobject *kobj,
++ const struct attribute *attr);
++void sysfs_unbreak_active_protection(struct kernfs_node *kn);
+ void sysfs_remove_file_ns(struct kobject *kobj, const struct attribute *attr,
+ const void *ns);
+ bool sysfs_remove_file_self(struct kobject *kobj, const struct attribute *attr);
+@@ -352,6 +355,17 @@ static inline int sysfs_chmod_file(struc
+ return 0;
+ }
+
++static inline struct kernfs_node *
++sysfs_break_active_protection(struct kobject *kobj,
++ const struct attribute *attr)
++{
++ return NULL;
++}
++
++static inline void sysfs_unbreak_active_protection(struct kernfs_node *kn)
++{
++}
++
+ static inline void sysfs_remove_file_ns(struct kobject *kobj,
+ const struct attribute *attr,
+ const void *ns)
x86-speculation-l1tf-increase-l1tf-memory-limit-for-nehalem.patch
hwmon-nct6775-fix-potential-spectre-v1.patch
x86-entry-64-wipe-kasan-stack-shadow-before-rewind_stack_do_exit.patch
+s390-mm-fix-addressing-exception-after-suspend-resume.patch
+s390-fix-br_r1_trampoline-for-machines-without-exrl.patch
+s390-qdio-reset-old-sbal_state-flags.patch
+s390-numa-move-initial-setup-of-node_to_cpumask_map.patch
+s390-pci-fix-out-of-bounds-access-during-irq-setup.patch
+kprobes-arm-fix-p-uses-in-error-messages.patch
+kprobes-make-list-and-blacklist-root-user-read-only.patch
+mips-correct-the-64-bit-dsp-accumulator-register-size.patch
+mips-always-use-march-arch-not-arch-shortcuts.patch
+mips-change-definition-of-cpu_relax-for-loongson-3.patch
+mips-lib-provide-mips64r6-__multi3-for-gcc-7.patch
+tpm-return-the-actual-size-when-receiving-an-unsupported-command.patch
+scsi-mpt3sas-fix-_transport_smp_handler-error-path.patch
+scsi-sysfs-introduce-sysfs_-un-break_active_protection.patch
+scsi-core-avoid-that-scsi-device-removal-through-sysfs-triggers-a-deadlock.patch
+iscsi-target-fix-session-creation-failure-handling.patch
+clk-rockchip-fix-clk_i2sout-parent-selection-bits-on-rk3399.patch
+pm-clk-signedness-bug-in-of_pm_clk_add_clks.patch
+power-generic-adc-battery-fix-out-of-bounds-write-when-copying-channel-properties.patch
+power-generic-adc-battery-check-for-duplicate-properties-copied-from-iio-channels.patch
+watchdog-mark-watchdog-touch-functions-as-notrace.patch
+cdrom-fix-info-leak-oob-read-in-cdrom_ioctl_drive_status.patch
--- /dev/null
+From 36a11029b07ee30bdc4553274d0efea645ed9d91 Mon Sep 17 00:00:00 2001
+From: Ricardo Schwarzmeier <Ricardo.Schwarzmeier@infineon.com>
+Date: Tue, 26 Jun 2018 17:31:45 +0200
+Subject: tpm: Return the actual size when receiving an unsupported command
+
+From: Ricardo Schwarzmeier <Ricardo.Schwarzmeier@infineon.com>
+
+commit 36a11029b07ee30bdc4553274d0efea645ed9d91 upstream.
+
+The userpace expects to read the number of bytes stated in the header.
+Returning the size of the buffer instead would be unexpected.
+
+Cc: stable@vger.kernel.org
+Fixes: 095531f891e6 ("tpm: return a TPM_RC_COMMAND_CODE response if command is not implemented")
+Signed-off-by: Ricardo Schwarzmeier <Ricardo.Schwarzmeier@infineon.com>
+Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
+Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/char/tpm/tpm-interface.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/char/tpm/tpm-interface.c
++++ b/drivers/char/tpm/tpm-interface.c
+@@ -423,7 +423,7 @@ static ssize_t tpm_try_transmit(struct t
+ header->tag = cpu_to_be16(TPM2_ST_NO_SESSIONS);
+ header->return_code = cpu_to_be32(TPM2_RC_COMMAND_CODE |
+ TSS2_RESMGR_TPM_RC_LAYER);
+- return bufsiz;
++ return sizeof(*header);
+ }
+
+ if (bufsiz > TPM_BUFSIZE)
--- /dev/null
+From cb9d7fd51d9fbb329d182423bd7b92d0f8cb0e01 Mon Sep 17 00:00:00 2001
+From: Vincent Whitchurch <vincent.whitchurch@axis.com>
+Date: Tue, 21 Aug 2018 17:25:07 +0200
+Subject: watchdog: Mark watchdog touch functions as notrace
+
+From: Vincent Whitchurch <vincent.whitchurch@axis.com>
+
+commit cb9d7fd51d9fbb329d182423bd7b92d0f8cb0e01 upstream.
+
+Some architectures need to use stop_machine() to patch functions for
+ftrace, and the assumption is that the stopped CPUs do not make function
+calls to traceable functions when they are in the stopped state.
+
+Commit ce4f06dcbb5d ("stop_machine: Touch_nmi_watchdog() after
+MULTI_STOP_PREPARE") added calls to the watchdog touch functions from
+the stopped CPUs and those functions lack notrace annotations. This
+leads to crashes when enabling/disabling ftrace on ARM kernels built
+with the Thumb-2 instruction set.
+
+Fix it by adding the necessary notrace annotations.
+
+Fixes: ce4f06dcbb5d ("stop_machine: Touch_nmi_watchdog() after MULTI_STOP_PREPARE")
+Signed-off-by: Vincent Whitchurch <vincent.whitchurch@axis.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: oleg@redhat.com
+Cc: tj@kernel.org
+Cc: stable@vger.kernel.org
+Link: https://lkml.kernel.org/r/20180821152507.18313-1-vincent.whitchurch@axis.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/watchdog.c | 4 ++--
+ kernel/watchdog_hld.c | 2 +-
+ kernel/workqueue.c | 2 +-
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+--- a/kernel/watchdog.c
++++ b/kernel/watchdog.c
+@@ -265,7 +265,7 @@ static void __touch_watchdog(void)
+ * entering idle state. This should only be used for scheduler events.
+ * Use touch_softlockup_watchdog() for everything else.
+ */
+-void touch_softlockup_watchdog_sched(void)
++notrace void touch_softlockup_watchdog_sched(void)
+ {
+ /*
+ * Preemption can be enabled. It doesn't matter which CPU's timestamp
+@@ -274,7 +274,7 @@ void touch_softlockup_watchdog_sched(voi
+ raw_cpu_write(watchdog_touch_ts, 0);
+ }
+
+-void touch_softlockup_watchdog(void)
++notrace void touch_softlockup_watchdog(void)
+ {
+ touch_softlockup_watchdog_sched();
+ wq_watchdog_touch(raw_smp_processor_id());
+--- a/kernel/watchdog_hld.c
++++ b/kernel/watchdog_hld.c
+@@ -29,7 +29,7 @@ static struct cpumask dead_events_mask;
+ static unsigned long hardlockup_allcpu_dumped;
+ static atomic_t watchdog_cpus = ATOMIC_INIT(0);
+
+-void arch_touch_nmi_watchdog(void)
++notrace void arch_touch_nmi_watchdog(void)
+ {
+ /*
+ * Using __raw here because some code paths have
+--- a/kernel/workqueue.c
++++ b/kernel/workqueue.c
+@@ -5484,7 +5484,7 @@ static void wq_watchdog_timer_fn(unsigne
+ mod_timer(&wq_watchdog_timer, jiffies + thresh);
+ }
+
+-void wq_watchdog_touch(int cpu)
++notrace void wq_watchdog_touch(int cpu)
+ {
+ if (cpu >= 0)
+ per_cpu(wq_watchdog_touched_cpu, cpu) = jiffies;