All of lore.kernel.org
 help / color / mirror / Atom feed
* [added to the  stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume
@ 2018-03-01 15:19 Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] more bio_map_user_iov() leak fixes Sasha Levin
                   ` (55 more replies)
  0 siblings, 56 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:19 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Leif Liddy, Marcel Holtmann, Sasha Levin

From: Leif Liddy <leif.linux@gmail.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit fd865802c66bc451dc515ed89360f84376ce1a56 ]

There's been numerous reported instances where BTUSB_QCA_ROME
bluetooth controllers stop functioning upon resume from suspend. These
devices seem to be losing power during suspend. Patch will detect a status
change on resume and perform a reset.

Signed-off-by: Leif Liddy <leif.linux@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/bluetooth/btusb.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 32f5b87fe93c..b17bd3fc74cb 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -3207,6 +3207,12 @@ static int btusb_probe(struct usb_interface *intf,
 	if (id->driver_info & BTUSB_QCA_ROME) {
 		data->setup_on_usb = btusb_setup_qca;
 		hdev->set_bdaddr = btusb_set_bdaddr_ath3012;
+
+		/* QCA Rome devices lose their updated firmware over suspend,
+		 * but the USB hub doesn't notice any status change.
+		 * Explicitly request a device reset on resume.
+		 */
+		set_bit(BTUSB_RESET_RESUME, &data->flags);
 	}
 
 	if (id->driver_info & BTUSB_REALTEK)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] more bio_map_user_iov() leak fixes
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
@ 2018-03-01 15:19 ` Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] arm: KVM: Fix VTTBR_BADDR_MASK BUG_ON off-by-one Sasha Levin
                   ` (54 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:19 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Al Viro, Sasha Levin

From: Al Viro <viro@zeniv.linux.org.uk>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 2b04e8f6bbb196cab4b232af0f8d48ff2c7a8058 ]

we need to take care of failure exit as well - pages already
in bio should be dropped by analogue of bio_unmap_pages(),
since their refcounts had been bumped only once per reference
in bio.

Cc: stable@vger.kernel.org
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 block/bio.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/block/bio.c b/block/bio.c
index d9cf77c6a847..f90b2abe2fa7 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -1290,6 +1290,7 @@ struct bio *bio_map_user_iov(struct request_queue *q,
 	int ret, offset;
 	struct iov_iter i;
 	struct iovec iov;
+	struct bio_vec *bvec;
 
 	iov_for_each(iov, i, *iter) {
 		unsigned long uaddr = (unsigned long) iov.iov_base;
@@ -1334,7 +1335,12 @@ struct bio *bio_map_user_iov(struct request_queue *q,
 		ret = get_user_pages_fast(uaddr, local_nr_pages,
 				(iter->type & WRITE) != WRITE,
 				&pages[cur_page]);
-		if (ret < local_nr_pages) {
+		if (unlikely(ret < local_nr_pages)) {
+			for (j = cur_page; j < page_limit; j++) {
+				if (!pages[j])
+					break;
+				put_page(pages[j]);
+			}
 			ret = -EFAULT;
 			goto out_unmap;
 		}
@@ -1396,10 +1402,8 @@ struct bio *bio_map_user_iov(struct request_queue *q,
 	return bio;
 
  out_unmap:
-	for (j = 0; j < nr_pages; j++) {
-		if (!pages[j])
-			break;
-		page_cache_release(pages[j]);
+	bio_for_each_segment_all(bvec, bio, j) {
+		put_page(bvec->bv_page);
 	}
  out:
 	kfree(pages);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] arm: KVM: Fix VTTBR_BADDR_MASK BUG_ON off-by-one
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] more bio_map_user_iov() leak fixes Sasha Levin
@ 2018-03-01 15:19 ` Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] x86/mm: Add INVPCID helpers Sasha Levin
                   ` (53 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:19 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Marc Zyngier, Christoffer Dall, Sasha Levin

From: Marc Zyngier <marc.zyngier@arm.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5553b142be11e794ebc0805950b2e8313f93d718 ]

VTTBR_BADDR_MASK is used to sanity check the size and alignment of the
VTTBR address. It seems to currently be off by one, thereby only
allowing up to 39-bit addresses (instead of 40-bit) and also
insufficiently checking the alignment. This patch fixes it.

This patch is the 32bit pendent of Kristina's arm64 fix, and
she deserves the actual kudos for pinpointing that one.

Fixes: f7ed45be3ba52 ("KVM: ARM: World-switch implementation")
Cc: <stable@vger.kernel.org> # 3.9
Reported-by: Kristina Martsenko <kristina.martsenko@arm.com>
Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/include/asm/kvm_arm.h | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/arch/arm/include/asm/kvm_arm.h b/arch/arm/include/asm/kvm_arm.h
index aacd6668d1a0..d43122f0993d 100644
--- a/arch/arm/include/asm/kvm_arm.h
+++ b/arch/arm/include/asm/kvm_arm.h
@@ -161,8 +161,7 @@
 #else
 #define VTTBR_X		(5 - KVM_T0SZ)
 #endif
-#define VTTBR_BADDR_SHIFT (VTTBR_X - 1)
-#define VTTBR_BADDR_MASK  (((1LLU << (40 - VTTBR_X)) - 1) << VTTBR_BADDR_SHIFT)
+#define VTTBR_BADDR_MASK  (((1LLU << (40 - VTTBR_X)) - 1) << VTTBR_X)
 #define VTTBR_VMID_SHIFT  (48LLU)
 #define VTTBR_VMID_MASK	  (0xffLLU << VTTBR_VMID_SHIFT)
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] arm64: Initialise high_memory global variable earlier
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (2 preceding siblings ...)
  2018-03-01 15:19 ` [added to the stable tree] x86/mm: Add INVPCID helpers Sasha Levin
@ 2018-03-01 15:19 ` Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] x86/mm: Fix INVPCID asm constraint Sasha Levin
                   ` (51 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:19 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Steve Capper, Will Deacon, Sasha Levin

From: Steve Capper <steve.capper@arm.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f24e5834a2c3f6c5f814a417f858226f0a010ade ]

The high_memory global variable is used by
cma_declare_contiguous(.) before it is defined.

We don't notice this as we compute __pa(high_memory - 1), and it looks
like we're processing a VA from the direct linear map.

This problem becomes apparent when we flip the kernel virtual address
space and the linear map is moved to the bottom of the kernel VA space.

This patch moves the initialisation of high_memory before it used.

Cc: <stable@vger.kernel.org>
Fixes: f7426b983a6a ("mm: cma: adjust address limit to avoid hitting low/high memory boundary")
Signed-off-by: Steve Capper <steve.capper@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm64/mm/init.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
index ae8f940152aa..b8ed781807ef 100644
--- a/arch/arm64/mm/init.c
+++ b/arch/arm64/mm/init.c
@@ -177,6 +177,7 @@ void __init arm64_memblock_init(void)
 		arm64_dma_phys_limit = max_zone_dma_phys();
 	else
 		arm64_dma_phys_limit = PHYS_MASK + 1;
+	high_memory = __va(memblock_end_of_DRAM() - 1) + 1;
 	dma_contiguous_reserve(arm64_dma_phys_limit);
 
 	memblock_allow_resize();
@@ -201,7 +202,6 @@ void __init bootmem_init(void)
 	sparse_init();
 	zone_sizes_init(min, max);
 
-	high_memory = __va((max << PAGE_SHIFT) - 1) + 1;
 	max_pfn = max_low_pfn = max;
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] x86/mm: Add INVPCID helpers
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] more bio_map_user_iov() leak fixes Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] arm: KVM: Fix VTTBR_BADDR_MASK BUG_ON off-by-one Sasha Levin
@ 2018-03-01 15:19 ` Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] arm64: Initialise high_memory global variable earlier Sasha Levin
                   ` (52 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:19 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 060a402a1ddb551455ee410de2eadd3349f2801b ]

This adds helpers for each of the four currently-specified INVPCID
modes.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Reviewed-by: Borislav Petkov <bp@suse.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/8a62b23ad686888cee01da134c91409e22064db9.1454096309.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/tlbflush.h | 48 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h
index 7e459b7ee708..995937999e1f 100644
--- a/arch/x86/include/asm/tlbflush.h
+++ b/arch/x86/include/asm/tlbflush.h
@@ -7,6 +7,54 @@
 #include <asm/processor.h>
 #include <asm/special_insns.h>
 
+static inline void __invpcid(unsigned long pcid, unsigned long addr,
+			     unsigned long type)
+{
+	u64 desc[2] = { pcid, addr };
+
+	/*
+	 * The memory clobber is because the whole point is to invalidate
+	 * stale TLB entries and, especially if we're flushing global
+	 * mappings, we don't want the compiler to reorder any subsequent
+	 * memory accesses before the TLB flush.
+	 *
+	 * The hex opcode is invpcid (%ecx), %eax in 32-bit mode and
+	 * invpcid (%rcx), %rax in long mode.
+	 */
+	asm volatile (".byte 0x66, 0x0f, 0x38, 0x82, 0x01"
+		      : : "m" (desc), "a" (type), "c" (desc) : "memory");
+}
+
+#define INVPCID_TYPE_INDIV_ADDR		0
+#define INVPCID_TYPE_SINGLE_CTXT	1
+#define INVPCID_TYPE_ALL_INCL_GLOBAL	2
+#define INVPCID_TYPE_ALL_NON_GLOBAL	3
+
+/* Flush all mappings for a given pcid and addr, not including globals. */
+static inline void invpcid_flush_one(unsigned long pcid,
+				     unsigned long addr)
+{
+	__invpcid(pcid, addr, INVPCID_TYPE_INDIV_ADDR);
+}
+
+/* Flush all mappings for a given PCID, not including globals. */
+static inline void invpcid_flush_single_context(unsigned long pcid)
+{
+	__invpcid(pcid, 0, INVPCID_TYPE_SINGLE_CTXT);
+}
+
+/* Flush all mappings, including globals, for all PCIDs. */
+static inline void invpcid_flush_all(void)
+{
+	__invpcid(0, 0, INVPCID_TYPE_ALL_INCL_GLOBAL);
+}
+
+/* Flush all mappings for all PCIDs except globals. */
+static inline void invpcid_flush_all_nonglobals(void)
+{
+	__invpcid(0, 0, INVPCID_TYPE_ALL_NON_GLOBAL);
+}
+
 #ifdef CONFIG_PARAVIRT
 #include <asm/paravirt.h>
 #else
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] x86/mm: Fix INVPCID asm constraint
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (3 preceding siblings ...)
  2018-03-01 15:19 ` [added to the stable tree] arm64: Initialise high_memory global variable earlier Sasha Levin
@ 2018-03-01 15:19 ` Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] x86/mm: Add a 'noinvpcid' boot option to turn off INVPCID Sasha Levin
                   ` (50 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:19 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Borislav Petkov, Ingo Molnar, Sasha Levin

From: Borislav Petkov <bp@suse.de>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e2c7698cd61f11d4077fdb28148b2d31b82ac848 ]

So we want to specify the dependency on both @pcid and @addr so that the
compiler doesn't reorder accesses to them *before* the TLB flush. But
for that to work, we need to express this properly in the inline asm and
deref the whole desc array, not the pointer to it. See clwb() for an
example.

This fixes the build error on 32-bit:

  arch/x86/include/asm/tlbflush.h: In function ‘__invpcid’:
  arch/x86/include/asm/tlbflush.h:26:18: error: memory input 0 is not directly addressable

which gcc4.7 caught but 5.x didn't. Which is strange. :-\

Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Michael Matz <matz@suse.de>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: linux-mm@kvack.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/tlbflush.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h
index 995937999e1f..ed2317f19ec7 100644
--- a/arch/x86/include/asm/tlbflush.h
+++ b/arch/x86/include/asm/tlbflush.h
@@ -10,7 +10,7 @@
 static inline void __invpcid(unsigned long pcid, unsigned long addr,
 			     unsigned long type)
 {
-	u64 desc[2] = { pcid, addr };
+	struct { u64 d[2]; } desc = { { pcid, addr } };
 
 	/*
 	 * The memory clobber is because the whole point is to invalidate
@@ -22,7 +22,7 @@ static inline void __invpcid(unsigned long pcid, unsigned long addr,
 	 * invpcid (%rcx), %rax in long mode.
 	 */
 	asm volatile (".byte 0x66, 0x0f, 0x38, 0x82, 0x01"
-		      : : "m" (desc), "a" (type), "c" (desc) : "memory");
+		      : : "m" (desc), "a" (type), "c" (&desc) : "memory");
 }
 
 #define INVPCID_TYPE_INDIV_ADDR		0
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] x86/mm: If INVPCID is available, use it to flush global mappings
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (5 preceding siblings ...)
  2018-03-01 15:19 ` [added to the stable tree] x86/mm: Add a 'noinvpcid' boot option to turn off INVPCID Sasha Levin
@ 2018-03-01 15:19 ` Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] mm/mmu_context, sched/core: Fix mmu_context.h assumption Sasha Levin
                   ` (48 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:19 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d8bced79af1db6734f66b42064cc773cada2ce99 ]

On my Skylake laptop, INVPCID function 2 (flush absolutely
everything) takes about 376ns, whereas saving flags, twiddling
CR4.PGE to flush global mappings, and restoring flags takes about
539ns.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Reviewed-by: Borislav Petkov <bp@suse.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/ed0ef62581c0ea9c99b9bf6df726015e96d44743.1454096309.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/tlbflush.h | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h
index ed2317f19ec7..433eeaafe498 100644
--- a/arch/x86/include/asm/tlbflush.h
+++ b/arch/x86/include/asm/tlbflush.h
@@ -152,6 +152,15 @@ static inline void __native_flush_tlb_global(void)
 {
 	unsigned long flags;
 
+	if (static_cpu_has(X86_FEATURE_INVPCID)) {
+		/*
+		 * Using INVPCID is considerably faster than a pair of writes
+		 * to CR4 sandwiched inside an IRQ flag save/restore.
+		 */
+		invpcid_flush_all();
+		return;
+	}
+
 	/*
 	 * Read-modify-write to CR4 - protect it from preemption and
 	 * from interrupts. (Use the raw variant because this code can
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] x86/mm: Add a 'noinvpcid' boot option to turn off INVPCID
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (4 preceding siblings ...)
  2018-03-01 15:19 ` [added to the stable tree] x86/mm: Fix INVPCID asm constraint Sasha Levin
@ 2018-03-01 15:19 ` Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] x86/mm: If INVPCID is available, use it to flush global mappings Sasha Levin
                   ` (49 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:19 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit d12a72b844a49d4162f24cefdab30bed3f86730e ]

This adds a chicken bit to turn off INVPCID in case something goes
wrong.  It's an early_param() because we do TLB flushes before we
parse __setup() parameters.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Reviewed-by: Borislav Petkov <bp@suse.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/f586317ed1bc2b87aee652267e515b90051af385.1454096309.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 Documentation/kernel-parameters.txt |  2 ++
 arch/x86/kernel/cpu/common.c        | 16 ++++++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 08dc303d0d47..ceaab09a279e 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -2435,6 +2435,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
 
 	nointroute	[IA-64]
 
+	noinvpcid	[X86] Disable the INVPCID cpu feature.
+
 	nojitter	[IA-64] Disables jitter checking for ITC timers.
 
 	no-kvmclock	[X86,KVM] Disable paravirtualized KVM clock driver
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index 5732326ec126..90ef802d9d90 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -172,6 +172,22 @@ static int __init x86_xsaves_setup(char *s)
 }
 __setup("noxsaves", x86_xsaves_setup);
 
+static int __init x86_noinvpcid_setup(char *s)
+{
+	/* noinvpcid doesn't accept parameters */
+	if (s)
+		return -EINVAL;
+
+	/* do not emit a message if the feature is not present */
+	if (!boot_cpu_has(X86_FEATURE_INVPCID))
+		return 0;
+
+	setup_clear_cpu_cap(X86_FEATURE_INVPCID);
+	pr_info("noinvpcid: INVPCID feature disabled\n");
+	return 0;
+}
+early_param("noinvpcid", x86_noinvpcid_setup);
+
 #ifdef CONFIG_X86_32
 static int cachesize_override = -1;
 static int disable_x86_serial_nr = 1;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] mm/mmu_context, sched/core: Fix mmu_context.h assumption
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (6 preceding siblings ...)
  2018-03-01 15:19 ` [added to the stable tree] x86/mm: If INVPCID is available, use it to flush global mappings Sasha Levin
@ 2018-03-01 15:19 ` Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] x86/mm: Build arch/x86/mm/tlb.c even on !SMP Sasha Levin
                   ` (47 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:19 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Ingo Molnar, Sasha Levin

From: Ingo Molnar <mingo@kernel.org>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 8efd755ac2fe262d4c8d5c9bbe054bb67dae93da ]

Some architectures (such as Alpha) rely on include/linux/sched.h definitions
in their mmu_context.h files.

So include sched.h before mmu_context.h.

Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 mm/mmu_context.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/mmu_context.c b/mm/mmu_context.c
index f802c2d216a7..6f4d27c5bb32 100644
--- a/mm/mmu_context.c
+++ b/mm/mmu_context.c
@@ -4,9 +4,9 @@
  */
 
 #include <linux/mm.h>
+#include <linux/sched.h>
 #include <linux/mmu_context.h>
 #include <linux/export.h>
-#include <linux/sched.h>
 
 #include <asm/mmu_context.h>
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] sched/core: Add switch_mm_irqs_off() and use it in the scheduler
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (8 preceding siblings ...)
  2018-03-01 15:19 ` [added to the stable tree] x86/mm: Build arch/x86/mm/tlb.c even on !SMP Sasha Levin
@ 2018-03-01 15:19 ` Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] sched/core: Idle_task_exit() shouldn't use switch_mm_irqs_off() Sasha Levin
                   ` (45 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:19 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f98db6013c557c216da5038d9c52045be55cd039 ]

By default, this is the same thing as switch_mm().

x86 will override it as an optimization.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Reviewed-by: Borislav Petkov <bp@suse.de>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/df401df47bdd6be3e389c6f1e3f5310d70e81b2c.1461688545.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 include/linux/mmu_context.h | 7 +++++++
 kernel/sched/core.c         | 6 +++---
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/include/linux/mmu_context.h b/include/linux/mmu_context.h
index 70fffeba7495..a4441784503b 100644
--- a/include/linux/mmu_context.h
+++ b/include/linux/mmu_context.h
@@ -1,9 +1,16 @@
 #ifndef _LINUX_MMU_CONTEXT_H
 #define _LINUX_MMU_CONTEXT_H
 
+#include <asm/mmu_context.h>
+
 struct mm_struct;
 
 void use_mm(struct mm_struct *mm);
 void unuse_mm(struct mm_struct *mm);
 
+/* Architectures that care about IRQ state in switch_mm can override this. */
+#ifndef switch_mm_irqs_off
+# define switch_mm_irqs_off switch_mm
+#endif
+
 #endif
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 8fbedeb5553f..d253618d09c6 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -32,7 +32,7 @@
 #include <linux/init.h>
 #include <linux/uaccess.h>
 #include <linux/highmem.h>
-#include <asm/mmu_context.h>
+#include <linux/mmu_context.h>
 #include <linux/interrupt.h>
 #include <linux/capability.h>
 #include <linux/completion.h>
@@ -2339,7 +2339,7 @@ context_switch(struct rq *rq, struct task_struct *prev,
 		atomic_inc(&oldmm->mm_count);
 		enter_lazy_tlb(oldmm, next);
 	} else
-		switch_mm(oldmm, mm, next);
+		switch_mm_irqs_off(oldmm, mm, next);
 
 	if (!prev->mm) {
 		prev->active_mm = NULL;
@@ -4979,7 +4979,7 @@ void idle_task_exit(void)
 	BUG_ON(cpu_online(smp_processor_id()));
 
 	if (mm != &init_mm) {
-		switch_mm(mm, &init_mm, current);
+		switch_mm_irqs_off(mm, &init_mm, current);
 		finish_arch_post_lock_switch();
 	}
 	mmdrop(mm);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] x86/mm: Build arch/x86/mm/tlb.c even on !SMP
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (7 preceding siblings ...)
  2018-03-01 15:19 ` [added to the stable tree] mm/mmu_context, sched/core: Fix mmu_context.h assumption Sasha Levin
@ 2018-03-01 15:19 ` Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] sched/core: Add switch_mm_irqs_off() and use it in the scheduler Sasha Levin
                   ` (46 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:19 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e1074888c326038340a1ada9129d679e661f2ea6 ]

Currently all of the functions that live in tlb.c are inlined on
!SMP builds.  One can debate whether this is a good idea (in many
respects the code in tlb.c is better than the inlined UP code).

Regardless, I want to add code that needs to be built on UP and SMP
kernels and relates to tlb flushing, so arrange for tlb.c to be
compiled unconditionally.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Reviewed-by: Borislav Petkov <bp@suse.de>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/f0d778f0d828fc46e5d1946bca80f0aaf9abf032.1461688545.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/mm/Makefile | 3 +--
 arch/x86/mm/tlb.c    | 4 ++++
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/arch/x86/mm/Makefile b/arch/x86/mm/Makefile
index a482d105172b..d893640d5c68 100644
--- a/arch/x86/mm/Makefile
+++ b/arch/x86/mm/Makefile
@@ -1,5 +1,5 @@
 obj-y	:=  init.o init_$(BITS).o fault.o ioremap.o extable.o pageattr.o mmap.o \
-	    pat.o pgtable.o physaddr.o gup.o setup_nx.o
+	    pat.o pgtable.o physaddr.o gup.o setup_nx.o tlb.o
 
 # Make sure __phys_addr has no stackprotector
 nostackp := $(call cc-option, -fno-stack-protector)
@@ -9,7 +9,6 @@ CFLAGS_setup_nx.o		:= $(nostackp)
 CFLAGS_fault.o := -I$(src)/../include/asm/trace
 
 obj-$(CONFIG_X86_PAT)		+= pat_rbtree.o
-obj-$(CONFIG_SMP)		+= tlb.o
 
 obj-$(CONFIG_X86_32)		+= pgtable_32.o iomap_32.o
 
diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
index 061e0114005e..a1aa5f59e3ad 100644
--- a/arch/x86/mm/tlb.c
+++ b/arch/x86/mm/tlb.c
@@ -28,6 +28,8 @@
  *	Implement flush IPI by CALL_FUNCTION_VECTOR, Alex Shi
  */
 
+#ifdef CONFIG_SMP
+
 struct flush_tlb_info {
 	struct mm_struct *flush_mm;
 	unsigned long flush_start;
@@ -346,3 +348,5 @@ static int __init create_tlb_single_page_flush_ceiling(void)
 	return 0;
 }
 late_initcall(create_tlb_single_page_flush_ceiling);
+
+#endif /* CONFIG_SMP */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] sched/core: Idle_task_exit() shouldn't use switch_mm_irqs_off()
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (9 preceding siblings ...)
  2018-03-01 15:19 ` [added to the stable tree] sched/core: Add switch_mm_irqs_off() and use it in the scheduler Sasha Levin
@ 2018-03-01 15:19 ` Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] ARM: Hide finish_arch_post_lock_switch() from modules Sasha Levin
                   ` (44 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:19 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Andy Lutomirski, Ingo Molnar, Sasha Levin

From: Andy Lutomirski <luto@kernel.org>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 252d2a4117bc181b287eeddf848863788da733ae ]

idle_task_exit() can be called with IRQs on x86 on and therefore
should use switch_mm(), not switch_mm_irqs_off().

This doesn't seem to cause any problems right now, but it will
confuse my upcoming TLB flush changes.  Nonetheless, I think it
should be backported because it's trivial.  There won't be any
meaningful performance impact because idle_task_exit() is only
used when offlining a CPU.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@suse.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: stable@vger.kernel.org
Fixes: f98db6013c55 ("sched/core: Add switch_mm_irqs_off() and use it in the scheduler")
Link: http://lkml.kernel.org/r/ca3d1a9fa93a0b49f5a8ff729eda3640fb6abdf9.1497034141.git.luto@kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 kernel/sched/core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index d253618d09c6..9c905bd94ff0 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -4979,7 +4979,7 @@ void idle_task_exit(void)
 	BUG_ON(cpu_online(smp_processor_id()));
 
 	if (mm != &init_mm) {
-		switch_mm_irqs_off(mm, &init_mm, current);
+		switch_mm(mm, &init_mm, current);
 		finish_arch_post_lock_switch();
 	}
 	mmdrop(mm);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] ARM: Hide finish_arch_post_lock_switch() from modules
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (10 preceding siblings ...)
  2018-03-01 15:19 ` [added to the stable tree] sched/core: Idle_task_exit() shouldn't use switch_mm_irqs_off() Sasha Levin
@ 2018-03-01 15:19 ` Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] x86/irq: Do not substract irq_tlb_count from irq_call_count Sasha Levin
                   ` (43 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:19 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Steven Rostedt, Arnd Bergmann, Ingo Molnar, Sasha Levin

From: Steven Rostedt <rostedt@goodmis.org>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit ef0491ea17f8019821c7e9c8e801184ecf17f85a ]

The introduction of switch_mm_irqs_off() brought back an old bug
regarding the use of preempt_enable_no_resched:

As part of:

  62b94a08da1b ("sched/preempt: Take away preempt_enable_no_resched() from modules")

the definition of preempt_enable_no_resched() is only available in
built-in code, not in loadable modules, so we can't generally use
it from header files.

However, the ARM version of finish_arch_post_lock_switch()
calls preempt_enable_no_resched() and is defined as a static
inline function in asm/mmu_context.h. This in turn means we cannot
include asm/mmu_context.h from modules.

With today's tip tree, asm/mmu_context.h gets included from
linux/mmu_context.h, which is normally the exact pattern one would
expect, but unfortunately, linux/mmu_context.h can be included from
the vhost driver that is a loadable module, now causing this compile
time error with modular configs:

  In file included from ../include/linux/mmu_context.h:4:0,
                   from ../drivers/vhost/vhost.c:18:
  ../arch/arm/include/asm/mmu_context.h: In function 'finish_arch_post_lock_switch':
  ../arch/arm/include/asm/mmu_context.h:88:3: error: implicit declaration of function 'preempt_enable_no_resched' [-Werror=implicit-function-declaration]
     preempt_enable_no_resched();

Andy already tried to fix the bug by including linux/preempt.h
from asm/mmu_context.h, but that didn't help. Arnd suggested reordering
the header files, which wasn't popular, so let's use this
workaround instead:

The finish_arch_post_lock_switch() definition is now also hidden
inside of #ifdef MODULE, so we don't see anything referencing
preempt_enable_no_resched() from a header file. I've built a
few hundred randconfig kernels with this, and did not see any
new problems.

Tested-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Russell King - ARM Linux <linux@armlinux.org.uk>
Cc: Stephane Eranian <eranian@google.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Vince Weaver <vincent.weaver@maine.edu>
Cc: linux-arm-kernel@lists.infradead.org
Fixes: f98db6013c55 ("sched/core: Add switch_mm_irqs_off() and use it in the scheduler")
Link: http://lkml.kernel.org/r/1463146234-161304-1-git-send-email-arnd@arndb.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/include/asm/mmu_context.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/arm/include/asm/mmu_context.h b/arch/arm/include/asm/mmu_context.h
index 9b32f76bb0dd..10f662498eb7 100644
--- a/arch/arm/include/asm/mmu_context.h
+++ b/arch/arm/include/asm/mmu_context.h
@@ -61,6 +61,7 @@ static inline void check_and_switch_context(struct mm_struct *mm,
 		cpu_switch_mm(mm->pgd, mm);
 }
 
+#ifndef MODULE
 #define finish_arch_post_lock_switch \
 	finish_arch_post_lock_switch
 static inline void finish_arch_post_lock_switch(void)
@@ -82,6 +83,7 @@ static inline void finish_arch_post_lock_switch(void)
 		preempt_enable_no_resched();
 	}
 }
+#endif /* !MODULE */
 
 #endif	/* CONFIG_MMU */
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] x86/irq: Do not substract irq_tlb_count from irq_call_count
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (11 preceding siblings ...)
  2018-03-01 15:19 ` [added to the stable tree] ARM: Hide finish_arch_post_lock_switch() from modules Sasha Levin
@ 2018-03-01 15:19 ` Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] ALSA: hda - add support for docking station for HP 820 G2 Sasha Levin
                   ` (42 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:19 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Aaron Lu, Ingo Molnar, Sasha Levin

From: Aaron Lu <aaron.lu@intel.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 82ba4faca1bffad429f15c90c980ffd010366c25 ]

Since commit:

  52aec3308db8 ("x86/tlb: replace INVALIDATE_TLB_VECTOR by CALL_FUNCTION_VECTOR")

the TLB remote shootdown is done through call function vector. That
commit didn't take care of irq_tlb_count, which a later commit:

  fd0f5869724f ("x86: Distinguish TLB shootdown interrupts from other functions call interrupts")

... tried to fix.

The fix assumes every increase of irq_tlb_count has a corresponding
increase of irq_call_count. So the irq_call_count is always bigger than
irq_tlb_count and we could substract irq_tlb_count from irq_call_count.

Unfortunately this is not true for the smp_call_function_single() case.
The IPI is only sent if the target CPU's call_single_queue is empty when
adding a csd into it in generic_exec_single. That means if two threads
are both adding flush tlb csds to the same CPU's call_single_queue, only
one IPI is sent. In other words, the irq_call_count is incremented by 1
but irq_tlb_count is incremented by 2. Over time, irq_tlb_count will be
bigger than irq_call_count and the substract will produce a very large
irq_call_count value due to overflow.

Considering that:

  1) it's not worth to send more IPIs for the sake of accurate counting of
     irq_call_count in generic_exec_single();

  2) it's not easy to tell if the call function interrupt is for TLB
     shootdown in __smp_call_function_single_interrupt().

Not to exclude TLB shootdown from call function count seems to be the
simplest fix and this patch just does that.

This bug was found by LKP's cyclic performance regression tracking recently
with the vm-scalability test suite. I have bisected to commit:

  3dec0ba0be6a ("mm/rmap: share the i_mmap_rwsem")

This commit didn't do anything wrong but revealed the irq_call_count
problem. IIUC, the commit makes rwc->remap_one in rmap_walk_file
concurrent with multiple threads.  When remap_one is try_to_unmap_one(),
then multiple threads could queue flush TLB to the same CPU but only
one IPI will be sent.

Since the commit was added in Linux v3.19, the counting problem only
shows up from v3.19 onwards.

Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Cc: Alex Shi <alex.shi@linaro.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Davidlohr Bueso <dave@stgolabs.net>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Huang Ying <ying.huang@intel.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tomoki Sekiyama <tomoki.sekiyama.qu@hitachi.com>
Link: http://lkml.kernel.org/r/20160811074430.GA18163@aaronlu.sh.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/include/asm/hardirq.h | 4 ----
 arch/x86/kernel/irq.c          | 3 +--
 2 files changed, 1 insertion(+), 6 deletions(-)

diff --git a/arch/x86/include/asm/hardirq.h b/arch/x86/include/asm/hardirq.h
index 0f5fb6b6567e..ebaf64d0a785 100644
--- a/arch/x86/include/asm/hardirq.h
+++ b/arch/x86/include/asm/hardirq.h
@@ -21,10 +21,6 @@ typedef struct {
 #ifdef CONFIG_SMP
 	unsigned int irq_resched_count;
 	unsigned int irq_call_count;
-	/*
-	 * irq_tlb_count is double-counted in irq_call_count, so it must be
-	 * subtracted from irq_call_count when displaying irq_call_count
-	 */
 	unsigned int irq_tlb_count;
 #endif
 #ifdef CONFIG_X86_THERMAL_VECTOR
diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c
index e5952c225532..b6460c5a9cab 100644
--- a/arch/x86/kernel/irq.c
+++ b/arch/x86/kernel/irq.c
@@ -96,8 +96,7 @@ int arch_show_interrupts(struct seq_file *p, int prec)
 	seq_puts(p, "  Rescheduling interrupts\n");
 	seq_printf(p, "%*s: ", prec, "CAL");
 	for_each_online_cpu(j)
-		seq_printf(p, "%10u ", irq_stats(j)->irq_call_count -
-					irq_stats(j)->irq_tlb_count);
+		seq_printf(p, "%10u ", irq_stats(j)->irq_call_count);
 	seq_puts(p, "  Function call interrupts\n");
 	seq_printf(p, "%*s: ", prec, "TLB");
 	for_each_online_cpu(j)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] ALSA: hda - add support for docking station for HP 820 G2
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (12 preceding siblings ...)
  2018-03-01 15:19 ` [added to the stable tree] x86/irq: Do not substract irq_tlb_count from irq_call_count Sasha Levin
@ 2018-03-01 15:19 ` Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] arm: kprobes: Fix the return address of multiple kretprobes Sasha Levin
                   ` (41 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:19 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jaroslav Kysela, Takashi Iwai, Sasha Levin

From: Jaroslav Kysela <perex@perex.cz>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 04d5466a976b096364a39a63ac264c1b3a5f8fa1 ]

This tested patch adds missing initialization for Line-In/Out PINs for
the docking station for HP 820 G2.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 sound/pci/hda/patch_realtek.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 75c4e14f4156..f246bd0426ee 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -4732,6 +4732,7 @@ enum {
 	ALC286_FIXUP_HP_GPIO_LED,
 	ALC280_FIXUP_HP_GPIO2_MIC_HOTKEY,
 	ALC280_FIXUP_HP_DOCK_PINS,
+	ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED,
 	ALC280_FIXUP_HP_9480M,
 	ALC288_FIXUP_DELL_HEADSET_MODE,
 	ALC288_FIXUP_DELL1_MIC_NO_PRESENCE,
@@ -5270,6 +5271,16 @@ static const struct hda_fixup alc269_fixups[] = {
 		.chained = true,
 		.chain_id = ALC280_FIXUP_HP_GPIO4
 	},
+	[ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED] = {
+		.type = HDA_FIXUP_PINS,
+		.v.pins = (const struct hda_pintbl[]) {
+			{ 0x1b, 0x21011020 }, /* line-out */
+			{ 0x18, 0x2181103f }, /* line-in */
+			{ },
+		},
+		.chained = true,
+		.chain_id = ALC269_FIXUP_HP_GPIO_MIC1_LED
+	},
 	[ALC280_FIXUP_HP_9480M] = {
 		.type = HDA_FIXUP_FUNC,
 		.v.func = alc280_fixup_hp_9480m,
@@ -5522,7 +5533,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
 	SND_PCI_QUIRK(0x103c, 0x2256, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
 	SND_PCI_QUIRK(0x103c, 0x2257, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
 	SND_PCI_QUIRK(0x103c, 0x2259, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
-	SND_PCI_QUIRK(0x103c, 0x225a, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
+	SND_PCI_QUIRK(0x103c, 0x225a, "HP", ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED),
 	SND_PCI_QUIRK(0x103c, 0x2260, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
 	SND_PCI_QUIRK(0x103c, 0x2263, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
 	SND_PCI_QUIRK(0x103c, 0x2264, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
@@ -5684,6 +5695,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
 	{.id = ALC269_FIXUP_HEADSET_MIC, .name = "headset-mic"},
 	{.id = ALC269_FIXUP_LENOVO_DOCK, .name = "lenovo-dock"},
 	{.id = ALC269_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"},
+	{.id = ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED, .name = "hp-dock-gpio-mic1-led"},
 	{.id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "dell-headset-multi"},
 	{.id = ALC269_FIXUP_DELL2_MIC_NO_PRESENCE, .name = "dell-headset-dock"},
 	{.id = ALC283_FIXUP_CHROME_BOOK, .name = "alc283-dac-wcaps"},
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] arm: kprobes: Fix the return address of multiple kretprobes
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (13 preceding siblings ...)
  2018-03-01 15:19 ` [added to the stable tree] ALSA: hda - add support for docking station for HP 820 G2 Sasha Levin
@ 2018-03-01 15:19 ` Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] arm: kprobes: Align stack to 8-bytes in test code Sasha Levin
                   ` (40 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:19 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Masami Hiramatsu, Jon Medhurst, Sasha Levin

From: Masami Hiramatsu <mhiramat@kernel.org>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 06553175f585b52509c7df37d6f4a50aacb7b211 ]

This is arm port of commit 737480a0d525 ("kprobes/x86:
Fix the return address of multiple kretprobes").

Fix the return address of subsequent kretprobes when multiple
kretprobes are set on the same function.

For example:

  # cd /sys/kernel/debug/tracing
  # echo "r:event1 sys_symlink" > kprobe_events
  # echo "r:event2 sys_symlink" >> kprobe_events
  # echo 1 > events/kprobes/enable
  # ln -s /tmp/foo /tmp/bar

 (without this patch)

  # cat trace | grep -v ^#
              ln-82    [000] dn.2    68.446525: event1: (kretprobe_trampoline+0x0/0x18 <- SyS_symlink)
              ln-82    [000] dn.2    68.447831: event2: (ret_fast_syscall+0x0/0x1c <- SyS_symlink)

 (with this patch)

  # cat trace | grep -v ^#
              ln-81    [000] dn.1    39.463469: event1: (ret_fast_syscall+0x0/0x1c <- SyS_symlink)
              ln-81    [000] dn.1    39.464701: event2: (ret_fast_syscall+0x0/0x1c <- SyS_symlink)

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Cc: KUMANO Syuhei <kumano.prog@gmail.com>
Signed-off-by: Jon Medhurst <tixy@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/probes/kprobes/core.c | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/arch/arm/probes/kprobes/core.c b/arch/arm/probes/kprobes/core.c
index a4ec240ee7ba..3eb018fa1a1f 100644
--- a/arch/arm/probes/kprobes/core.c
+++ b/arch/arm/probes/kprobes/core.c
@@ -433,6 +433,7 @@ static __used __kprobes void *trampoline_handler(struct pt_regs *regs)
 	struct hlist_node *tmp;
 	unsigned long flags, orig_ret_address = 0;
 	unsigned long trampoline_address = (unsigned long)&kretprobe_trampoline;
+	kprobe_opcode_t *correct_ret_addr = NULL;
 
 	INIT_HLIST_HEAD(&empty_rp);
 	kretprobe_hash_lock(current, &head, &flags);
@@ -455,14 +456,34 @@ static __used __kprobes void *trampoline_handler(struct pt_regs *regs)
 			/* another task is sharing our hash bucket */
 			continue;
 
+		orig_ret_address = (unsigned long)ri->ret_addr;
+
+		if (orig_ret_address != trampoline_address)
+			/*
+			 * This is the real return address. Any other
+			 * instances associated with this task are for
+			 * other calls deeper on the call stack
+			 */
+			break;
+	}
+
+	kretprobe_assert(ri, orig_ret_address, trampoline_address);
+
+	correct_ret_addr = ri->ret_addr;
+	hlist_for_each_entry_safe(ri, tmp, head, hlist) {
+		if (ri->task != current)
+			/* another task is sharing our hash bucket */
+			continue;
+
+		orig_ret_address = (unsigned long)ri->ret_addr;
 		if (ri->rp && ri->rp->handler) {
 			__this_cpu_write(current_kprobe, &ri->rp->kp);
 			get_kprobe_ctlblk()->kprobe_status = KPROBE_HIT_ACTIVE;
+			ri->ret_addr = correct_ret_addr;
 			ri->rp->handler(ri, regs);
 			__this_cpu_write(current_kprobe, NULL);
 		}
 
-		orig_ret_address = (unsigned long)ri->ret_addr;
 		recycle_rp_inst(ri, &empty_rp);
 
 		if (orig_ret_address != trampoline_address)
@@ -474,7 +495,6 @@ static __used __kprobes void *trampoline_handler(struct pt_regs *regs)
 			break;
 	}
 
-	kretprobe_assert(ri, orig_ret_address, trampoline_address);
 	kretprobe_hash_unlock(current, &flags);
 
 	hlist_for_each_entry_safe(ri, tmp, &empty_rp, hlist) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] cpuidle: Validate cpu_dev in cpuidle_add_sysfs()
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (15 preceding siblings ...)
  2018-03-01 15:19 ` [added to the stable tree] arm: kprobes: Align stack to 8-bytes in test code Sasha Levin
@ 2018-03-01 15:19 ` Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] r8152: fix the list rx_done may be used without initialization Sasha Levin
                   ` (38 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:19 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Vaidyanathan Srinivasan, Rafael J . Wysocki, Sasha Levin

From: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit ad0a45fd9c14feebd000b6e84189d0edff265170 ]

If a given cpu is not in cpu_present and cpu hotplug
is disabled, arch can skip setting up the cpu_dev.

Arch cpuidle driver should pass correct cpu mask
for registration, but failing to do so by the driver
causes error to propagate and crash like this:

[   30.076045] Unable to handle kernel paging request for data at address 0x00000048
[   30.076100] Faulting instruction address: 0xc0000000007b2f30
cpu 0x4d: Vector: 300 (Data Access) at [c000003feb18b670]
    pc: c0000000007b2f30: kobject_get+0x20/0x70
    lr: c0000000007b3c94: kobject_add_internal+0x54/0x3f0
    sp: c000003feb18b8f0
   msr: 9000000000009033
   dar: 48
 dsisr: 40000000
  current = 0xc000003fd2ed8300
  paca    = 0xc00000000fbab500   softe: 0        irq_happened: 0x01
    pid   = 1, comm = swapper/0
Linux version 4.11.0-rc2-svaidy+ (sv@sagarika) (gcc version 6.2.0
20161005 (Ubuntu 6.2.0-5ubuntu12) ) #10 SMP Sun Mar 19 00:08:09 IST 2017
enter ? for help
[c000003feb18b960] c0000000007b3c94 kobject_add_internal+0x54/0x3f0
[c000003feb18b9f0] c0000000007b43a4 kobject_init_and_add+0x64/0xa0
[c000003feb18ba70] c000000000e284f4 cpuidle_add_sysfs+0xb4/0x130
[c000003feb18baf0] c000000000e26038 cpuidle_register_device+0x118/0x1c0
[c000003feb18bb30] c000000000e26c48 cpuidle_register+0x78/0x120
[c000003feb18bbc0] c00000000168fd9c powernv_processor_idle_init+0x110/0x1c4
[c000003feb18bc40] c00000000000cff8 do_one_initcall+0x68/0x1d0
[c000003feb18bd00] c0000000016242f4 kernel_init_freeable+0x280/0x360
[c000003feb18bdc0] c00000000000d864 kernel_init+0x24/0x160
[c000003feb18be30] c00000000000b4e8 ret_from_kernel_thread+0x5c/0x74

Validating cpu_dev fixes the crash and reports correct error message like:

[   30.163506] Failed to register cpuidle device for cpu136
[   30.173329] Registration of powernv driver failed.

Signed-off-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
[ rjw: Comment massage ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/cpuidle/sysfs.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/cpuidle/sysfs.c b/drivers/cpuidle/sysfs.c
index 832a2c3f01ff..9e98a5fbbc1d 100644
--- a/drivers/cpuidle/sysfs.c
+++ b/drivers/cpuidle/sysfs.c
@@ -613,6 +613,18 @@ int cpuidle_add_sysfs(struct cpuidle_device *dev)
 	struct device *cpu_dev = get_cpu_device((unsigned long)dev->cpu);
 	int error;
 
+	/*
+	 * Return if cpu_device is not setup for this CPU.
+	 *
+	 * This could happen if the arch did not set up cpu_device
+	 * since this CPU is not in cpu_present mask and the
+	 * driver did not send a correct CPU mask during registration.
+	 * Without this check we would end up passing bogus
+	 * value for &cpu_dev->kobj in kobject_init_and_add()
+	 */
+	if (!cpu_dev)
+		return -ENODEV;
+
 	kdev = kzalloc(sizeof(*kdev), GFP_KERNEL);
 	if (!kdev)
 		return -ENOMEM;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] arm: kprobes: Align stack to 8-bytes in test code
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (14 preceding siblings ...)
  2018-03-01 15:19 ` [added to the stable tree] arm: kprobes: Fix the return address of multiple kretprobes Sasha Levin
@ 2018-03-01 15:19 ` Sasha Levin
  2018-03-01 15:19 ` [added to the stable tree] cpuidle: Validate cpu_dev in cpuidle_add_sysfs() Sasha Levin
                   ` (39 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:19 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jon Medhurst, Sasha Levin

From: Jon Medhurst <tixy@linaro.org>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 974310d047f3c7788a51d10c8d255eebdb1fa857 ]

kprobes test cases need to have a stack that is aligned to an 8-byte
boundary because they call other functions (and the ARM ABI mandates
that alignment) and because test cases include 64-bit accesses to the
stack. Unfortunately, GCC doesn't ensure this alignment for inline
assembler and for the code in question seems to always misalign it by
pushing just the LR register onto the stack. We therefore need to
explicitly perform stack alignment at the start of each test case.

Without this fix, some test cases will generate alignment faults on
systems where alignment is enforced. Even if the kernel is configured to
handle these faults in software, triggering them is ugly. It also
exposes limitations in the fault handling code which doesn't cope with
writes to the stack. E.g. when handling this instruction

   strd r6, [sp, #-64]!

the fault handling code will write to a stack location below the SP
value at the point the fault occurred, which coincides with where the
exception handler has pushed the saved register context. This results in
corruption of those registers.

Signed-off-by: Jon Medhurst <tixy@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/probes/kprobes/test-core.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/arch/arm/probes/kprobes/test-core.c b/arch/arm/probes/kprobes/test-core.c
index 9775de22e2ff..a48354de1aa1 100644
--- a/arch/arm/probes/kprobes/test-core.c
+++ b/arch/arm/probes/kprobes/test-core.c
@@ -976,7 +976,10 @@ static void coverage_end(void)
 void __naked __kprobes_test_case_start(void)
 {
 	__asm__ __volatile__ (
-		"stmdb	sp!, {r4-r11}				\n\t"
+		"mov	r2, sp					\n\t"
+		"bic	r3, r2, #7				\n\t"
+		"mov	sp, r3					\n\t"
+		"stmdb	sp!, {r2-r11}				\n\t"
 		"sub	sp, sp, #"__stringify(TEST_MEMORY_SIZE)"\n\t"
 		"bic	r0, lr, #1  @ r0 = inline data		\n\t"
 		"mov	r1, sp					\n\t"
@@ -996,7 +999,8 @@ void __naked __kprobes_test_case_end_32(void)
 		"movne	pc, r0					\n\t"
 		"mov	r0, r4					\n\t"
 		"add	sp, sp, #"__stringify(TEST_MEMORY_SIZE)"\n\t"
-		"ldmia	sp!, {r4-r11}				\n\t"
+		"ldmia	sp!, {r2-r11}				\n\t"
+		"mov	sp, r2					\n\t"
 		"mov	pc, r0					\n\t"
 	);
 }
@@ -1012,7 +1016,8 @@ void __naked __kprobes_test_case_end_16(void)
 		"bxne	r0					\n\t"
 		"mov	r0, r4					\n\t"
 		"add	sp, sp, #"__stringify(TEST_MEMORY_SIZE)"\n\t"
-		"ldmia	sp!, {r4-r11}				\n\t"
+		"ldmia	sp!, {r2-r11}				\n\t"
+		"mov	sp, r2					\n\t"
 		"bx	r0					\n\t"
 	);
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] r8152: fix the list rx_done may be used without initialization
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (16 preceding siblings ...)
  2018-03-01 15:19 ` [added to the stable tree] cpuidle: Validate cpu_dev in cpuidle_add_sysfs() Sasha Levin
@ 2018-03-01 15:19 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] crypto: deadlock between crypto_alg_sem/rtnl_mutex/genl_mutex Sasha Levin
                   ` (37 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:19 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: hayeswang, David S . Miller, Sasha Levin

From: hayeswang <hayeswang@realtek.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 98d068ab52b4b11d403995ed14154660797e7136 ]

The list rx_done would be initialized when the linking on occurs.
Therefore, if a napi is scheduled without any linking on before,
the following kernel panic would happen.

	BUG: unable to handle kernel NULL pointer dereference at 000000000000008
	IP: [<ffffffffc085efde>] r8152_poll+0xe1e/0x1210 [r8152]
	PGD 0
	Oops: 0002 [#1] SMP

Signed-off-by: Hayes Wang <hayeswang@realtek.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/usb/r8152.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index e387af61e0d3..c0fb8a051768 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -1263,6 +1263,7 @@ static int alloc_all_mem(struct r8152 *tp)
 	spin_lock_init(&tp->rx_lock);
 	spin_lock_init(&tp->tx_lock);
 	INIT_LIST_HEAD(&tp->tx_free);
+	INIT_LIST_HEAD(&tp->rx_done);
 	skb_queue_head_init(&tp->tx_queue);
 	skb_queue_head_init(&tp->rx_queue);
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] crypto: deadlock between crypto_alg_sem/rtnl_mutex/genl_mutex
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (17 preceding siblings ...)
  2018-03-01 15:19 ` [added to the stable tree] r8152: fix the list rx_done may be used without initialization Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] usb: gadget: f_uvc: Sanity check wMaxPacketSize for SuperSpeed Sasha Levin
                   ` (36 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Herbert Xu, David S . Miller, Sasha Levin

From: Herbert Xu <herbert@gondor.apana.org.au>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 8a0f5ccfb33b0b8b51de65b7b3bf342ba10b4fb6 ]

On Tue, Mar 14, 2017 at 10:44:10AM +0100, Dmitry Vyukov wrote:
>
> Yes, please.
> Disregarding some reports is not a good way long term.

Please try this patch.

---8<---
Subject: netlink: Annotate nlk cb_mutex by protocol

Currently all occurences of nlk->cb_mutex are annotated by lockdep
as a single class.  This causes a false lcokdep cycle involving
genl and crypto_user.

This patch fixes it by dividing cb_mutex into individual classes
based on the netlink protocol.  As genl and crypto_user do not
use the same netlink protocol this breaks the false dependency
loop.

Reported-by: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/netlink/af_netlink.c | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index a5815be7c81c..8daf2e44595a 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -94,6 +94,44 @@ EXPORT_SYMBOL_GPL(nl_table);
 
 static DECLARE_WAIT_QUEUE_HEAD(nl_table_wait);
 
+static struct lock_class_key nlk_cb_mutex_keys[MAX_LINKS];
+
+static const char *const nlk_cb_mutex_key_strings[MAX_LINKS + 1] = {
+	"nlk_cb_mutex-ROUTE",
+	"nlk_cb_mutex-1",
+	"nlk_cb_mutex-USERSOCK",
+	"nlk_cb_mutex-FIREWALL",
+	"nlk_cb_mutex-SOCK_DIAG",
+	"nlk_cb_mutex-NFLOG",
+	"nlk_cb_mutex-XFRM",
+	"nlk_cb_mutex-SELINUX",
+	"nlk_cb_mutex-ISCSI",
+	"nlk_cb_mutex-AUDIT",
+	"nlk_cb_mutex-FIB_LOOKUP",
+	"nlk_cb_mutex-CONNECTOR",
+	"nlk_cb_mutex-NETFILTER",
+	"nlk_cb_mutex-IP6_FW",
+	"nlk_cb_mutex-DNRTMSG",
+	"nlk_cb_mutex-KOBJECT_UEVENT",
+	"nlk_cb_mutex-GENERIC",
+	"nlk_cb_mutex-17",
+	"nlk_cb_mutex-SCSITRANSPORT",
+	"nlk_cb_mutex-ECRYPTFS",
+	"nlk_cb_mutex-RDMA",
+	"nlk_cb_mutex-CRYPTO",
+	"nlk_cb_mutex-SMC",
+	"nlk_cb_mutex-23",
+	"nlk_cb_mutex-24",
+	"nlk_cb_mutex-25",
+	"nlk_cb_mutex-26",
+	"nlk_cb_mutex-27",
+	"nlk_cb_mutex-28",
+	"nlk_cb_mutex-29",
+	"nlk_cb_mutex-30",
+	"nlk_cb_mutex-31",
+	"nlk_cb_mutex-MAX_LINKS"
+};
+
 static int netlink_dump(struct sock *sk);
 static void netlink_skb_destructor(struct sk_buff *skb);
 
@@ -1177,6 +1215,9 @@ static int __netlink_create(struct net *net, struct socket *sock,
 	} else {
 		nlk->cb_mutex = &nlk->cb_def_mutex;
 		mutex_init(nlk->cb_mutex);
+		lockdep_set_class_and_name(nlk->cb_mutex,
+					   nlk_cb_mutex_keys + protocol,
+					   nlk_cb_mutex_key_strings[protocol]);
 	}
 	init_waitqueue_head(&nlk->wait);
 #ifdef CONFIG_NETLINK_MMAP
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] net: qmi_wwan: Add USB IDs for MDM6600 modem on Motorola Droid 4
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (19 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] usb: gadget: f_uvc: Sanity check wMaxPacketSize for SuperSpeed Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] usb: gadget: udc: remove pointer dereference after free Sasha Levin
                   ` (34 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Tony Lindgren, David S . Miller, Sasha Levin

From: Tony Lindgren <tony@atomide.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 4071898bf0f4d79ff353db327af2a15123272548 ]

This gets qmicli working with the MDM6600 modem.

Cc: Bjørn Mork <bjorn@mork.no>
Reviewed-by: Sebastian Reichel <sre@kernel.org>
Tested-by: Sebastian Reichel <sre@kernel.org>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Acked-by: Bjørn Mork <bjorn@mork.no>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/usb/qmi_wwan.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index 6cf881ce4d4e..ca7f16ccbcd3 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -464,6 +464,10 @@ static const struct usb_device_id products[] = {
 		USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, USB_CLASS_VENDOR_SPEC, 0x01, 0x69),
 		.driver_info        = (unsigned long)&qmi_wwan_info,
 	},
+	{	/* Motorola Mapphone devices with MDM6600 */
+		USB_VENDOR_AND_INTERFACE_INFO(0x22b8, USB_CLASS_VENDOR_SPEC, 0xfb, 0xff),
+		.driver_info        = (unsigned long)&qmi_wwan_info,
+	},
 
 	/* 2. Combined interface devices matching on class+protocol */
 	{	/* Huawei E367 and possibly others in "Windows mode" */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] usb: gadget: f_uvc: Sanity check wMaxPacketSize for SuperSpeed
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (18 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] crypto: deadlock between crypto_alg_sem/rtnl_mutex/genl_mutex Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] net: qmi_wwan: Add USB IDs for MDM6600 modem on Motorola Droid 4 Sasha Levin
                   ` (35 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Roger Quadros, Felipe Balbi, Sasha Levin

From: Roger Quadros <rogerq@ti.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 16bb05d98c904a4f6c5ce7e2d992299f794acbf2 ]

As per USB3.0 Specification "Table 9-20. Standard Endpoint Descriptor",
for interrupt and isochronous endpoints, wMaxPacketSize must be set to
1024 if the endpoint defines bMaxBurst to be greater than zero.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/gadget/function/f_uvc.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/usb/gadget/function/f_uvc.c b/drivers/usb/gadget/function/f_uvc.c
index 7405ce32a690..0e704a857115 100644
--- a/drivers/usb/gadget/function/f_uvc.c
+++ b/drivers/usb/gadget/function/f_uvc.c
@@ -611,6 +611,14 @@ uvc_function_bind(struct usb_configuration *c, struct usb_function *f)
 	opts->streaming_maxpacket = clamp(opts->streaming_maxpacket, 1U, 3072U);
 	opts->streaming_maxburst = min(opts->streaming_maxburst, 15U);
 
+	/* For SS, wMaxPacketSize has to be 1024 if bMaxBurst is not 0 */
+	if (opts->streaming_maxburst &&
+	    (opts->streaming_maxpacket % 1024) != 0) {
+		opts->streaming_maxpacket = roundup(opts->streaming_maxpacket, 1024);
+		INFO(cdev, "overriding streaming_maxpacket to %d\n",
+		     opts->streaming_maxpacket);
+	}
+
 	/* Fill in the FS/HS/SS Video Streaming specific descriptors from the
 	 * module parameters.
 	 *
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] usb: gadget: udc: remove pointer dereference after free
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (20 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] net: qmi_wwan: Add USB IDs for MDM6600 modem on Motorola Droid 4 Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] netfilter: nfnl_cthelper: fix runtime expectation policy updates Sasha Levin
                   ` (33 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Gustavo A. R. Silva, Felipe Balbi, Sasha Levin

From: "Gustavo A. R. Silva" <garsilva@embeddedor.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 1f459262b0e1649a1e5ad12fa4c66eb76c2220ce ]

Remove pointer dereference after free.

Addresses-Coverity-ID: 1091173
Acked-by: Michal Nazarewicz <mina86@mina86.com>
Signed-off-by: Gustavo A. R. Silva <garsilva@embeddedor.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/gadget/udc/pch_udc.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/usb/gadget/udc/pch_udc.c b/drivers/usb/gadget/udc/pch_udc.c
index 613547f07828..2e04d6596ac6 100644
--- a/drivers/usb/gadget/udc/pch_udc.c
+++ b/drivers/usb/gadget/udc/pch_udc.c
@@ -1534,7 +1534,6 @@ static void pch_udc_free_dma_chain(struct pch_udc_dev *dev,
 		td = phys_to_virt(addr);
 		addr2 = (dma_addr_t)td->next;
 		pci_pool_free(dev->data_requests, td, addr);
-		td->next = 0x00;
 		addr = addr2;
 	}
 	req->chain_len = 1;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] netfilter: nfnl_cthelper: fix runtime expectation policy updates
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (21 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] usb: gadget: udc: remove pointer dereference after free Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] netfilter: nfnl_cthelper: Fix memory leak Sasha Levin
                   ` (32 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Pablo Neira Ayuso, Sasha Levin

From: Pablo Neira Ayuso <pablo@netfilter.org>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 2c422257550f123049552b39f7af6e3428a60f43 ]

We only allow runtime updates of expectation policies for timeout and
maximum number of expectations, otherwise reject the update.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Acked-by: Liping Zhang <zlpnobody@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/netfilter/nfnetlink_cthelper.c | 86 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 84 insertions(+), 2 deletions(-)

diff --git a/net/netfilter/nfnetlink_cthelper.c b/net/netfilter/nfnetlink_cthelper.c
index 6d10002d23f8..3e697de2d154 100644
--- a/net/netfilter/nfnetlink_cthelper.c
+++ b/net/netfilter/nfnetlink_cthelper.c
@@ -255,6 +255,89 @@ nfnl_cthelper_create(const struct nlattr * const tb[],
 	return ret;
 }
 
+static int
+nfnl_cthelper_update_policy_one(const struct nf_conntrack_expect_policy *policy,
+				struct nf_conntrack_expect_policy *new_policy,
+				const struct nlattr *attr)
+{
+	struct nlattr *tb[NFCTH_POLICY_MAX + 1];
+	int err;
+
+	err = nla_parse_nested(tb, NFCTH_POLICY_MAX, attr,
+			       nfnl_cthelper_expect_pol);
+	if (err < 0)
+		return err;
+
+	if (!tb[NFCTH_POLICY_NAME] ||
+	    !tb[NFCTH_POLICY_EXPECT_MAX] ||
+	    !tb[NFCTH_POLICY_EXPECT_TIMEOUT])
+		return -EINVAL;
+
+	if (nla_strcmp(tb[NFCTH_POLICY_NAME], policy->name))
+		return -EBUSY;
+
+	new_policy->max_expected =
+		ntohl(nla_get_be32(tb[NFCTH_POLICY_EXPECT_MAX]));
+	new_policy->timeout =
+		ntohl(nla_get_be32(tb[NFCTH_POLICY_EXPECT_TIMEOUT]));
+
+	return 0;
+}
+
+static int nfnl_cthelper_update_policy_all(struct nlattr *tb[],
+					   struct nf_conntrack_helper *helper)
+{
+	struct nf_conntrack_expect_policy new_policy[helper->expect_class_max + 1];
+	struct nf_conntrack_expect_policy *policy;
+	int i, err;
+
+	/* Check first that all policy attributes are well-formed, so we don't
+	 * leave things in inconsistent state on errors.
+	 */
+	for (i = 0; i < helper->expect_class_max + 1; i++) {
+
+		if (!tb[NFCTH_POLICY_SET + i])
+			return -EINVAL;
+
+		err = nfnl_cthelper_update_policy_one(&helper->expect_policy[i],
+						      &new_policy[i],
+						      tb[NFCTH_POLICY_SET + i]);
+		if (err < 0)
+			return err;
+	}
+	/* Now we can safely update them. */
+	for (i = 0; i < helper->expect_class_max + 1; i++) {
+		policy = (struct nf_conntrack_expect_policy *)
+				&helper->expect_policy[i];
+		policy->max_expected = new_policy->max_expected;
+		policy->timeout	= new_policy->timeout;
+	}
+
+	return 0;
+}
+
+static int nfnl_cthelper_update_policy(struct nf_conntrack_helper *helper,
+				       const struct nlattr *attr)
+{
+	struct nlattr *tb[NFCTH_POLICY_SET_MAX + 1];
+	unsigned int class_max;
+	int err;
+
+	err = nla_parse_nested(tb, NFCTH_POLICY_SET_MAX, attr,
+			       nfnl_cthelper_expect_policy_set);
+	if (err < 0)
+		return err;
+
+	if (!tb[NFCTH_POLICY_SET_NUM])
+		return -EINVAL;
+
+	class_max = ntohl(nla_get_be32(tb[NFCTH_POLICY_SET_NUM]));
+	if (helper->expect_class_max + 1 != class_max)
+		return -EBUSY;
+
+	return nfnl_cthelper_update_policy_all(tb, helper);
+}
+
 static int
 nfnl_cthelper_update(const struct nlattr * const tb[],
 		     struct nf_conntrack_helper *helper)
@@ -265,8 +348,7 @@ nfnl_cthelper_update(const struct nlattr * const tb[],
 		return -EBUSY;
 
 	if (tb[NFCTH_POLICY]) {
-		ret = nfnl_cthelper_parse_expect_policy(helper,
-							tb[NFCTH_POLICY]);
+		ret = nfnl_cthelper_update_policy(helper, tb[NFCTH_POLICY]);
 		if (ret < 0)
 			return ret;
 	}
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] netfilter: nfnl_cthelper: Fix memory leak
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (22 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] netfilter: nfnl_cthelper: fix runtime expectation policy updates Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] pinctrl: st: add irq_request/release_resources callbacks Sasha Levin
                   ` (31 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jeffy Chen, Pablo Neira Ayuso, Sasha Levin

From: Jeffy Chen <jeffy.chen@rock-chips.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit f83bf8da1135ca635aac8f062cad3f001fcf3a26 ]

We have memory leaks of nf_conntrack_helper & expect_policy.

Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/netfilter/nfnetlink_cthelper.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/net/netfilter/nfnetlink_cthelper.c b/net/netfilter/nfnetlink_cthelper.c
index 3e697de2d154..f24d2cec02fb 100644
--- a/net/netfilter/nfnetlink_cthelper.c
+++ b/net/netfilter/nfnetlink_cthelper.c
@@ -216,7 +216,7 @@ nfnl_cthelper_create(const struct nlattr * const tb[],
 
 	ret = nfnl_cthelper_parse_expect_policy(helper, tb[NFCTH_POLICY]);
 	if (ret < 0)
-		goto err;
+		goto err1;
 
 	strncpy(helper->name, nla_data(tb[NFCTH_NAME]), NF_CT_HELPER_NAME_LEN);
 	helper->data_len = ntohl(nla_get_be32(tb[NFCTH_PRIV_DATA_LEN]));
@@ -247,10 +247,12 @@ nfnl_cthelper_create(const struct nlattr * const tb[],
 
 	ret = nf_conntrack_helper_register(helper);
 	if (ret < 0)
-		goto err;
+		goto err2;
 
 	return 0;
-err:
+err2:
+	kfree(helper->expect_policy);
+err1:
 	kfree(helper);
 	return ret;
 }
@@ -696,6 +698,8 @@ nfnl_cthelper_del(struct sock *nfnl, struct sk_buff *skb,
 
 			found = true;
 			nf_conntrack_helper_unregister(cur);
+			kfree(cur->expect_policy);
+			kfree(cur);
 		}
 	}
 	/* Make sure we return success if we flush and there is no helpers */
@@ -759,6 +763,8 @@ static void __exit nfnl_cthelper_exit(void)
 				continue;
 
 			nf_conntrack_helper_unregister(cur);
+			kfree(cur->expect_policy);
+			kfree(cur);
 		}
 	}
 }
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] pinctrl: st: add irq_request/release_resources callbacks
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (23 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] netfilter: nfnl_cthelper: Fix memory leak Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] scsi: lpfc: Fix PT2PT PRLI reject Sasha Levin
                   ` (30 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Patrice Chotard, Linus Walleij, Sasha Levin

From: Patrice Chotard <patrice.chotard@st.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e855fa9a65c40788b5069abb0d094537daa22e05 ]

When using GPIO as IRQ source, the GPIO must be configured
in INPUT. Callbacks dedicated for this was missing in
pinctrl-st driver.

This fix the following kernel error when trying to lock a gpio
as IRQ:

[    7.521095] gpio gpiochip7: (PIO11): gpiochip_lock_as_irq: tried to flag a GPIO set as output for IRQ
[    7.526018] gpio gpiochip7: (PIO11): unable to lock HW IRQ 6 for IRQ
[    7.529405] genirq: Failed to request resources for 0-0053 (irq 81) on irqchip GPIO

Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/pinctrl/pinctrl-st.c | 30 ++++++++++++++++++++++++------
 1 file changed, 24 insertions(+), 6 deletions(-)

diff --git a/drivers/pinctrl/pinctrl-st.c b/drivers/pinctrl/pinctrl-st.c
index 65bf73b70e34..a02a7caf8d4c 100644
--- a/drivers/pinctrl/pinctrl-st.c
+++ b/drivers/pinctrl/pinctrl-st.c
@@ -1348,6 +1348,22 @@ static void st_gpio_irq_unmask(struct irq_data *d)
 	writel(BIT(d->hwirq), bank->base + REG_PIO_SET_PMASK);
 }
 
+static int st_gpio_irq_request_resources(struct irq_data *d)
+{
+	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
+
+	st_gpio_direction_input(gc, d->hwirq);
+
+	return gpiochip_lock_as_irq(gc, d->hwirq);
+}
+
+static void st_gpio_irq_release_resources(struct irq_data *d)
+{
+	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
+
+	gpiochip_unlock_as_irq(gc, d->hwirq);
+}
+
 static int st_gpio_irq_set_type(struct irq_data *d, unsigned type)
 {
 	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
@@ -1503,12 +1519,14 @@ static struct gpio_chip st_gpio_template = {
 };
 
 static struct irq_chip st_gpio_irqchip = {
-	.name		= "GPIO",
-	.irq_disable	= st_gpio_irq_mask,
-	.irq_mask	= st_gpio_irq_mask,
-	.irq_unmask	= st_gpio_irq_unmask,
-	.irq_set_type	= st_gpio_irq_set_type,
-	.flags		= IRQCHIP_SKIP_SET_WAKE,
+	.name			= "GPIO",
+	.irq_request_resources	= st_gpio_irq_request_resources,
+	.irq_release_resources	= st_gpio_irq_release_resources,
+	.irq_disable		= st_gpio_irq_mask,
+	.irq_mask		= st_gpio_irq_mask,
+	.irq_unmask		= st_gpio_irq_unmask,
+	.irq_set_type		= st_gpio_irq_set_type,
+	.flags			= IRQCHIP_SKIP_SET_WAKE,
 };
 
 static int st_gpiolib_register_bank(struct st_pinctrl *info,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] KVM: x86: correct async page present tracepoint
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (25 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] scsi: lpfc: Fix PT2PT PRLI reject Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] ARM: dts: ti: fix PCI bus dtc warnings Sasha Levin
                   ` (28 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Wanpeng Li, Paolo Bonzini, Sasha Levin

From: Wanpeng Li <wanpeng.li@hotmail.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 24dccf83a121b8a4ad5c2ad383a8184ef6c266ee ]

After async pf setup successfully, there is a broadcast wakeup w/ special
token 0xffffffff which tells vCPU that it should wake up all processes
waiting for APFs though there is no real process waiting at the moment.

The async page present tracepoint print prematurely and fails to catch the
special token setup. This patch fixes it by moving the async page present
tracepoint after the special token setup.

Before patch:

qemu-system-x86-8499  [006] ...1  5973.473292: kvm_async_pf_ready: token 0x0 gva 0x0

After patch:

qemu-system-x86-8499  [006] ...1  5973.473292: kvm_async_pf_ready: token 0xffffffff gva 0x0

Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/x86/kvm/x86.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index e4e7d45fd551..7840d42734a1 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -7954,11 +7954,11 @@ void kvm_arch_async_page_present(struct kvm_vcpu *vcpu,
 {
 	struct x86_exception fault;
 
-	trace_kvm_async_pf_ready(work->arch.token, work->gva);
 	if (work->wakeup_all)
 		work->arch.token = ~0; /* broadcast wakeup */
 	else
 		kvm_del_async_pf_gfn(vcpu, work->arch.gfn);
+	trace_kvm_async_pf_ready(work->arch.token, work->gva);
 
 	if ((vcpu->arch.apf.msr_val & KVM_ASYNC_PF_ENABLED) &&
 	    !apf_put_user(vcpu, KVM_PV_REASON_PAGE_READY)) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] scsi: lpfc: Fix PT2PT PRLI reject
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (24 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] pinctrl: st: add irq_request/release_resources callbacks Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] KVM: x86: correct async page present tracepoint Sasha Levin
                   ` (29 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Dick Kennedy, James Smart, Martin K . Petersen, Sasha Levin

From: Dick Kennedy <dick.kennedy@broadcom.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit a71e3cdcfce4880a4578915e110e3eaed1659765 ]

lpfc cannot establish connection with targets that send PRLI in P2P
configurations.

If lpfc rejects a PRLI that is sent from a target the target will not
resend and will reject the PRLI send from the initiator.

[mkp: applied by hand]

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/scsi/lpfc/lpfc_els.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index 30f2fe9ba766..9c09ce9b98da 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -6891,7 +6891,8 @@ lpfc_els_unsol_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
 			did, vport->port_state, ndlp->nlp_flag);
 
 		phba->fc_stat.elsRcvPRLI++;
-		if (vport->port_state < LPFC_DISC_AUTH) {
+		if ((vport->port_state < LPFC_DISC_AUTH) &&
+		    (vport->fc_flag & FC_FABRIC)) {
 			rjt_err = LSRJT_UNABLE_TPC;
 			rjt_exp = LSEXP_NOTHING_MORE;
 			break;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] ARM: dts: ti: fix PCI bus dtc warnings
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (26 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] KVM: x86: correct async page present tracepoint Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] HID: xinmo: fix for out of range for THT 2P arcade controller Sasha Levin
                   ` (27 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Rob Herring, Tony Lindgren, Sasha Levin

From: Rob Herring <robh@kernel.org>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 7d79f6098d82f8c09914d7799bc96891ad9c3baf ]

dtc recently added PCI bus checks. Fix these warnings.

Signed-off-by: Rob Herring <robh@kernel.org>
Cc: "Benoît Cousson" <bcousson@baylibre.com>
Cc: Tony Lindgren <tony@atomide.com>
Cc: linux-omap@vger.kernel.org
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/boot/dts/dra7.dtsi | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dra7.dtsi
index bc04b754fe36..a13618266234 100644
--- a/arch/arm/boot/dts/dra7.dtsi
+++ b/arch/arm/boot/dts/dra7.dtsi
@@ -216,6 +216,7 @@
 				device_type = "pci";
 				ranges = <0x81000000 0 0          0x03000 0 0x00010000
 					  0x82000000 0 0x20013000 0x13000 0 0xffed000>;
+				bus-range = <0x00 0xff>;
 				#interrupt-cells = <1>;
 				num-lanes = <1>;
 				ti,hwmods = "pcie1";
@@ -251,6 +252,7 @@
 				device_type = "pci";
 				ranges = <0x81000000 0 0          0x03000 0 0x00010000
 					  0x82000000 0 0x30013000 0x13000 0 0xffed000>;
+				bus-range = <0x00 0xff>;
 				#interrupt-cells = <1>;
 				num-lanes = <1>;
 				ti,hwmods = "pcie2";
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] HID: xinmo: fix for out of range for THT 2P arcade controller.
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (27 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] ARM: dts: ti: fix PCI bus dtc warnings Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] hwmon: (asus_atk0110) fix uninitialized data access Sasha Levin
                   ` (26 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Peter Stein, Jiri Kosina, Sasha Levin

From: Peter Stein <peter@stuntstein.dk>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9257821c5a1dc57ef3a37f7cbcebaf548395c964 ]

There is a new clone of the XIN MO arcade controller which has same issue with
out of range like the original.  This fix will solve the issue where 2
directions on the joystick are not recognized by the new THT 2P arcade
controller with device ID 0x75e1.  In details the new device ID is added the
hid-id list and the hid-xinmo source code.

Signed-off-by: Peter Stein <peter@stuntstein.dk>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/hid/hid-core.c  | 1 +
 drivers/hid/hid-ids.h   | 1 +
 drivers/hid/hid-xinmo.c | 1 +
 3 files changed, 3 insertions(+)

diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index d786b48f5d7b..bfa7caba6efc 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -2010,6 +2010,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SIRIUS_BATTERY_FREE_TABLET) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_X_TENSIONS, USB_DEVICE_ID_SPEEDLINK_VAD_CEZANNE) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_THT_2P_ARCADE) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0005) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0030) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ZYDACRON, USB_DEVICE_ID_ZYDACRON_REMOTE_CONTROL) },
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index e995058ad264..fffb1103eb95 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -1011,6 +1011,7 @@
 
 #define USB_VENDOR_ID_XIN_MO			0x16c0
 #define USB_DEVICE_ID_XIN_MO_DUAL_ARCADE	0x05e1
+#define USB_DEVICE_ID_THT_2P_ARCADE		0x75e1
 
 #define USB_VENDOR_ID_XIROKU		0x1477
 #define USB_DEVICE_ID_XIROKU_SPX	0x1006
diff --git a/drivers/hid/hid-xinmo.c b/drivers/hid/hid-xinmo.c
index 7df5227a7e61..9ad7731d2e10 100644
--- a/drivers/hid/hid-xinmo.c
+++ b/drivers/hid/hid-xinmo.c
@@ -46,6 +46,7 @@ static int xinmo_event(struct hid_device *hdev, struct hid_field *field,
 
 static const struct hid_device_id xinmo_devices[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_THT_2P_ARCADE) },
 	{ }
 };
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] hwmon: (asus_atk0110) fix uninitialized data access
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (28 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] HID: xinmo: fix for out of range for THT 2P arcade controller Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] s390/qeth: no ETH header for outbound AF_IUCV Sasha Levin
                   ` (25 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, Guenter Roeck, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit a2125d02443e9a4e68bcfd9f8004fa23239e8329 ]

The latest gcc-7 snapshot adds a warning to point out that when
atk_read_value_old or atk_read_value_new fails, we copy
uninitialized data into sensor->cached_value:

drivers/hwmon/asus_atk0110.c: In function 'atk_input_show':
drivers/hwmon/asus_atk0110.c:651:26: error: 'value' may be used uninitialized in this function [-Werror=maybe-uninitialized]

Adding an error check avoids this. All versions of the driver
are affected.

Fixes: 2c03d07ad54d ("hwmon: Add Asus ATK0110 support")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Luca Tettamanti <kronos.it@gmail.com>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/hwmon/asus_atk0110.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/hwmon/asus_atk0110.c b/drivers/hwmon/asus_atk0110.c
index cccef87963e0..975c43d446f8 100644
--- a/drivers/hwmon/asus_atk0110.c
+++ b/drivers/hwmon/asus_atk0110.c
@@ -646,6 +646,9 @@ static int atk_read_value(struct atk_sensor_data *sensor, u64 *value)
 		else
 			err = atk_read_value_new(sensor, value);
 
+		if (err)
+			return err;
+
 		sensor->is_valid = true;
 		sensor->last_updated = jiffies;
 		sensor->cached_value = *value;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] s390/qeth: no ETH header for outbound AF_IUCV
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (29 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] hwmon: (asus_atk0110) fix uninitialized data access Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] bna: avoid writing uninitialized data into hw registers Sasha Levin
                   ` (24 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Julian Wiedmann, Ursula Braun, David S . Miller, Sasha Levin

From: Julian Wiedmann <jwi@linux.vnet.ibm.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit acd9776b5c45ef02d1a210969a6fcc058afb76e3 ]

With AF_IUCV traffic, the skb passed to hard_start_xmit() has a 14 byte
slot at skb->data, intended for an ETH header. qeth_l3_fill_af_iucv_hdr()
fills this ETH header... and then immediately moves it to the
skb's headroom, where it disappears and is never seen again.

But it's still possible for us to return NETDEV_TX_BUSY after the skb has
been modified. Since we didn't get a private copy of the skb, the next
time the skb is delivered to hard_start_xmit() it no longer has the
expected layout (we moved the ETH header to the headroom, so skb->data
now starts at the IUCV_TRANS header). So when qeth_l3_fill_af_iucv_hdr()
does another round of rebuilding, the resulting qeth header ends up
all wrong. On transmission, the buffer is then rejected by
the HiperSockets device with SBALF15 = x'04'.
When this error is passed back to af_iucv as TX_NOTIFY_UNREACHABLE, it
tears down the offending socket.

As the ETH header for AF_IUCV serves no purpose, just align the code to
what we do for IP traffic on L3 HiperSockets: keep the ETH header at
skb->data, and pass down data_offset = ETH_HLEN to qeth_fill_buffer().
When mapping the payload into the SBAL elements, the ETH header is then
stripped off. This avoids the skb manipulations in
qeth_l3_fill_af_iucv_hdr(), and any buffer re-entering hard_start_xmit()
after NETDEV_TX_BUSY is now processed properly.

Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Signed-off-by: Ursula Braun <ubraun@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/s390/net/qeth_l3_main.c | 15 ++++-----------
 1 file changed, 4 insertions(+), 11 deletions(-)

diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c
index fefd3c512386..6dbf0d5a2a22 100644
--- a/drivers/s390/net/qeth_l3_main.c
+++ b/drivers/s390/net/qeth_l3_main.c
@@ -2790,17 +2790,13 @@ static void qeth_l3_fill_af_iucv_hdr(struct qeth_card *card,
 	char daddr[16];
 	struct af_iucv_trans_hdr *iucv_hdr;
 
-	skb_pull(skb, 14);
-	card->dev->header_ops->create(skb, card->dev, 0,
-				      card->dev->dev_addr, card->dev->dev_addr,
-				      card->dev->addr_len);
-	skb_pull(skb, 14);
-	iucv_hdr = (struct af_iucv_trans_hdr *)skb->data;
 	memset(hdr, 0, sizeof(struct qeth_hdr));
 	hdr->hdr.l3.id = QETH_HEADER_TYPE_LAYER3;
 	hdr->hdr.l3.ext_flags = 0;
-	hdr->hdr.l3.length = skb->len;
+	hdr->hdr.l3.length = skb->len - ETH_HLEN;
 	hdr->hdr.l3.flags = QETH_HDR_IPV6 | QETH_CAST_UNICAST;
+
+	iucv_hdr = (struct af_iucv_trans_hdr *) (skb->data + ETH_HLEN);
 	memset(daddr, 0, sizeof(daddr));
 	daddr[0] = 0xfe;
 	daddr[1] = 0x80;
@@ -2983,10 +2979,7 @@ static int qeth_l3_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
 	if ((card->info.type == QETH_CARD_TYPE_IQD) && (!large_send) &&
 	    (skb_shinfo(skb)->nr_frags == 0)) {
 		new_skb = skb;
-		if (new_skb->protocol == ETH_P_AF_IUCV)
-			data_offset = 0;
-		else
-			data_offset = ETH_HLEN;
+		data_offset = ETH_HLEN;
 		hdr = kmem_cache_alloc(qeth_core_header_cache, GFP_ATOMIC);
 		if (!hdr)
 			goto tx_drop;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] net: Do not allow negative values for busy_read and busy_poll sysctl interfaces
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (31 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] bna: avoid writing uninitialized data into hw registers Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] i40e: Do not enable NAPI on q_vectors that have no rings Sasha Levin
                   ` (22 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Alexander Duyck, David S . Miller, Sasha Levin

From: Alexander Duyck <alexander.h.duyck@intel.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 95f255211396958c718aef8c45e3923b5211ea7b ]

This change basically codifies what I think was already the limitations on
the busy_poll and busy_read sysctl interfaces.  We weren't checking the
lower bounds and as such could input negative values. The behavior when
that was used was dependent on the architecture. In order to prevent any
issues with that I am just disabling support for values less than 0 since
this way we don't have to worry about any odd behaviors.

By limiting the sysctl values this way it also makes it consistent with how
we handle the SO_BUSY_POLL socket option since the value appears to be
reported as a signed integer value and negative values are rejected.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/core/sysctl_net_core.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c
index a6beb7b6ae55..f5ef2115871f 100644
--- a/net/core/sysctl_net_core.c
+++ b/net/core/sysctl_net_core.c
@@ -360,14 +360,16 @@ static struct ctl_table net_core_table[] = {
 		.data		= &sysctl_net_busy_poll,
 		.maxlen		= sizeof(unsigned int),
 		.mode		= 0644,
-		.proc_handler	= proc_dointvec
+		.proc_handler	= proc_dointvec_minmax,
+		.extra1		= &zero,
 	},
 	{
 		.procname	= "busy_read",
 		.data		= &sysctl_net_busy_read,
 		.maxlen		= sizeof(unsigned int),
 		.mode		= 0644,
-		.proc_handler	= proc_dointvec
+		.proc_handler	= proc_dointvec_minmax,
+		.extra1		= &zero,
 	},
 #endif
 #ifdef CONFIG_NET_SCHED
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] bna: avoid writing uninitialized data into hw registers
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (30 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] s390/qeth: no ETH header for outbound AF_IUCV Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] net: Do not allow negative values for busy_read and busy_poll sysctl interfaces Sasha Levin
                   ` (23 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, David S . Miller, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit a5af83925363eb85d467933e3d6ec5a87001eb7c ]

The latest gcc-7 snapshot warns about bfa_ioc_send_enable/bfa_ioc_send_disable
writing undefined values into the hardware registers:

drivers/net/ethernet/brocade/bna/bfa_ioc.c: In function 'bfa_iocpf_sm_disabling_entry':
arch/arm/include/asm/io.h:109:22: error: '*((void *)&disable_req+4)' is used uninitialized in this function [-Werror=uninitialized]
arch/arm/include/asm/io.h:109:22: error: '*((void *)&disable_req+8)' is used uninitialized in this function [-Werror=uninitialized]

The two functions look like they should do the same thing, but only one
of them initializes the time stamp and clscode field. The fact that we
only get a warning for one of the two functions seems to be arbitrary,
based on the inlining decisions in the compiler.

To address this, I'm making both functions do the same thing:

- set the clscode from the ioc structure in both
- set the time stamp from ktime_get_real_seconds (which also
  avoids the signed-integer overflow in 2038 and extends the
  well-defined behavior until 2106).
- zero-fill the reserved field

Fixes: 8b230ed8ec96 ("bna: Brocade 10Gb Ethernet device driver")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/brocade/bna/bfa_ioc.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/brocade/bna/bfa_ioc.c b/drivers/net/ethernet/brocade/bna/bfa_ioc.c
index 68f3c13c9ef6..5be892ffdaed 100644
--- a/drivers/net/ethernet/brocade/bna/bfa_ioc.c
+++ b/drivers/net/ethernet/brocade/bna/bfa_ioc.c
@@ -1948,13 +1948,13 @@ static void
 bfa_ioc_send_enable(struct bfa_ioc *ioc)
 {
 	struct bfi_ioc_ctrl_req enable_req;
-	struct timeval tv;
 
 	bfi_h2i_set(enable_req.mh, BFI_MC_IOC, BFI_IOC_H2I_ENABLE_REQ,
 		    bfa_ioc_portid(ioc));
 	enable_req.clscode = htons(ioc->clscode);
-	do_gettimeofday(&tv);
-	enable_req.tv_sec = ntohl(tv.tv_sec);
+	enable_req.rsvd = htons(0);
+	/* overflow in 2106 */
+	enable_req.tv_sec = ntohl(ktime_get_real_seconds());
 	bfa_ioc_mbox_send(ioc, &enable_req, sizeof(struct bfi_ioc_ctrl_req));
 }
 
@@ -1965,6 +1965,10 @@ bfa_ioc_send_disable(struct bfa_ioc *ioc)
 
 	bfi_h2i_set(disable_req.mh, BFI_MC_IOC, BFI_IOC_H2I_DISABLE_REQ,
 		    bfa_ioc_portid(ioc));
+	disable_req.clscode = htons(ioc->clscode);
+	disable_req.rsvd = htons(0);
+	/* overflow in 2106 */
+	disable_req.tv_sec = ntohl(ktime_get_real_seconds());
 	bfa_ioc_mbox_send(ioc, &disable_req, sizeof(struct bfi_ioc_ctrl_req));
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] i40e: Do not enable NAPI on q_vectors that have no rings
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (32 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] net: Do not allow negative values for busy_read and busy_poll sysctl interfaces Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] netfilter: nfnl_cthelper: fix a race when walk the nf_ct_helper_hash table Sasha Levin
                   ` (21 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Alexander Duyck, Jeff Kirsher, David S . Miller, Sasha Levin

From: Alexander Duyck <alexander.h.duyck@intel.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 13a8cd191a2b470cfd435b3b57dbd21aa65ff78c ]

When testing the epoll w/ busy poll code I found that I could get into a
state where the i40e driver had q_vectors w/ active NAPI that had no rings.
This was resulting in a divide by zero error.  To correct it I am updating
the driver code so that we only support NAPI on q_vectors that have 1 or
more rings allocated to them.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/intel/i40e/i40e_main.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 13e0cf90e567..042f3486f79a 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -3894,8 +3894,12 @@ static void i40e_napi_enable_all(struct i40e_vsi *vsi)
 	if (!vsi->netdev)
 		return;
 
-	for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++)
-		napi_enable(&vsi->q_vectors[q_idx]->napi);
+	for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++) {
+		struct i40e_q_vector *q_vector = vsi->q_vectors[q_idx];
+
+		if (q_vector->rx.ring || q_vector->tx.ring)
+			napi_enable(&q_vector->napi);
+	}
 }
 
 /**
@@ -3909,8 +3913,12 @@ static void i40e_napi_disable_all(struct i40e_vsi *vsi)
 	if (!vsi->netdev)
 		return;
 
-	for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++)
-		napi_disable(&vsi->q_vectors[q_idx]->napi);
+	for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++) {
+		struct i40e_q_vector *q_vector = vsi->q_vectors[q_idx];
+
+		if (q_vector->rx.ring || q_vector->tx.ring)
+			napi_disable(&q_vector->napi);
+	}
 }
 
 /**
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] netfilter: nfnl_cthelper: fix a race when walk the nf_ct_helper_hash table
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (33 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] i40e: Do not enable NAPI on q_vectors that have no rings Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] irda: vlsi_ir: fix check for DMA mapping errors Sasha Levin
                   ` (20 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Liping Zhang, Pablo Neira Ayuso, Sasha Levin

From: Liping Zhang <zlpnobody@gmail.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 83d90219a5df8d950855ce73229a97b63605c317 ]

The nf_ct_helper_hash table is protected by nf_ct_helper_mutex, while
nfct_helper operation is protected by nfnl_lock(NFNL_SUBSYS_CTHELPER).
So it's possible that one CPU is walking the nf_ct_helper_hash for
cthelper add/get/del, another cpu is doing nf_conntrack_helpers_unregister
at the same time. This is dangrous, and may cause use after free error.

Note, delete operation will flush all cthelpers added via nfnetlink, so
using rcu to do protect is not easy.

Now introduce a dummy list to record all the cthelpers added via
nfnetlink, then we can walk the dummy list instead of walking the
nf_ct_helper_hash. Also, keep nfnl_cthelper_dump_table unchanged, it
may be invoked without nfnl_lock(NFNL_SUBSYS_CTHELPER) held.

Signed-off-by: Liping Zhang <zlpnobody@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/netfilter/nfnetlink_cthelper.c | 177 +++++++++++++++++--------------------
 1 file changed, 81 insertions(+), 96 deletions(-)

diff --git a/net/netfilter/nfnetlink_cthelper.c b/net/netfilter/nfnetlink_cthelper.c
index f24d2cec02fb..8d34a488efc0 100644
--- a/net/netfilter/nfnetlink_cthelper.c
+++ b/net/netfilter/nfnetlink_cthelper.c
@@ -32,6 +32,13 @@ MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Pablo Neira Ayuso <pablo@netfilter.org>");
 MODULE_DESCRIPTION("nfnl_cthelper: User-space connection tracking helpers");
 
+struct nfnl_cthelper {
+	struct list_head		list;
+	struct nf_conntrack_helper	helper;
+};
+
+static LIST_HEAD(nfnl_cthelper_list);
+
 static int
 nfnl_userspace_cthelper(struct sk_buff *skb, unsigned int protoff,
 			struct nf_conn *ct, enum ip_conntrack_info ctinfo)
@@ -205,14 +212,16 @@ nfnl_cthelper_create(const struct nlattr * const tb[],
 		     struct nf_conntrack_tuple *tuple)
 {
 	struct nf_conntrack_helper *helper;
+	struct nfnl_cthelper *nfcth;
 	int ret;
 
 	if (!tb[NFCTH_TUPLE] || !tb[NFCTH_POLICY] || !tb[NFCTH_PRIV_DATA_LEN])
 		return -EINVAL;
 
-	helper = kzalloc(sizeof(struct nf_conntrack_helper), GFP_KERNEL);
-	if (helper == NULL)
+	nfcth = kzalloc(sizeof(*nfcth), GFP_KERNEL);
+	if (nfcth == NULL)
 		return -ENOMEM;
+	helper = &nfcth->helper;
 
 	ret = nfnl_cthelper_parse_expect_policy(helper, tb[NFCTH_POLICY]);
 	if (ret < 0)
@@ -249,11 +258,12 @@ nfnl_cthelper_create(const struct nlattr * const tb[],
 	if (ret < 0)
 		goto err2;
 
+	list_add_tail(&nfcth->list, &nfnl_cthelper_list);
 	return 0;
 err2:
 	kfree(helper->expect_policy);
 err1:
-	kfree(helper);
+	kfree(nfcth);
 	return ret;
 }
 
@@ -379,7 +389,8 @@ nfnl_cthelper_new(struct sock *nfnl, struct sk_buff *skb,
 	const char *helper_name;
 	struct nf_conntrack_helper *cur, *helper = NULL;
 	struct nf_conntrack_tuple tuple;
-	int ret = 0, i;
+	struct nfnl_cthelper *nlcth;
+	int ret = 0;
 
 	if (!tb[NFCTH_NAME] || !tb[NFCTH_TUPLE])
 		return -EINVAL;
@@ -390,31 +401,22 @@ nfnl_cthelper_new(struct sock *nfnl, struct sk_buff *skb,
 	if (ret < 0)
 		return ret;
 
-	rcu_read_lock();
-	for (i = 0; i < nf_ct_helper_hsize && !helper; i++) {
-		hlist_for_each_entry_rcu(cur, &nf_ct_helper_hash[i], hnode) {
+	list_for_each_entry(nlcth, &nfnl_cthelper_list, list) {
+		cur = &nlcth->helper;
 
-			/* skip non-userspace conntrack helpers. */
-			if (!(cur->flags & NF_CT_HELPER_F_USERSPACE))
-				continue;
+		if (strncmp(cur->name, helper_name, NF_CT_HELPER_NAME_LEN))
+			continue;
 
-			if (strncmp(cur->name, helper_name,
-					NF_CT_HELPER_NAME_LEN) != 0)
-				continue;
+		if ((tuple.src.l3num != cur->tuple.src.l3num ||
+		     tuple.dst.protonum != cur->tuple.dst.protonum))
+			continue;
 
-			if ((tuple.src.l3num != cur->tuple.src.l3num ||
-			     tuple.dst.protonum != cur->tuple.dst.protonum))
-				continue;
+		if (nlh->nlmsg_flags & NLM_F_EXCL)
+			return -EEXIST;
 
-			if (nlh->nlmsg_flags & NLM_F_EXCL) {
-				ret = -EEXIST;
-				goto err;
-			}
-			helper = cur;
-			break;
-		}
+		helper = cur;
+		break;
 	}
-	rcu_read_unlock();
 
 	if (helper == NULL)
 		ret = nfnl_cthelper_create(tb, &tuple);
@@ -422,9 +424,6 @@ nfnl_cthelper_new(struct sock *nfnl, struct sk_buff *skb,
 		ret = nfnl_cthelper_update(tb, helper);
 
 	return ret;
-err:
-	rcu_read_unlock();
-	return ret;
 }
 
 static int
@@ -588,11 +587,12 @@ static int
 nfnl_cthelper_get(struct sock *nfnl, struct sk_buff *skb,
 		  const struct nlmsghdr *nlh, const struct nlattr * const tb[])
 {
-	int ret = -ENOENT, i;
+	int ret = -ENOENT;
 	struct nf_conntrack_helper *cur;
 	struct sk_buff *skb2;
 	char *helper_name = NULL;
 	struct nf_conntrack_tuple tuple;
+	struct nfnl_cthelper *nlcth;
 	bool tuple_set = false;
 
 	if (nlh->nlmsg_flags & NLM_F_DUMP) {
@@ -613,45 +613,39 @@ nfnl_cthelper_get(struct sock *nfnl, struct sk_buff *skb,
 		tuple_set = true;
 	}
 
-	for (i = 0; i < nf_ct_helper_hsize; i++) {
-		hlist_for_each_entry_rcu(cur, &nf_ct_helper_hash[i], hnode) {
+	list_for_each_entry(nlcth, &nfnl_cthelper_list, list) {
+		cur = &nlcth->helper;
+		if (helper_name &&
+		    strncmp(cur->name, helper_name, NF_CT_HELPER_NAME_LEN))
+			continue;
 
-			/* skip non-userspace conntrack helpers. */
-			if (!(cur->flags & NF_CT_HELPER_F_USERSPACE))
-				continue;
+		if (tuple_set &&
+		    (tuple.src.l3num != cur->tuple.src.l3num ||
+		     tuple.dst.protonum != cur->tuple.dst.protonum))
+			continue;
 
-			if (helper_name && strncmp(cur->name, helper_name,
-						NF_CT_HELPER_NAME_LEN) != 0) {
-				continue;
-			}
-			if (tuple_set &&
-			    (tuple.src.l3num != cur->tuple.src.l3num ||
-			     tuple.dst.protonum != cur->tuple.dst.protonum))
-				continue;
-
-			skb2 = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
-			if (skb2 == NULL) {
-				ret = -ENOMEM;
-				break;
-			}
+		skb2 = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
+		if (skb2 == NULL) {
+			ret = -ENOMEM;
+			break;
+		}
 
-			ret = nfnl_cthelper_fill_info(skb2, NETLINK_CB(skb).portid,
-						nlh->nlmsg_seq,
-						NFNL_MSG_TYPE(nlh->nlmsg_type),
-						NFNL_MSG_CTHELPER_NEW, cur);
-			if (ret <= 0) {
-				kfree_skb(skb2);
-				break;
-			}
+		ret = nfnl_cthelper_fill_info(skb2, NETLINK_CB(skb).portid,
+					      nlh->nlmsg_seq,
+					      NFNL_MSG_TYPE(nlh->nlmsg_type),
+					      NFNL_MSG_CTHELPER_NEW, cur);
+		if (ret <= 0) {
+			kfree_skb(skb2);
+			break;
+		}
 
-			ret = netlink_unicast(nfnl, skb2, NETLINK_CB(skb).portid,
-						MSG_DONTWAIT);
-			if (ret > 0)
-				ret = 0;
+		ret = netlink_unicast(nfnl, skb2, NETLINK_CB(skb).portid,
+				      MSG_DONTWAIT);
+		if (ret > 0)
+			ret = 0;
 
-			/* this avoids a loop in nfnetlink. */
-			return ret == -EAGAIN ? -ENOBUFS : ret;
-		}
+		/* this avoids a loop in nfnetlink. */
+		return ret == -EAGAIN ? -ENOBUFS : ret;
 	}
 	return ret;
 }
@@ -662,10 +656,10 @@ nfnl_cthelper_del(struct sock *nfnl, struct sk_buff *skb,
 {
 	char *helper_name = NULL;
 	struct nf_conntrack_helper *cur;
-	struct hlist_node *tmp;
 	struct nf_conntrack_tuple tuple;
 	bool tuple_set = false, found = false;
-	int i, j = 0, ret;
+	struct nfnl_cthelper *nlcth, *n;
+	int j = 0, ret;
 
 	if (tb[NFCTH_NAME])
 		helper_name = nla_data(tb[NFCTH_NAME]);
@@ -678,30 +672,27 @@ nfnl_cthelper_del(struct sock *nfnl, struct sk_buff *skb,
 		tuple_set = true;
 	}
 
-	for (i = 0; i < nf_ct_helper_hsize; i++) {
-		hlist_for_each_entry_safe(cur, tmp, &nf_ct_helper_hash[i],
-								hnode) {
-			/* skip non-userspace conntrack helpers. */
-			if (!(cur->flags & NF_CT_HELPER_F_USERSPACE))
-				continue;
+	list_for_each_entry_safe(nlcth, n, &nfnl_cthelper_list, list) {
+		cur = &nlcth->helper;
+		j++;
 
-			j++;
+		if (helper_name &&
+		    strncmp(cur->name, helper_name, NF_CT_HELPER_NAME_LEN))
+			continue;
 
-			if (helper_name && strncmp(cur->name, helper_name,
-						NF_CT_HELPER_NAME_LEN) != 0) {
-				continue;
-			}
-			if (tuple_set &&
-			    (tuple.src.l3num != cur->tuple.src.l3num ||
-			     tuple.dst.protonum != cur->tuple.dst.protonum))
-				continue;
+		if (tuple_set &&
+		    (tuple.src.l3num != cur->tuple.src.l3num ||
+		     tuple.dst.protonum != cur->tuple.dst.protonum))
+			continue;
 
-			found = true;
-			nf_conntrack_helper_unregister(cur);
-			kfree(cur->expect_policy);
-			kfree(cur);
-		}
+		found = true;
+		nf_conntrack_helper_unregister(cur);
+		kfree(cur->expect_policy);
+
+		list_del(&nlcth->list);
+		kfree(nlcth);
 	}
+
 	/* Make sure we return success if we flush and there is no helpers */
 	return (found || j == 0) ? 0 : -ENOENT;
 }
@@ -750,22 +741,16 @@ static int __init nfnl_cthelper_init(void)
 static void __exit nfnl_cthelper_exit(void)
 {
 	struct nf_conntrack_helper *cur;
-	struct hlist_node *tmp;
-	int i;
+	struct nfnl_cthelper *nlcth, *n;
 
 	nfnetlink_subsys_unregister(&nfnl_cthelper_subsys);
 
-	for (i=0; i<nf_ct_helper_hsize; i++) {
-		hlist_for_each_entry_safe(cur, tmp, &nf_ct_helper_hash[i],
-									hnode) {
-			/* skip non-userspace conntrack helpers. */
-			if (!(cur->flags & NF_CT_HELPER_F_USERSPACE))
-				continue;
+	list_for_each_entry_safe(nlcth, n, &nfnl_cthelper_list, list) {
+		cur = &nlcth->helper;
 
-			nf_conntrack_helper_unregister(cur);
-			kfree(cur->expect_policy);
-			kfree(cur);
-		}
+		nf_conntrack_helper_unregister(cur);
+		kfree(cur->expect_policy);
+		kfree(nlcth);
 	}
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] irda: vlsi_ir: fix check for DMA mapping errors
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (34 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] netfilter: nfnl_cthelper: fix a race when walk the nf_ct_helper_hash table Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] netfilter: nf_nat_snmp: Fix panic when snmp_trap_helper fails to register Sasha Levin
                   ` (19 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Alexey Khoroshilov, David S . Miller, Sasha Levin

From: Alexey Khoroshilov <khoroshilov@ispras.ru>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 6ac3b77a6ffff7513ff86b684aa256ea01c0e5b5 ]

vlsi_alloc_ring() checks for DMA mapping errors by comparing
returned address with zero, while pci_dma_mapping_error() should be used.

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/irda/vlsi_ir.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/irda/vlsi_ir.c b/drivers/net/irda/vlsi_ir.c
index a0849f49bbec..c0192f97ecc8 100644
--- a/drivers/net/irda/vlsi_ir.c
+++ b/drivers/net/irda/vlsi_ir.c
@@ -418,8 +418,9 @@ static struct vlsi_ring *vlsi_alloc_ring(struct pci_dev *pdev, struct ring_descr
 		memset(rd, 0, sizeof(*rd));
 		rd->hw = hwmap + i;
 		rd->buf = kmalloc(len, GFP_KERNEL|GFP_DMA);
-		if (rd->buf == NULL ||
-		    !(busaddr = pci_map_single(pdev, rd->buf, len, dir))) {
+		if (rd->buf)
+			busaddr = pci_map_single(pdev, rd->buf, len, dir);
+		if (rd->buf == NULL || pci_dma_mapping_error(pdev, busaddr)) {
 			if (rd->buf) {
 				net_err_ratelimited("%s: failed to create PCI-MAP for %p\n",
 						    __func__, rd->buf);
@@ -430,8 +431,7 @@ static struct vlsi_ring *vlsi_alloc_ring(struct pci_dev *pdev, struct ring_descr
 				rd = r->rd + j;
 				busaddr = rd_get_addr(rd);
 				rd_set_addr_status(rd, 0, 0);
-				if (busaddr)
-					pci_unmap_single(pdev, busaddr, len, dir);
+				pci_unmap_single(pdev, busaddr, len, dir);
 				kfree(rd->buf);
 				rd->buf = NULL;
 			}
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] netfilter: nf_nat_snmp: Fix panic when snmp_trap_helper fails to register
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (35 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] irda: vlsi_ir: fix check for DMA mapping errors Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] ARM: dts: am335x-evmsk: adjust mmc2 param to allow suspend Sasha Levin
                   ` (18 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Gao Feng, Pablo Neira Ayuso, Sasha Levin

From: Gao Feng <fgao@ikuai8.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 75c689dca98851d65ef5a27e5ce26b625b68751c ]

In the commit 93557f53e1fb ("netfilter: nf_conntrack: nf_conntrack snmp
helper"), the snmp_helper is replaced by nf_nat_snmp_hook. So the
snmp_helper is never registered. But it still tries to unregister the
snmp_helper, it could cause the panic.

Now remove the useless snmp_helper and the unregister call in the
error handler.

Fixes: 93557f53e1fb ("netfilter: nf_conntrack: nf_conntrack snmp helper")
Signed-off-by: Gao Feng <fgao@ikuai8.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv4/netfilter/nf_nat_snmp_basic.c | 19 +------------------
 1 file changed, 1 insertion(+), 18 deletions(-)

diff --git a/net/ipv4/netfilter/nf_nat_snmp_basic.c b/net/ipv4/netfilter/nf_nat_snmp_basic.c
index cc626e1b06d3..64a8bbc06f23 100644
--- a/net/ipv4/netfilter/nf_nat_snmp_basic.c
+++ b/net/ipv4/netfilter/nf_nat_snmp_basic.c
@@ -1260,16 +1260,6 @@ static const struct nf_conntrack_expect_policy snmp_exp_policy = {
 	.timeout	= 180,
 };
 
-static struct nf_conntrack_helper snmp_helper __read_mostly = {
-	.me			= THIS_MODULE,
-	.help			= help,
-	.expect_policy		= &snmp_exp_policy,
-	.name			= "snmp",
-	.tuple.src.l3num	= AF_INET,
-	.tuple.src.u.udp.port	= cpu_to_be16(SNMP_PORT),
-	.tuple.dst.protonum	= IPPROTO_UDP,
-};
-
 static struct nf_conntrack_helper snmp_trap_helper __read_mostly = {
 	.me			= THIS_MODULE,
 	.help			= help,
@@ -1288,17 +1278,10 @@ static struct nf_conntrack_helper snmp_trap_helper __read_mostly = {
 
 static int __init nf_nat_snmp_basic_init(void)
 {
-	int ret = 0;
-
 	BUG_ON(nf_nat_snmp_hook != NULL);
 	RCU_INIT_POINTER(nf_nat_snmp_hook, help);
 
-	ret = nf_conntrack_helper_register(&snmp_trap_helper);
-	if (ret < 0) {
-		nf_conntrack_helper_unregister(&snmp_helper);
-		return ret;
-	}
-	return ret;
+	return nf_conntrack_helper_register(&snmp_trap_helper);
 }
 
 static void __exit nf_nat_snmp_basic_fini(void)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] ARM: dts: am335x-evmsk: adjust mmc2 param to allow suspend
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (36 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] netfilter: nf_nat_snmp: Fix panic when snmp_trap_helper fails to register Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] isdn: kcapi: avoid uninitialized data Sasha Levin
                   ` (17 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Reizer, Eyal, Tony Lindgren, Sasha Levin

From: "Reizer, Eyal" <eyalr@ti.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9bcf53f34a2c1cebc45cc12e273dcd5f51fbc099 ]

mmc2 used for wl12xx was missing the keep-power-in suspend
parameter. As a result the board couldn't reach suspend state.

Signed-off-by: Eyal Reizer <eyalr@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/boot/dts/am335x-evmsk.dts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/boot/dts/am335x-evmsk.dts b/arch/arm/boot/dts/am335x-evmsk.dts
index 156d05efcb70..01288546bda1 100644
--- a/arch/arm/boot/dts/am335x-evmsk.dts
+++ b/arch/arm/boot/dts/am335x-evmsk.dts
@@ -646,6 +646,7 @@
 	ti,non-removable;
 	bus-width = <4>;
 	cap-power-off-card;
+	keep-power-in-suspend;
 	pinctrl-names = "default";
 	pinctrl-0 = <&mmc2_pins>;
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] isdn: kcapi: avoid uninitialized data
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (37 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] ARM: dts: am335x-evmsk: adjust mmc2 param to allow suspend Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] ARM: dma-mapping: disallow dma_get_sgtable() for non-kernel managed memory Sasha Levin
                   ` (16 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Arnd Bergmann, David S . Miller, Sasha Levin

From: Arnd Bergmann <arnd@arndb.de>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit af109a2cf6a9a6271fa420ae2d64d72d86c92b7d ]

gcc-7 points out that the AVMB1_ADDCARD ioctl results in an unintialized
value ending up in the cardnr parameter:

drivers/isdn/capi/kcapi.c: In function 'old_capi_manufacturer':
drivers/isdn/capi/kcapi.c:1042:24: error: 'cdef.cardnr' may be used uninitialized in this function [-Werror=maybe-uninitialized]
   cparams.cardnr = cdef.cardnr;

This has been broken since before the start of the git history, so
either the value is not used for anything important, or the ioctl
command doesn't get called in practice.

Setting the cardnr to zero avoids the warning and makes sure
we have consistent behavior.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/isdn/capi/kcapi.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/isdn/capi/kcapi.c b/drivers/isdn/capi/kcapi.c
index 823f6985b260..dd7e38ac29bd 100644
--- a/drivers/isdn/capi/kcapi.c
+++ b/drivers/isdn/capi/kcapi.c
@@ -1032,6 +1032,7 @@ static int old_capi_manufacturer(unsigned int cmd, void __user *data)
 						     sizeof(avmb1_carddef))))
 				return -EFAULT;
 			cdef.cardtype = AVM_CARDTYPE_B1;
+			cdef.cardnr = 0;
 		} else {
 			if ((retval = copy_from_user(&cdef, data,
 						     sizeof(avmb1_extcarddef))))
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] xhci: plat: Register shutdown for xhci_plat
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (39 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] ARM: dma-mapping: disallow dma_get_sgtable() for non-kernel managed memory Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] cpuidle: powernv: Pass correct drv->cpumask for registration Sasha Levin
                   ` (14 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Adam Wallis, Mathias Nyman, Greg Kroah-Hartman, Sasha Levin

From: Adam Wallis <awallis@codeaurora.org>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit b07c12517f2aed0add8ce18146bb426b14099392 ]

Shutdown should be called for xhci_plat devices especially for
situations where kexec might be used by stopping DMA
transactions.

Signed-off-by: Adam Wallis <awallis@codeaurora.org>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/usb/host/xhci-plat.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
index 23c5bdab988d..e92b9903faa4 100644
--- a/drivers/usb/host/xhci-plat.c
+++ b/drivers/usb/host/xhci-plat.c
@@ -266,6 +266,7 @@ MODULE_DEVICE_TABLE(of, usb_xhci_of_match);
 static struct platform_driver usb_xhci_driver = {
 	.probe	= xhci_plat_probe,
 	.remove	= xhci_plat_remove,
+	.shutdown	= usb_hcd_platform_shutdown,
 	.driver	= {
 		.name = "xhci-hcd",
 		.pm = DEV_PM_OPS,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] ARM: dma-mapping: disallow dma_get_sgtable() for non-kernel managed memory
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (38 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] isdn: kcapi: avoid uninitialized data Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] xhci: plat: Register shutdown for xhci_plat Sasha Levin
                   ` (15 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Russell King, Sasha Levin

From: Russell King <rmk+kernel@armlinux.org.uk>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 916a008b4b8ecc02fbd035cfb133773dba1ff3d7 ]

dma_get_sgtable() tries to create a scatterlist table containing valid
struct page pointers for the coherent memory allocation passed in to it.

However, memory can be declared via dma_declare_coherent_memory(), or
via other reservation schemes which means that coherent memory is not
guaranteed to be backed by struct pages.  In such cases, the resulting
scatterlist table contains pointers to invalid pages, which causes
kernel oops later.

This patch adds detection of such memory, and refuses to create a
scatterlist table for such memory.

Reported-by: Shuah Khan <shuahkhan@gmail.com>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 arch/arm/mm/dma-mapping.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index 64d7486262e5..e37c04facc1d 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -764,13 +764,31 @@ static void arm_coherent_dma_free(struct device *dev, size_t size, void *cpu_add
 	__arm_dma_free(dev, size, cpu_addr, handle, attrs, true);
 }
 
+/*
+ * The whole dma_get_sgtable() idea is fundamentally unsafe - it seems
+ * that the intention is to allow exporting memory allocated via the
+ * coherent DMA APIs through the dma_buf API, which only accepts a
+ * scattertable.  This presents a couple of problems:
+ * 1. Not all memory allocated via the coherent DMA APIs is backed by
+ *    a struct page
+ * 2. Passing coherent DMA memory into the streaming APIs is not allowed
+ *    as we will try to flush the memory through a different alias to that
+ *    actually being used (and the flushes are redundant.)
+ */
 int arm_dma_get_sgtable(struct device *dev, struct sg_table *sgt,
 		 void *cpu_addr, dma_addr_t handle, size_t size,
 		 struct dma_attrs *attrs)
 {
-	struct page *page = pfn_to_page(dma_to_pfn(dev, handle));
+	unsigned long pfn = dma_to_pfn(dev, handle);
+	struct page *page;
 	int ret;
 
+	/* If the PFN is not valid, we do not have a struct page */
+	if (!pfn_valid(pfn))
+		return -ENXIO;
+
+	page = pfn_to_page(pfn);
+
 	ret = sg_alloc_table(sgt, 1, GFP_KERNEL);
 	if (unlikely(ret))
 		return ret;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] cpuidle: powernv: Pass correct drv->cpumask for registration
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (40 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] xhci: plat: Register shutdown for xhci_plat Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] backlight: pwm_bl: Fix overflow condition Sasha Levin
                   ` (13 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Vaidyanathan Srinivasan, Rafael J . Wysocki, Sasha Levin

From: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 293d264f13cbde328d5477f49e3103edbc1dc191 ]

drv->cpumask defaults to cpu_possible_mask in __cpuidle_driver_init().
On PowerNV platform cpu_present could be less than cpu_possible in cases
where firmware detects the cpu, but it is not available to the OS.  When
CONFIG_HOTPLUG_CPU=n, such cpus are not hotplugable at runtime and hence
we skip creating cpu_device.

This breaks cpuidle on powernv where register_cpu() is not called for
cpus in cpu_possible_mask that cannot be hot-added at runtime.

Trying cpuidle_register_device() on cpu without cpu_device will cause
crash like this:

cpu 0xf: Vector: 380 (Data SLB Access) at [c000000ff1503490]
    pc: c00000000022c8bc: string+0x34/0x60
    lr: c00000000022ed78: vsnprintf+0x284/0x42c
    sp: c000000ff1503710
   msr: 9000000000009033
   dar: 6000000060000000
  current = 0xc000000ff1480000
  paca    = 0xc00000000fe82d00   softe: 0        irq_happened: 0x01
    pid   = 1, comm = swapper/8
Linux version 4.11.0-rc2 (sv@sagarika) (gcc version 4.9.4
(Buildroot 2017.02-00004-gc28573e) ) #15 SMP Fri Mar 17 19:32:02 IST 2017
enter ? for help
[link register   ] c00000000022ed78 vsnprintf+0x284/0x42c
[c000000ff1503710] c00000000022ebb8 vsnprintf+0xc4/0x42c (unreliable)
[c000000ff1503800] c00000000022ef40 vscnprintf+0x20/0x44
[c000000ff1503830] c0000000000ab61c vprintk_emit+0x94/0x2cc
[c000000ff15038a0] c0000000000acc9c vprintk_func+0x60/0x74
[c000000ff15038c0] c000000000619694 printk+0x38/0x4c
[c000000ff15038e0] c000000000224950 kobject_get+0x40/0x60
[c000000ff1503950] c00000000022507c kobject_add_internal+0x60/0x2c4
[c000000ff15039e0] c000000000225350 kobject_init_and_add+0x70/0x78
[c000000ff1503a60] c00000000053c288 cpuidle_add_sysfs+0x9c/0xe0
[c000000ff1503ae0] c00000000053aeac cpuidle_register_device+0xd4/0x12c
[c000000ff1503b30] c00000000053b108 cpuidle_register+0x98/0xcc
[c000000ff1503bc0] c00000000085eaf0 powernv_processor_idle_init+0x140/0x1e0
[c000000ff1503c60] c00000000000cd60 do_one_initcall+0xc0/0x15c
[c000000ff1503d20] c000000000833e84 kernel_init_freeable+0x1a0/0x25c
[c000000ff1503dc0] c00000000000d478 kernel_init+0x24/0x12c
[c000000ff1503e30] c00000000000b564 ret_from_kernel_thread+0x5c/0x78

This patch fixes the bug by passing correct cpumask from
powernv-cpuidle driver.

Signed-off-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
Reviewed-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com>
Acked-by: Michael Ellerman <mpe@ellerman.id.au>
[ rjw: Comment massage ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/cpuidle/cpuidle-powernv.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/cpuidle/cpuidle-powernv.c b/drivers/cpuidle/cpuidle-powernv.c
index 3442764a5293..544e0e330afd 100644
--- a/drivers/cpuidle/cpuidle-powernv.c
+++ b/drivers/cpuidle/cpuidle-powernv.c
@@ -153,6 +153,24 @@ static int powernv_cpuidle_driver_init(void)
 		drv->state_count += 1;
 	}
 
+	/*
+	 * On the PowerNV platform cpu_present may be less than cpu_possible in
+	 * cases when firmware detects the CPU, but it is not available to the
+	 * OS.  If CONFIG_HOTPLUG_CPU=n, then such CPUs are not hotplugable at
+	 * run time and hence cpu_devices are not created for those CPUs by the
+	 * generic topology_init().
+	 *
+	 * drv->cpumask defaults to cpu_possible_mask in
+	 * __cpuidle_driver_init().  This breaks cpuidle on PowerNV where
+	 * cpu_devices are not created for CPUs in cpu_possible_mask that
+	 * cannot be hot-added later at run time.
+	 *
+	 * Trying cpuidle_register_device() on a CPU without a cpu_device is
+	 * incorrect, so pass a correct CPU mask to the generic cpuidle driver.
+	 */
+
+	drv->cpumask = (struct cpumask *)cpu_present_mask;
+
 	return 0;
 }
 
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] crypto: crypto4xx - increase context and scatter ring buffer elements
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (42 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] backlight: pwm_bl: Fix overflow condition Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] net: phy: at803x: Change error to EINVAL for invalid MAC Sasha Levin
                   ` (11 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Christian Lamparter, Herbert Xu, Sasha Levin

From: Christian Lamparter <chunkeey@gmail.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 778f81d6cdb7d25360f082ac0384d5103f04eca5 ]

If crypto4xx is used in conjunction with dm-crypt, the available
ring buffer elements are not enough to handle the load properly.

On an aes-cbc-essiv:sha256 encrypted swap partition the read
performance is abyssal: (tested with hdparm -t)

/dev/mapper/swap_crypt:
 Timing buffered disk reads:  14 MB in  3.68 seconds =   3.81 MB/sec

The patch increases both PPC4XX_NUM_SD and PPC4XX_NUM_PD to 256.
This improves the performance considerably:

/dev/mapper/swap_crypt:
 Timing buffered disk reads: 104 MB in  3.03 seconds =  34.31 MB/sec

Furthermore, PPC4XX_LAST_SD, PPC4XX_LAST_GD and PPC4XX_LAST_PD
can be easily calculated from their respective PPC4XX_NUM_*
constant.

Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/crypto/amcc/crypto4xx_core.h | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/crypto/amcc/crypto4xx_core.h b/drivers/crypto/amcc/crypto4xx_core.h
index bac0bdeb4b5f..b6529b9fcbe2 100644
--- a/drivers/crypto/amcc/crypto4xx_core.h
+++ b/drivers/crypto/amcc/crypto4xx_core.h
@@ -32,12 +32,12 @@
 #define PPC405EX_CE_RESET                       0x00000008
 
 #define CRYPTO4XX_CRYPTO_PRIORITY		300
-#define PPC4XX_LAST_PD				63
-#define PPC4XX_NUM_PD				64
-#define PPC4XX_LAST_GD				1023
+#define PPC4XX_NUM_PD				256
+#define PPC4XX_LAST_PD				(PPC4XX_NUM_PD - 1)
 #define PPC4XX_NUM_GD				1024
-#define PPC4XX_LAST_SD				63
-#define PPC4XX_NUM_SD				64
+#define PPC4XX_LAST_GD				(PPC4XX_NUM_GD - 1)
+#define PPC4XX_NUM_SD				256
+#define PPC4XX_LAST_SD				(PPC4XX_NUM_SD - 1)
 #define PPC4XX_SD_BUFFER_SIZE			2048
 
 #define PD_ENTRY_INUSE				1
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] backlight: pwm_bl: Fix overflow condition
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (41 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] cpuidle: powernv: Pass correct drv->cpumask for registration Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] crypto: crypto4xx - increase context and scatter ring buffer elements Sasha Levin
                   ` (12 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Derek Basehore, Lee Jones, Sasha Levin

From: Derek Basehore <dbasehore@chromium.org>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 5d0c49acebc9488e37db95f1d4a55644e545ffe7 ]

This fixes an overflow condition that can happen with high max
brightness and period values in compute_duty_cycle. This fixes it by
using a 64 bit variable for computing the duty cycle.

Signed-off-by: Derek Basehore <dbasehore@chromium.org>
Acked-by: Thierry Reding <thierry.reding@gmail.com>
Reviewed-by: Brian Norris <briannorris@chromium.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/video/backlight/pwm_bl.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c
index 6897f1c1bc73..95d01562ffa2 100644
--- a/drivers/video/backlight/pwm_bl.c
+++ b/drivers/video/backlight/pwm_bl.c
@@ -79,14 +79,17 @@ static void pwm_backlight_power_off(struct pwm_bl_data *pb)
 static int compute_duty_cycle(struct pwm_bl_data *pb, int brightness)
 {
 	unsigned int lth = pb->lth_brightness;
-	int duty_cycle;
+	u64 duty_cycle;
 
 	if (pb->levels)
 		duty_cycle = pb->levels[brightness];
 	else
 		duty_cycle = brightness;
 
-	return (duty_cycle * (pb->period - lth) / pb->scale) + lth;
+	duty_cycle *= pb->period - lth;
+	do_div(duty_cycle, pb->scale);
+
+	return duty_cycle + lth;
 }
 
 static int pwm_backlight_update_status(struct backlight_device *bl)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] net: phy: at803x: Change error to EINVAL for invalid MAC
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (43 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] crypto: crypto4xx - increase context and scatter ring buffer elements Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] scsi: cxgb4i: fix Tx skb leak Sasha Levin
                   ` (10 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Dan Murphy, David S . Miller, Sasha Levin

From: Dan Murphy <dmurphy@ti.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit fc7556877d1748ac00958822a0a3bba1d4bd9e0d ]

Change the return error code to EINVAL if the MAC
address is not valid in the set_wol function.

Signed-off-by: Dan Murphy <dmurphy@ti.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/phy/at803x.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/phy/at803x.c b/drivers/net/phy/at803x.c
index fabf11d32d27..d4b8ea30cd9d 100644
--- a/drivers/net/phy/at803x.c
+++ b/drivers/net/phy/at803x.c
@@ -105,7 +105,7 @@ static int at803x_set_wol(struct phy_device *phydev,
 		mac = (const u8 *) ndev->dev_addr;
 
 		if (!is_valid_ether_addr(mac))
-			return -EFAULT;
+			return -EINVAL;
 
 		for (i = 0; i < 3; i++) {
 			phy_write(phydev, AT803X_MMD_ACCESS_CONTROL,
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] PCI: Avoid bus reset if bridge itself is broken
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (45 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] scsi: cxgb4i: fix Tx skb leak Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] PCI: Create SR-IOV virtfn/physfn links before attaching driver Sasha Levin
                   ` (8 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: David Daney, Jan Glauber, Bjorn Helgaas, Sasha Levin

From: David Daney <david.daney@cavium.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 357027786f3523d26f42391aa4c075b8495e5d28 ]

When checking to see if a PCI bus can safely be reset, we previously
checked to see if any of the children had their PCI_DEV_FLAGS_NO_BUS_RESET
flag set.  Children marked with that flag are known not to behave well
after a bus reset.

Some PCIe root port bridges also do not behave well after a bus reset,
sometimes causing the devices behind the bridge to become unusable.

Add a check for PCI_DEV_FLAGS_NO_BUS_RESET being set in the bridge device
to allow these bridges to be flagged, and prevent their secondary buses
from being reset.

Signed-off-by: David Daney <david.daney@cavium.com>
[jglauber@cavium.com: fixed typo]
Signed-off-by: Jan Glauber <jglauber@cavium.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/pci/pci.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 409f895b5a3d..ffd8fe77b8ae 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -3651,6 +3651,10 @@ static bool pci_bus_resetable(struct pci_bus *bus)
 {
 	struct pci_dev *dev;
 
+
+	if (bus->self && (bus->self->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET))
+		return false;
+
 	list_for_each_entry(dev, &bus->devices, bus_list) {
 		if (dev->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET ||
 		    (dev->subordinate && !pci_bus_resetable(dev->subordinate)))
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] scsi: cxgb4i: fix Tx skb leak
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (44 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] net: phy: at803x: Change error to EINVAL for invalid MAC Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] PCI: Avoid bus reset if bridge itself is broken Sasha Levin
                   ` (9 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Varun Prakash, Martin K . Petersen, Sasha Levin

From: Varun Prakash <varun@chelsio.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 9b3a081fb62158b50bcc90522ca2423017544367 ]

In case of connection reset Tx skb queue can have some skbs which are
not transmitted so purge Tx skb queue in release_offload_resources() to
avoid skb leak.

Signed-off-by: Varun Prakash <varun@chelsio.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/scsi/cxgbi/cxgb4i/cxgb4i.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c b/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c
index dd00e5fe4a5e..18f782bfc874 100644
--- a/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c
+++ b/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c
@@ -1332,6 +1332,7 @@ static void release_offload_resources(struct cxgbi_sock *csk)
 		csk, csk->state, csk->flags, csk->tid);
 
 	cxgbi_sock_free_cpl_skbs(csk);
+	cxgbi_sock_purge_write_queue(csk);
 	if (csk->wr_cred != csk->wr_max_cred) {
 		cxgbi_sock_purge_wr_queue(csk);
 		cxgbi_sock_reset_wr_list(csk);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] PCI: Create SR-IOV virtfn/physfn links before attaching driver
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (46 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] PCI: Avoid bus reset if bridge itself is broken Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] igb: check memory allocation failure Sasha Levin
                   ` (7 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Stuart Hayes, Bjorn Helgaas, Sasha Levin

From: Stuart Hayes <stuart.w.hayes@gmail.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 27d6162944b9b34c32cd5841acd21786637ee743 ]

When creating virtual functions, create the "virtfn%u" and "physfn" links
in sysfs *before* attaching the driver instead of after.  When we attach
the driver to the new virtual network interface first, there is a race when
the driver attaches to the new sends out an "add" udev event, and the
network interface naming software (biosdevname or systemd, for example)
tries to look at these links.

Signed-off-by: Stuart Hayes <stuart.w.hayes@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/pci/iov.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index 089a1f41e44e..95db37cf5f08 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -156,7 +156,6 @@ static int virtfn_add(struct pci_dev *dev, int id, int reset)
 	pci_device_add(virtfn, virtfn->bus);
 	mutex_unlock(&iov->dev->sriov->lock);
 
-	pci_bus_add_device(virtfn);
 	sprintf(buf, "virtfn%u", id);
 	rc = sysfs_create_link(&dev->dev.kobj, &virtfn->dev.kobj, buf);
 	if (rc)
@@ -167,6 +166,8 @@ static int virtfn_add(struct pci_dev *dev, int id, int reset)
 
 	kobject_uevent(&virtfn->dev.kobj, KOBJ_CHANGE);
 
+	pci_bus_add_device(virtfn);
+
 	return 0;
 
 failed2:
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] igb: check memory allocation failure
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (47 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] PCI: Create SR-IOV virtfn/physfn links before attaching driver Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] ixgbe: fix use of uninitialized padding Sasha Levin
                   ` (6 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Christophe JAILLET, Jeff Kirsher, Sasha Levin

From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 18eb86362a52f0af933cc0fd5e37027317eb2d1c ]

Check memory allocation failures and return -ENOMEM in such cases, as
already done for other memory allocations in this function.

This avoids NULL pointers dereference.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Tested-by: Aaron Brown <aaron.f.brown@intel.com
Acked-by: PJ Waskiewicz <peter.waskiewicz.jr@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/intel/igb/igb_main.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index 34f15f56b2a1..2d54a9e40d7c 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -2998,6 +2998,8 @@ static int igb_sw_init(struct igb_adapter *adapter)
 	/* Setup and initialize a copy of the hw vlan table array */
 	adapter->shadow_vfta = kcalloc(E1000_VLAN_FILTER_TBL_SIZE, sizeof(u32),
 				       GFP_ATOMIC);
+	if (!adapter->shadow_vfta)
+		return -ENOMEM;
 
 	/* This call may decrease the number of queues */
 	if (igb_init_interrupt_scheme(adapter, true)) {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] ixgbe: fix use of uninitialized padding
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (48 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] igb: check memory allocation failure Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] PCI/AER: Report non-fatal errors only to the affected endpoint Sasha Levin
                   ` (5 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Emil Tantilov, Jeff Kirsher, Sasha Levin

From: Emil Tantilov <emil.s.tantilov@intel.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit dcfd6b839c998bc9838e2a47f44f37afbdf3099c ]

This patch is resolving Coverity hits where padding in a structure could
be used uninitialized.

- Initialize fwd_cmd.pad/2 before ixgbe_calculate_checksum()

- Initialize buffer.pad2/3 before ixgbe_hic_unlocked()

Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | 4 ++--
 drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c   | 2 ++
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
index 06d8f3cfa099..14f789e72c29 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c
@@ -3609,10 +3609,10 @@ s32 ixgbe_set_fw_drv_ver_generic(struct ixgbe_hw *hw, u8 maj, u8 min,
 	fw_cmd.ver_build = build;
 	fw_cmd.ver_sub = sub;
 	fw_cmd.hdr.checksum = 0;
-	fw_cmd.hdr.checksum = ixgbe_calculate_checksum((u8 *)&fw_cmd,
-				(FW_CEM_HDR_LEN + fw_cmd.hdr.buf_len));
 	fw_cmd.pad = 0;
 	fw_cmd.pad2 = 0;
+	fw_cmd.hdr.checksum = ixgbe_calculate_checksum((u8 *)&fw_cmd,
+				(FW_CEM_HDR_LEN + fw_cmd.hdr.buf_len));
 
 	for (i = 0; i <= FW_CEM_MAX_RETRIES; i++) {
 		ret_val = ixgbe_host_interface_command(hw, (u32 *)&fw_cmd,
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
index cf5cf819a6b8..0e1e63ee6c5e 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
@@ -224,6 +224,8 @@ static s32 ixgbe_read_ee_hostif_buffer_X550(struct ixgbe_hw *hw,
 		/* convert offset from words to bytes */
 		buffer.address = cpu_to_be32((offset + current_word) * 2);
 		buffer.length = cpu_to_be16(words_to_read * 2);
+		buffer.pad2 = 0;
+		buffer.pad3 = 0;
 
 		status = ixgbe_host_interface_command(hw, (u32 *)&buffer,
 						      sizeof(buffer),
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] PCI/AER: Report non-fatal errors only to the affected endpoint
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (49 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] ixgbe: fix use of uninitialized padding Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] scsi: lpfc: Fix secure firmware updates Sasha Levin
                   ` (4 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Gabriele Paoloni, Dongdong Liu, Bjorn Helgaas, Sasha Levin

From: Gabriele Paoloni <gabriele.paoloni@huawei.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 86acc790717fb60fb51ea3095084e331d8711c74 ]

Previously, if an non-fatal error was reported by an endpoint, we
called report_error_detected() for the endpoint, every sibling on the
bus, and their descendents.  If any of them did not implement the
.error_detected() method, do_recovery() failed, leaving all these
devices unrecovered.

For example, the system described in the bugzilla below has two devices:

  0000:74:02.0 [19e5:a230] SAS controller, driver has .error_detected()
  0000:74:03.0 [19e5:a235] SATA controller, driver lacks .error_detected()

When a device such as 74:02.0 reported a non-fatal error, do_recovery()
failed because 74:03.0 lacked an .error_detected() method.  But per PCIe
r3.1, sec 6.2.2.2.2, such an error does not compromise the Link and
does not affect 74:03.0:

  Non-fatal errors are uncorrectable errors which cause a particular
  transaction to be unreliable but the Link is otherwise fully functional.
  Isolating Non-fatal from Fatal errors provides Requester/Receiver logic
  in a device or system management software the opportunity to recover from
  the error without resetting the components on the Link and disturbing
  other transactions in progress.  Devices not associated with the
  transaction in error are not impacted by the error.

Report non-fatal errors only to the endpoint that reported them.  We really
want to check for AER_NONFATAL here, but the current code structure doesn't
allow that.  Looking for pci_channel_io_normal is the best we can do now.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=197055
Fixes: 6c2b374d7485 ("PCI-Express AER implemetation: AER core and aerdriver")
Signed-off-by: Gabriele Paoloni <gabriele.paoloni@huawei.com>
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
[bhelgaas: changelog]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/pci/pcie/aer/aerdrv_core.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/pci/pcie/aer/aerdrv_core.c b/drivers/pci/pcie/aer/aerdrv_core.c
index b60a325234c5..cca4b4789ac4 100644
--- a/drivers/pci/pcie/aer/aerdrv_core.c
+++ b/drivers/pci/pcie/aer/aerdrv_core.c
@@ -360,7 +360,14 @@ static pci_ers_result_t broadcast_error_message(struct pci_dev *dev,
 		 * If the error is reported by an end point, we think this
 		 * error is related to the upstream link of the end point.
 		 */
-		pci_walk_bus(dev->bus, cb, &result_data);
+		if (state == pci_channel_io_normal)
+			/*
+			 * the error is non fatal so the bus is ok, just invoke
+			 * the callback for the function that logged the error.
+			 */
+			cb(dev, &result_data);
+		else
+			pci_walk_bus(dev->bus, cb, &result_data);
 	}
 
 	return result_data.result;
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] scsi: lpfc: Fix secure firmware updates
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (50 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] PCI/AER: Report non-fatal errors only to the affected endpoint Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] fm10k: ensure we process SM mbx when processing VF mbx Sasha Levin
                   ` (3 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Dick Kennedy, James Smart, Martin K . Petersen, Sasha Levin

From: Dick Kennedy <dick.kennedy@broadcom.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 184fc2b9a8bcbda9c14d0a1e7fbecfc028c7702e ]

Firmware update fails with: status x17 add_status x56 on the final write

If multiple DMA buffers are used for the download, some firmware revs
have difficulty with signatures and crcs split across the dma buffer
boundaries.  Resolve by making all writes be a single 4k page in length.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/scsi/lpfc/lpfc_hw4.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h
index 3757a7399983..d7ee72ef99ed 100644
--- a/drivers/scsi/lpfc/lpfc_hw4.h
+++ b/drivers/scsi/lpfc/lpfc_hw4.h
@@ -2953,7 +2953,7 @@ struct lpfc_mbx_get_port_name {
 #define MB_CEQ_STATUS_QUEUE_FLUSHING		0x4
 #define MB_CQE_STATUS_DMA_FAILED		0x5
 
-#define LPFC_MBX_WR_CONFIG_MAX_BDE		8
+#define LPFC_MBX_WR_CONFIG_MAX_BDE		1
 struct lpfc_mbx_wr_object {
 	struct mbox_header header;
 	union {
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] scsi: lpfc: PLOGI failures during NPIV testing
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (52 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] fm10k: ensure we process SM mbx when processing VF mbx Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] tcp: fix under-evaluated ssthresh in TCP Vegas Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] rtc: set the alarm to the next expiring timer Sasha Levin
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Dick Kennedy, James Smart, Martin K . Petersen, Sasha Levin

From: Dick Kennedy <dick.kennedy@broadcom.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit e8bcf0ae4c0346fdc78ebefe0eefcaa6a6622d38 ]

Local Reject/Invalid RPI errors seen during discovery.

Temporary RPI cleanup was occurring regardless of SLI rev. It's only
necessary on SLI-4.

Adjust the test for whether cleanup is necessary.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/scsi/lpfc/lpfc_hbadisc.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
index 2500f15d437f..574b1a9b2b32 100644
--- a/drivers/scsi/lpfc/lpfc_hbadisc.c
+++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
@@ -4767,7 +4767,8 @@ lpfc_nlp_remove(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
 	lpfc_cancel_retry_delay_tmo(vport, ndlp);
 	if ((ndlp->nlp_flag & NLP_DEFER_RM) &&
 	    !(ndlp->nlp_flag & NLP_REG_LOGIN_SEND) &&
-	    !(ndlp->nlp_flag & NLP_RPI_REGISTERED)) {
+	    !(ndlp->nlp_flag & NLP_RPI_REGISTERED) &&
+	    phba->sli_rev != LPFC_SLI_REV4) {
 		/* For this case we need to cleanup the default rpi
 		 * allocated by the firmware.
 		 */
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] fm10k: ensure we process SM mbx when processing VF mbx
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (51 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] scsi: lpfc: Fix secure firmware updates Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] scsi: lpfc: PLOGI failures during NPIV testing Sasha Levin
                   ` (2 subsequent siblings)
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Jacob Keller, Jeff Kirsher, Sasha Levin

From: Jacob Keller <jacob.e.keller@intel.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 17a91809942ca32c70026d2d5ba3348a2c4fdf8f ]

When we process VF mailboxes, the driver is likely going to also queue
up messages to the switch manager. This process merely queues up the
FIFO, but doesn't actually begin the transmission process. Because we
hold the mailbox lock during this VF processing, the PF<->SM mailbox is
not getting processed at this time. Ensure that we actually process the
PF<->SM mailbox in between each PF<->VF mailbox.

This should ensure prompt transmission of the messages queued up after
each VF message is received and handled.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Krishneil Singh <krishneil.k.singh@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/net/ethernet/intel/fm10k/fm10k_iov.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_iov.c b/drivers/net/ethernet/intel/fm10k/fm10k_iov.c
index 5b08e6284a3c..8d8fd5d49d60 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k_iov.c
+++ b/drivers/net/ethernet/intel/fm10k/fm10k_iov.c
@@ -126,6 +126,9 @@ s32 fm10k_iov_mbx(struct fm10k_intfc *interface)
 		struct fm10k_mbx_info *mbx = &vf_info->mbx;
 		u16 glort = vf_info->glort;
 
+		/* process the SM mailbox first to drain outgoing messages */
+		hw->mbx.ops.process(hw, &hw->mbx);
+
 		/* verify port mapping is valid, if not reset port */
 		if (vf_info->vf_flags && !fm10k_glort_valid_pf(hw, glort))
 			hw->iov.ops.reset_lport(hw, vf_info);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] rtc: set the alarm to the next expiring timer
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (54 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] tcp: fix under-evaluated ssthresh in TCP Vegas Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits; +Cc: Alexandre Belloni, Sasha Levin

From: Alexandre Belloni <alexandre.belloni@free-electrons.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit 74717b28cb32e1ad3c1042cafd76b264c8c0f68d ]

If there is any non expired timer in the queue, the RTC alarm is never set.
This is an issue when adding a timer that expires before the next non
expired timer.

Ensure the RTC alarm is set in that case.

Fixes: 2b2f5ff00f63 ("rtc: interface: ignore expired timers when enqueuing new timers")
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/rtc/interface.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c
index faa81ac2d481..038da40e4038 100644
--- a/drivers/rtc/interface.c
+++ b/drivers/rtc/interface.c
@@ -809,7 +809,7 @@ static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer)
 	}
 
 	timerqueue_add(&rtc->timerqueue, &timer->node);
-	if (!next) {
+	if (!next || ktime_before(timer->node.expires, next->expires)) {
 		struct rtc_wkalrm alarm;
 		int err;
 		alarm.time = rtc_ktime_to_tm(timer->node.expires);
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

* [added to the  stable tree] tcp: fix under-evaluated ssthresh in TCP Vegas
  2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
                   ` (53 preceding siblings ...)
  2018-03-01 15:20 ` [added to the stable tree] scsi: lpfc: PLOGI failures during NPIV testing Sasha Levin
@ 2018-03-01 15:20 ` Sasha Levin
  2018-03-01 15:20 ` [added to the stable tree] rtc: set the alarm to the next expiring timer Sasha Levin
  55 siblings, 0 replies; 57+ messages in thread
From: Sasha Levin @ 2018-03-01 15:20 UTC (permalink / raw)
  To: stable, stable-commits
  Cc: Hoang Tran, Hoang Tran, David S . Miller, Sasha Levin

From: Hoang Tran <tranviethoang.vn@gmail.com>

This patch has been added to the  stable tree. If you have any
objections, please let us know.

===============

[ Upstream commit cf5d74b85ef40c202c76d90959db4d850f301b95 ]

With the commit 76174004a0f19785 (tcp: do not slow start when cwnd equals
ssthresh), the comparison to the reduced cwnd in tcp_vegas_ssthresh() would
under-evaluate the ssthresh.

Signed-off-by: Hoang Tran <hoang.tran@uclouvain.be>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 net/ipv4/tcp_vegas.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/ipv4/tcp_vegas.c b/net/ipv4/tcp_vegas.c
index a6cea1d5e20d..33c0879612f5 100644
--- a/net/ipv4/tcp_vegas.c
+++ b/net/ipv4/tcp_vegas.c
@@ -158,7 +158,7 @@ EXPORT_SYMBOL_GPL(tcp_vegas_cwnd_event);
 
 static inline u32 tcp_vegas_ssthresh(struct tcp_sock *tp)
 {
-	return  min(tp->snd_ssthresh, tp->snd_cwnd-1);
+	return  min(tp->snd_ssthresh, tp->snd_cwnd);
 }
 
 static void tcp_vegas_cong_avoid(struct sock *sk, u32 ack, u32 acked)
-- 
2.14.1

^ permalink raw reply related	[flat|nested] 57+ messages in thread

end of thread, other threads:[~2018-03-01 15:23 UTC | newest]

Thread overview: 57+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-01 15:19 [added to the stable tree] Bluetooth: btusb: fix QCA Rome suspend/resume Sasha Levin
2018-03-01 15:19 ` [added to the stable tree] more bio_map_user_iov() leak fixes Sasha Levin
2018-03-01 15:19 ` [added to the stable tree] arm: KVM: Fix VTTBR_BADDR_MASK BUG_ON off-by-one Sasha Levin
2018-03-01 15:19 ` [added to the stable tree] x86/mm: Add INVPCID helpers Sasha Levin
2018-03-01 15:19 ` [added to the stable tree] arm64: Initialise high_memory global variable earlier Sasha Levin
2018-03-01 15:19 ` [added to the stable tree] x86/mm: Fix INVPCID asm constraint Sasha Levin
2018-03-01 15:19 ` [added to the stable tree] x86/mm: Add a 'noinvpcid' boot option to turn off INVPCID Sasha Levin
2018-03-01 15:19 ` [added to the stable tree] x86/mm: If INVPCID is available, use it to flush global mappings Sasha Levin
2018-03-01 15:19 ` [added to the stable tree] mm/mmu_context, sched/core: Fix mmu_context.h assumption Sasha Levin
2018-03-01 15:19 ` [added to the stable tree] x86/mm: Build arch/x86/mm/tlb.c even on !SMP Sasha Levin
2018-03-01 15:19 ` [added to the stable tree] sched/core: Add switch_mm_irqs_off() and use it in the scheduler Sasha Levin
2018-03-01 15:19 ` [added to the stable tree] sched/core: Idle_task_exit() shouldn't use switch_mm_irqs_off() Sasha Levin
2018-03-01 15:19 ` [added to the stable tree] ARM: Hide finish_arch_post_lock_switch() from modules Sasha Levin
2018-03-01 15:19 ` [added to the stable tree] x86/irq: Do not substract irq_tlb_count from irq_call_count Sasha Levin
2018-03-01 15:19 ` [added to the stable tree] ALSA: hda - add support for docking station for HP 820 G2 Sasha Levin
2018-03-01 15:19 ` [added to the stable tree] arm: kprobes: Fix the return address of multiple kretprobes Sasha Levin
2018-03-01 15:19 ` [added to the stable tree] arm: kprobes: Align stack to 8-bytes in test code Sasha Levin
2018-03-01 15:19 ` [added to the stable tree] cpuidle: Validate cpu_dev in cpuidle_add_sysfs() Sasha Levin
2018-03-01 15:19 ` [added to the stable tree] r8152: fix the list rx_done may be used without initialization Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] crypto: deadlock between crypto_alg_sem/rtnl_mutex/genl_mutex Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] usb: gadget: f_uvc: Sanity check wMaxPacketSize for SuperSpeed Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] net: qmi_wwan: Add USB IDs for MDM6600 modem on Motorola Droid 4 Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] usb: gadget: udc: remove pointer dereference after free Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] netfilter: nfnl_cthelper: fix runtime expectation policy updates Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] netfilter: nfnl_cthelper: Fix memory leak Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] pinctrl: st: add irq_request/release_resources callbacks Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] scsi: lpfc: Fix PT2PT PRLI reject Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] KVM: x86: correct async page present tracepoint Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] ARM: dts: ti: fix PCI bus dtc warnings Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] HID: xinmo: fix for out of range for THT 2P arcade controller Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] hwmon: (asus_atk0110) fix uninitialized data access Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] s390/qeth: no ETH header for outbound AF_IUCV Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] bna: avoid writing uninitialized data into hw registers Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] net: Do not allow negative values for busy_read and busy_poll sysctl interfaces Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] i40e: Do not enable NAPI on q_vectors that have no rings Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] netfilter: nfnl_cthelper: fix a race when walk the nf_ct_helper_hash table Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] irda: vlsi_ir: fix check for DMA mapping errors Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] netfilter: nf_nat_snmp: Fix panic when snmp_trap_helper fails to register Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] ARM: dts: am335x-evmsk: adjust mmc2 param to allow suspend Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] isdn: kcapi: avoid uninitialized data Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] ARM: dma-mapping: disallow dma_get_sgtable() for non-kernel managed memory Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] xhci: plat: Register shutdown for xhci_plat Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] cpuidle: powernv: Pass correct drv->cpumask for registration Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] backlight: pwm_bl: Fix overflow condition Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] crypto: crypto4xx - increase context and scatter ring buffer elements Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] net: phy: at803x: Change error to EINVAL for invalid MAC Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] scsi: cxgb4i: fix Tx skb leak Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] PCI: Avoid bus reset if bridge itself is broken Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] PCI: Create SR-IOV virtfn/physfn links before attaching driver Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] igb: check memory allocation failure Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] ixgbe: fix use of uninitialized padding Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] PCI/AER: Report non-fatal errors only to the affected endpoint Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] scsi: lpfc: Fix secure firmware updates Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] fm10k: ensure we process SM mbx when processing VF mbx Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] scsi: lpfc: PLOGI failures during NPIV testing Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] tcp: fix under-evaluated ssthresh in TCP Vegas Sasha Levin
2018-03-01 15:20 ` [added to the stable tree] rtc: set the alarm to the next expiring timer Sasha Levin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.