[PATCH 5.4 50/50] PM / devfreq: Add missing locking while setting suspend_freq

2020-05-08 Thread Greg Kroah-Hartman
From: Marek Szyprowski 

commit e1e047ace8cef6d143f38c7d769753f133becbe6 upstream.

Commit 2abb0d5268ae ("PM / devfreq: Lock devfreq in trans_stat_show")
revealed a missing locking while calling devfreq_update_status() function
during suspend/resume cycle.

Code analysis revealed that devfreq_set_target() function was called
without needed locks held for setting device specific suspend_freq if such
has been defined. This patch fixes that by adding the needed locking, what
fixes following kernel warning on Exynos4412-based OdroidU3 board during
system suspend:

PM: suspend entry (deep)
Filesystems sync: 0.002 seconds
Freezing user space processes ... (elapsed 0.001 seconds) done.
OOM killer disabled.
Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
[ cut here ]
WARNING: CPU: 2 PID: 1385 at drivers/devfreq/devfreq.c:204 
devfreq_update_status+0xc0/0x188
Modules linked in:
CPU: 2 PID: 1385 Comm: rtcwake Not tainted 5.4.0-rc6-next-2019 #6848
Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
[] (unwind_backtrace) from [] (show_stack+0x10/0x14)
[] (show_stack) from [] (dump_stack+0xb4/0xe0)
[] (dump_stack) from [] (__warn+0xf4/0x10c)
[] (__warn) from [] (warn_slowpath_fmt+0xb0/0xb8)
[] (warn_slowpath_fmt) from [] 
(devfreq_update_status+0xc0/0x188)
[] (devfreq_update_status) from [] 
(devfreq_set_target+0xb0/0x15c)
[] (devfreq_set_target) from [] (devfreq_suspend+0x2c/0x64)
[] (devfreq_suspend) from [] (dpm_suspend+0xa4/0x57c)
[] (dpm_suspend) from [] (dpm_suspend_start+0x98/0xa0)
[] (dpm_suspend_start) from [] 
(suspend_devices_and_enter+0xec/0xc74)
[] (suspend_devices_and_enter) from [] 
(pm_suspend+0x340/0x410)
[] (pm_suspend) from [] (state_store+0x6c/0xc8)
[] (state_store) from [] (kernfs_fop_write+0x10c/0x228)
[] (kernfs_fop_write) from [] (__vfs_write+0x30/0x1d0)
[] (__vfs_write) from [] (vfs_write+0xa4/0x180)
[] (vfs_write) from [] (ksys_write+0x60/0xd8)
[] (ksys_write) from [] (ret_fast_syscall+0x0/0x28)
Exception stack(0xed3d7fa8 to 0xed3d7ff0)
...
irq event stamp: 9667
hardirqs last  enabled at (9679): [] _raw_spin_unlock_irq+0x20/0x58
hardirqs last disabled at (9698): [] __schedule+0xd8/0x818
softirqs last  enabled at (9694): [] __do_softirq+0x4fc/0x5fc
softirqs last disabled at (9719): [] irq_exit+0x16c/0x170
---[ end trace 41ac5b57d046bdbc ]---
[ cut here ]

Signed-off-by: Marek Szyprowski 
Acked-by: Chanwoo Choi 
Signed-off-by: Rafael J. Wysocki 
Signed-off-by: Greg Kroah-Hartman 

---
 drivers/devfreq/devfreq.c |4 
 1 file changed, 4 insertions(+)

--- a/drivers/devfreq/devfreq.c
+++ b/drivers/devfreq/devfreq.c
@@ -902,7 +902,9 @@ int devfreq_suspend_device(struct devfre
}
 
if (devfreq->suspend_freq) {
+   mutex_lock(>lock);
ret = devfreq_set_target(devfreq, devfreq->suspend_freq, 0);
+   mutex_unlock(>lock);
if (ret)
return ret;
}
@@ -930,7 +932,9 @@ int devfreq_resume_device(struct devfreq
return 0;
 
if (devfreq->resume_freq) {
+   mutex_lock(>lock);
ret = devfreq_set_target(devfreq, devfreq->resume_freq, 0);
+   mutex_unlock(>lock);
if (ret)
return ret;
}




[PATCH 5.4 28/50] net: bcmgenet: suppress warnings on failed Rx SKB allocations

2020-05-08 Thread Greg Kroah-Hartman
From: Doug Berger 

[ Upstream commit ecaeceb8a8a145d93c7e136f170238229165348f ]

The driver is designed to drop Rx packets and reclaim the buffers
when an allocation fails, and the network interface needs to safely
handle this packet loss. Therefore, an allocation failure of Rx
SKBs is relatively benign.

However, the output of the warning message occurs with a high
scheduling priority that can cause excessive jitter/latency for
other high priority processing.

This commit suppresses the warning messages to prevent scheduling
problems while retaining the failure count in the statistics of
the network interface.

Signed-off-by: Doug Berger 
Acked-by: Florian Fainelli 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
---
 drivers/net/ethernet/broadcom/genet/bcmgenet.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c 
b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index ff09ee777b2bf..6f01f4e03cef1 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -1697,7 +1697,8 @@ static struct sk_buff *bcmgenet_rx_refill(struct 
bcmgenet_priv *priv,
dma_addr_t mapping;
 
/* Allocate a new Rx skb */
-   skb = netdev_alloc_skb(priv->dev, priv->rx_buf_len + SKB_ALIGNMENT);
+   skb = __netdev_alloc_skb(priv->dev, priv->rx_buf_len + SKB_ALIGNMENT,
+GFP_ATOMIC | __GFP_NOWARN);
if (!skb) {
priv->mib.alloc_rx_buff_failed++;
netif_err(priv, rx_err, priv->dev,
-- 
2.20.1





[PATCH 5.6 11/49] selftests: vm: Fix 64-bit test builds for powerpc64le

2020-05-08 Thread Greg Kroah-Hartman
From: Sandipan Das 

[ Upstream commit 963e3e9c9a127013eb4d3c82eb997068b1adbb89 ]

Some tests are built only for 64-bit systems. This makes
sure that these tests are built for both big and little
endian variants of powerpc64.

Fixes: 7549b3364201 ("selftests: vm: Build/Run 64bit tests only on 64bit arch")
Reviewed-by: Kamalesh Babulal 
Signed-off-by: Sandipan Das 
Tested-by: Michael Ellerman 
Signed-off-by: Shuah Khan 
Signed-off-by: Sasha Levin 
---
 tools/testing/selftests/vm/Makefile| 2 +-
 tools/testing/selftests/vm/run_vmtests | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/vm/Makefile 
b/tools/testing/selftests/vm/Makefile
index 3f2e2f0ccbc9a..8074340c6b3ab 100644
--- a/tools/testing/selftests/vm/Makefile
+++ b/tools/testing/selftests/vm/Makefile
@@ -19,7 +19,7 @@ TEST_GEN_FILES += thuge-gen
 TEST_GEN_FILES += transhuge-stress
 TEST_GEN_FILES += userfaultfd
 
-ifneq (,$(filter $(MACHINE),arm64 ia64 mips64 parisc64 ppc64 riscv64 s390x 
sh64 sparc64 x86_64))
+ifneq (,$(filter $(MACHINE),arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 
s390x sh64 sparc64 x86_64))
 TEST_GEN_FILES += va_128TBswitch
 TEST_GEN_FILES += virtual_address_range
 endif
diff --git a/tools/testing/selftests/vm/run_vmtests 
b/tools/testing/selftests/vm/run_vmtests
index f337148431980..6e137c9baa1e0 100755
--- a/tools/testing/selftests/vm/run_vmtests
+++ b/tools/testing/selftests/vm/run_vmtests
@@ -59,7 +59,7 @@ else
 fi
 
 #filter 64bit architectures
-ARCH64STR="arm64 ia64 mips64 parisc64 ppc64 riscv64 s390x sh64 sparc64 x86_64"
+ARCH64STR="arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sh64 sparc64 
x86_64"
 if [ -z $ARCH ]; then
   ARCH=`uname -m 2>/dev/null | sed -e 's/aarch64.*/arm64/'`
 fi
-- 
2.20.1





[PATCH 5.4 34/50] lib: devres: add a helper function for ioremap_uc

2020-05-08 Thread Greg Kroah-Hartman
From: Tuowen Zhao 

[ Upstream commit e537654b7039aacfe8ae629d49655c0e5692ad44 ]

Implement a resource managed strongly uncachable ioremap function.

Cc:  # v4.19+
Tested-by: AceLan Kao 
Signed-off-by: Tuowen Zhao 
Acked-by: Mika Westerberg 
Acked-by: Andy Shevchenko 
Acked-by: Luis Chamberlain 
Signed-off-by: Lee Jones 
Signed-off-by: Sasha Levin 
---
 include/linux/io.h |  2 ++
 lib/devres.c   | 19 +++
 2 files changed, 21 insertions(+)

diff --git a/include/linux/io.h b/include/linux/io.h
index accac822336aa..a59834bc0a114 100644
--- a/include/linux/io.h
+++ b/include/linux/io.h
@@ -64,6 +64,8 @@ static inline void devm_ioport_unmap(struct device *dev, void 
__iomem *addr)
 
 void __iomem *devm_ioremap(struct device *dev, resource_size_t offset,
   resource_size_t size);
+void __iomem *devm_ioremap_uc(struct device *dev, resource_size_t offset,
+  resource_size_t size);
 void __iomem *devm_ioremap_nocache(struct device *dev, resource_size_t offset,
   resource_size_t size);
 void __iomem *devm_ioremap_wc(struct device *dev, resource_size_t offset,
diff --git a/lib/devres.c b/lib/devres.c
index 6a0e9bd6524ae..17624d35e82d4 100644
--- a/lib/devres.c
+++ b/lib/devres.c
@@ -9,6 +9,7 @@
 enum devm_ioremap_type {
DEVM_IOREMAP = 0,
DEVM_IOREMAP_NC,
+   DEVM_IOREMAP_UC,
DEVM_IOREMAP_WC,
 };
 
@@ -39,6 +40,9 @@ static void __iomem *__devm_ioremap(struct device *dev, 
resource_size_t offset,
case DEVM_IOREMAP_NC:
addr = ioremap_nocache(offset, size);
break;
+   case DEVM_IOREMAP_UC:
+   addr = ioremap_uc(offset, size);
+   break;
case DEVM_IOREMAP_WC:
addr = ioremap_wc(offset, size);
break;
@@ -68,6 +72,21 @@ void __iomem *devm_ioremap(struct device *dev, 
resource_size_t offset,
 }
 EXPORT_SYMBOL(devm_ioremap);
 
+/**
+ * devm_ioremap_uc - Managed ioremap_uc()
+ * @dev: Generic device to remap IO address for
+ * @offset: Resource address to map
+ * @size: Size of map
+ *
+ * Managed ioremap_uc().  Map is automatically unmapped on driver detach.
+ */
+void __iomem *devm_ioremap_uc(struct device *dev, resource_size_t offset,
+ resource_size_t size)
+{
+   return __devm_ioremap(dev, offset, size, DEVM_IOREMAP_UC);
+}
+EXPORT_SYMBOL_GPL(devm_ioremap_uc);
+
 /**
  * devm_ioremap_nocache - Managed ioremap_nocache()
  * @dev: Generic device to remap IO address for
-- 
2.20.1





[PATCH 5.6 10/49] selftests: vm: Do not override definition of ARCH

2020-05-08 Thread Greg Kroah-Hartman
From: Sandipan Das 

[ Upstream commit 24c3f063c57b2a8ae21b259bcfa7690e2eb56dd9 ]

Independent builds of the vm selftests is currently broken because
commit 7549b3364201 ("selftests: vm: Build/Run 64bit tests only on
64bit arch") overrides the value of ARCH with the machine name from
uname. This does not always match the architecture names used for
tasks like header installation.

E.g. for building tests on powerpc64, we need ARCH=powerpc
and not ARCH=ppc64 or ARCH=ppc64le. Otherwise, the build
fails as shown below.

  $ uname -m
  ppc64le

  $ make -C tools/testing/selftests/vm
  make: Entering directory '/home/sandipan/linux/tools/testing/selftests/vm'
  make --no-builtin-rules ARCH=ppc64le -C ../../../.. headers_install
  make[1]: Entering directory '/home/sandipan/linux'
  Makefile:653: arch/ppc64le/Makefile: No such file or directory
  make[1]: *** No rule to make target 'arch/ppc64le/Makefile'.  Stop.
  make[1]: Leaving directory '/home/sandipan/linux'
  ../lib.mk:50: recipe for target 'khdr' failed
  make: *** [khdr] Error 2
  make: Leaving directory '/home/sandipan/linux/tools/testing/selftests/vm'

Fixes: 7549b3364201 ("selftests: vm: Build/Run 64bit tests only on 64bit arch")
Signed-off-by: Sandipan Das 
Tested-by: Michael Ellerman 
Signed-off-by: Shuah Khan 
Signed-off-by: Sasha Levin 
---
 tools/testing/selftests/vm/Makefile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/vm/Makefile 
b/tools/testing/selftests/vm/Makefile
index 7f9a8a8c31da9..3f2e2f0ccbc9a 100644
--- a/tools/testing/selftests/vm/Makefile
+++ b/tools/testing/selftests/vm/Makefile
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 # Makefile for vm selftests
 uname_M := $(shell uname -m 2>/dev/null || echo not)
-ARCH ?= $(shell echo $(uname_M) | sed -e 's/aarch64.*/arm64/')
+MACHINE ?= $(shell echo $(uname_M) | sed -e 's/aarch64.*/arm64/')
 
 CFLAGS = -Wall -I ../../../../usr/include $(EXTRA_CFLAGS)
 LDLIBS = -lrt
@@ -19,7 +19,7 @@ TEST_GEN_FILES += thuge-gen
 TEST_GEN_FILES += transhuge-stress
 TEST_GEN_FILES += userfaultfd
 
-ifneq (,$(filter $(ARCH),arm64 ia64 mips64 parisc64 ppc64 riscv64 s390x sh64 
sparc64 x86_64))
+ifneq (,$(filter $(MACHINE),arm64 ia64 mips64 parisc64 ppc64 riscv64 s390x 
sh64 sparc64 x86_64))
 TEST_GEN_FILES += va_128TBswitch
 TEST_GEN_FILES += virtual_address_range
 endif
-- 
2.20.1





[PATCH 5.6 14/49] drm/bridge: anx6345: set correct BPC for display_info of connector

2020-05-08 Thread Greg Kroah-Hartman
From: Vasily Khoruzhick 

[ Upstream commit 1e8a6ce9186dbf342eebc07cf14cae5e82164e03 ]

Some drivers (e.g. sun4i-drm) need this info to decide whether they
need to enable dithering. Currently driver reports what panel supports
and if panel supports 8 we don't get dithering enabled.

Hardcode BPC to 6 for now since that's the only BPC
that driver supports.

Fixes: 6aa192698089 ("drm/bridge: Add Analogix anx6345 support")
Signed-off-by: Vasily Khoruzhick 
Acked-by: Jernej Skrabec 
Signed-off-by: Jernej Skrabec 
Link: 
https://patchwork.freedesktop.org/patch/msgid/2020032953.2941405-1-anars...@gmail.com
Signed-off-by: Sasha Levin 
---
 drivers/gpu/drm/bridge/analogix/analogix-anx6345.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c 
b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
index 526507102c1ea..8d32fea84c75e 100644
--- a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
+++ b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
@@ -485,6 +485,9 @@ static int anx6345_get_modes(struct drm_connector 
*connector)
 
num_modes += drm_add_edid_modes(connector, anx6345->edid);
 
+   /* Driver currently supports only 6bpc */
+   connector->display_info.bpc = 6;
+
 unlock:
if (power_off)
anx6345_poweroff(anx6345);
-- 
2.20.1





[PATCH 5.6 04/49] ASoC: topology: Check return value of soc_tplg_create_tlv

2020-05-08 Thread Greg Kroah-Hartman
From: Amadeusz Sławiński 

[ Upstream commit 482db55ae87f3749db05810a38b1d618dfd4407c ]

Function soc_tplg_create_tlv can fail, so we should check if it succeded
or not and proceed appropriately.

Signed-off-by: Amadeusz Sławiński 
Reviewed-by: Ranjani Sridharan 
Reviewed-by: Pierre-Louis Bossart 
Link: 
https://lore.kernel.org/r/20200327204729.397-3-amadeuszx.slawin...@linux.intel.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/soc-topology.c | 16 ++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
index 7a7c427de95d6..5d974a36cdc92 100644
--- a/sound/soc/soc-topology.c
+++ b/sound/soc/soc-topology.c
@@ -894,7 +894,13 @@ static int soc_tplg_dmixer_create(struct soc_tplg *tplg, 
unsigned int count,
}
 
/* create any TLV data */
-   soc_tplg_create_tlv(tplg, , >hdr);
+   err = soc_tplg_create_tlv(tplg, , >hdr);
+   if (err < 0) {
+   dev_err(tplg->dev, "ASoC: failed to create TLV %s\n",
+   mc->hdr.name);
+   kfree(sm);
+   continue;
+   }
 
/* pass control to driver for optional further init */
err = soc_tplg_init_kcontrol(tplg, ,
@@ -1355,7 +1361,13 @@ static struct snd_kcontrol_new 
*soc_tplg_dapm_widget_dmixer_create(
}
 
/* create any TLV data */
-   soc_tplg_create_tlv(tplg, [i], >hdr);
+   err = soc_tplg_create_tlv(tplg, [i], >hdr);
+   if (err < 0) {
+   dev_err(tplg->dev, "ASoC: failed to create TLV %s\n",
+   mc->hdr.name);
+   kfree(sm);
+   continue;
+   }
 
/* pass control to driver for optional further init */
err = soc_tplg_init_kcontrol(tplg, [i],
-- 
2.20.1





[PATCH 5.6 36/49] lib/mpi: Fix building for powerpc with clang

2020-05-08 Thread Greg Kroah-Hartman
From: Nathan Chancellor 

[ Upstream commit 5990cdee689c6885b27c6d969a3d58b09002b0bc ]

0day reports over and over on an powerpc randconfig with clang:

lib/mpi/generic_mpih-mul1.c:37:13: error: invalid use of a cast in a
inline asm context requiring an l-value: remove the cast or build with
-fheinous-gnu-extensions

Remove the superfluous casts, which have been done previously for x86
and arm32 in commit dea632cadd12 ("lib/mpi: fix build with clang") and
commit 7b7c1df2883d ("lib/mpi/longlong.h: fix building with 32-bit
x86").

Reported-by: kbuild test robot 
Signed-off-by: Nathan Chancellor 
Acked-by: Herbert Xu 
Signed-off-by: Michael Ellerman 
Link: https://github.com/ClangBuiltLinux/linux/issues/991
Link: https://lore.kernel.org/r/20200413195041.24064-1-natechancel...@gmail.com
Signed-off-by: Sasha Levin 
---
 lib/mpi/longlong.h | 34 +-
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/lib/mpi/longlong.h b/lib/mpi/longlong.h
index 2dceaca27489c..891e1c3549c46 100644
--- a/lib/mpi/longlong.h
+++ b/lib/mpi/longlong.h
@@ -722,22 +722,22 @@ do {  
\
 do { \
if (__builtin_constant_p(bh) && (bh) == 0) \
__asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \
-   : "=r" ((USItype)(sh)), \
-   "=" ((USItype)(sl)) \
+   : "=r" (sh), \
+   "=" (sl) \
: "%r" ((USItype)(ah)), \
"%r" ((USItype)(al)), \
"rI" ((USItype)(bl))); \
else if (__builtin_constant_p(bh) && (bh) == ~(USItype) 0) \
__asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \
-   : "=r" ((USItype)(sh)), \
-   "=" ((USItype)(sl)) \
+   : "=r" (sh), \
+   "=" (sl) \
: "%r" ((USItype)(ah)), \
"%r" ((USItype)(al)), \
"rI" ((USItype)(bl))); \
else \
__asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3" \
-   : "=r" ((USItype)(sh)), \
-   "=" ((USItype)(sl)) \
+   : "=r" (sh), \
+   "=" (sl) \
: "%r" ((USItype)(ah)), \
"r" ((USItype)(bh)), \
"%r" ((USItype)(al)), \
@@ -747,36 +747,36 @@ do { \
 do { \
if (__builtin_constant_p(ah) && (ah) == 0) \
__asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \
-   : "=r" ((USItype)(sh)), \
-   "=" ((USItype)(sl)) \
+   : "=r" (sh), \
+   "=" (sl) \
: "r" ((USItype)(bh)), \
"rI" ((USItype)(al)), \
"r" ((USItype)(bl))); \
else if (__builtin_constant_p(ah) && (ah) == ~(USItype) 0) \
__asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \
-   : "=r" ((USItype)(sh)), \
-   "=" ((USItype)(sl)) \
+   : "=r" (sh), \
+   "=" (sl) \
: "r" ((USItype)(bh)), \
"rI" ((USItype)(al)), \
"r" ((USItype)(bl))); \
else if (__builtin_constant_p(bh) && (bh) == 0) \
__asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \
-   : "=r" ((USItype)(sh)), \
-   "=" ((USItype)(sl)) \
+   : "=r" (sh), \
+   "=" (sl) \
: "r" ((USItype)(ah)), \
"rI" ((USItype)(al)), \
"r" ((USItype)(bl))); \
else if (__builtin_constant_p(bh) && (bh) == ~(USItype) 0) \
__asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \
-   : "=r" ((USItype)(sh)), \
-   "=" ((USItype)(sl)) \
+   : "=r" (sh), \
+   "=" (sl) \
: "r" ((USItype)(ah)), \
"rI" ((USItype)(al)), \
"r" ((USItype)(bl))); \
else \
__asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \
-   : "=r" ((USItype)(sh)), \
-   "=" ((USItype)(sl)) \
+   : "=r" (sh), \
+   "=" (sl) \
: "r" ((USItype)(ah)), \
"r" ((USItype)(bh)), \
"rI" ((USItype)(al)), \
@@ -787,7 +787,7 @@ do { \
 do { \
USItype __m0 = (m0), __m1 = (m1); \
__asm__ ("mulhwu %0,%1,%2" \
-   : "=r" ((USItype) ph) \
+   : "=r" (ph) \
: "%r" (__m0), \
"r" (__m1)); \
(pl) = __m0 * __m1; \
-- 
2.20.1





Re: [PATCH] staging: iio: ad5933: rework probe to use devm_ function variants

2020-05-08 Thread Mark Brown
On Fri, May 08, 2020 at 01:43:07PM +0100, Jonathan Cameron wrote:
> Dan Carpenter  wrote:

> > It feels like we should just make a devm_ version of regulator_enable().
> > Or potentially this is more complicated than it seems, but in that case
> > probably adding devm_add_action_or_reset() is more complicated than it
> > seems as well.

> It has been a while since that was last proposed.   At the time the
> counter argument was that you should almost always be doing some form
> of PM and hence the regulator shouldn't have the same lifetime as the
> driver.   Reality is that a lot of simple drivers either don't do
> PM or have elected to not turn the regulator off so as to retain state
> etc.

Same issue as before - I fear it's far too error prone in conjunction
with runtime PM, and if the driver really is just doing an enable and
disable at probe and remove then that seems fairly trivial anyway.  I
am constantly finding abuses of things like regulator_get_optional()
(which we do actually need) in drivers and it's not like I can review
all the users, I don't have much confidence in this stuff especially
when practically speaking few regulators ever change state at runtime so
issues don't manifest so often.


signature.asc
Description: PGP signature


[PATCH 5.6 29/49] ASoC: rsnd: Fix "status check failed" spam for multi-SSI

2020-05-08 Thread Greg Kroah-Hartman
From: Matthias Blankertz 

[ Upstream commit 54cb6221688660670a2e430892d7f4e6370263b8 ]

Fix the rsnd_ssi_stop function to skip disabling the individual SSIs of
a multi-SSI setup, as the actual stop is performed by rsnd_ssiu_stop_gen2
- the same logic as in rsnd_ssi_start. The attempt to disable these SSIs
was harmless, but caused a "status check failed" message to be printed
for every SSI in the multi-SSI setup.
The disabling of interrupts is still performed, as they are enabled for
all SSIs in rsnd_ssi_init, but care is taken to not accidentally set the
EN bit for an SSI where it was not set by rsnd_ssi_start.

Signed-off-by: Matthias Blankertz 
Acked-by: Kuninori Morimoto 
Link: 
https://lore.kernel.org/r/20200417153017.1744454-3-matthias.blanke...@cetitec.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/sh/rcar/ssi.c | 8 +++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
index 9900a4f6f4e53..4a7d3413917fc 100644
--- a/sound/soc/sh/rcar/ssi.c
+++ b/sound/soc/sh/rcar/ssi.c
@@ -594,10 +594,16 @@ static int rsnd_ssi_stop(struct rsnd_mod *mod,
 * Capture:  It might not receave data. Do nothing
 */
if (rsnd_io_is_play(io)) {
-   rsnd_mod_write(mod, SSICR, cr | EN);
+   rsnd_mod_write(mod, SSICR, cr | ssi->cr_en);
rsnd_ssi_status_check(mod, DIRQ);
}
 
+   /* In multi-SSI mode, stop is performed by setting ssi0129 in
+* SSI_CONTROL to 0 (in rsnd_ssio_stop_gen2). Do nothing here.
+*/
+   if (rsnd_ssi_multi_slaves_runtime(io))
+   return 0;
+
/*
 * disable SSI,
 * and, wait idle state
-- 
2.20.1





[PATCH 5.6 33/49] tracing: Fix memory leaks in trace_events_hist.c

2020-05-08 Thread Greg Kroah-Hartman
From: Vamshi K Sthambamkadi 

[ Upstream commit 9da73974eb9c965dd9989befb593b8c8da9e4bdc ]

kmemleak report 1:
[<9092c50b>] kmem_cache_alloc_trace+0x138/0x270
[<05a2c9ed>] create_field_var+0xcf/0x180
[<528a2d68>] action_create+0xe2/0xc80
[<63f50b61>] event_hist_trigger_func+0x15b5/0x1920
[<28ea5d3d>] trigger_process_regex+0x7b/0xc0
[<3138e86f>] event_trigger_write+0x4d/0xb0
[] __vfs_write+0x30/0x200
[<4f424a0d>] vfs_write+0x96/0x1b0
[] ksys_write+0x53/0xc0
[<3717101a>] __ia32_sys_write+0x15/0x20
[] do_fast_syscall_32+0x70/0x250
[<46e2629c>] entry_SYSENTER_32+0xaf/0x102

This is because save_vars[] of struct hist_trigger_data are
not destroyed

kmemleak report 2:
[<9092c50b>] kmem_cache_alloc_trace+0x138/0x270
[<6e5e97c5>] create_var+0x3c/0x110
[] create_field_var+0xaf/0x180
[<528a2d68>] action_create+0xe2/0xc80
[<63f50b61>] event_hist_trigger_func+0x15b5/0x1920
[<28ea5d3d>] trigger_process_regex+0x7b/0xc0
[<3138e86f>] event_trigger_write+0x4d/0xb0
[] __vfs_write+0x30/0x200
[<4f424a0d>] vfs_write+0x96/0x1b0
[] ksys_write+0x53/0xc0
[<3717101a>] __ia32_sys_write+0x15/0x20
[] do_fast_syscall_32+0x70/0x250
[<46e2629c>] entry_SYSENTER_32+0xaf/0x102

struct hist_field allocated through create_var() do not initialize
"ref" field to 1. The code in __destroy_hist_field() does not destroy
object if "ref" is initialized to zero, the condition
if (--hist_field->ref > 1) always passes since unsigned int wraps.

kmemleak report 3:
[] __kmalloc_track_caller+0x139/0x2b0
[] kstrdup+0x27/0x50
[<39d70006>] init_var_ref+0x58/0xd0
[<8ca76370>] create_var_ref+0x89/0xe0
[] action_create+0x38f/0xc80
[<7c146821>] event_hist_trigger_func+0x15b5/0x1920
[<07de3f61>] trigger_process_regex+0x7b/0xc0
[] event_trigger_write+0x4d/0xb0
[<19bf1512>] __vfs_write+0x30/0x200
[<64ce4d27>] vfs_write+0x96/0x1b0
[] ksys_write+0x53/0xc0
[<7d4230cd>] __ia32_sys_write+0x15/0x20
[<8eadca00>] do_fast_syscall_32+0x70/0x250
[<235cf985>] entry_SYSENTER_32+0xaf/0x102

hist_fields (system & event_name) are not freed

Link: http://lkml.kernel.org/r/20200422061503.GA5151@cosmos

Signed-off-by: Vamshi K Sthambamkadi 
Signed-off-by: Steven Rostedt (VMware) 
Signed-off-by: Sasha Levin 
---
 kernel/trace/trace_events_hist.c | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
index 5f6834a2bf411..fcab11cc6833b 100644
--- a/kernel/trace/trace_events_hist.c
+++ b/kernel/trace/trace_events_hist.c
@@ -3320,6 +3320,9 @@ static void __destroy_hist_field(struct hist_field 
*hist_field)
kfree(hist_field->name);
kfree(hist_field->type);
 
+   kfree(hist_field->system);
+   kfree(hist_field->event_name);
+
kfree(hist_field);
 }
 
@@ -4382,6 +4385,7 @@ static struct hist_field *create_var(struct 
hist_trigger_data *hist_data,
goto out;
}
 
+   var->ref = 1;
var->flags = HIST_FIELD_FL_VAR;
var->var.idx = idx;
var->var.hist_data = var->hist_data = hist_data;
@@ -5011,6 +5015,9 @@ static void destroy_field_vars(struct hist_trigger_data 
*hist_data)
 
for (i = 0; i < hist_data->n_field_vars; i++)
destroy_field_var(hist_data->field_vars[i]);
+
+   for (i = 0; i < hist_data->n_save_vars; i++)
+   destroy_field_var(hist_data->save_vars[i]);
 }
 
 static void save_field_var(struct hist_trigger_data *hist_data,
-- 
2.20.1





[PATCH 5.6 30/49] cifs: protect updating server->dstaddr with a spinlock

2020-05-08 Thread Greg Kroah-Hartman
From: Ronnie Sahlberg 

[ Upstream commit fada37f6f62995cc449b36ebba1220594bfe55fe ]

We use a spinlock while we are reading and accessing the destination address 
for a server.
We need to also use this spinlock to protect when we are modifying this address 
from
reconn_set_ipaddr().

Signed-off-by: Ronnie Sahlberg 
Reviewed-by: Jeff Layton 
Signed-off-by: Steve French 
Signed-off-by: Sasha Levin 
---
 fs/cifs/connect.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index 4804d1df8c1cf..d4a23b48e24d8 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -375,8 +375,10 @@ static int reconn_set_ipaddr(struct TCP_Server_Info 
*server)
return rc;
}
 
+   spin_lock(_tcp_ses_lock);
rc = cifs_convert_address((struct sockaddr *)>dstaddr, ipaddr,
  strlen(ipaddr));
+   spin_unlock(_tcp_ses_lock);
kfree(ipaddr);
 
return !rc ? -1 : 0;
-- 
2.20.1





[PATCH 5.6 06/49] ASoC: topology: Check soc_tplg_add_route return value

2020-05-08 Thread Greg Kroah-Hartman
From: Amadeusz Sławiński 

[ Upstream commit 6856e887eae3efc0fe56899cb3f969fe063171c5 ]

Function soc_tplg_add_route can propagate error code from callback, we
should check its return value and handle fail in correct way.

Signed-off-by: Amadeusz Sławiński 
Reviewed-by: Ranjani Sridharan 
Reviewed-by: Pierre-Louis Bossart 
Link: 
https://lore.kernel.org/r/20200327204729.397-5-amadeuszx.slawin...@linux.intel.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/soc-topology.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
index c86c3ea533f68..aa7714f2b78fd 100644
--- a/sound/soc/soc-topology.c
+++ b/sound/soc/soc-topology.c
@@ -1284,7 +1284,9 @@ static int soc_tplg_dapm_graph_elems_load(struct soc_tplg 
*tplg,
routes[i]->dobj.index = tplg->index;
list_add([i]->dobj.list, >comp->dobj_list);
 
-   soc_tplg_add_route(tplg, routes[i]);
+   ret = soc_tplg_add_route(tplg, routes[i]);
+   if (ret < 0)
+   break;
 
/* add route, but keep going if some fail */
snd_soc_dapm_add_routes(dapm, routes[i], 1);
-- 
2.20.1





[PATCH 5.6 21/49] ASoC: codecs: hdac_hdmi: Fix incorrect use of list_for_each_entry

2020-05-08 Thread Greg Kroah-Hartman
From: Amadeusz Sławiński 

[ Upstream commit 326b509238171d37402dbe308e154cc234ed1960 ]

If we don't find any pcm, pcm will point at address at an offset from
the the list head and not a meaningful structure. Fix this by returning
correct pcm if found and NULL if not. Found with coccinelle.

Signed-off-by: Amadeusz Sławiński 
Link: 
https://lore.kernel.org/r/20200415162849.308-1-amadeuszx.slawin...@linux.intel.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/codecs/hdac_hdmi.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/sound/soc/codecs/hdac_hdmi.c b/sound/soc/codecs/hdac_hdmi.c
index e6558475e006d..f0f689ddbefe8 100644
--- a/sound/soc/codecs/hdac_hdmi.c
+++ b/sound/soc/codecs/hdac_hdmi.c
@@ -142,14 +142,14 @@ static struct hdac_hdmi_pcm *
 hdac_hdmi_get_pcm_from_cvt(struct hdac_hdmi_priv *hdmi,
   struct hdac_hdmi_cvt *cvt)
 {
-   struct hdac_hdmi_pcm *pcm = NULL;
+   struct hdac_hdmi_pcm *pcm;
 
list_for_each_entry(pcm, >pcm_list, head) {
if (pcm->cvt == cvt)
-   break;
+   return pcm;
}
 
-   return pcm;
+   return NULL;
 }
 
 static void hdac_hdmi_jack_report(struct hdac_hdmi_pcm *pcm,
-- 
2.20.1





[PATCH 5.6 37/49] mac80211: sta_info: Add lockdep condition for RCU list usage

2020-05-08 Thread Greg Kroah-Hartman
From: Madhuparna Bhowmik 

[ Upstream commit 8ca47eb9f9e4e10e7e7fa695731a88941732c38d ]

The function sta_info_get_by_idx() uses RCU list primitive.
It is called with  local->sta_mtx held from mac80211/cfg.c.
Add lockdep expression to avoid any false positive RCU list warnings.

Signed-off-by: Madhuparna Bhowmik 
Link: 
https://lore.kernel.org/r/20200409082906.27427-1-madhuparnabhowmi...@gmail.com
Signed-off-by: Johannes Berg 
Signed-off-by: Sasha Levin 
---
 net/mac80211/sta_info.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index e3572be307d6c..149ed0510778d 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -231,7 +231,8 @@ struct sta_info *sta_info_get_by_idx(struct 
ieee80211_sub_if_data *sdata,
struct sta_info *sta;
int i = 0;
 
-   list_for_each_entry_rcu(sta, >sta_list, list) {
+   list_for_each_entry_rcu(sta, >sta_list, list,
+   lockdep_is_held(>sta_mtx)) {
if (sdata != sta->sdata)
continue;
if (i < idx) {
-- 
2.20.1





[PATCH 5.6 16/49] ASoC: sgtl5000: Fix VAG power-on handling

2020-05-08 Thread Greg Kroah-Hartman
From: Sebastian Reichel 

[ Upstream commit aa7812737f2877e192d57626cbe8825cc7cf6de9 ]

As mentioned slightly out of patch context in the code, there
is no reset routine for the chip. On boards where the chip is
supplied by a fixed regulator, it might not even be resetted
during (e.g. watchdog) reboot and can be in any state.

If the device is probed with VAG enabled, the driver's probe
routine will generate a loud pop sound when ANA_POWER is
being programmed. Avoid this by properly disabling just the
VAG bit and waiting the required power down time.

Signed-off-by: Sebastian Reichel 
Reviewed-by: Fabio Estevam 
Link: 
https://lore.kernel.org/r/20200414181140.145825-1-sebastian.reic...@collabora.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/codecs/sgtl5000.c | 34 ++
 sound/soc/codecs/sgtl5000.h |  1 +
 2 files changed, 35 insertions(+)

diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
index d5130193b4a2f..e8a8bf7b4ffed 100644
--- a/sound/soc/codecs/sgtl5000.c
+++ b/sound/soc/codecs/sgtl5000.c
@@ -1653,6 +1653,40 @@ static int sgtl5000_i2c_probe(struct i2c_client *client,
dev_err(>dev,
"Error %d initializing CHIP_CLK_CTRL\n", ret);
 
+   /* Mute everything to avoid pop from the following power-up */
+   ret = regmap_write(sgtl5000->regmap, SGTL5000_CHIP_ANA_CTRL,
+  SGTL5000_CHIP_ANA_CTRL_DEFAULT);
+   if (ret) {
+   dev_err(>dev,
+   "Error %d muting outputs via CHIP_ANA_CTRL\n", ret);
+   goto disable_clk;
+   }
+
+   /*
+* If VAG is powered-on (e.g. from previous boot), it would be disabled
+* by the write to ANA_POWER in later steps of the probe code. This
+* may create a loud pop even with all outputs muted. The proper way
+* to circumvent this is disabling the bit first and waiting the proper
+* cool-down time.
+*/
+   ret = regmap_read(sgtl5000->regmap, SGTL5000_CHIP_ANA_POWER, );
+   if (ret) {
+   dev_err(>dev, "Failed to read ANA_POWER: %d\n", ret);
+   goto disable_clk;
+   }
+   if (value & SGTL5000_VAG_POWERUP) {
+   ret = regmap_update_bits(sgtl5000->regmap,
+SGTL5000_CHIP_ANA_POWER,
+SGTL5000_VAG_POWERUP,
+0);
+   if (ret) {
+   dev_err(>dev, "Error %d disabling VAG\n", ret);
+   goto disable_clk;
+   }
+
+   msleep(SGTL5000_VAG_POWERDOWN_DELAY);
+   }
+
/* Follow section 2.2.1.1 of AN3663 */
ana_pwr = SGTL5000_ANA_POWER_DEFAULT;
if (sgtl5000->num_supplies <= VDDD) {
diff --git a/sound/soc/codecs/sgtl5000.h b/sound/soc/codecs/sgtl5000.h
index a4bf4bca95bf7..56ec5863f2507 100644
--- a/sound/soc/codecs/sgtl5000.h
+++ b/sound/soc/codecs/sgtl5000.h
@@ -233,6 +233,7 @@
 /*
  * SGTL5000_CHIP_ANA_CTRL
  */
+#define SGTL5000_CHIP_ANA_CTRL_DEFAULT 0x0133
 #define SGTL5000_LINE_OUT_MUTE 0x0100
 #define SGTL5000_HP_SEL_MASK   0x0040
 #define SGTL5000_HP_SEL_SHIFT  6
-- 
2.20.1





[PATCH 5.6 42/49] drm/amdgpu: Fix oops when pp_funcs is unset in ACPI event

2020-05-08 Thread Greg Kroah-Hartman
From: Aaron Ma 

commit 5932d260a8d85a103bd6c504fbb85ff58b156bf9 upstream.

On ARCTURUS and RENOIR, powerplay is not supported yet.
When plug in or unplug power jack, ACPI event will issue.
Then kernel NULL pointer BUG will be triggered.
Check for NULL pointers before calling.

Signed-off-by: Aaron Ma 
Signed-off-by: Alex Deucher 
Cc: sta...@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman 

---
 drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c |3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
@@ -91,7 +91,8 @@ void amdgpu_pm_acpi_event_handler(struct
adev->pm.ac_power = true;
else
adev->pm.ac_power = false;
-   if (adev->powerplay.pp_funcs->enable_bapm)
+   if (adev->powerplay.pp_funcs &&
+   adev->powerplay.pp_funcs->enable_bapm)
amdgpu_dpm_enable_bapm(adev, adev->pm.ac_power);
mutex_unlock(>pm.mutex);
}




[PATCH 5.6 39/49] net: systemport: suppress warnings on failed Rx SKB allocations

2020-05-08 Thread Greg Kroah-Hartman
From: Doug Berger 

[ Upstream commit 3554e54a46125030c534820c297ed7f6c3907e24 ]

The driver is designed to drop Rx packets and reclaim the buffers
when an allocation fails, and the network interface needs to safely
handle this packet loss. Therefore, an allocation failure of Rx
SKBs is relatively benign.

However, the output of the warning message occurs with a high
scheduling priority that can cause excessive jitter/latency for
other high priority processing.

This commit suppresses the warning messages to prevent scheduling
problems while retaining the failure count in the statistics of
the network interface.

Signed-off-by: Doug Berger 
Acked-by: Florian Fainelli 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
---
 drivers/net/ethernet/broadcom/bcmsysport.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c 
b/drivers/net/ethernet/broadcom/bcmsysport.c
index 15b31cddc054b..2e4b4188659a9 100644
--- a/drivers/net/ethernet/broadcom/bcmsysport.c
+++ b/drivers/net/ethernet/broadcom/bcmsysport.c
@@ -666,7 +666,8 @@ static struct sk_buff *bcm_sysport_rx_refill(struct 
bcm_sysport_priv *priv,
dma_addr_t mapping;
 
/* Allocate a new SKB for a new packet */
-   skb = netdev_alloc_skb(priv->netdev, RX_BUF_LENGTH);
+   skb = __netdev_alloc_skb(priv->netdev, RX_BUF_LENGTH,
+GFP_ATOMIC | __GFP_NOWARN);
if (!skb) {
priv->mib.alloc_rx_buff_failed++;
netif_err(priv, rx_err, ndev, "SKB alloc failed\n");
-- 
2.20.1





[PATCH 5.6 28/49] ASoC: rsnd: Dont treat master SSI in multi SSI setup as parent

2020-05-08 Thread Greg Kroah-Hartman
From: Matthias Blankertz 

[ Upstream commit 0c258657ddfe81b4fc0183378d800c97ba0b7cdd ]

The master SSI of a multi-SSI setup was attached both to the
RSND_MOD_SSI slot and the RSND_MOD_SSIP slot of the rsnd_dai_stream.
This is not correct wrt. the meaning of being "parent" in the rest of
the SSI code, where it seems to indicate an SSI that provides clock and
word sync but is not transmitting/receiving audio data.

Not treating the multi-SSI master as parent allows removal of various
special cases to the rsnd_ssi_is_parent conditions introduced in commit
a09fb3f28a60 ("ASoC: rsnd: Fix parent SSI start/stop in multi-SSI mode").
It also fixes the issue that operations performed via rsnd_dai_call()
were performed twice for the master SSI. This caused some "status check
failed" spam when stopping a multi-SSI stream as the driver attempted to
stop the master SSI twice.

Signed-off-by: Matthias Blankertz 
Acked-by: Kuninori Morimoto 
Link: 
https://lore.kernel.org/r/20200417153017.1744454-2-matthias.blanke...@cetitec.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/sh/rcar/ssi.c | 11 +++
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
index d51fb3a394486..9900a4f6f4e53 100644
--- a/sound/soc/sh/rcar/ssi.c
+++ b/sound/soc/sh/rcar/ssi.c
@@ -407,7 +407,7 @@ static void rsnd_ssi_config_init(struct rsnd_mod *mod,
 * We shouldn't exchange SWSP after running.
 * This means, parent needs to care it.
 */
-   if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
+   if (rsnd_ssi_is_parent(mod, io))
goto init_end;
 
if (rsnd_io_is_play(io))
@@ -559,7 +559,7 @@ static int rsnd_ssi_start(struct rsnd_mod *mod,
 * EN is for data output.
 * SSI parent EN is not needed.
 */
-   if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
+   if (rsnd_ssi_is_parent(mod, io))
return 0;
 
ssi->cr_en = EN;
@@ -582,7 +582,7 @@ static int rsnd_ssi_stop(struct rsnd_mod *mod,
if (!rsnd_ssi_is_run_mods(mod, io))
return 0;
 
-   if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
+   if (rsnd_ssi_is_parent(mod, io))
return 0;
 
cr  =   ssi->cr_own |
@@ -620,7 +620,7 @@ static int rsnd_ssi_irq(struct rsnd_mod *mod,
if (rsnd_is_gen1(priv))
return 0;
 
-   if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
+   if (rsnd_ssi_is_parent(mod, io))
return 0;
 
if (!rsnd_ssi_is_run_mods(mod, io))
@@ -737,6 +737,9 @@ static void rsnd_ssi_parent_attach(struct rsnd_mod *mod,
if (!rsnd_rdai_is_clk_master(rdai))
return;
 
+   if (rsnd_ssi_is_multi_slave(mod, io))
+   return;
+
switch (rsnd_mod_id(mod)) {
case 1:
case 2:
-- 
2.20.1





[PATCH 5.6 27/49] net: stmmac: Fix sub-second increment

2020-05-08 Thread Greg Kroah-Hartman
From: Julien Beraud 

[ Upstream commit 91a2559c1dc5b0f7e1256d42b1508935e8eabfbf ]

In fine adjustement mode, which is the current default, the sub-second
increment register is the number of nanoseconds that will be added to
the clock when the accumulator overflows. At each clock cycle, the
value of the addend register is added to the accumulator.
Currently, we use 20ns = 1e09ns / 50MHz as this value whatever the
frequency of the ptp clock actually is.
The adjustment is then done on the addend register, only incrementing
every X clock cycles X being the ratio between 50MHz and ptp_clock_rate
(addend = 2^32 * 50MHz/ptp_clock_rate).
This causes the following issues :
- In case the frequency of the ptp clock is inferior or equal to 50MHz,
  the addend value calculation will overflow and the default
  addend value will be set to 0, causing the clock to not work at
  all. (For instance, for ptp_clock_rate = 50MHz, addend = 2^32).
- The resolution of the timestamping clock is limited to 20ns while it
  is not needed, thus limiting the accuracy of the timestamping to
  20ns.

Fix this by setting sub-second increment to 2e09ns / ptp_clock_rate.
It will allow to reach the minimum possible frequency for
ptp_clk_ref, which is 5MHz for GMII 1000Mps Full-Duplex by setting the
sub-second-increment to a higher value. For instance, for 25MHz, it
gives ssinc = 80ns and default_addend = 2^31.
It will also allow to use a lower value for sub-second-increment, thus
improving the timestamping accuracy with frequencies higher than
100MHz, for instance, for 200MHz, ssinc = 10ns and default_addend =
2^31.

v1->v2:
 - Remove modifications to the calculation of default addend, which broke
 compatibility with clock frequencies for which 20 / ptp_clk_freq
 is not an integer.
 - Modify description according to discussions.

Signed-off-by: Julien Beraud 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
---
 .../net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c| 12 
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
index 0201596225592..e5d9007c8090b 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
@@ -26,12 +26,16 @@ static void config_sub_second_increment(void __iomem 
*ioaddr,
unsigned long data;
u32 reg_value;
 
-   /* For GMAC3.x, 4.x versions, convert the ptp_clock to nano second
-*  formula = (1/ptp_clock) * 10
-* where ptp_clock is 50MHz if fine method is used to update system
+   /* For GMAC3.x, 4.x versions, in "fine adjustement mode" set sub-second
+* increment to twice the number of nanoseconds of a clock cycle.
+* The calculation of the default_addend value by the caller will set it
+* to mid-range = 2^31 when the remainder of this division is zero,
+* which will make the accumulator overflow once every 2 ptp_clock
+* cycles, adding twice the number of nanoseconds of a clock cycle :
+* 20ULL / ptp_clock.
 */
if (value & PTP_TCR_TSCFUPDT)
-   data = (10ULL / 5000);
+   data = (20ULL / ptp_clock);
else
data = (10ULL / ptp_clock);
 
-- 
2.20.1





[PATCH 5.6 48/49] cgroup, netclassid: remove double cond_resched

2020-05-08 Thread Greg Kroah-Hartman
From: Jiri Slaby 

commit 526f3d96b8f83b1b13d73bd0b5c79cc2c487ec8e upstream.

Commit 018d26fcd12a ("cgroup, netclassid: periodically release file_lock
on classid") added a second cond_resched to write_classid indirectly by
update_classid_task. Remove the one in write_classid.

Signed-off-by: Jiri Slaby 
Cc: Dmitry Yakunin 
Cc: Konstantin Khlebnikov 
Cc: David S. Miller 
Signed-off-by: David S. Miller 
Signed-off-by: Greg Kroah-Hartman 

---
 net/core/netclassid_cgroup.c |4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

--- a/net/core/netclassid_cgroup.c
+++ b/net/core/netclassid_cgroup.c
@@ -127,10 +127,8 @@ static int write_classid(struct cgroup_s
cs->classid = (u32)value;
 
css_task_iter_start(css, 0, );
-   while ((p = css_task_iter_next())) {
+   while ((p = css_task_iter_next()))
update_classid_task(p, cs->classid);
-   cond_resched();
-   }
css_task_iter_end();
 
return 0;




[PATCH 5.6 25/49] wimax/i2400m: Fix potential urb refcnt leak

2020-05-08 Thread Greg Kroah-Hartman
From: Xiyu Yang 

[ Upstream commit 7717cbec172c3554d470023b4020d5781961187e ]

i2400mu_bus_bm_wait_for_ack() invokes usb_get_urb(), which increases the
refcount of the "notif_urb".

When i2400mu_bus_bm_wait_for_ack() returns, local variable "notif_urb"
becomes invalid, so the refcount should be decreased to keep refcount
balanced.

The issue happens in all paths of i2400mu_bus_bm_wait_for_ack(), which
forget to decrease the refcnt increased by usb_get_urb(), causing a
refcnt leak.

Fix this issue by calling usb_put_urb() before the
i2400mu_bus_bm_wait_for_ack() returns.

Signed-off-by: Xiyu Yang 
Signed-off-by: Xin Tan 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
---
 drivers/net/wimax/i2400m/usb-fw.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/wimax/i2400m/usb-fw.c 
b/drivers/net/wimax/i2400m/usb-fw.c
index 529ebca1e9e13..1f7709d24f352 100644
--- a/drivers/net/wimax/i2400m/usb-fw.c
+++ b/drivers/net/wimax/i2400m/usb-fw.c
@@ -354,6 +354,7 @@ ssize_t i2400mu_bus_bm_wait_for_ack(struct i2400m *i2400m,
usb_autopm_put_interface(i2400mu->usb_iface);
d_fnend(8, dev, "(i2400m %p ack %p size %zu) = %ld\n",
i2400m, ack, ack_size, (long) result);
+   usb_put_urb(_urb);
return result;
 
 error_exceeded:
-- 
2.20.1





[PATCH 5.6 26/49] net: stmmac: fix enabling socfpgas ptp_ref_clock

2020-05-08 Thread Greg Kroah-Hartman
From: Julien Beraud 

[ Upstream commit 15ce30609d1e88d42fb1cd948f453e6d5f188249 ]

There are 2 registers to write to enable a ptp ref clock coming from the
fpga.
One that enables the usage of the clock from the fpga for emac0 and emac1
as a ptp ref clock, and the other to allow signals from the fpga to reach
emac0 and emac1.
Currently, if the dwmac-socfpga has phymode set to PHY_INTERFACE_MODE_MII,
PHY_INTERFACE_MODE_GMII, or PHY_INTERFACE_MODE_SGMII, both registers will
be written and the ptp ref clock will be set as coming from the fpga.
Separate the 2 register writes to only enable signals from the fpga to
reach emac0 or emac1 when ptp ref clock is not coming from the fpga.

Signed-off-by: Julien Beraud 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
---
 drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c | 9 ++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c 
b/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
index fa32cd5b418ef..70d41783329dd 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
@@ -291,16 +291,19 @@ static int socfpga_gen5_set_phy_mode(struct socfpga_dwmac 
*dwmac)
phymode == PHY_INTERFACE_MODE_MII ||
phymode == PHY_INTERFACE_MODE_GMII ||
phymode == PHY_INTERFACE_MODE_SGMII) {
-   ctrl |= SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK << (reg_shift / 2);
regmap_read(sys_mgr_base_addr, SYSMGR_FPGAGRP_MODULE_REG,
);
module |= (SYSMGR_FPGAGRP_MODULE_EMAC << (reg_shift / 2));
regmap_write(sys_mgr_base_addr, SYSMGR_FPGAGRP_MODULE_REG,
 module);
-   } else {
-   ctrl &= ~(SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK << (reg_shift / 
2));
}
 
+   if (dwmac->f2h_ptp_ref_clk)
+   ctrl |= SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK << (reg_shift / 2);
+   else
+   ctrl &= ~(SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK <<
+ (reg_shift / 2));
+
regmap_write(sys_mgr_base_addr, reg_offset, ctrl);
 
/* Deassert reset for the phy configuration to be sampled by
-- 
2.20.1





[PATCH 5.6 45/49] platform/x86: GPD pocket fan: Fix error message when temp-limits are out of range

2020-05-08 Thread Greg Kroah-Hartman
From: Hans de Goede 

commit 1d6f8c5bac93cceb2d4ac8e6331050652004d802 upstream.

Commit 1f27dbd8265d ("platform/x86: GPD pocket fan: Allow somewhat
lower/higher temperature limits") changed the module-param sanity check
to accept temperature limits between 20 and 90 degrees celcius.

But the error message printed when the module params are outside this
range was not updated. This commit updates the error message to match
the new min and max value for the temp-limits.

Reported-by: Pavel Machek 
Signed-off-by: Hans de Goede 
Acked-by: Pavel Machek 
Signed-off-by: Andy Shevchenko 
Signed-off-by: Greg Kroah-Hartman 

---
 drivers/platform/x86/gpd-pocket-fan.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/platform/x86/gpd-pocket-fan.c
+++ b/drivers/platform/x86/gpd-pocket-fan.c
@@ -128,7 +128,7 @@ static int gpd_pocket_fan_probe(struct p
 
for (i = 0; i < ARRAY_SIZE(temp_limits); i++) {
if (temp_limits[i] < 2 || temp_limits[i] > 9) {
-   dev_err(>dev, "Invalid temp-limit %d (must be 
between 4 and 7)\n",
+   dev_err(>dev, "Invalid temp-limit %d (must be 
between 2 and 9)\n",
temp_limits[i]);
temp_limits[0] = TEMP_LIMIT0_DEFAULT;
temp_limits[1] = TEMP_LIMIT1_DEFAULT;




[PATCH 5.6 22/49] remoteproc: qcom_q6v5_mss: fix a bug in q6v5_probe()

2020-05-08 Thread Greg Kroah-Hartman
From: Alex Elder 

[ Upstream commit 13c060b50a341dd60303e5264d12108b5747f200 ]

If looking up the DT "firmware-name" property fails in q6v6_probe(),
the function returns without freeing the remoteproc structure
that has been allocated.  Fix this by jumping to the free_rproc
label, which takes care of this.

Signed-off-by: Alex Elder 
Link: https://lore.kernel.org/r/20200403175005.17130-3-el...@linaro.org
Signed-off-by: Bjorn Andersson 
Signed-off-by: Sasha Levin 
---
 drivers/remoteproc/qcom_q6v5_mss.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/remoteproc/qcom_q6v5_mss.c 
b/drivers/remoteproc/qcom_q6v5_mss.c
index 0b1d737b0e97d..8844fc56c5f6d 100644
--- a/drivers/remoteproc/qcom_q6v5_mss.c
+++ b/drivers/remoteproc/qcom_q6v5_mss.c
@@ -1607,7 +1607,7 @@ static int q6v5_probe(struct platform_device *pdev)
ret = of_property_read_string_index(pdev->dev.of_node, "firmware-name",
1, >hexagon_mdt_image);
if (ret < 0 && ret != -EINVAL)
-   return ret;
+   goto free_rproc;
 
platform_set_drvdata(pdev, qproc);
 
-- 
2.20.1





[PATCH 5.6 47/49] mac80211: add ieee80211_is_any_nullfunc()

2020-05-08 Thread Greg Kroah-Hartman
From: Thomas Pedersen 

commit 30b2f0be23fb40e58d0ad2caf8702c2a44cda2e1 upstream.

commit 08a5bdde3812 ("mac80211: consider QoS Null frames for 
STA_NULLFUNC_ACKED")
Fixed a bug where we failed to take into account a
nullfunc frame can be either non-QoS or QoS. It turns out
there is at least one more bug in
ieee80211_sta_tx_notify(), introduced in
commit 7b6ddeaf27ec ("mac80211: use QoS NDP for AP probing"),
where we forgot to check for the QoS variant and so
assumed the QoS nullfunc frame never went out

Fix this by adding a helper ieee80211_is_any_nullfunc()
which consolidates the check for non-QoS and QoS nullfunc
frames. Replace existing compound conditionals and add a
couple more missing checks for QoS variant.

Signed-off-by: Thomas Pedersen 
Link: https://lore.kernel.org/r/20200114055940.18502-3-tho...@adapt-ip.com
Signed-off-by: Johannes Berg 
Signed-off-by: Greg Kroah-Hartman 

---
 include/linux/ieee80211.h |9 +
 net/mac80211/mlme.c   |2 +-
 net/mac80211/rx.c |8 +++-
 net/mac80211/status.c |5 ++---
 net/mac80211/tx.c |2 +-
 5 files changed, 16 insertions(+), 10 deletions(-)

--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
@@ -620,6 +620,15 @@ static inline bool ieee80211_is_qos_null
 }
 
 /**
+ * ieee80211_is_any_nullfunc - check if frame is regular or QoS nullfunc frame
+ * @fc: frame control bytes in little-endian byteorder
+ */
+static inline bool ieee80211_is_any_nullfunc(__le16 fc)
+{
+   return (ieee80211_is_nullfunc(fc) || ieee80211_is_qos_nullfunc(fc));
+}
+
+/**
  * ieee80211_is_bufferable_mmpdu - check if frame is bufferable MMPDU
  * @fc: frame control field in little-endian byteorder
  */
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -2460,7 +2460,7 @@ void ieee80211_sta_tx_notify(struct ieee
if (!ieee80211_is_data(hdr->frame_control))
return;
 
-   if (ieee80211_is_nullfunc(hdr->frame_control) &&
+   if (ieee80211_is_any_nullfunc(hdr->frame_control) &&
sdata->u.mgd.probe_send_count > 0) {
if (ack)
ieee80211_sta_reset_conn_monitor(sdata);
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1450,8 +1450,7 @@ ieee80211_rx_h_check_dup(struct ieee8021
return RX_CONTINUE;
 
if (ieee80211_is_ctl(hdr->frame_control) ||
-   ieee80211_is_nullfunc(hdr->frame_control) ||
-   ieee80211_is_qos_nullfunc(hdr->frame_control) ||
+   ieee80211_is_any_nullfunc(hdr->frame_control) ||
is_multicast_ether_addr(hdr->addr1))
return RX_CONTINUE;
 
@@ -1838,8 +1837,7 @@ ieee80211_rx_h_sta_process(struct ieee80
 * Drop (qos-)data::nullfunc frames silently, since they
 * are used only to control station power saving mode.
 */
-   if (ieee80211_is_nullfunc(hdr->frame_control) ||
-   ieee80211_is_qos_nullfunc(hdr->frame_control)) {
+   if (ieee80211_is_any_nullfunc(hdr->frame_control)) {
I802_DEBUG_INC(rx->local->rx_handlers_drop_nullfunc);
 
/*
@@ -2319,7 +2317,7 @@ static int ieee80211_drop_unencrypted(st
 
/* Drop unencrypted frames if key is set. */
if (unlikely(!ieee80211_has_protected(fc) &&
-!ieee80211_is_nullfunc(fc) &&
+!ieee80211_is_any_nullfunc(fc) &&
 ieee80211_is_data(fc) && rx->key))
return -EACCES;
 
--- a/net/mac80211/status.c
+++ b/net/mac80211/status.c
@@ -643,8 +643,7 @@ static void ieee80211_report_ack_skb(str
rcu_read_lock();
sdata = ieee80211_sdata_from_skb(local, skb);
if (sdata) {
-   if (ieee80211_is_nullfunc(hdr->frame_control) ||
-   ieee80211_is_qos_nullfunc(hdr->frame_control))
+   if (ieee80211_is_any_nullfunc(hdr->frame_control))
cfg80211_probe_status(sdata->dev, hdr->addr1,
  cookie, acked,
  info->status.ack_signal,
@@ -1056,7 +1055,7 @@ static void __ieee80211_tx_status(struct
I802_DEBUG_INC(local->dot11FailedCount);
}
 
-   if ((ieee80211_is_nullfunc(fc) || ieee80211_is_qos_nullfunc(fc)) &&
+   if (ieee80211_is_any_nullfunc(fc) &&
ieee80211_has_pm(fc) &&
ieee80211_hw_check(>hw, REPORTS_TX_ACK_STATUS) &&
!(info->flags & IEEE80211_TX_CTL_INJECTED) &&
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -297,7 +297,7 @@ ieee80211_tx_h_check_assoc(struct ieee80
if (unlikely(test_bit(SCAN_SW_SCANNING, >local->scanning)) &&
test_bit(SDATA_STATE_OFFCHANNEL, >sdata->state) &&
!ieee80211_is_probe_req(hdr->frame_control) &&
-   !ieee80211_is_nullfunc(hdr->frame_control))
+   !ieee80211_is_any_nullfunc(hdr->frame_control))

[PATCH 5.6 44/49] x86/kvm: fix a missing-prototypes "vmread_error"

2020-05-08 Thread Greg Kroah-Hartman
From: Qian Cai 

commit 514ccc194971d0649e4e7ec8a9b3a6e33561d7bf upstream.

The commit 842f4be95899 ("KVM: VMX: Add a trampoline to fix VMREAD error
handling") removed the declaration of vmread_error() causes a W=1 build
failure with KVM_WERROR=y. Fix it by adding it back.

arch/x86/kvm/vmx/vmx.c:359:17: error: no previous prototype for 'vmread_error' 
[-Werror=missing-prototypes]
 asmlinkage void vmread_error(unsigned long field, bool fault)
 ^~~~

Signed-off-by: Qian Cai 
Message-Id: <20200402153955.1695-1-...@lca.pw>
Signed-off-by: Paolo Bonzini 
Signed-off-by: Greg Kroah-Hartman 

---
 arch/x86/kvm/vmx/ops.h |1 +
 1 file changed, 1 insertion(+)

--- a/arch/x86/kvm/vmx/ops.h
+++ b/arch/x86/kvm/vmx/ops.h
@@ -12,6 +12,7 @@
 
 #define __ex(x) __kvm_handle_fault_on_reboot(x)
 
+asmlinkage void vmread_error(unsigned long field, bool fault);
 __attribute__((regparm(0))) void vmread_error_trampoline(unsigned long field,
 bool fault);
 void vmwrite_error(unsigned long field, unsigned long value);




[PATCH 5.6 49/49] mm/mremap: Add comment explaining the untagging behaviour of mremap()

2020-05-08 Thread Greg Kroah-Hartman
From: Will Deacon 

commit b2a84de2a2deb76a6a51609845341f508c518c03 upstream.

Commit dcde237319e6 ("mm: Avoid creating virtual address aliases in
brk()/mmap()/mremap()") changed mremap() so that only the 'old' address
is untagged, leaving the 'new' address in the form it was passed from
userspace. This prevents the unexpected creation of aliasing virtual
mappings in userspace, but looks a bit odd when you read the code.

Add a comment justifying the untagging behaviour in mremap().

Reported-by: Linus Torvalds 
Acked-by: Linus Torvalds 
Reviewed-by: Catalin Marinas 
Signed-off-by: Will Deacon 
Signed-off-by: Catalin Marinas 
Signed-off-by: Greg Kroah-Hartman 

---
 mm/mremap.c |   10 ++
 1 file changed, 10 insertions(+)

--- a/mm/mremap.c
+++ b/mm/mremap.c
@@ -606,6 +606,16 @@ SYSCALL_DEFINE5(mremap, unsigned long, a
LIST_HEAD(uf_unmap_early);
LIST_HEAD(uf_unmap);
 
+   /*
+* There is a deliberate asymmetry here: we strip the pointer tag
+* from the old address but leave the new address alone. This is
+* for consistency with mmap(), where we prevent the creation of
+* aliasing mappings in userspace by leaving the tag bits of the
+* mapping address intact. A non-zero tag will cause the subsequent
+* range checks to reject the address as invalid.
+*
+* See Documentation/arm64/tagged-address-abi.rst for more information.
+*/
addr = untagged_addr(addr);
 
if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE))




[PATCH 5.6 24/49] drm/amdgpu: Correctly initialize thermal controller for GPUs with Powerplay table v0 (e.g Hawaii)

2020-05-08 Thread Greg Kroah-Hartman
From: Sandeep Raghuraman 

[ Upstream commit bbc25dadc7ed19f9d6b2e30980f0eb4c741bb8bf ]

Initialize thermal controller fields in the PowerPlay table for Hawaii
GPUs, so that fan speeds are reported.

Signed-off-by: Sandeep Raghuraman 
Signed-off-by: Alex Deucher 
Signed-off-by: Sasha Levin 
---
 .../drm/amd/powerplay/hwmgr/processpptables.c | 26 +++
 1 file changed, 26 insertions(+)

diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c 
b/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c
index 77c14671866c0..719597c5d27d9 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c
@@ -984,6 +984,32 @@ static int init_thermal_controller(
struct pp_hwmgr *hwmgr,
const ATOM_PPLIB_POWERPLAYTABLE *powerplay_table)
 {
+   hwmgr->thermal_controller.ucType =
+   powerplay_table->sThermalController.ucType;
+   hwmgr->thermal_controller.ucI2cLine =
+   powerplay_table->sThermalController.ucI2cLine;
+   hwmgr->thermal_controller.ucI2cAddress =
+   powerplay_table->sThermalController.ucI2cAddress;
+
+   hwmgr->thermal_controller.fanInfo.bNoFan =
+   (0 != (powerplay_table->sThermalController.ucFanParameters &
+   ATOM_PP_FANPARAMETERS_NOFAN));
+
+   hwmgr->thermal_controller.fanInfo.ucTachometerPulsesPerRevolution =
+   powerplay_table->sThermalController.ucFanParameters &
+   ATOM_PP_FANPARAMETERS_TACHOMETER_PULSES_PER_REVOLUTION_MASK;
+
+   hwmgr->thermal_controller.fanInfo.ulMinRPM
+   = powerplay_table->sThermalController.ucFanMinRPM * 100UL;
+   hwmgr->thermal_controller.fanInfo.ulMaxRPM
+   = powerplay_table->sThermalController.ucFanMaxRPM * 100UL;
+
+   set_hw_cap(hwmgr,
+  ATOM_PP_THERMALCONTROLLER_NONE != 
hwmgr->thermal_controller.ucType,
+  PHM_PlatformCaps_ThermalController);
+
+   hwmgr->thermal_controller.use_hw_fan_control = 1;
+
return 0;
 }
 
-- 
2.20.1





[PATCH 5.6 19/49] ASoC: rsnd: Fix parent SSI start/stop in multi-SSI mode

2020-05-08 Thread Greg Kroah-Hartman
From: Matthias Blankertz 

[ Upstream commit a09fb3f28a60ba3e928a1fa94b0456780800299d ]

The parent SSI of a multi-SSI setup must be fully setup, started and
stopped since it is also part of the playback/capture setup. So only
skip the SSI (as per commit 203cdf51f288 ("ASoC: rsnd: SSI parent cares
SWSP bit") and commit 597b046f0d99 ("ASoC: rsnd: control SSICR::EN
correctly")) if the SSI is parent outside of a multi-SSI setup.

Signed-off-by: Matthias Blankertz 
Acked-by: Kuninori Morimoto 
Link: 
https://lore.kernel.org/r/20200415141017.384017-2-matthias.blanke...@cetitec.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/sh/rcar/ssi.c | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
index fc5d089868dfc..d51fb3a394486 100644
--- a/sound/soc/sh/rcar/ssi.c
+++ b/sound/soc/sh/rcar/ssi.c
@@ -407,7 +407,7 @@ static void rsnd_ssi_config_init(struct rsnd_mod *mod,
 * We shouldn't exchange SWSP after running.
 * This means, parent needs to care it.
 */
-   if (rsnd_ssi_is_parent(mod, io))
+   if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
goto init_end;
 
if (rsnd_io_is_play(io))
@@ -559,7 +559,7 @@ static int rsnd_ssi_start(struct rsnd_mod *mod,
 * EN is for data output.
 * SSI parent EN is not needed.
 */
-   if (rsnd_ssi_is_parent(mod, io))
+   if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
return 0;
 
ssi->cr_en = EN;
@@ -582,7 +582,7 @@ static int rsnd_ssi_stop(struct rsnd_mod *mod,
if (!rsnd_ssi_is_run_mods(mod, io))
return 0;
 
-   if (rsnd_ssi_is_parent(mod, io))
+   if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
return 0;
 
cr  =   ssi->cr_own |
@@ -620,7 +620,7 @@ static int rsnd_ssi_irq(struct rsnd_mod *mod,
if (rsnd_is_gen1(priv))
return 0;
 
-   if (rsnd_ssi_is_parent(mod, io))
+   if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
return 0;
 
if (!rsnd_ssi_is_run_mods(mod, io))
-- 
2.20.1





[PATCH 5.6 46/49] ACPI: PM: s2idle: Fix comment in acpi_s2idle_prepare_late()

2020-05-08 Thread Greg Kroah-Hartman
From: Rafael J. Wysocki 

commit 243a98894dc525ad2fbeb608722fcb682be3186d upstream.

Fix a comment in acpi_s2idle_prepare_late() that has become outdated
after commit f0ac20c3f613 ("ACPI: EC: Fix flushing of pending work").

Fixes: f0ac20c3f613 ("ACPI: EC: Fix flushing of pending work")
Signed-off-by: Rafael J. Wysocki 
Signed-off-by: Greg Kroah-Hartman 

---
 drivers/acpi/sleep.c |5 +
 1 file changed, 1 insertion(+), 4 deletions(-)

--- a/drivers/acpi/sleep.c
+++ b/drivers/acpi/sleep.c
@@ -982,10 +982,7 @@ static int acpi_s2idle_prepare_late(void
 
 static void acpi_s2idle_sync(void)
 {
-   /*
-* The EC driver uses the system workqueue and an additional special
-* one, so those need to be flushed too.
-*/
+   /* The EC driver uses special workqueues that need to be flushed. */
acpi_ec_flush_work();
acpi_os_wait_events_complete(); /* synchronize Notify handling */
 }




[PATCH 5.6 23/49] drm/amd/powerplay: fix resume failed as smu table initialize early exit

2020-05-08 Thread Greg Kroah-Hartman
From: Prike Liang 

[ Upstream commit 45a5e639548c459a5accebad340078e4e6e0e512 ]

When the amdgpu in the suspend/resume loop need notify the dpm disabled,
otherwise the smu table will be uninitialize and result in resume failed.

Signed-off-by: Prike Liang 
Tested-by: Mengbing Wang 
Reviewed-by: Alex Deucher 
Reviewed-by: Huang Rui 
Signed-off-by: Alex Deucher 
Signed-off-by: Sasha Levin 
---
 drivers/gpu/drm/amd/powerplay/renoir_ppt.c | 7 ++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/powerplay/renoir_ppt.c 
b/drivers/gpu/drm/amd/powerplay/renoir_ppt.c
index f7a1ce37227cd..4a52c310058d1 100644
--- a/drivers/gpu/drm/amd/powerplay/renoir_ppt.c
+++ b/drivers/gpu/drm/amd/powerplay/renoir_ppt.c
@@ -889,12 +889,17 @@ static int renoir_read_sensor(struct smu_context *smu,
 
 static bool renoir_is_dpm_running(struct smu_context *smu)
 {
+   struct amdgpu_device *adev = smu->adev;
+
/*
 * Util now, the pmfw hasn't exported the interface of SMU
 * feature mask to APU SKU so just force on all the feature
 * at early initial stage.
 */
-   return true;
+   if (adev->in_suspend)
+   return false;
+   else
+   return true;
 
 }
 
-- 
2.20.1





[PATCH 5.6 43/49] ALSA: hda: Match both PCI ID and SSID for driver blacklist

2020-05-08 Thread Greg Kroah-Hartman
From: Takashi Iwai 

commit 977dfef40c8996b69afe23a9094d184049efb7bb upstream.

The commit 3c6fd1f07ed0 ("ALSA: hda: Add driver blacklist") added a
new blacklist for the devices that are known to have empty codecs, and
one of the entries was ASUS ROG Zenith II (PCI SSID 1043:874f).
However, it turned out that the very same PCI SSID is used for the
previous model that does have the valid HD-audio codecs and the change
broke the sound on it.

Since the empty codec problem appear on the certain AMD platform (PCI
ID 1022:1487), this patch changes the blacklist matching to both PCI
ID and SSID using pci_match_id().  Also, the entry that was removed by
the previous fix for ASUS ROG Zenigh II is re-added.

Link: https://lore.kernel.org/r/20200424061222.19792-1-ti...@suse.de
Signed-off-by: Takashi Iwai 
Signed-off-by: Greg Kroah-Hartman 

---
 sound/pci/hda/hda_intel.c |9 +
 1 file changed, 5 insertions(+), 4 deletions(-)

--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -2075,9 +2075,10 @@ static void pcm_mmap_prepare(struct snd_
  * some HD-audio PCI entries are exposed without any codecs, and such devices
  * should be ignored from the beginning.
  */
-static const struct snd_pci_quirk driver_blacklist[] = {
-   SND_PCI_QUIRK(0x1462, 0xcb59, "MSI TRX40 Creator", 0),
-   SND_PCI_QUIRK(0x1462, 0xcb60, "MSI TRX40", 0),
+static const struct pci_device_id driver_blacklist[] = {
+   { PCI_DEVICE_SUB(0x1022, 0x1487, 0x1043, 0x874f) }, /* ASUS ROG Zenith 
II / Strix */
+   { PCI_DEVICE_SUB(0x1022, 0x1487, 0x1462, 0xcb59) }, /* MSI TRX40 
Creator */
+   { PCI_DEVICE_SUB(0x1022, 0x1487, 0x1462, 0xcb60) }, /* MSI TRX40 */
{}
 };
 
@@ -2097,7 +2098,7 @@ static int azx_probe(struct pci_dev *pci
bool schedule_probe;
int err;
 
-   if (snd_pci_quirk_lookup(pci, driver_blacklist)) {
+   if (pci_match_id(driver_blacklist, pci)) {
dev_info(>dev, "Skipping the blacklisted device\n");
return -ENODEV;
}




[PATCH 5.6 38/49] net: bcmgenet: suppress warnings on failed Rx SKB allocations

2020-05-08 Thread Greg Kroah-Hartman
From: Doug Berger 

[ Upstream commit ecaeceb8a8a145d93c7e136f170238229165348f ]

The driver is designed to drop Rx packets and reclaim the buffers
when an allocation fails, and the network interface needs to safely
handle this packet loss. Therefore, an allocation failure of Rx
SKBs is relatively benign.

However, the output of the warning message occurs with a high
scheduling priority that can cause excessive jitter/latency for
other high priority processing.

This commit suppresses the warning messages to prevent scheduling
problems while retaining the failure count in the statistics of
the network interface.

Signed-off-by: Doug Berger 
Acked-by: Florian Fainelli 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
---
 drivers/net/ethernet/broadcom/genet/bcmgenet.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c 
b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index b7c0c20e13258..5fd1a9dfcfff3 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -1625,7 +1625,8 @@ static struct sk_buff *bcmgenet_rx_refill(struct 
bcmgenet_priv *priv,
dma_addr_t mapping;
 
/* Allocate a new Rx skb */
-   skb = netdev_alloc_skb(priv->dev, priv->rx_buf_len + SKB_ALIGNMENT);
+   skb = __netdev_alloc_skb(priv->dev, priv->rx_buf_len + SKB_ALIGNMENT,
+GFP_ATOMIC | __GFP_NOWARN);
if (!skb) {
priv->mib.alloc_rx_buff_failed++;
netif_err(priv, rx_err, priv->dev,
-- 
2.20.1





[PATCH 5.6 34/49] ftrace: Fix memory leak caused by not freeing entry in unregister_ftrace_direct()

2020-05-08 Thread Greg Kroah-Hartman
From: Steven Rostedt (VMware) 

[ Upstream commit 353da87921a5ec654e7e9024e083f099f1b33c97 ]

kmemleak reported the following:

unreferenced object 0x90d47127a920 (size 32):
  comm "modprobe", pid 1766, jiffies 4294792031 (age 162.568s)
  hex dump (first 32 bytes):
00 00 00 00 00 00 00 00 22 01 00 00 00 00 ad de  "...
00 78 12 a7 ff ff ff ff 00 00 b6 c0 ff ff ff ff  .x..
  backtrace:
[] register_ftrace_direct+0xcb/0x3a0
[<295e4f79>] do_one_initcall+0x72/0x340
[<873ead18>] do_init_module+0x5a/0x220
[<974d9de5>] load_module+0x2235/0x2550
[<59c3d6ce>] __do_sys_finit_module+0xc0/0x120
[<5a8611b4>] do_syscall_64+0x60/0x230
[] entry_SYSCALL_64_after_hwframe+0x49/0xb3

The entry used to save the direct descriptor needs to be freed
when unregistering.

Signed-off-by: Steven Rostedt (VMware) 
Signed-off-by: Sasha Levin 
---
 kernel/trace/ftrace.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index fd81c7de77a70..63089c70adbb6 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -5155,6 +5155,7 @@ int unregister_ftrace_direct(unsigned long ip, unsigned 
long addr)
list_del_rcu(>next);
synchronize_rcu_tasks();
kfree(direct);
+   kfree(entry);
ftrace_direct_func_count--;
}
}
-- 
2.20.1





[PATCH 5.6 40/49] tools/runqslower: Ensure own vmlinux.h is picked up first

2020-05-08 Thread Greg Kroah-Hartman
From: Andrii Nakryiko 

[ Upstream commit dfc55ace9939e1e8703ad37ddbba41aaa31cc0cb ]

Reorder include paths to ensure that runqslower sources are picking up
vmlinux.h, generated by runqslower's own Makefile. When runqslower is built
from selftests/bpf, due to current -I$(BPF_INCLUDE) -I$(OUTPUT) ordering, it
might pick up not-yet-complete vmlinux.h, generated by selftests Makefile,
which could lead to compilation errors like [0]. So ensure that -I$(OUTPUT)
goes first and rely on runqslower's Makefile own dependency chain to ensure
vmlinux.h is properly completed before source code relying on it is compiled.

  [0] https://travis-ci.org/github/libbpf/libbpf/jobs/677905925

Signed-off-by: Andrii Nakryiko 
Signed-off-by: Alexei Starovoitov 
Link: https://lore.kernel.org/bpf/20200422012407.176303-1-andr...@fb.com
Signed-off-by: Sasha Levin 
---
 tools/bpf/runqslower/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/bpf/runqslower/Makefile b/tools/bpf/runqslower/Makefile
index 39edd68afa8e0..8a6f82e56a249 100644
--- a/tools/bpf/runqslower/Makefile
+++ b/tools/bpf/runqslower/Makefile
@@ -8,7 +8,7 @@ BPFTOOL ?= $(DEFAULT_BPFTOOL)
 LIBBPF_SRC := $(abspath ../../lib/bpf)
 BPFOBJ := $(OUTPUT)/libbpf.a
 BPF_INCLUDE := $(OUTPUT)
-INCLUDES := -I$(BPF_INCLUDE) -I$(OUTPUT) -I$(abspath ../../lib)
+INCLUDES := -I$(OUTPUT) -I$(BPF_INCLUDE) -I$(abspath ../../lib)
 CFLAGS := -g -Wall
 
 # Try to detect best kernel BTF source
-- 
2.20.1





[PATCH 5.6 41/49] sctp: Fix SHUTDOWN CTSN Ack in the peer restart case

2020-05-08 Thread Greg Kroah-Hartman
From: Jere Leppänen 

commit 12dfd78e3a74825e6f0bc8df7ef9f938fbc6bfe3 upstream.

When starting shutdown in sctp_sf_do_dupcook_a(), get the value for
SHUTDOWN Cumulative TSN Ack from the new association, which is
reconstructed from the cookie, instead of the old association, which
the peer doesn't have anymore.

Otherwise the SHUTDOWN is either ignored or replied to with an ABORT
by the peer because CTSN Ack doesn't match the peer's Initial TSN.

Fixes: bdf6fa52f01b ("sctp: handle association restarts when the socket is 
closed.")
Signed-off-by: Jere Leppänen 
Acked-by: Marcelo Ricardo Leitner 
Signed-off-by: David S. Miller 
Signed-off-by: Greg Kroah-Hartman 

---
 net/sctp/sm_make_chunk.c |6 +-
 1 file changed, 5 insertions(+), 1 deletion(-)

--- a/net/sctp/sm_make_chunk.c
+++ b/net/sctp/sm_make_chunk.c
@@ -858,7 +858,11 @@ struct sctp_chunk *sctp_make_shutdown(co
struct sctp_chunk *retval;
__u32 ctsn;
 
-   ctsn = sctp_tsnmap_get_ctsn(>peer.tsn_map);
+   if (chunk && chunk->asoc)
+   ctsn = sctp_tsnmap_get_ctsn(>asoc->peer.tsn_map);
+   else
+   ctsn = sctp_tsnmap_get_ctsn(>peer.tsn_map);
+
shut.cum_tsn_ack = htonl(ctsn);
 
retval = sctp_make_control(asoc, SCTP_CID_SHUTDOWN, 0,




[PATCH 5.6 35/49] net: phy: bcm84881: clear settings on link down

2020-05-08 Thread Greg Kroah-Hartman
From: Russell King 

[ Upstream commit 796a8fa28980050bf1995617f0876484f3dc1026 ]

Clear the link partner advertisement, speed, duplex and pause when
the link goes down, as other phylib drivers do.  This avoids the
stale link partner, speed and duplex settings being reported via
ethtool.

Signed-off-by: Russell King 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
---
 drivers/net/phy/bcm84881.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/phy/bcm84881.c b/drivers/net/phy/bcm84881.c
index 14d55a77eb28a..1260115829283 100644
--- a/drivers/net/phy/bcm84881.c
+++ b/drivers/net/phy/bcm84881.c
@@ -174,9 +174,6 @@ static int bcm84881_read_status(struct phy_device *phydev)
if (phydev->autoneg == AUTONEG_ENABLE && !phydev->autoneg_complete)
phydev->link = false;
 
-   if (!phydev->link)
-   return 0;
-
linkmode_zero(phydev->lp_advertising);
phydev->speed = SPEED_UNKNOWN;
phydev->duplex = DUPLEX_UNKNOWN;
@@ -184,6 +181,9 @@ static int bcm84881_read_status(struct phy_device *phydev)
phydev->asym_pause = 0;
phydev->mdix = 0;
 
+   if (!phydev->link)
+   return 0;
+
if (phydev->autoneg_complete) {
val = genphy_c45_read_lpa(phydev);
if (val < 0)
-- 
2.20.1





[PATCH 5.6 09/49] SUNRPC/cache: Fix unsafe traverse caused double-free in cache_purge

2020-05-08 Thread Greg Kroah-Hartman
From: Yihao Wu 

[ Upstream commit 43e33924c38e8faeb0c12035481cb150e602e39d ]

Deleting list entry within hlist_for_each_entry_safe is not safe unless
next pointer (tmp) is protected too. It's not, because once hash_lock
is released, cache_clean may delete the entry that tmp points to. Then
cache_purge can walk to a deleted entry and tries to double free it.

Fix this bug by holding only the deleted entry's reference.

Suggested-by: NeilBrown 
Signed-off-by: Yihao Wu 
Reviewed-by: NeilBrown 
[ cel: removed unused variable ]
Signed-off-by: Chuck Lever 
Signed-off-by: Sasha Levin 
---
 net/sunrpc/cache.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c
index bd843a81afa0b..d36cea4e270de 100644
--- a/net/sunrpc/cache.c
+++ b/net/sunrpc/cache.c
@@ -521,7 +521,6 @@ void cache_purge(struct cache_detail *detail)
 {
struct cache_head *ch = NULL;
struct hlist_head *head = NULL;
-   struct hlist_node *tmp = NULL;
int i = 0;
 
spin_lock(>hash_lock);
@@ -533,7 +532,9 @@ void cache_purge(struct cache_detail *detail)
dprintk("RPC: %d entries in %s cache\n", detail->entries, detail->name);
for (i = 0; i < detail->hash_size; i++) {
head = >hash_table[i];
-   hlist_for_each_entry_safe(ch, tmp, head, cache_list) {
+   while (!hlist_empty(head)) {
+   ch = hlist_entry(head->first, struct cache_head,
+cache_list);
sunrpc_begin_cache_remove_entry(ch, detail);
spin_unlock(>hash_lock);
sunrpc_end_cache_remove_entry(ch, detail);
-- 
2.20.1





[PATCH 5.6 20/49] ASoC: rsnd: Fix HDMI channel mapping for multi-SSI mode

2020-05-08 Thread Greg Kroah-Hartman
From: Matthias Blankertz 

[ Upstream commit b94e164759b82d0c1c80d4b1c8f12c9bee83f11d ]

The HDMI?_SEL register maps up to four stereo SSI data lanes onto the
sdata[0..3] inputs of the HDMI output block. The upper half of the
register contains four blocks of 4 bits, with the most significant
controlling the sdata3 line and the least significant the sdata0 line.

The shift calculation has an off-by-one error, causing the parent SSI to
be mapped to sdata3, the first multi-SSI child to sdata0 and so forth.
As the parent SSI transmits the stereo L/R channels, and the HDMI core
expects it on the sdata0 line, this causes no audio to be output when
playing stereo audio on a multichannel capable HDMI out, and
multichannel audio has permutated channels.

Fix the shift calculation to map the parent SSI to sdata0, the first
child to sdata1 etc.

Signed-off-by: Matthias Blankertz 
Acked-by: Kuninori Morimoto 
Link: 
https://lore.kernel.org/r/20200415141017.384017-3-matthias.blanke...@cetitec.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/sh/rcar/ssiu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sound/soc/sh/rcar/ssiu.c b/sound/soc/sh/rcar/ssiu.c
index f35d882118874..9c7c3e7539c93 100644
--- a/sound/soc/sh/rcar/ssiu.c
+++ b/sound/soc/sh/rcar/ssiu.c
@@ -221,7 +221,7 @@ static int rsnd_ssiu_init_gen2(struct rsnd_mod *mod,
i;
 
for_each_rsnd_mod_array(i, pos, io, rsnd_ssi_array) {
-   shift   = (i * 4) + 16;
+   shift   = (i * 4) + 20;
val = (val & ~(0xF << shift)) |
rsnd_mod_id(pos) << shift;
}
-- 
2.20.1





[PATCH 5.6 02/49] drm/bridge: analogix_dp: Split bind() into probe() and real bind()

2020-05-08 Thread Greg Kroah-Hartman
From: Marek Szyprowski 

[ Upstream commit 83a196773b8bc6702f49df1eddc848180e350340 ]

Analogix_dp driver acquires all its resources in the ->bind() callback,
what is a bit against the component driver based approach, where the
driver initialization is split into a probe(), where all resources are
gathered, and a bind(), where all objects are created and a compound
driver is initialized.

Extract all the resource related operations to analogix_dp_probe() and
analogix_dp_remove(), then call them before/after registration of the
device components from the main Exynos DP and Rockchip DP drivers. Also
move the plat_data initialization to the probe() to make it available for
the analogix_dp_probe() function.

This fixes the multiple calls to the bind() of the DRM compound driver
when the DP PHY driver is not yet loaded/probed:

[drm] Exynos DRM: using 1440.fimd device for DMA mapping operations
exynos-drm exynos-drm: bound 1440.fimd (ops fimd_component_ops [exynosdrm])
exynos-drm exynos-drm: bound 1445.mixer (ops mixer_component_ops 
[exynosdrm])
exynos-dp 145b.dp-controller: no DP phy configured
exynos-drm exynos-drm: failed to bind 145b.dp-controller (ops exynos_dp_ops 
[exynosdrm]): -517
exynos-drm exynos-drm: master bind failed: -517
...
[drm] Exynos DRM: using 1440.fimd device for DMA mapping operations
exynos-drm exynos-drm: bound 1440.fimd (ops hdmi_enable [exynosdrm])
exynos-drm exynos-drm: bound 1445.mixer (ops hdmi_enable [exynosdrm])
exynos-drm exynos-drm: bound 145b.dp-controller (ops hdmi_enable 
[exynosdrm])
exynos-drm exynos-drm: bound 1453.hdmi (ops hdmi_enable [exynosdrm])
[drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
Console: switching to colour frame buffer device 170x48
exynos-drm exynos-drm: fb0: exynosdrmfb frame buffer device
[drm] Initialized exynos 1.1.0 20180330 for exynos-drm on minor 1
...

Signed-off-by: Marek Szyprowski 
Acked-by: Andy Yan 
Reviewed-by: Andrzej Hajda 
Signed-off-by: Andrzej Hajda 
Link: 
https://patchwork.freedesktop.org/patch/msgid/20200310103427.26048-1-m.szyprow...@samsung.com
Signed-off-by: Sasha Levin 
---
 .../drm/bridge/analogix/analogix_dp_core.c| 33 +++--
 drivers/gpu/drm/exynos/exynos_dp.c| 29 ---
 .../gpu/drm/rockchip/analogix_dp-rockchip.c   | 36 ++-
 include/drm/bridge/analogix_dp.h  |  5 +--
 4 files changed, 61 insertions(+), 42 deletions(-)

diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c 
b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
index 6effe532f8200..461eff94d2767 100644
--- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
+++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
@@ -1636,8 +1636,7 @@ static ssize_t analogix_dpaux_transfer(struct drm_dp_aux 
*aux,
 }
 
 struct analogix_dp_device *
-analogix_dp_bind(struct device *dev, struct drm_device *drm_dev,
-struct analogix_dp_plat_data *plat_data)
+analogix_dp_probe(struct device *dev, struct analogix_dp_plat_data *plat_data)
 {
struct platform_device *pdev = to_platform_device(dev);
struct analogix_dp_device *dp;
@@ -1740,22 +1739,30 @@ analogix_dp_bind(struct device *dev, struct drm_device 
*drm_dev,
irq_flags, "analogix-dp", dp);
if (ret) {
dev_err(>dev, "failed to request irq\n");
-   goto err_disable_pm_runtime;
+   return ERR_PTR(ret);
}
disable_irq(dp->irq);
 
+   return dp;
+}
+EXPORT_SYMBOL_GPL(analogix_dp_probe);
+
+int analogix_dp_bind(struct analogix_dp_device *dp, struct drm_device *drm_dev)
+{
+   int ret;
+
dp->drm_dev = drm_dev;
dp->encoder = dp->plat_data->encoder;
 
dp->aux.name = "DP-AUX";
dp->aux.transfer = analogix_dpaux_transfer;
-   dp->aux.dev = >dev;
+   dp->aux.dev = dp->dev;
 
ret = drm_dp_aux_register(>aux);
if (ret)
-   return ERR_PTR(ret);
+   return ret;
 
-   pm_runtime_enable(dev);
+   pm_runtime_enable(dp->dev);
 
ret = analogix_dp_create_bridge(drm_dev, dp);
if (ret) {
@@ -1763,13 +1770,12 @@ analogix_dp_bind(struct device *dev, struct drm_device 
*drm_dev,
goto err_disable_pm_runtime;
}
 
-   return dp;
+   return 0;
 
 err_disable_pm_runtime:
+   pm_runtime_disable(dp->dev);
 
-   pm_runtime_disable(dev);
-
-   return ERR_PTR(ret);
+   return ret;
 }
 EXPORT_SYMBOL_GPL(analogix_dp_bind);
 
@@ -1786,10 +1792,15 @@ void analogix_dp_unbind(struct analogix_dp_device *dp)
 
drm_dp_aux_unregister(>aux);
pm_runtime_disable(dp->dev);
-   clk_disable_unprepare(dp->clock);
 }
 EXPORT_SYMBOL_GPL(analogix_dp_unbind);
 
+void analogix_dp_remove(struct analogix_dp_device *dp)
+{
+   clk_disable_unprepare(dp->clock);
+}
+EXPORT_SYMBOL_GPL(analogix_dp_remove);
+
 #ifdef CONFIG_PM
 int 

[PATCH 5.6 00/49] 5.6.12-rc1 review

2020-05-08 Thread Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.6.12 release.
There are 49 patches in this series, all will be posted as a response
to this one.  If anyone has any issues with these being applied, please
let me know.

Responses should be made by Sun, 10 May 2020 12:29:44 +.
Anything received after that time might be too late.

The whole patch series can be found in one patch at:

https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.6.12-rc1.gz
or in the git tree and branch at:

git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git 
linux-5.6.y
and the diffstat can be found below.

thanks,

greg k-h

-
Pseudo-Shortlog of commits:

Greg Kroah-Hartman 
Linux 5.6.12-rc1

Will Deacon 
mm/mremap: Add comment explaining the untagging behaviour of mremap()

Jiri Slaby 
cgroup, netclassid: remove double cond_resched

Thomas Pedersen 
mac80211: add ieee80211_is_any_nullfunc()

Rafael J. Wysocki 
ACPI: PM: s2idle: Fix comment in acpi_s2idle_prepare_late()

Hans de Goede 
platform/x86: GPD pocket fan: Fix error message when temp-limits are out of 
range

Qian Cai 
x86/kvm: fix a missing-prototypes "vmread_error"

Takashi Iwai 
ALSA: hda: Match both PCI ID and SSID for driver blacklist

Aaron Ma 
drm/amdgpu: Fix oops when pp_funcs is unset in ACPI event

Jere Leppänen 
sctp: Fix SHUTDOWN CTSN Ack in the peer restart case

Andrii Nakryiko 
tools/runqslower: Ensure own vmlinux.h is picked up first

Doug Berger 
net: systemport: suppress warnings on failed Rx SKB allocations

Doug Berger 
net: bcmgenet: suppress warnings on failed Rx SKB allocations

Madhuparna Bhowmik 
mac80211: sta_info: Add lockdep condition for RCU list usage

Nathan Chancellor 
lib/mpi: Fix building for powerpc with clang

Russell King 
net: phy: bcm84881: clear settings on link down

Steven Rostedt (VMware) 
ftrace: Fix memory leak caused by not freeing entry in 
unregister_ftrace_direct()

Vamshi K Sthambamkadi 
tracing: Fix memory leaks in trace_events_hist.c

Paulo Alcantara 
cifs: do not share tcons with DFS

Jeremie Francois (on alpha) 
scripts/config: allow colons in option strings for sed

Ronnie Sahlberg 
cifs: protect updating server->dstaddr with a spinlock

Matthias Blankertz 
ASoC: rsnd: Fix "status check failed" spam for multi-SSI

Matthias Blankertz 
ASoC: rsnd: Don't treat master SSI in multi SSI setup as parent

Julien Beraud 
net: stmmac: Fix sub-second increment

Julien Beraud 
net: stmmac: fix enabling socfpga's ptp_ref_clock

Xiyu Yang 
wimax/i2400m: Fix potential urb refcnt leak

Sandeep Raghuraman 
drm/amdgpu: Correctly initialize thermal controller for GPUs with Powerplay 
table v0 (e.g Hawaii)

Prike Liang 
drm/amd/powerplay: fix resume failed as smu table initialize early exit

Alex Elder 
remoteproc: qcom_q6v5_mss: fix a bug in q6v5_probe()

Amadeusz Sławiński 
ASoC: codecs: hdac_hdmi: Fix incorrect use of list_for_each_entry

Matthias Blankertz 
ASoC: rsnd: Fix HDMI channel mapping for multi-SSI mode

Matthias Blankertz 
ASoC: rsnd: Fix parent SSI start/stop in multi-SSI mode

Thinh Nguyen 
usb: dwc3: gadget: Properly set maxpacket limit

Amadeusz Sławiński 
ASoC: topology: Fix endianness issue

Sebastian Reichel 
ASoC: sgtl5000: Fix VAG power-on handling

Wu Bo 
scsi: sg: add sg_remove_request in sg_write

Vasily Khoruzhick 
drm/bridge: anx6345: set correct BPC for display_info of connector

Tyler Hicks 
selftests/ipc: Fix test failure seen after initial test run

Jarkko Sakkinen 
Revert "Kernel selftests: tpm2: check for tpm support"

Sandipan Das 
selftests: vm: Fix 64-bit test builds for powerpc64le

Sandipan Das 
selftests: vm: Do not override definition of ARCH

Yihao Wu 
SUNRPC/cache: Fix unsafe traverse caused double-free in cache_purge

Amadeusz Sławiński 
ASoC: topology: Check return value of soc_tplg_dai_config

Amadeusz Sławiński 
ASoC: topology: Check return value of pcm_new_ver

Amadeusz Sławiński 
ASoC: topology: Check soc_tplg_add_route return value

Amadeusz Sławiński 
ASoC: topology: Check return value of soc_tplg_*_create

Amadeusz Sławiński 
ASoC: topology: Check return value of soc_tplg_create_tlv

Amadeusz Sławiński 
ASoC: topology: Add missing memory checks

Marek Szyprowski 
drm/bridge: analogix_dp: Split bind() into probe() and real bind()

Jia He 
vhost: vsock: kick send_pkt worker once device is started


-

Diffstat:

 Makefile   |   4 +-
 arch/x86/kvm/vmx/ops.h |   1 +
 drivers/acpi/sleep.c   |   5 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c |   3 +-
 .../gpu/drm/amd/powerplay/hwmgr/processpptables.c  |  26 +
 drivers/gpu/drm/amd/powerplay/renoir_ppt.c |   7 +-
 

[PATCH 5.6 05/49] ASoC: topology: Check return value of soc_tplg_*_create

2020-05-08 Thread Greg Kroah-Hartman
From: Amadeusz Sławiński 

[ Upstream commit 2ae548f30d7f6973388fc3769bb3c2f6fd13652b ]

Functions soc_tplg_denum_create, soc_tplg_dmixer_create,
soc_tplg_dbytes_create can fail, so their return values should be
checked and error should be propagated.

Signed-off-by: Amadeusz Sławiński 
Reviewed-by: Ranjani Sridharan 
Reviewed-by: Pierre-Louis Bossart 
Link: 
https://lore.kernel.org/r/20200327204729.397-4-amadeuszx.slawin...@linux.intel.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/soc-topology.c | 18 --
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
index 5d974a36cdc92..c86c3ea533f68 100644
--- a/sound/soc/soc-topology.c
+++ b/sound/soc/soc-topology.c
@@ -1124,6 +1124,7 @@ static int soc_tplg_kcontrol_elems_load(struct soc_tplg 
*tplg,
struct snd_soc_tplg_hdr *hdr)
 {
struct snd_soc_tplg_ctl_hdr *control_hdr;
+   int ret;
int i;
 
if (tplg->pass != SOC_TPLG_PASS_MIXER) {
@@ -1152,25 +1153,30 @@ static int soc_tplg_kcontrol_elems_load(struct soc_tplg 
*tplg,
case SND_SOC_TPLG_CTL_RANGE:
case SND_SOC_TPLG_DAPM_CTL_VOLSW:
case SND_SOC_TPLG_DAPM_CTL_PIN:
-   soc_tplg_dmixer_create(tplg, 1,
-  le32_to_cpu(hdr->payload_size));
+   ret = soc_tplg_dmixer_create(tplg, 1,
+   le32_to_cpu(hdr->payload_size));
break;
case SND_SOC_TPLG_CTL_ENUM:
case SND_SOC_TPLG_CTL_ENUM_VALUE:
case SND_SOC_TPLG_DAPM_CTL_ENUM_DOUBLE:
case SND_SOC_TPLG_DAPM_CTL_ENUM_VIRT:
case SND_SOC_TPLG_DAPM_CTL_ENUM_VALUE:
-   soc_tplg_denum_create(tplg, 1,
- le32_to_cpu(hdr->payload_size));
+   ret = soc_tplg_denum_create(tplg, 1,
+   le32_to_cpu(hdr->payload_size));
break;
case SND_SOC_TPLG_CTL_BYTES:
-   soc_tplg_dbytes_create(tplg, 1,
-  le32_to_cpu(hdr->payload_size));
+   ret = soc_tplg_dbytes_create(tplg, 1,
+   le32_to_cpu(hdr->payload_size));
break;
default:
soc_bind_err(tplg, control_hdr, i);
return -EINVAL;
}
+   if (ret < 0) {
+   dev_err(tplg->dev, "ASoC: invalid control\n");
+   return ret;
+   }
+
}
 
return 0;
-- 
2.20.1





[PATCH 5.6 31/49] scripts/config: allow colons in option strings for sed

2020-05-08 Thread Greg Kroah-Hartman
From: Jeremie Francois (on alpha) 

[ Upstream commit e461bc9f9ab105637b86065d24b0b83f182d477c ]

Sed broke on some strings as it used colon as a separator.
I made it more robust by using \001, which is legit POSIX AFAIK.

E.g. ./config --set-str CONFIG_USBNET_DEVADDR "de:ad:be:ef:00:01"
failed with: sed: -e expression #1, char 55: unknown option to `s'

Signed-off-by: Jeremie Francois (on alpha) 
Signed-off-by: Masahiro Yamada 
Signed-off-by: Sasha Levin 
---
 scripts/config | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/scripts/config b/scripts/config
index e0e39826dae90..eee5b7f3a092a 100755
--- a/scripts/config
+++ b/scripts/config
@@ -7,6 +7,9 @@ myname=${0##*/}
 # If no prefix forced, use the default CONFIG_
 CONFIG_="${CONFIG_-CONFIG_}"
 
+# We use an uncommon delimiter for sed substitutions
+SED_DELIM=$(echo -en "\001")
+
 usage() {
cat >&2 <"$tmpfile"
+   sed -e "s$SED_DELIM$before$SED_DELIM$after$SED_DELIM" "$infile" 
>"$tmpfile"
# replace original file with the edited one
mv "$tmpfile" "$infile"
 }
-- 
2.20.1





[PATCH 5.6 07/49] ASoC: topology: Check return value of pcm_new_ver

2020-05-08 Thread Greg Kroah-Hartman
From: Amadeusz Sławiński 

[ Upstream commit b3677fc3d68dd942c92de52f0bd9dd8b472a40e6 ]

Function pcm_new_ver can fail, so we should check it's return value and
handle possible error.

Signed-off-by: Amadeusz Sławiński 
Reviewed-by: Ranjani Sridharan 
Reviewed-by: Pierre-Louis Bossart 
Link: 
https://lore.kernel.org/r/20200327204729.397-6-amadeuszx.slawin...@linux.intel.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/soc-topology.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
index aa7714f2b78fd..ca0ac5372b293 100644
--- a/sound/soc/soc-topology.c
+++ b/sound/soc/soc-topology.c
@@ -2135,7 +2135,9 @@ static int soc_tplg_pcm_elems_load(struct soc_tplg *tplg,
_pcm = pcm;
} else {
abi_match = false;
-   pcm_new_ver(tplg, pcm, &_pcm);
+   ret = pcm_new_ver(tplg, pcm, &_pcm);
+   if (ret < 0)
+   return ret;
}
 
/* create the FE DAIs and DAI links */
-- 
2.20.1





[PATCH 5.6 32/49] cifs: do not share tcons with DFS

2020-05-08 Thread Greg Kroah-Hartman
From: Paulo Alcantara 

[ Upstream commit 65303de829dd6d291a4947c1a31de31896f8a060 ]

This disables tcon re-use for DFS shares.

tcon->dfs_path stores the path that the tcon should connect to when
doing failing over.

If that tcon is used multiple times e.g. 2 mounts using it with
different prefixpath, each will need a different dfs_path but there is
only one tcon. The other solution would be to split the tcon in 2
tcons during failover but that is much harder.

tcons could not be shared with DFS in cifs.ko because in a
DFS namespace like:

  //domain/dfsroot -> /serverA/dfsroot, /serverB/dfsroot

  //serverA/dfsroot/link -> /serverA/target1/aa/bb

  //serverA/dfsroot/link2 -> /serverA/target1/cc/dd

you can see that link and link2 are two DFS links that both resolve to
the same target share (/serverA/target1), so cifs.ko will only contain a
single tcon for both link and link2.

The problem with that is, if we (auto)mount "link" and "link2", cifs.ko
will only contain a single tcon for both DFS links so we couldn't
perform failover or refresh the DFS cache for both links because
tcon->dfs_path was set to either "link" or "link2", but not both --
which is wrong.

Signed-off-by: Paulo Alcantara (SUSE) 
Reviewed-by: Aurelien Aptel 
Reviewed-by: Ronnie Sahlberg 
Signed-off-by: Steve French 
Signed-off-by: Sasha Levin 
---
 fs/cifs/connect.c | 4 
 1 file changed, 4 insertions(+)

diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index d4a23b48e24d8..9c614d6916c2d 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -3419,6 +3419,10 @@ cifs_find_tcon(struct cifs_ses *ses, struct smb_vol 
*volume_info)
spin_lock(_tcp_ses_lock);
list_for_each(tmp, >tcon_list) {
tcon = list_entry(tmp, struct cifs_tcon, tcon_list);
+#ifdef CONFIG_CIFS_DFS_UPCALL
+   if (tcon->dfs_path)
+   continue;
+#endif
if (!match_tcon(tcon, volume_info))
continue;
++tcon->tc_count;
-- 
2.20.1





[PATCH 5.6 08/49] ASoC: topology: Check return value of soc_tplg_dai_config

2020-05-08 Thread Greg Kroah-Hartman
From: Amadeusz Sławiński 

[ Upstream commit dd8e871d4e560eeb8d22af82dde91457ad835a63 ]

Function soc_tplg_dai_config can fail, check for and handle possible
failure.

Signed-off-by: Amadeusz Sławiński 
Reviewed-by: Ranjani Sridharan 
Reviewed-by: Pierre-Louis Bossart 
Link: 
https://lore.kernel.org/r/20200327204729.397-7-amadeuszx.slawin...@linux.intel.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/soc-topology.c | 9 +++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
index ca0ac5372b293..e6a17ab433eea 100644
--- a/sound/soc/soc-topology.c
+++ b/sound/soc/soc-topology.c
@@ -2524,7 +2524,7 @@ static int soc_tplg_dai_elems_load(struct soc_tplg *tplg,
 {
struct snd_soc_tplg_dai *dai;
int count;
-   int i;
+   int i, ret;
 
count = le32_to_cpu(hdr->count);
 
@@ -2539,7 +2539,12 @@ static int soc_tplg_dai_elems_load(struct soc_tplg *tplg,
return -EINVAL;
}
 
-   soc_tplg_dai_config(tplg, dai);
+   ret = soc_tplg_dai_config(tplg, dai);
+   if (ret < 0) {
+   dev_err(tplg->dev, "ASoC: failed to configure DAI\n");
+   return ret;
+   }
+
tplg->pos += (sizeof(*dai) + le32_to_cpu(dai->priv.size));
}
 
-- 
2.20.1





[PATCH 5.4 32/50] drm/amdgpu: Fix oops when pp_funcs is unset in ACPI event

2020-05-08 Thread Greg Kroah-Hartman
From: Aaron Ma 

commit 5932d260a8d85a103bd6c504fbb85ff58b156bf9 upstream.

On ARCTURUS and RENOIR, powerplay is not supported yet.
When plug in or unplug power jack, ACPI event will issue.
Then kernel NULL pointer BUG will be triggered.
Check for NULL pointers before calling.

Signed-off-by: Aaron Ma 
Signed-off-by: Alex Deucher 
Cc: sta...@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman 

---
 drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c |3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
@@ -90,7 +90,8 @@ void amdgpu_pm_acpi_event_handler(struct
adev->pm.ac_power = true;
else
adev->pm.ac_power = false;
-   if (adev->powerplay.pp_funcs->enable_bapm)
+   if (adev->powerplay.pp_funcs &&
+   adev->powerplay.pp_funcs->enable_bapm)
amdgpu_dpm_enable_bapm(adev, adev->pm.ac_power);
mutex_unlock(>pm.mutex);
}




[PATCH 5.6 01/49] vhost: vsock: kick send_pkt worker once device is started

2020-05-08 Thread Greg Kroah-Hartman
From: Jia He 

commit 0b841030625cde5f784dd62aec72d6a766faae70 upstream.

Ning Bo reported an abnormal 2-second gap when booting Kata container [1].
The unconditional timeout was caused by VSOCK_DEFAULT_CONNECT_TIMEOUT of
connecting from the client side. The vhost vsock client tries to connect
an initializing virtio vsock server.

The abnormal flow looks like:
host-userspace   vhost vsock   guest vsock
==   ===   
connect() >  vhost_transport_send_pkt_work()   initializing
   | vq->private_data==NULL
   | will not be queued
   V
schedule_timeout(2s)
 vhost_vsock_start()  <-   device ready
 set vq->private_data

wait for 2s and failed
connect() again  vq->private_data!=NULL recv connecting pkt

Details:
1. Host userspace sends a connect pkt, at that time, guest vsock is under
   initializing, hence the vhost_vsock_start has not been called. So
   vq->private_data==NULL, and the pkt is not been queued to send to guest
2. Then it sleeps for 2s
3. After guest vsock finishes initializing, vq->private_data is set
4. When host userspace wakes up after 2s, send connecting pkt again,
   everything is fine.

As suggested by Stefano Garzarella, this fixes it by additional kicking the
send_pkt worker in vhost_vsock_start once the virtio device is started. This
makes the pending pkt sent again.

After this patch, kata-runtime (with vsock enabled) boot time is reduced
from 3s to 1s on a ThunderX2 arm64 server.

[1] https://github.com/kata-containers/runtime/issues/1917

Reported-by: Ning Bo 
Suggested-by: Stefano Garzarella 
Signed-off-by: Jia He 
Link: https://lore.kernel.org/r/20200501043840.186557-1-justin...@arm.com
Signed-off-by: Michael S. Tsirkin 
Reviewed-by: Stefano Garzarella 
Signed-off-by: Greg Kroah-Hartman 

---
 drivers/vhost/vsock.c |5 +
 1 file changed, 5 insertions(+)

--- a/drivers/vhost/vsock.c
+++ b/drivers/vhost/vsock.c
@@ -543,6 +543,11 @@ static int vhost_vsock_start(struct vhos
mutex_unlock(>mutex);
}
 
+   /* Some packets may have been queued before the device was started,
+* let's kick the send worker to send them.
+*/
+   vhost_work_queue(>dev, >send_pkt_work);
+
mutex_unlock(>dev.mutex);
return 0;
 




[PATCH 5.6 18/49] usb: dwc3: gadget: Properly set maxpacket limit

2020-05-08 Thread Greg Kroah-Hartman
From: Thinh Nguyen 

[ Upstream commit d94ea5319813658ad5861d161ae16a194c2abf88 ]

Currently the calculation of max packet size limit for IN endpoints is
too restrictive. This prevents a matching of a capable hardware endpoint
during configuration. Below is the minimum recommended HW configuration
to support a particular endpoint setup from the databook:

For OUT endpoints, the databook recommended the minimum RxFIFO size to
be at least 3x MaxPacketSize + 3x setup packets size (8 bytes each) +
clock crossing margin (16 bytes).

For IN endpoints, the databook recommended the minimum TxFIFO size to be
at least 3x MaxPacketSize for endpoints that support burst. If the
endpoint doesn't support burst or when the device is operating in USB
2.0 mode, a minimum TxFIFO size of 2x MaxPacketSize is recommended.

Base on these recommendations, we can calculate the MaxPacketSize limit
of each endpoint. This patch revises the IN endpoint MaxPacketSize limit
and also sets the MaxPacketSize limit for OUT endpoints.

Reference: Databook 3.30a section 3.2.2 and 3.2.3

Signed-off-by: Thinh Nguyen 
Signed-off-by: Felipe Balbi 
Signed-off-by: Sasha Levin 
---
 drivers/usb/dwc3/core.h   |  4 +++
 drivers/usb/dwc3/gadget.c | 52 ++-
 2 files changed, 45 insertions(+), 11 deletions(-)

diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 3ecc69c5b150f..ce4acbf7fef90 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -310,6 +310,10 @@
 #define DWC3_GTXFIFOSIZ_TXFDEF(n)  ((n) & 0x)
 #define DWC3_GTXFIFOSIZ_TXFSTADDR(n)   ((n) & 0x)
 
+/* Global RX Fifo Size Register */
+#define DWC31_GRXFIFOSIZ_RXFDEP(n) ((n) & 0x7fff)  /* DWC_usb31 only */
+#define DWC3_GRXFIFOSIZ_RXFDEP(n)  ((n) & 0x)
+
 /* Global Event Size Registers */
 #define DWC3_GEVNTSIZ_INTMASK  BIT(31)
 #define DWC3_GEVNTSIZ_SIZE(n)  ((n) & 0x)
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index c4be4631937a8..bc1cf6d0412a3 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -2223,7 +2223,6 @@ static int dwc3_gadget_init_in_endpoint(struct dwc3_ep 
*dep)
 {
struct dwc3 *dwc = dep->dwc;
int mdwidth;
-   int kbytes;
int size;
 
mdwidth = DWC3_MDWIDTH(dwc->hwparams.hwparams0);
@@ -2239,17 +2238,17 @@ static int dwc3_gadget_init_in_endpoint(struct dwc3_ep 
*dep)
/* FIFO Depth is in MDWDITH bytes. Multiply */
size *= mdwidth;
 
-   kbytes = size / 1024;
-   if (kbytes == 0)
-   kbytes = 1;
-
/*
-* FIFO sizes account an extra MDWIDTH * (kbytes + 1) bytes for
-* internal overhead. We don't really know how these are used,
-* but documentation say it exists.
+* To meet performance requirement, a minimum TxFIFO size of 3x
+* MaxPacketSize is recommended for endpoints that support burst and a
+* minimum TxFIFO size of 2x MaxPacketSize for endpoints that don't
+* support burst. Use those numbers and we can calculate the max packet
+* limit as below.
 */
-   size -= mdwidth * (kbytes + 1);
-   size /= kbytes;
+   if (dwc->maximum_speed >= USB_SPEED_SUPER)
+   size /= 3;
+   else
+   size /= 2;
 
usb_ep_set_maxpacket_limit(>endpoint, size);
 
@@ -2267,8 +2266,39 @@ static int dwc3_gadget_init_in_endpoint(struct dwc3_ep 
*dep)
 static int dwc3_gadget_init_out_endpoint(struct dwc3_ep *dep)
 {
struct dwc3 *dwc = dep->dwc;
+   int mdwidth;
+   int size;
+
+   mdwidth = DWC3_MDWIDTH(dwc->hwparams.hwparams0);
+
+   /* MDWIDTH is represented in bits, convert to bytes */
+   mdwidth /= 8;
 
-   usb_ep_set_maxpacket_limit(>endpoint, 1024);
+   /* All OUT endpoints share a single RxFIFO space */
+   size = dwc3_readl(dwc->regs, DWC3_GRXFIFOSIZ(0));
+   if (dwc3_is_usb31(dwc))
+   size = DWC31_GRXFIFOSIZ_RXFDEP(size);
+   else
+   size = DWC3_GRXFIFOSIZ_RXFDEP(size);
+
+   /* FIFO depth is in MDWDITH bytes */
+   size *= mdwidth;
+
+   /*
+* To meet performance requirement, a minimum recommended RxFIFO size
+* is defined as follow:
+* RxFIFO size >= (3 x MaxPacketSize) +
+* (3 x 8 bytes setup packets size) + (16 bytes clock crossing margin)
+*
+* Then calculate the max packet limit as below.
+*/
+   size -= (3 * 8) + 16;
+   if (size < 0)
+   size = 0;
+   else
+   size /= 3;
+
+   usb_ep_set_maxpacket_limit(>endpoint, size);
dep->endpoint.max_streams = 15;
dep->endpoint.ops = _gadget_ep_ops;
list_add_tail(>endpoint.ep_list,
-- 
2.20.1





[PATCH 5.4 33/50] Revert "software node: Simplify software_node_release() function"

2020-05-08 Thread Greg Kroah-Hartman
From: Brendan Higgins 

commit 7589238a8cf37331607c3222a64ac3140b29532d upstream.

This reverts commit 3df85a1ae51f6b256982fe9d17c2dc5bfb4cc402.

The reverted commit says "It's possible to release the node ID
immediately when fwnode_remove_software_node() is called, no need to
wait for software_node_release() with that." However, releasing the node
ID before waiting for software_node_release() to be called causes the
node ID to be released before the kobject and the underlying sysfs
entry; this means there is a period of time where a sysfs entry exists
that is associated with an unallocated node ID.

Once consequence of this is that there is a race condition where it is
possible to call fwnode_create_software_node() with no parent node
specified (NULL) and have it fail with -EEXIST because the node ID that
was assigned is still associated with a stale sysfs entry that hasn't
been cleaned up yet.

Although it is difficult to reproduce this race condition under normal
conditions, it can be deterministically reproduced with the following
minconfig on UML:

CONFIG_KUNIT_DRIVER_PE_TEST=y
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_OBJECTS=y
CONFIG_DEBUG_OBJECTS_TIMERS=y
CONFIG_DEBUG_KOBJECT_RELEASE=y
CONFIG_KUNIT=y

Running the tests with this configuration causes the following failure:


kobject: 'node0' ((ptrval)): kobject_release, parent (ptrval) 
(delayed 400)
ok 1 - pe_test_uints
sysfs: cannot create duplicate filename '/kernel/software_nodes/node0'
CPU: 0 PID: 28 Comm: kunit_try_catch Not tainted 5.6.0-rc3-next-20200227 #14

kobject_add_internal failed for node0 with -EEXIST, don't try to register 
things with the same name in the same directory.
kobject: 'node0' ((ptrval)): kobject_release, parent (ptrval) 
(delayed 100)
# pe_test_uint_arrays: ASSERTION FAILED at 
drivers/base/test/property-entry-test.c:123
Expected node is not error, but is: -17
not ok 2 - pe_test_uint_arrays


Reported-by: Heidi Fahim 
Signed-off-by: Brendan Higgins 
Reviewed-by: Heikki Krogerus 
Cc: 5.3+  # 5.3+
Signed-off-by: Rafael J. Wysocki 
Signed-off-by: Greg Kroah-Hartman 

---
 drivers/base/swnode.c |   14 +++---
 1 file changed, 7 insertions(+), 7 deletions(-)

--- a/drivers/base/swnode.c
+++ b/drivers/base/swnode.c
@@ -679,6 +679,13 @@ static void software_node_release(struct
 {
struct swnode *swnode = kobj_to_swnode(kobj);
 
+   if (swnode->parent) {
+   ida_simple_remove(>parent->child_ids, swnode->id);
+   list_del(>entry);
+   } else {
+   ida_simple_remove(_root_ids, swnode->id);
+   }
+
if (swnode->allocated) {
property_entries_free(swnode->node->properties);
kfree(swnode->node);
@@ -844,13 +851,6 @@ void fwnode_remove_software_node(struct
if (!swnode)
return;
 
-   if (swnode->parent) {
-   ida_simple_remove(>parent->child_ids, swnode->id);
-   list_del(>entry);
-   } else {
-   ida_simple_remove(_root_ids, swnode->id);
-   }
-
kobject_put(>kobj);
 }
 EXPORT_SYMBOL_GPL(fwnode_remove_software_node);




[PATCH 5.4 25/50] tracing: Fix memory leaks in trace_events_hist.c

2020-05-08 Thread Greg Kroah-Hartman
From: Vamshi K Sthambamkadi 

[ Upstream commit 9da73974eb9c965dd9989befb593b8c8da9e4bdc ]

kmemleak report 1:
[<9092c50b>] kmem_cache_alloc_trace+0x138/0x270
[<05a2c9ed>] create_field_var+0xcf/0x180
[<528a2d68>] action_create+0xe2/0xc80
[<63f50b61>] event_hist_trigger_func+0x15b5/0x1920
[<28ea5d3d>] trigger_process_regex+0x7b/0xc0
[<3138e86f>] event_trigger_write+0x4d/0xb0
[] __vfs_write+0x30/0x200
[<4f424a0d>] vfs_write+0x96/0x1b0
[] ksys_write+0x53/0xc0
[<3717101a>] __ia32_sys_write+0x15/0x20
[] do_fast_syscall_32+0x70/0x250
[<46e2629c>] entry_SYSENTER_32+0xaf/0x102

This is because save_vars[] of struct hist_trigger_data are
not destroyed

kmemleak report 2:
[<9092c50b>] kmem_cache_alloc_trace+0x138/0x270
[<6e5e97c5>] create_var+0x3c/0x110
[] create_field_var+0xaf/0x180
[<528a2d68>] action_create+0xe2/0xc80
[<63f50b61>] event_hist_trigger_func+0x15b5/0x1920
[<28ea5d3d>] trigger_process_regex+0x7b/0xc0
[<3138e86f>] event_trigger_write+0x4d/0xb0
[] __vfs_write+0x30/0x200
[<4f424a0d>] vfs_write+0x96/0x1b0
[] ksys_write+0x53/0xc0
[<3717101a>] __ia32_sys_write+0x15/0x20
[] do_fast_syscall_32+0x70/0x250
[<46e2629c>] entry_SYSENTER_32+0xaf/0x102

struct hist_field allocated through create_var() do not initialize
"ref" field to 1. The code in __destroy_hist_field() does not destroy
object if "ref" is initialized to zero, the condition
if (--hist_field->ref > 1) always passes since unsigned int wraps.

kmemleak report 3:
[] __kmalloc_track_caller+0x139/0x2b0
[] kstrdup+0x27/0x50
[<39d70006>] init_var_ref+0x58/0xd0
[<8ca76370>] create_var_ref+0x89/0xe0
[] action_create+0x38f/0xc80
[<7c146821>] event_hist_trigger_func+0x15b5/0x1920
[<07de3f61>] trigger_process_regex+0x7b/0xc0
[] event_trigger_write+0x4d/0xb0
[<19bf1512>] __vfs_write+0x30/0x200
[<64ce4d27>] vfs_write+0x96/0x1b0
[] ksys_write+0x53/0xc0
[<7d4230cd>] __ia32_sys_write+0x15/0x20
[<8eadca00>] do_fast_syscall_32+0x70/0x250
[<235cf985>] entry_SYSENTER_32+0xaf/0x102

hist_fields (system & event_name) are not freed

Link: http://lkml.kernel.org/r/20200422061503.GA5151@cosmos

Signed-off-by: Vamshi K Sthambamkadi 
Signed-off-by: Steven Rostedt (VMware) 
Signed-off-by: Sasha Levin 
---
 kernel/trace/trace_events_hist.c | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
index 6495800fb92a1..8107574e8af9d 100644
--- a/kernel/trace/trace_events_hist.c
+++ b/kernel/trace/trace_events_hist.c
@@ -2466,6 +2466,9 @@ static void __destroy_hist_field(struct hist_field 
*hist_field)
kfree(hist_field->name);
kfree(hist_field->type);
 
+   kfree(hist_field->system);
+   kfree(hist_field->event_name);
+
kfree(hist_field);
 }
 
@@ -3528,6 +3531,7 @@ static struct hist_field *create_var(struct 
hist_trigger_data *hist_data,
goto out;
}
 
+   var->ref = 1;
var->flags = HIST_FIELD_FL_VAR;
var->var.idx = idx;
var->var.hist_data = var->hist_data = hist_data;
@@ -4157,6 +4161,9 @@ static void destroy_field_vars(struct hist_trigger_data 
*hist_data)
 
for (i = 0; i < hist_data->n_field_vars; i++)
destroy_field_var(hist_data->field_vars[i]);
+
+   for (i = 0; i < hist_data->n_save_vars; i++)
+   destroy_field_var(hist_data->save_vars[i]);
 }
 
 static void save_field_var(struct hist_trigger_data *hist_data,
-- 
2.20.1





[PATCH 5.6 13/49] selftests/ipc: Fix test failure seen after initial test run

2020-05-08 Thread Greg Kroah-Hartman
From: Tyler Hicks 

[ Upstream commit b87080eab4c1377706c113fc9c0157f19ea8fed1 ]

After successfully running the IPC msgque test once, subsequent runs
result in a test failure:

  $ sudo ./run_kselftest.sh
  TAP version 13
  1..1
  # selftests: ipc: msgque
  # Failed to get stats for IPC queue with id 0
  # Failed to dump queue: -22
  # Bail out!
  # # Pass 0 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0
  not ok 1 selftests: ipc: msgque # exit=1

The dump_queue() function loops through the possible message queue index
values using calls to msgctl(kern_id, MSG_STAT, ...) where kern_id
represents the index value. The first time the test is ran, the initial
index value of 0 is valid and the test is able to complete. The index
value of 0 is not valid in subsequent test runs and the loop attempts to
try index values of 1, 2, 3, and so on until a valid index value is
found that corresponds to the message queue created earlier in the test.

The msgctl() syscall returns -1 and sets errno to EINVAL when invalid
index values are used. The test failure is caused by incorrectly
comparing errno to -EINVAL when cycling through possible index values.

Fix invalid test failures on subsequent runs of the msgque test by
correctly comparing errno values to a non-negated EINVAL.

Fixes: 3a665531a3b7 ("selftests: IPC message queue copy feature test")
Signed-off-by: Tyler Hicks 
Signed-off-by: Shuah Khan 
Signed-off-by: Sasha Levin 
---
 tools/testing/selftests/ipc/msgque.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/testing/selftests/ipc/msgque.c 
b/tools/testing/selftests/ipc/msgque.c
index 4c156aeab6b80..5ec4d9e18806c 100644
--- a/tools/testing/selftests/ipc/msgque.c
+++ b/tools/testing/selftests/ipc/msgque.c
@@ -137,7 +137,7 @@ int dump_queue(struct msgque_data *msgque)
for (kern_id = 0; kern_id < 256; kern_id++) {
ret = msgctl(kern_id, MSG_STAT, );
if (ret < 0) {
-   if (errno == -EINVAL)
+   if (errno == EINVAL)
continue;
printf("Failed to get stats for IPC queue with id %d\n",
kern_id);
-- 
2.20.1





[PATCH 5.6 12/49] Revert "Kernel selftests: tpm2: check for tpm support"

2020-05-08 Thread Greg Kroah-Hartman
From: Jarkko Sakkinen 

[ Upstream commit aaa2d92efe1f972567f1691b423ab8dc606ab3a9 ]

This reverts commit b32694cd0724d4ceca2c62cc7c3d3a8d1ffa11fc.

The original comment was neither reviewed nor tested. Thus, this the
*only* possible action to take.

Cc: Nikita Sobolev 
Signed-off-by: Jarkko Sakkinen 
Signed-off-by: Shuah Khan 
Signed-off-by: Sasha Levin 
---
 tools/testing/selftests/tpm2/test_smoke.sh | 13 ++---
 tools/testing/selftests/tpm2/test_space.sh |  9 +
 2 files changed, 3 insertions(+), 19 deletions(-)

diff --git a/tools/testing/selftests/tpm2/test_smoke.sh 
b/tools/testing/selftests/tpm2/test_smoke.sh
index b630c7b5950a9..8155c2ea7ccbb 100755
--- a/tools/testing/selftests/tpm2/test_smoke.sh
+++ b/tools/testing/selftests/tpm2/test_smoke.sh
@@ -1,17 +1,8 @@
 #!/bin/bash
 # SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
-self.flags = flags
 
-# Kselftest framework requirement - SKIP code is 4.
-ksft_skip=4
-
-
-if [ -f /dev/tpm0 ] ; then
-   python -m unittest -v tpm2_tests.SmokeTest
-   python -m unittest -v tpm2_tests.AsyncTest
-else
-   exit $ksft_skip
-fi
+python -m unittest -v tpm2_tests.SmokeTest
+python -m unittest -v tpm2_tests.AsyncTest
 
 CLEAR_CMD=$(which tpm2_clear)
 if [ -n $CLEAR_CMD ]; then
diff --git a/tools/testing/selftests/tpm2/test_space.sh 
b/tools/testing/selftests/tpm2/test_space.sh
index 180b469c53b47..a6f5e346635e5 100755
--- a/tools/testing/selftests/tpm2/test_space.sh
+++ b/tools/testing/selftests/tpm2/test_space.sh
@@ -1,11 +1,4 @@
 #!/bin/bash
 # SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
 
-# Kselftest framework requirement - SKIP code is 4.
-ksft_skip=4
-
-if [ -f /dev/tpmrm0 ] ; then
-   python -m unittest -v tpm2_tests.SpaceTest
-else
-   exit $ksft_skip
-fi
+python -m unittest -v tpm2_tests.SpaceTest
-- 
2.20.1





[PATCH 5.6 03/49] ASoC: topology: Add missing memory checks

2020-05-08 Thread Greg Kroah-Hartman
From: Amadeusz Sławiński 

[ Upstream commit abc3caac24501008465fdb55c5e89e16d58d5a3d ]

kstrdup is an allocation function and it can fail, so its return value
should be checked and handled appropriately.

In order to check all cases, we need to modify set_stream_info to return
a value, so check that everything went correctly when doing kstrdup().
Later add proper checks and error handlers.

Signed-off-by: Amadeusz Sławiński 
Reviewed-by: Ranjani Sridharan 
Reviewed-by: Pierre-Louis Bossart 
Link: 
https://lore.kernel.org/r/20200327204729.397-2-amadeuszx.slawin...@linux.intel.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/soc-topology.c | 62 +++-
 1 file changed, 49 insertions(+), 13 deletions(-)

diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
index a152409e8746e..7a7c427de95d6 100644
--- a/sound/soc/soc-topology.c
+++ b/sound/soc/soc-topology.c
@@ -1766,10 +1766,13 @@ static int soc_tplg_dapm_complete(struct soc_tplg *tplg)
return 0;
 }
 
-static void set_stream_info(struct snd_soc_pcm_stream *stream,
+static int set_stream_info(struct snd_soc_pcm_stream *stream,
struct snd_soc_tplg_stream_caps *caps)
 {
stream->stream_name = kstrdup(caps->name, GFP_KERNEL);
+   if (!stream->stream_name)
+   return -ENOMEM;
+
stream->channels_min = le32_to_cpu(caps->channels_min);
stream->channels_max = le32_to_cpu(caps->channels_max);
stream->rates = le32_to_cpu(caps->rates);
@@ -1777,6 +1780,8 @@ static void set_stream_info(struct snd_soc_pcm_stream 
*stream,
stream->rate_max = le32_to_cpu(caps->rate_max);
stream->formats = le64_to_cpu(caps->formats);
stream->sig_bits = le32_to_cpu(caps->sig_bits);
+
+   return 0;
 }
 
 static void set_dai_flags(struct snd_soc_dai_driver *dai_drv,
@@ -1812,20 +1817,29 @@ static int soc_tplg_dai_create(struct soc_tplg *tplg,
if (dai_drv == NULL)
return -ENOMEM;
 
-   if (strlen(pcm->dai_name))
+   if (strlen(pcm->dai_name)) {
dai_drv->name = kstrdup(pcm->dai_name, GFP_KERNEL);
+   if (!dai_drv->name) {
+   ret = -ENOMEM;
+   goto err;
+   }
+   }
dai_drv->id = le32_to_cpu(pcm->dai_id);
 
if (pcm->playback) {
stream = _drv->playback;
caps = >caps[SND_SOC_TPLG_STREAM_PLAYBACK];
-   set_stream_info(stream, caps);
+   ret = set_stream_info(stream, caps);
+   if (ret < 0)
+   goto err;
}
 
if (pcm->capture) {
stream = _drv->capture;
caps = >caps[SND_SOC_TPLG_STREAM_CAPTURE];
-   set_stream_info(stream, caps);
+   ret = set_stream_info(stream, caps);
+   if (ret < 0)
+   goto err;
}
 
if (pcm->compress)
@@ -1835,11 +1849,7 @@ static int soc_tplg_dai_create(struct soc_tplg *tplg,
ret = soc_tplg_dai_load(tplg, dai_drv, pcm, NULL);
if (ret < 0) {
dev_err(tplg->comp->dev, "ASoC: DAI loading failed\n");
-   kfree(dai_drv->playback.stream_name);
-   kfree(dai_drv->capture.stream_name);
-   kfree(dai_drv->name);
-   kfree(dai_drv);
-   return ret;
+   goto err;
}
 
dai_drv->dobj.index = tplg->index;
@@ -1860,6 +1870,14 @@ static int soc_tplg_dai_create(struct soc_tplg *tplg,
return ret;
}
 
+   return 0;
+
+err:
+   kfree(dai_drv->playback.stream_name);
+   kfree(dai_drv->capture.stream_name);
+   kfree(dai_drv->name);
+   kfree(dai_drv);
+
return ret;
 }
 
@@ -1916,11 +1934,20 @@ static int soc_tplg_fe_link_create(struct soc_tplg 
*tplg,
if (strlen(pcm->pcm_name)) {
link->name = kstrdup(pcm->pcm_name, GFP_KERNEL);
link->stream_name = kstrdup(pcm->pcm_name, GFP_KERNEL);
+   if (!link->name || !link->stream_name) {
+   ret = -ENOMEM;
+   goto err;
+   }
}
link->id = le32_to_cpu(pcm->pcm_id);
 
-   if (strlen(pcm->dai_name))
+   if (strlen(pcm->dai_name)) {
link->cpus->dai_name = kstrdup(pcm->dai_name, GFP_KERNEL);
+   if (!link->cpus->dai_name) {
+   ret = -ENOMEM;
+   goto err;
+   }
+   }
 
link->codecs->name = "snd-soc-dummy";
link->codecs->dai_name = "snd-soc-dummy-dai";
@@ -2436,13 +2463,17 @@ static int soc_tplg_dai_config(struct soc_tplg *tplg,
if (d->playback) {
stream = _drv->playback;
caps = >caps[SND_SOC_TPLG_STREAM_PLAYBACK];
-   set_stream_info(stream, caps);
+   ret = set_stream_info(stream, caps);
+   if (ret < 0)
+ 

[PATCH 5.4 49/50] udp: document udp_rcv_segment special case for looped packets

2020-05-08 Thread Greg Kroah-Hartman
From: Willem de Bruijn 

commit d0208bf4da97f76237300afb83c097de25645de6 upstream.

Commit 6cd021a58c18a ("udp: segment looped gso packets correctly")
fixes an issue with rare udp gso multicast packets looped onto the
receive path.

The stable backport makes the narrowest change to target only these
packets, when needed. As opposed to, say, expanding __udp_gso_segment,
which is harder to reason to be free from unintended side-effects.

But the resulting code is hardly self-describing.
Document its purpose and rationale.

Signed-off-by: Willem de Bruijn 
Signed-off-by: David S. Miller 
Signed-off-by: Greg Kroah-Hartman 

---
 include/net/udp.h |7 +++
 1 file changed, 7 insertions(+)

--- a/include/net/udp.h
+++ b/include/net/udp.h
@@ -476,6 +476,13 @@ static inline struct sk_buff *udp_rcv_se
if (!inet_get_convert_csum(sk))
features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
 
+   /* UDP segmentation expects packets of type CHECKSUM_PARTIAL or
+* CHECKSUM_NONE in __udp_gso_segment. UDP GRO indeed builds partial
+* packets in udp_gro_complete_segment. As does UDP GSO, verified by
+* udp_send_skb. But when those packets are looped in dev_loopback_xmit
+* their ip_summed is set to CHECKSUM_UNNECESSARY. Reset in this
+* specific case, where PARTIAL is both correct and required.
+*/
if (skb->pkt_type == PACKET_LOOPBACK)
skb->ip_summed = CHECKSUM_PARTIAL;
 




[PATCH 5.4 47/50] Revert "drm/amd/display: setting the DIG_MODE to the correct value."

2020-05-08 Thread Greg Kroah-Hartman
From: Zhan Liu 

commit b73b7f48895a6a944a76a2d8cdd7feee72bb1f0b upstream.

This reverts commit 967a3b85bac91c55eff740e61bf270c2732f48b2.

Reason for revert: Root cause of this issue is found. The workaround is not 
needed anymore.

Signed-off-by: Zhan Liu 
Reviewed-by: Hersen Wu 
Signed-off-by: Alex Deucher 
Signed-off-by: Greg Kroah-Hartman 

---
 drivers/gpu/drm/amd/display/dc/core/dc_link.c |9 -
 1 file changed, 9 deletions(-)

--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
@@ -2768,15 +2768,6 @@ void core_link_enable_stream(
CONTROLLER_DP_TEST_PATTERN_VIDEOMODE,
COLOR_DEPTH_UNDEFINED);
 
-   /* This second call is needed to reconfigure the DIG
-* as a workaround for the incorrect value being applied
-* from transmitter control.
-*/
-   if (!dc_is_virtual_signal(pipe_ctx->stream->signal))
-   stream->link->link_enc->funcs->setup(
-   stream->link->link_enc,
-   pipe_ctx->stream->signal);
-
 #ifdef CONFIG_DRM_AMD_DC_DSC_SUPPORT
if (pipe_ctx->stream->timing.flags.DSC) {
if (dc_is_dp_signal(pipe_ctx->stream->signal) ||




[PATCH 5.4 45/50] libbpf: Fix readelf output parsing for Fedora

2020-05-08 Thread Greg Kroah-Hartman
From: Thadeu Lima de Souza Cascardo 

commit aa915931ac3e53ccf371308e6750da510e3591dd upstream.

Fedora binutils has been patched to show "other info" for a symbol at the
end of the line. This was done in order to support unmaintained scripts
that would break with the extra info. [1]

[1] 
https://src.fedoraproject.org/rpms/binutils/c/b8265c46f7ddae23a792ee8306fbaaeacba83bf8

This in turn has been done to fix the build of ruby, because of checksec.
[2] Thanks Michael Ellerman for the pointer.

[2] https://bugzilla.redhat.com/show_bug.cgi?id=1479302

As libbpf Makefile is not unmaintained, we can simply deal with either
output format, by just removing the "other info" field, as it always comes
inside brackets.

Fixes: 3464afdf11f9 (libbpf: Fix readelf output parsing on powerpc with recent 
binutils)
Reported-by: Justin Forbes 
Signed-off-by: Thadeu Lima de Souza Cascardo 
Signed-off-by: Alexei Starovoitov 
Acked-by: Andrii Nakryiko 
Cc: Aurelien Jarno 
Link: https://lore.kernel.org/bpf/20191213101114.GA3986@calabresa
Signed-off-by: Greg Kroah-Hartman 

---
 tools/lib/bpf/Makefile |2 ++
 1 file changed, 2 insertions(+)

--- a/tools/lib/bpf/Makefile
+++ b/tools/lib/bpf/Makefile
@@ -145,6 +145,7 @@ PC_FILE := $(addprefix $(OUTPUT),$(PC_F
 
 GLOBAL_SYM_COUNT = $(shell readelf -s --wide $(BPF_IN_SHARED) | \
   cut -d "@" -f1 | sed 's/_v[0-9]_[0-9]_[0-9].*//' | \
+  sed 's/\[.*\]//' | \
   awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}' | 
\
   sort -u | wc -l)
 VERSIONED_SYM_COUNT = $(shell readelf -s --wide $(OUTPUT)libbpf.so | \
@@ -217,6 +218,7 @@ check_abi: $(OUTPUT)libbpf.so
 "versioned in $(VERSION_SCRIPT)." >&2;  \
readelf -s --wide $(BPF_IN_SHARED) | \
cut -d "@" -f1 | sed 's/_v[0-9]_[0-9]_[0-9].*//' |   \
+   sed 's/\[.*\]//' |   \
awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$NF}'|  \
sort -u > $(OUTPUT)libbpf_global_syms.tmp;   \
readelf -s --wide $(OUTPUT)libbpf.so |   \




[PATCH 5.6 15/49] scsi: sg: add sg_remove_request in sg_write

2020-05-08 Thread Greg Kroah-Hartman
From: Wu Bo 

[ Upstream commit 83c6f2390040f188cc25b270b4befeb5628c1aee ]

If the __copy_from_user function failed we need to call sg_remove_request
in sg_write.

Link: https://lore.kernel.org/r/610618d9-e983-fd56-ed0f-639428343...@huawei.com
Acked-by: Douglas Gilbert 
Signed-off-by: Wu Bo 
Signed-off-by: Martin K. Petersen 
Signed-off-by: Sasha Levin 
---
 drivers/scsi/sg.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
index 9c0ee192f0f9c..20472aaaf630a 100644
--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -685,8 +685,10 @@ sg_write(struct file *filp, const char __user *buf, size_t 
count, loff_t * ppos)
hp->flags = input_size; /* structure abuse ... */
hp->pack_id = old_hdr.pack_id;
hp->usr_ptr = NULL;
-   if (copy_from_user(cmnd, buf, cmd_size))
+   if (copy_from_user(cmnd, buf, cmd_size)) {
+   sg_remove_request(sfp, srp);
return -EFAULT;
+   }
/*
 * SG_DXFER_TO_FROM_DEV is functionally equivalent to SG_DXFER_FROM_DEV,
 * but is is possible that the app intended SG_DXFER_TO_DEV, because 
there
-- 
2.20.1





[PATCH 5.6 17/49] ASoC: topology: Fix endianness issue

2020-05-08 Thread Greg Kroah-Hartman
From: Amadeusz Sławiński 

[ Upstream commit 26d87881590fd55ccdd8f829498d7b3033f81990 ]

As done in already existing cases, we should use le32_to_cpu macro while
accessing hdr->magic. Found with sparse.

Signed-off-by: Amadeusz Sławiński 
Link: 
https://lore.kernel.org/r/20200415162435.31859-2-amadeuszx.slawin...@linux.intel.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/soc-topology.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
index e6a17ab433eea..009d65a6fb43a 100644
--- a/sound/soc/soc-topology.c
+++ b/sound/soc/soc-topology.c
@@ -2652,7 +2652,7 @@ static int soc_valid_header(struct soc_tplg *tplg,
}
 
/* big endian firmware objects not supported atm */
-   if (hdr->magic == SOC_TPLG_MAGIC_BIG_ENDIAN) {
+   if (le32_to_cpu(hdr->magic) == SOC_TPLG_MAGIC_BIG_ENDIAN) {
dev_err(tplg->dev,
"ASoC: pass %d big endian not supported header got %x 
at offset 0x%lx size 0x%zx.\n",
tplg->pass, hdr->magic,
-- 
2.20.1





[PATCH 5.4 46/50] mm/mremap: Add comment explaining the untagging behaviour of mremap()

2020-05-08 Thread Greg Kroah-Hartman
From: Will Deacon 

commit b2a84de2a2deb76a6a51609845341f508c518c03 upstream.

Commit dcde237319e6 ("mm: Avoid creating virtual address aliases in
brk()/mmap()/mremap()") changed mremap() so that only the 'old' address
is untagged, leaving the 'new' address in the form it was passed from
userspace. This prevents the unexpected creation of aliasing virtual
mappings in userspace, but looks a bit odd when you read the code.

Add a comment justifying the untagging behaviour in mremap().

Reported-by: Linus Torvalds 
Acked-by: Linus Torvalds 
Reviewed-by: Catalin Marinas 
Signed-off-by: Will Deacon 
Signed-off-by: Catalin Marinas 
Signed-off-by: Greg Kroah-Hartman 

---
 mm/mremap.c |   10 ++
 1 file changed, 10 insertions(+)

--- a/mm/mremap.c
+++ b/mm/mremap.c
@@ -606,6 +606,16 @@ SYSCALL_DEFINE5(mremap, unsigned long, a
LIST_HEAD(uf_unmap_early);
LIST_HEAD(uf_unmap);
 
+   /*
+* There is a deliberate asymmetry here: we strip the pointer tag
+* from the old address but leave the new address alone. This is
+* for consistency with mmap(), where we prevent the creation of
+* aliasing mappings in userspace by leaving the tag bits of the
+* mapping address intact. A non-zero tag will cause the subsequent
+* range checks to reject the address as invalid.
+*
+* See Documentation/arm64/tagged-address-abi.rst for more information.
+*/
addr = untagged_addr(addr);
 
if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE))




[PATCH 5.4 44/50] cgroup, netclassid: remove double cond_resched

2020-05-08 Thread Greg Kroah-Hartman
From: Jiri Slaby 

commit 526f3d96b8f83b1b13d73bd0b5c79cc2c487ec8e upstream.

Commit 018d26fcd12a ("cgroup, netclassid: periodically release file_lock
on classid") added a second cond_resched to write_classid indirectly by
update_classid_task. Remove the one in write_classid.

Signed-off-by: Jiri Slaby 
Cc: Dmitry Yakunin 
Cc: Konstantin Khlebnikov 
Cc: David S. Miller 
Signed-off-by: David S. Miller 
Signed-off-by: Greg Kroah-Hartman 

---
 net/core/netclassid_cgroup.c |4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

--- a/net/core/netclassid_cgroup.c
+++ b/net/core/netclassid_cgroup.c
@@ -127,10 +127,8 @@ static int write_classid(struct cgroup_s
cs->classid = (u32)value;
 
css_task_iter_start(css, 0, );
-   while ((p = css_task_iter_next())) {
+   while ((p = css_task_iter_next()))
update_classid_task(p, cs->classid);
-   cond_resched();
-   }
css_task_iter_end();
 
return 0;




[PATCH 5.4 29/50] net: systemport: suppress warnings on failed Rx SKB allocations

2020-05-08 Thread Greg Kroah-Hartman
From: Doug Berger 

[ Upstream commit 3554e54a46125030c534820c297ed7f6c3907e24 ]

The driver is designed to drop Rx packets and reclaim the buffers
when an allocation fails, and the network interface needs to safely
handle this packet loss. Therefore, an allocation failure of Rx
SKBs is relatively benign.

However, the output of the warning message occurs with a high
scheduling priority that can cause excessive jitter/latency for
other high priority processing.

This commit suppresses the warning messages to prevent scheduling
problems while retaining the failure count in the statistics of
the network interface.

Signed-off-by: Doug Berger 
Acked-by: Florian Fainelli 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
---
 drivers/net/ethernet/broadcom/bcmsysport.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c 
b/drivers/net/ethernet/broadcom/bcmsysport.c
index ad86a186ddc5f..4dfdb5a58025b 100644
--- a/drivers/net/ethernet/broadcom/bcmsysport.c
+++ b/drivers/net/ethernet/broadcom/bcmsysport.c
@@ -666,7 +666,8 @@ static struct sk_buff *bcm_sysport_rx_refill(struct 
bcm_sysport_priv *priv,
dma_addr_t mapping;
 
/* Allocate a new SKB for a new packet */
-   skb = netdev_alloc_skb(priv->netdev, RX_BUF_LENGTH);
+   skb = __netdev_alloc_skb(priv->netdev, RX_BUF_LENGTH,
+GFP_ATOMIC | __GFP_NOWARN);
if (!skb) {
priv->mib.alloc_rx_buff_failed++;
netif_err(priv, rx_err, ndev, "SKB alloc failed\n");
-- 
2.20.1





[PATCH 5.4 40/50] dma-direct: exclude dma_direct_map_resource from the min_low_pfn check

2020-05-08 Thread Greg Kroah-Hartman
From: Christoph Hellwig 

commit 68a33b1794665ba8a1d1ef1d3bfcc7c587d380a6 upstream.

The valid memory address check in dma_capable only makes sense when mapping
normal memory, not when using dma_map_resource to map a device resource.
Add a new boolean argument to dma_capable to exclude that check for the
dma_map_resource case.

Fixes: b12d66278dd6 ("dma-direct: check for overflows on 32 bit DMA addresses")
Reported-by: Marek Szyprowski 
Signed-off-by: Christoph Hellwig 
Acked-by: Marek Szyprowski 
Tested-by: Marek Szyprowski 
Signed-off-by: Greg Kroah-Hartman 

---
 arch/x86/kernel/amd_gart_64.c |4 ++--
 drivers/xen/swiotlb-xen.c |4 ++--
 include/linux/dma-direct.h|5 +++--
 kernel/dma/direct.c   |4 ++--
 kernel/dma/swiotlb.c  |2 +-
 5 files changed, 10 insertions(+), 9 deletions(-)

--- a/arch/x86/kernel/amd_gart_64.c
+++ b/arch/x86/kernel/amd_gart_64.c
@@ -185,13 +185,13 @@ static void iommu_full(struct device *de
 static inline int
 need_iommu(struct device *dev, unsigned long addr, size_t size)
 {
-   return force_iommu || !dma_capable(dev, addr, size);
+   return force_iommu || !dma_capable(dev, addr, size, true);
 }
 
 static inline int
 nonforced_iommu(struct device *dev, unsigned long addr, size_t size)
 {
-   return !dma_capable(dev, addr, size);
+   return !dma_capable(dev, addr, size, true);
 }
 
 /* Map a single continuous physical area into the IOMMU.
--- a/drivers/xen/swiotlb-xen.c
+++ b/drivers/xen/swiotlb-xen.c
@@ -375,7 +375,7 @@ static dma_addr_t xen_swiotlb_map_page(s
 * we can safely return the device addr and not worry about bounce
 * buffering it.
 */
-   if (dma_capable(dev, dev_addr, size) &&
+   if (dma_capable(dev, dev_addr, size, true) &&
!range_straddles_page_boundary(phys, size) &&
!xen_arch_need_swiotlb(dev, phys, dev_addr) &&
swiotlb_force != SWIOTLB_FORCE)
@@ -397,7 +397,7 @@ static dma_addr_t xen_swiotlb_map_page(s
/*
 * Ensure that the address returned is DMA'ble
 */
-   if (unlikely(!dma_capable(dev, dev_addr, size))) {
+   if (unlikely(!dma_capable(dev, dev_addr, size, true))) {
swiotlb_tbl_unmap_single(dev, map, size, size, dir,
attrs | DMA_ATTR_SKIP_CPU_SYNC);
return DMA_MAPPING_ERROR;
--- a/include/linux/dma-direct.h
+++ b/include/linux/dma-direct.h
@@ -25,14 +25,15 @@ static inline phys_addr_t __dma_to_phys(
return paddr + ((phys_addr_t)dev->dma_pfn_offset << PAGE_SHIFT);
 }
 
-static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t 
size)
+static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t 
size,
+   bool is_ram)
 {
dma_addr_t end = addr + size - 1;
 
if (!dev->dma_mask)
return false;
 
-   if (!IS_ENABLED(CONFIG_ARCH_DMA_ADDR_T_64BIT) &&
+   if (is_ram && !IS_ENABLED(CONFIG_ARCH_DMA_ADDR_T_64BIT) &&
min(addr, end) < phys_to_dma(dev, PFN_PHYS(min_low_pfn)))
return false;
 
--- a/kernel/dma/direct.c
+++ b/kernel/dma/direct.c
@@ -327,7 +327,7 @@ static inline bool dma_direct_possible(s
size_t size)
 {
return swiotlb_force != SWIOTLB_FORCE &&
-   dma_capable(dev, dma_addr, size);
+   dma_capable(dev, dma_addr, size, true);
 }
 
 dma_addr_t dma_direct_map_page(struct device *dev, struct page *page,
@@ -376,7 +376,7 @@ dma_addr_t dma_direct_map_resource(struc
 {
dma_addr_t dma_addr = paddr;
 
-   if (unlikely(!dma_capable(dev, dma_addr, size))) {
+   if (unlikely(!dma_capable(dev, dma_addr, size, false))) {
report_addr(dev, dma_addr, size);
return DMA_MAPPING_ERROR;
}
--- a/kernel/dma/swiotlb.c
+++ b/kernel/dma/swiotlb.c
@@ -678,7 +678,7 @@ bool swiotlb_map(struct device *dev, phy
 
/* Ensure that the address returned is DMA'ble */
*dma_addr = __phys_to_dma(dev, *phys);
-   if (unlikely(!dma_capable(dev, *dma_addr, size))) {
+   if (unlikely(!dma_capable(dev, *dma_addr, size, true))) {
swiotlb_tbl_unmap_single(dev, *phys, size, size, dir,
attrs | DMA_ATTR_SKIP_CPU_SYNC);
return false;




[PATCH 5.4 09/50] ASoC: sgtl5000: Fix VAG power-on handling

2020-05-08 Thread Greg Kroah-Hartman
From: Sebastian Reichel 

[ Upstream commit aa7812737f2877e192d57626cbe8825cc7cf6de9 ]

As mentioned slightly out of patch context in the code, there
is no reset routine for the chip. On boards where the chip is
supplied by a fixed regulator, it might not even be resetted
during (e.g. watchdog) reboot and can be in any state.

If the device is probed with VAG enabled, the driver's probe
routine will generate a loud pop sound when ANA_POWER is
being programmed. Avoid this by properly disabling just the
VAG bit and waiting the required power down time.

Signed-off-by: Sebastian Reichel 
Reviewed-by: Fabio Estevam 
Link: 
https://lore.kernel.org/r/20200414181140.145825-1-sebastian.reic...@collabora.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/codecs/sgtl5000.c | 34 ++
 sound/soc/codecs/sgtl5000.h |  1 +
 2 files changed, 35 insertions(+)

diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
index e949b372ceada..f5b59305c957a 100644
--- a/sound/soc/codecs/sgtl5000.c
+++ b/sound/soc/codecs/sgtl5000.c
@@ -1645,6 +1645,40 @@ static int sgtl5000_i2c_probe(struct i2c_client *client,
dev_err(>dev,
"Error %d initializing CHIP_CLK_CTRL\n", ret);
 
+   /* Mute everything to avoid pop from the following power-up */
+   ret = regmap_write(sgtl5000->regmap, SGTL5000_CHIP_ANA_CTRL,
+  SGTL5000_CHIP_ANA_CTRL_DEFAULT);
+   if (ret) {
+   dev_err(>dev,
+   "Error %d muting outputs via CHIP_ANA_CTRL\n", ret);
+   goto disable_clk;
+   }
+
+   /*
+* If VAG is powered-on (e.g. from previous boot), it would be disabled
+* by the write to ANA_POWER in later steps of the probe code. This
+* may create a loud pop even with all outputs muted. The proper way
+* to circumvent this is disabling the bit first and waiting the proper
+* cool-down time.
+*/
+   ret = regmap_read(sgtl5000->regmap, SGTL5000_CHIP_ANA_POWER, );
+   if (ret) {
+   dev_err(>dev, "Failed to read ANA_POWER: %d\n", ret);
+   goto disable_clk;
+   }
+   if (value & SGTL5000_VAG_POWERUP) {
+   ret = regmap_update_bits(sgtl5000->regmap,
+SGTL5000_CHIP_ANA_POWER,
+SGTL5000_VAG_POWERUP,
+0);
+   if (ret) {
+   dev_err(>dev, "Error %d disabling VAG\n", ret);
+   goto disable_clk;
+   }
+
+   msleep(SGTL5000_VAG_POWERDOWN_DELAY);
+   }
+
/* Follow section 2.2.1.1 of AN3663 */
ana_pwr = SGTL5000_ANA_POWER_DEFAULT;
if (sgtl5000->num_supplies <= VDDD) {
diff --git a/sound/soc/codecs/sgtl5000.h b/sound/soc/codecs/sgtl5000.h
index a4bf4bca95bf7..56ec5863f2507 100644
--- a/sound/soc/codecs/sgtl5000.h
+++ b/sound/soc/codecs/sgtl5000.h
@@ -233,6 +233,7 @@
 /*
  * SGTL5000_CHIP_ANA_CTRL
  */
+#define SGTL5000_CHIP_ANA_CTRL_DEFAULT 0x0133
 #define SGTL5000_LINE_OUT_MUTE 0x0100
 #define SGTL5000_HP_SEL_MASK   0x0040
 #define SGTL5000_HP_SEL_SHIFT  6
-- 
2.20.1





[PATCH 5.4 04/50] ASoC: topology: Check return value of soc_tplg_*_create

2020-05-08 Thread Greg Kroah-Hartman
From: Amadeusz Sławiński 

[ Upstream commit 2ae548f30d7f6973388fc3769bb3c2f6fd13652b ]

Functions soc_tplg_denum_create, soc_tplg_dmixer_create,
soc_tplg_dbytes_create can fail, so their return values should be
checked and error should be propagated.

Signed-off-by: Amadeusz Sławiński 
Reviewed-by: Ranjani Sridharan 
Reviewed-by: Pierre-Louis Bossart 
Link: 
https://lore.kernel.org/r/20200327204729.397-4-amadeuszx.slawin...@linux.intel.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/soc-topology.c | 18 --
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
index c2901652a6d04..efe6ad3bfcd9b 100644
--- a/sound/soc/soc-topology.c
+++ b/sound/soc/soc-topology.c
@@ -1123,6 +1123,7 @@ static int soc_tplg_kcontrol_elems_load(struct soc_tplg 
*tplg,
struct snd_soc_tplg_hdr *hdr)
 {
struct snd_soc_tplg_ctl_hdr *control_hdr;
+   int ret;
int i;
 
if (tplg->pass != SOC_TPLG_PASS_MIXER) {
@@ -1151,25 +1152,30 @@ static int soc_tplg_kcontrol_elems_load(struct soc_tplg 
*tplg,
case SND_SOC_TPLG_CTL_RANGE:
case SND_SOC_TPLG_DAPM_CTL_VOLSW:
case SND_SOC_TPLG_DAPM_CTL_PIN:
-   soc_tplg_dmixer_create(tplg, 1,
-  le32_to_cpu(hdr->payload_size));
+   ret = soc_tplg_dmixer_create(tplg, 1,
+   le32_to_cpu(hdr->payload_size));
break;
case SND_SOC_TPLG_CTL_ENUM:
case SND_SOC_TPLG_CTL_ENUM_VALUE:
case SND_SOC_TPLG_DAPM_CTL_ENUM_DOUBLE:
case SND_SOC_TPLG_DAPM_CTL_ENUM_VIRT:
case SND_SOC_TPLG_DAPM_CTL_ENUM_VALUE:
-   soc_tplg_denum_create(tplg, 1,
- le32_to_cpu(hdr->payload_size));
+   ret = soc_tplg_denum_create(tplg, 1,
+   le32_to_cpu(hdr->payload_size));
break;
case SND_SOC_TPLG_CTL_BYTES:
-   soc_tplg_dbytes_create(tplg, 1,
-  le32_to_cpu(hdr->payload_size));
+   ret = soc_tplg_dbytes_create(tplg, 1,
+   le32_to_cpu(hdr->payload_size));
break;
default:
soc_bind_err(tplg, control_hdr, i);
return -EINVAL;
}
+   if (ret < 0) {
+   dev_err(tplg->dev, "ASoC: invalid control\n");
+   return ret;
+   }
+
}
 
return 0;
-- 
2.20.1





[PATCH 5.4 08/50] selftests/ipc: Fix test failure seen after initial test run

2020-05-08 Thread Greg Kroah-Hartman
From: Tyler Hicks 

[ Upstream commit b87080eab4c1377706c113fc9c0157f19ea8fed1 ]

After successfully running the IPC msgque test once, subsequent runs
result in a test failure:

  $ sudo ./run_kselftest.sh
  TAP version 13
  1..1
  # selftests: ipc: msgque
  # Failed to get stats for IPC queue with id 0
  # Failed to dump queue: -22
  # Bail out!
  # # Pass 0 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0
  not ok 1 selftests: ipc: msgque # exit=1

The dump_queue() function loops through the possible message queue index
values using calls to msgctl(kern_id, MSG_STAT, ...) where kern_id
represents the index value. The first time the test is ran, the initial
index value of 0 is valid and the test is able to complete. The index
value of 0 is not valid in subsequent test runs and the loop attempts to
try index values of 1, 2, 3, and so on until a valid index value is
found that corresponds to the message queue created earlier in the test.

The msgctl() syscall returns -1 and sets errno to EINVAL when invalid
index values are used. The test failure is caused by incorrectly
comparing errno to -EINVAL when cycling through possible index values.

Fix invalid test failures on subsequent runs of the msgque test by
correctly comparing errno values to a non-negated EINVAL.

Fixes: 3a665531a3b7 ("selftests: IPC message queue copy feature test")
Signed-off-by: Tyler Hicks 
Signed-off-by: Shuah Khan 
Signed-off-by: Sasha Levin 
---
 tools/testing/selftests/ipc/msgque.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/testing/selftests/ipc/msgque.c 
b/tools/testing/selftests/ipc/msgque.c
index 4c156aeab6b80..5ec4d9e18806c 100644
--- a/tools/testing/selftests/ipc/msgque.c
+++ b/tools/testing/selftests/ipc/msgque.c
@@ -137,7 +137,7 @@ int dump_queue(struct msgque_data *msgque)
for (kern_id = 0; kern_id < 256; kern_id++) {
ret = msgctl(kern_id, MSG_STAT, );
if (ret < 0) {
-   if (errno == -EINVAL)
+   if (errno == EINVAL)
continue;
printf("Failed to get stats for IPC queue with id %d\n",
kern_id);
-- 
2.20.1





[PATCH 5.4 36/50] hexagon: clean up ioremap

2020-05-08 Thread Greg Kroah-Hartman
From: Christoph Hellwig 

commit ac32292c8552f7e8517be184e65dd09786e991f9 upstream.

Use ioremap as the main implemented function, and defined
ioremap_nocache to it as a deprecated alias.

Signed-off-by: Christoph Hellwig 
Signed-off-by: Greg Kroah-Hartman 

---
 arch/hexagon/include/asm/io.h   |   11 ++-
 arch/hexagon/kernel/hexagon_ksyms.c |2 +-
 arch/hexagon/mm/ioremap.c   |2 +-
 3 files changed, 4 insertions(+), 11 deletions(-)

--- a/arch/hexagon/include/asm/io.h
+++ b/arch/hexagon/include/asm/io.h
@@ -171,16 +171,9 @@ static inline void writel(u32 data, vola
 #define writew_relaxed __raw_writew
 #define writel_relaxed __raw_writel
 
-/*
- * Need an mtype somewhere in here, for cache type deals?
- * This is probably too long for an inline.
- */
-void __iomem *ioremap_nocache(unsigned long phys_addr, unsigned long size);
+void __iomem *ioremap(unsigned long phys_addr, unsigned long size);
+#define ioremap_nocache ioremap
 
-static inline void __iomem *ioremap(unsigned long phys_addr, unsigned long 
size)
-{
-   return ioremap_nocache(phys_addr, size);
-}
 
 static inline void iounmap(volatile void __iomem *addr)
 {
--- a/arch/hexagon/kernel/hexagon_ksyms.c
+++ b/arch/hexagon/kernel/hexagon_ksyms.c
@@ -20,7 +20,7 @@ EXPORT_SYMBOL(__vmgetie);
 EXPORT_SYMBOL(__vmsetie);
 EXPORT_SYMBOL(__vmyield);
 EXPORT_SYMBOL(empty_zero_page);
-EXPORT_SYMBOL(ioremap_nocache);
+EXPORT_SYMBOL(ioremap);
 EXPORT_SYMBOL(memcpy);
 EXPORT_SYMBOL(memset);
 
--- a/arch/hexagon/mm/ioremap.c
+++ b/arch/hexagon/mm/ioremap.c
@@ -9,7 +9,7 @@
 #include 
 #include 
 
-void __iomem *ioremap_nocache(unsigned long phys_addr, unsigned long size)
+void __iomem *ioremap(unsigned long phys_addr, unsigned long size)
 {
unsigned long last_addr, addr;
unsigned long offset = phys_addr & ~PAGE_MASK;




[PATCH 5.4 41/50] platform/x86: GPD pocket fan: Fix error message when temp-limits are out of range

2020-05-08 Thread Greg Kroah-Hartman
From: Hans de Goede 

commit 1d6f8c5bac93cceb2d4ac8e6331050652004d802 upstream.

Commit 1f27dbd8265d ("platform/x86: GPD pocket fan: Allow somewhat
lower/higher temperature limits") changed the module-param sanity check
to accept temperature limits between 20 and 90 degrees celcius.

But the error message printed when the module params are outside this
range was not updated. This commit updates the error message to match
the new min and max value for the temp-limits.

Reported-by: Pavel Machek 
Signed-off-by: Hans de Goede 
Acked-by: Pavel Machek 
Signed-off-by: Andy Shevchenko 
Signed-off-by: Greg Kroah-Hartman 

---
 drivers/platform/x86/gpd-pocket-fan.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/platform/x86/gpd-pocket-fan.c
+++ b/drivers/platform/x86/gpd-pocket-fan.c
@@ -128,7 +128,7 @@ static int gpd_pocket_fan_probe(struct p
 
for (i = 0; i < ARRAY_SIZE(temp_limits); i++) {
if (temp_limits[i] < 2 || temp_limits[i] > 9) {
-   dev_err(>dev, "Invalid temp-limit %d (must be 
between 4 and 7)\n",
+   dev_err(>dev, "Invalid temp-limit %d (must be 
between 2 and 9)\n",
temp_limits[i]);
temp_limits[0] = TEMP_LIMIT0_DEFAULT;
temp_limits[1] = TEMP_LIMIT1_DEFAULT;




[PATCH 5.4 05/50] ASoC: topology: Check soc_tplg_add_route return value

2020-05-08 Thread Greg Kroah-Hartman
From: Amadeusz Sławiński 

[ Upstream commit 6856e887eae3efc0fe56899cb3f969fe063171c5 ]

Function soc_tplg_add_route can propagate error code from callback, we
should check its return value and handle fail in correct way.

Signed-off-by: Amadeusz Sławiński 
Reviewed-by: Ranjani Sridharan 
Reviewed-by: Pierre-Louis Bossart 
Link: 
https://lore.kernel.org/r/20200327204729.397-5-amadeuszx.slawin...@linux.intel.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/soc-topology.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
index efe6ad3bfcd9b..e0b40d4d8784c 100644
--- a/sound/soc/soc-topology.c
+++ b/sound/soc/soc-topology.c
@@ -1283,7 +1283,9 @@ static int soc_tplg_dapm_graph_elems_load(struct soc_tplg 
*tplg,
routes[i]->dobj.index = tplg->index;
list_add([i]->dobj.list, >comp->dobj_list);
 
-   soc_tplg_add_route(tplg, routes[i]);
+   ret = soc_tplg_add_route(tplg, routes[i]);
+   if (ret < 0)
+   break;
 
/* add route, but keep going if some fail */
snd_soc_dapm_add_routes(dapm, routes[i], 1);
-- 
2.20.1





[PATCH 5.4 07/50] ASoC: topology: Check return value of soc_tplg_dai_config

2020-05-08 Thread Greg Kroah-Hartman
From: Amadeusz Sławiński 

[ Upstream commit dd8e871d4e560eeb8d22af82dde91457ad835a63 ]

Function soc_tplg_dai_config can fail, check for and handle possible
failure.

Signed-off-by: Amadeusz Sławiński 
Reviewed-by: Ranjani Sridharan 
Reviewed-by: Pierre-Louis Bossart 
Link: 
https://lore.kernel.org/r/20200327204729.397-7-amadeuszx.slawin...@linux.intel.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/soc-topology.c | 9 +++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
index 22960f5932c7f..2d4a5a3058c41 100644
--- a/sound/soc/soc-topology.c
+++ b/sound/soc/soc-topology.c
@@ -2431,7 +2431,7 @@ static int soc_tplg_dai_elems_load(struct soc_tplg *tplg,
 {
struct snd_soc_tplg_dai *dai;
int count;
-   int i;
+   int i, ret;
 
count = le32_to_cpu(hdr->count);
 
@@ -2446,7 +2446,12 @@ static int soc_tplg_dai_elems_load(struct soc_tplg *tplg,
return -EINVAL;
}
 
-   soc_tplg_dai_config(tplg, dai);
+   ret = soc_tplg_dai_config(tplg, dai);
+   if (ret < 0) {
+   dev_err(tplg->dev, "ASoC: failed to configure DAI\n");
+   return ret;
+   }
+
tplg->pos += (sizeof(*dai) + le32_to_cpu(dai->priv.size));
}
 
-- 
2.20.1





[PATCH 5.4 18/50] net: stmmac: fix enabling socfpgas ptp_ref_clock

2020-05-08 Thread Greg Kroah-Hartman
From: Julien Beraud 

[ Upstream commit 15ce30609d1e88d42fb1cd948f453e6d5f188249 ]

There are 2 registers to write to enable a ptp ref clock coming from the
fpga.
One that enables the usage of the clock from the fpga for emac0 and emac1
as a ptp ref clock, and the other to allow signals from the fpga to reach
emac0 and emac1.
Currently, if the dwmac-socfpga has phymode set to PHY_INTERFACE_MODE_MII,
PHY_INTERFACE_MODE_GMII, or PHY_INTERFACE_MODE_SGMII, both registers will
be written and the ptp ref clock will be set as coming from the fpga.
Separate the 2 register writes to only enable signals from the fpga to
reach emac0 or emac1 when ptp ref clock is not coming from the fpga.

Signed-off-by: Julien Beraud 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
---
 drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c | 9 ++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c 
b/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
index fa32cd5b418ef..70d41783329dd 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
@@ -291,16 +291,19 @@ static int socfpga_gen5_set_phy_mode(struct socfpga_dwmac 
*dwmac)
phymode == PHY_INTERFACE_MODE_MII ||
phymode == PHY_INTERFACE_MODE_GMII ||
phymode == PHY_INTERFACE_MODE_SGMII) {
-   ctrl |= SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK << (reg_shift / 2);
regmap_read(sys_mgr_base_addr, SYSMGR_FPGAGRP_MODULE_REG,
);
module |= (SYSMGR_FPGAGRP_MODULE_EMAC << (reg_shift / 2));
regmap_write(sys_mgr_base_addr, SYSMGR_FPGAGRP_MODULE_REG,
 module);
-   } else {
-   ctrl &= ~(SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK << (reg_shift / 
2));
}
 
+   if (dwmac->f2h_ptp_ref_clk)
+   ctrl |= SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK << (reg_shift / 2);
+   else
+   ctrl &= ~(SYSMGR_EMACGRP_CTRL_PTP_REF_CLK_MASK <<
+ (reg_shift / 2));
+
regmap_write(sys_mgr_base_addr, reg_offset, ctrl);
 
/* Deassert reset for the phy configuration to be sampled by
-- 
2.20.1





[PATCH 5.4 10/50] ASoC: topology: Fix endianness issue

2020-05-08 Thread Greg Kroah-Hartman
From: Amadeusz Sławiński 

[ Upstream commit 26d87881590fd55ccdd8f829498d7b3033f81990 ]

As done in already existing cases, we should use le32_to_cpu macro while
accessing hdr->magic. Found with sparse.

Signed-off-by: Amadeusz Sławiński 
Link: 
https://lore.kernel.org/r/20200415162435.31859-2-amadeuszx.slawin...@linux.intel.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/soc-topology.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
index 2d4a5a3058c41..65c91abb9462f 100644
--- a/sound/soc/soc-topology.c
+++ b/sound/soc/soc-topology.c
@@ -2559,7 +2559,7 @@ static int soc_valid_header(struct soc_tplg *tplg,
}
 
/* big endian firmware objects not supported atm */
-   if (hdr->magic == SOC_TPLG_MAGIC_BIG_ENDIAN) {
+   if (le32_to_cpu(hdr->magic) == SOC_TPLG_MAGIC_BIG_ENDIAN) {
dev_err(tplg->dev,
"ASoC: pass %d big endian not supported header got %x 
at offset 0x%lx size 0x%zx.\n",
tplg->pass, hdr->magic,
-- 
2.20.1





[PATCH 5.4 16/50] drm/amdgpu: Correctly initialize thermal controller for GPUs with Powerplay table v0 (e.g Hawaii)

2020-05-08 Thread Greg Kroah-Hartman
From: Sandeep Raghuraman 

[ Upstream commit bbc25dadc7ed19f9d6b2e30980f0eb4c741bb8bf ]

Initialize thermal controller fields in the PowerPlay table for Hawaii
GPUs, so that fan speeds are reported.

Signed-off-by: Sandeep Raghuraman 
Signed-off-by: Alex Deucher 
Signed-off-by: Sasha Levin 
---
 .../drm/amd/powerplay/hwmgr/processpptables.c | 26 +++
 1 file changed, 26 insertions(+)

diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c 
b/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c
index 77c14671866c0..719597c5d27d9 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c
@@ -984,6 +984,32 @@ static int init_thermal_controller(
struct pp_hwmgr *hwmgr,
const ATOM_PPLIB_POWERPLAYTABLE *powerplay_table)
 {
+   hwmgr->thermal_controller.ucType =
+   powerplay_table->sThermalController.ucType;
+   hwmgr->thermal_controller.ucI2cLine =
+   powerplay_table->sThermalController.ucI2cLine;
+   hwmgr->thermal_controller.ucI2cAddress =
+   powerplay_table->sThermalController.ucI2cAddress;
+
+   hwmgr->thermal_controller.fanInfo.bNoFan =
+   (0 != (powerplay_table->sThermalController.ucFanParameters &
+   ATOM_PP_FANPARAMETERS_NOFAN));
+
+   hwmgr->thermal_controller.fanInfo.ucTachometerPulsesPerRevolution =
+   powerplay_table->sThermalController.ucFanParameters &
+   ATOM_PP_FANPARAMETERS_TACHOMETER_PULSES_PER_REVOLUTION_MASK;
+
+   hwmgr->thermal_controller.fanInfo.ulMinRPM
+   = powerplay_table->sThermalController.ucFanMinRPM * 100UL;
+   hwmgr->thermal_controller.fanInfo.ulMaxRPM
+   = powerplay_table->sThermalController.ucFanMaxRPM * 100UL;
+
+   set_hw_cap(hwmgr,
+  ATOM_PP_THERMALCONTROLLER_NONE != 
hwmgr->thermal_controller.ucType,
+  PHM_PlatformCaps_ThermalController);
+
+   hwmgr->thermal_controller.use_hw_fan_control = 1;
+
return 0;
 }
 
-- 
2.20.1





[PATCH 4.19 08/32] ASoC: rsnd: Fix HDMI channel mapping for multi-SSI mode

2020-05-08 Thread Greg Kroah-Hartman
From: Matthias Blankertz 

[ Upstream commit b94e164759b82d0c1c80d4b1c8f12c9bee83f11d ]

The HDMI?_SEL register maps up to four stereo SSI data lanes onto the
sdata[0..3] inputs of the HDMI output block. The upper half of the
register contains four blocks of 4 bits, with the most significant
controlling the sdata3 line and the least significant the sdata0 line.

The shift calculation has an off-by-one error, causing the parent SSI to
be mapped to sdata3, the first multi-SSI child to sdata0 and so forth.
As the parent SSI transmits the stereo L/R channels, and the HDMI core
expects it on the sdata0 line, this causes no audio to be output when
playing stereo audio on a multichannel capable HDMI out, and
multichannel audio has permutated channels.

Fix the shift calculation to map the parent SSI to sdata0, the first
child to sdata1 etc.

Signed-off-by: Matthias Blankertz 
Acked-by: Kuninori Morimoto 
Link: 
https://lore.kernel.org/r/20200415141017.384017-3-matthias.blanke...@cetitec.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/sh/rcar/ssiu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sound/soc/sh/rcar/ssiu.c b/sound/soc/sh/rcar/ssiu.c
index 016fbf5ac242c..7b5eb316c3665 100644
--- a/sound/soc/sh/rcar/ssiu.c
+++ b/sound/soc/sh/rcar/ssiu.c
@@ -172,7 +172,7 @@ static int rsnd_ssiu_init_gen2(struct rsnd_mod *mod,
i;
 
for_each_rsnd_mod_array(i, pos, io, rsnd_ssi_array) {
-   shift   = (i * 4) + 16;
+   shift   = (i * 4) + 20;
val = (val & ~(0xF << shift)) |
rsnd_mod_id(pos) << shift;
}
-- 
2.20.1





[PATCH 5.4 03/50] ASoC: topology: Check return value of soc_tplg_create_tlv

2020-05-08 Thread Greg Kroah-Hartman
From: Amadeusz Sławiński 

[ Upstream commit 482db55ae87f3749db05810a38b1d618dfd4407c ]

Function soc_tplg_create_tlv can fail, so we should check if it succeded
or not and proceed appropriately.

Signed-off-by: Amadeusz Sławiński 
Reviewed-by: Ranjani Sridharan 
Reviewed-by: Pierre-Louis Bossart 
Link: 
https://lore.kernel.org/r/20200327204729.397-3-amadeuszx.slawin...@linux.intel.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/soc-topology.c | 16 ++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
index 17556a47f7274..c2901652a6d04 100644
--- a/sound/soc/soc-topology.c
+++ b/sound/soc/soc-topology.c
@@ -893,7 +893,13 @@ static int soc_tplg_dmixer_create(struct soc_tplg *tplg, 
unsigned int count,
}
 
/* create any TLV data */
-   soc_tplg_create_tlv(tplg, , >hdr);
+   err = soc_tplg_create_tlv(tplg, , >hdr);
+   if (err < 0) {
+   dev_err(tplg->dev, "ASoC: failed to create TLV %s\n",
+   mc->hdr.name);
+   kfree(sm);
+   continue;
+   }
 
/* pass control to driver for optional further init */
err = soc_tplg_init_kcontrol(tplg, ,
@@ -1354,7 +1360,13 @@ static struct snd_kcontrol_new 
*soc_tplg_dapm_widget_dmixer_create(
}
 
/* create any TLV data */
-   soc_tplg_create_tlv(tplg, [i], >hdr);
+   err = soc_tplg_create_tlv(tplg, [i], >hdr);
+   if (err < 0) {
+   dev_err(tplg->dev, "ASoC: failed to create TLV %s\n",
+   mc->hdr.name);
+   kfree(sm);
+   continue;
+   }
 
/* pass control to driver for optional further init */
err = soc_tplg_init_kcontrol(tplg, [i],
-- 
2.20.1





[PATCH 4.19 04/32] selftests/ipc: Fix test failure seen after initial test run

2020-05-08 Thread Greg Kroah-Hartman
From: Tyler Hicks 

[ Upstream commit b87080eab4c1377706c113fc9c0157f19ea8fed1 ]

After successfully running the IPC msgque test once, subsequent runs
result in a test failure:

  $ sudo ./run_kselftest.sh
  TAP version 13
  1..1
  # selftests: ipc: msgque
  # Failed to get stats for IPC queue with id 0
  # Failed to dump queue: -22
  # Bail out!
  # # Pass 0 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0
  not ok 1 selftests: ipc: msgque # exit=1

The dump_queue() function loops through the possible message queue index
values using calls to msgctl(kern_id, MSG_STAT, ...) where kern_id
represents the index value. The first time the test is ran, the initial
index value of 0 is valid and the test is able to complete. The index
value of 0 is not valid in subsequent test runs and the loop attempts to
try index values of 1, 2, 3, and so on until a valid index value is
found that corresponds to the message queue created earlier in the test.

The msgctl() syscall returns -1 and sets errno to EINVAL when invalid
index values are used. The test failure is caused by incorrectly
comparing errno to -EINVAL when cycling through possible index values.

Fix invalid test failures on subsequent runs of the msgque test by
correctly comparing errno values to a non-negated EINVAL.

Fixes: 3a665531a3b7 ("selftests: IPC message queue copy feature test")
Signed-off-by: Tyler Hicks 
Signed-off-by: Shuah Khan 
Signed-off-by: Sasha Levin 
---
 tools/testing/selftests/ipc/msgque.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/testing/selftests/ipc/msgque.c 
b/tools/testing/selftests/ipc/msgque.c
index 4c156aeab6b80..5ec4d9e18806c 100644
--- a/tools/testing/selftests/ipc/msgque.c
+++ b/tools/testing/selftests/ipc/msgque.c
@@ -137,7 +137,7 @@ int dump_queue(struct msgque_data *msgque)
for (kern_id = 0; kern_id < 256; kern_id++) {
ret = msgctl(kern_id, MSG_STAT, );
if (ret < 0) {
-   if (errno == -EINVAL)
+   if (errno == EINVAL)
continue;
printf("Failed to get stats for IPC queue with id %d\n",
kern_id);
-- 
2.20.1





[PATCH 5.4 23/50] scripts/config: allow colons in option strings for sed

2020-05-08 Thread Greg Kroah-Hartman
From: Jeremie Francois (on alpha) 

[ Upstream commit e461bc9f9ab105637b86065d24b0b83f182d477c ]

Sed broke on some strings as it used colon as a separator.
I made it more robust by using \001, which is legit POSIX AFAIK.

E.g. ./config --set-str CONFIG_USBNET_DEVADDR "de:ad:be:ef:00:01"
failed with: sed: -e expression #1, char 55: unknown option to `s'

Signed-off-by: Jeremie Francois (on alpha) 
Signed-off-by: Masahiro Yamada 
Signed-off-by: Sasha Levin 
---
 scripts/config | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/scripts/config b/scripts/config
index e0e39826dae90..eee5b7f3a092a 100755
--- a/scripts/config
+++ b/scripts/config
@@ -7,6 +7,9 @@ myname=${0##*/}
 # If no prefix forced, use the default CONFIG_
 CONFIG_="${CONFIG_-CONFIG_}"
 
+# We use an uncommon delimiter for sed substitutions
+SED_DELIM=$(echo -en "\001")
+
 usage() {
cat >&2 <"$tmpfile"
+   sed -e "s$SED_DELIM$before$SED_DELIM$after$SED_DELIM" "$infile" 
>"$tmpfile"
# replace original file with the edited one
mv "$tmpfile" "$infile"
 }
-- 
2.20.1





[PATCH 4.19 27/32] hexagon: define ioremap_uc

2020-05-08 Thread Greg Kroah-Hartman
From: Nick Desaulniers 

commit 7312b70699252074d753c5005fc67266c547bbe3 upstream.

Similar to commit 38e45d81d14e ("sparc64: implement ioremap_uc") define
ioremap_uc for hexagon to avoid errors from
-Wimplicit-function-definition.

Link: http://lkml.kernel.org/r/20191209222956.239798-2-ndesaulni...@google.com
Link: https://github.com/ClangBuiltLinux/linux/issues/797
Fixes: e537654b7039 ("lib: devres: add a helper function for ioremap_uc")
Signed-off-by: Nick Desaulniers 
Suggested-by: Nathan Chancellor 
Acked-by: Brian Cain 
Cc: Lee Jones 
Cc: Andy Shevchenko 
Cc: Tuowen Zhao 
Cc: Mika Westerberg 
Cc: Luis Chamberlain 
Cc: Greg Kroah-Hartman 
Cc: Alexios Zavras 
Cc: Allison Randal 
Cc: Will Deacon 
Cc: Richard Fontana 
Cc: Thomas Gleixner 
Cc: Peter Zijlstra 
Cc: Boqun Feng 
Cc: Ingo Molnar 
Cc: Geert Uytterhoeven 
Cc: Christoph Hellwig 
Signed-off-by: Andrew Morton 
Signed-off-by: Linus Torvalds 
Signed-off-by: Greg Kroah-Hartman 

---
 arch/hexagon/include/asm/io.h |1 +
 1 file changed, 1 insertion(+)

--- a/arch/hexagon/include/asm/io.h
+++ b/arch/hexagon/include/asm/io.h
@@ -188,6 +188,7 @@ static inline void writel(u32 data, vola
 
 void __iomem *ioremap(unsigned long phys_addr, unsigned long size);
 #define ioremap_nocache ioremap
+#define ioremap_uc(X, Y) ioremap((X), (Y))
 
 
 static inline void iounmap(volatile void __iomem *addr)




[PATCH 5.4 14/50] ASoC: codecs: hdac_hdmi: Fix incorrect use of list_for_each_entry

2020-05-08 Thread Greg Kroah-Hartman
From: Amadeusz Sławiński 

[ Upstream commit 326b509238171d37402dbe308e154cc234ed1960 ]

If we don't find any pcm, pcm will point at address at an offset from
the the list head and not a meaningful structure. Fix this by returning
correct pcm if found and NULL if not. Found with coccinelle.

Signed-off-by: Amadeusz Sławiński 
Link: 
https://lore.kernel.org/r/20200415162849.308-1-amadeuszx.slawin...@linux.intel.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/codecs/hdac_hdmi.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/sound/soc/codecs/hdac_hdmi.c b/sound/soc/codecs/hdac_hdmi.c
index 18c173e6a13b2..78d5b4d31bb69 100644
--- a/sound/soc/codecs/hdac_hdmi.c
+++ b/sound/soc/codecs/hdac_hdmi.c
@@ -150,14 +150,14 @@ static struct hdac_hdmi_pcm *
 hdac_hdmi_get_pcm_from_cvt(struct hdac_hdmi_priv *hdmi,
   struct hdac_hdmi_cvt *cvt)
 {
-   struct hdac_hdmi_pcm *pcm = NULL;
+   struct hdac_hdmi_pcm *pcm;
 
list_for_each_entry(pcm, >pcm_list, head) {
if (pcm->cvt == cvt)
-   break;
+   return pcm;
}
 
-   return pcm;
+   return NULL;
 }
 
 static void hdac_hdmi_jack_report(struct hdac_hdmi_pcm *pcm,
-- 
2.20.1





[PATCH 4.19 32/32] drm/atomic: Take the atomic toys away from X

2020-05-08 Thread Greg Kroah-Hartman
From: Daniel Vetter 

commit 26b1d3b527e7bf3e24b814d617866ac5199ce68d upstream.

The -modesetting ddx has a totally broken idea of how atomic works:
- doesn't disable old connectors, assuming they get auto-disable like
  with the legacy setcrtc
- assumes ASYNC_FLIP is wired through for the atomic ioctl
- not a single call to TEST_ONLY

Iow the implementation is a 1:1 translation of legacy ioctls to
atomic, which is a) broken b) pointless.

We already have bugs in both i915 and amdgpu-DC where this prevents us
from enabling neat features.

If anyone ever cares about atomic in X we can easily add a new atomic
level (req->value == 2) for X to get back the shiny toys.

Since these broken versions of -modesetting have been shipping,
there's really no other way to get out of this bind.

v2:
- add an informational dmesg output (Rob, Ajax)
- reorder after the DRIVER_ATOMIC check to avoid useless noise (Ilia)
- allow req->value > 2 so that X can do another attempt at atomic in
  the future

v3: Go with paranoid, insist that the X should be first (suggested by
Rob)

Cc: Ilia Mirkin 
Cc: Maarten Lankhorst 
Reviewed-by: Maarten Lankhorst  (v1)
Reviewed-by: Nicholas Kazlauskas  (v1)
Cc: Michel Dänzer 
Cc: Alex Deucher 
Cc: Adam Jackson 
Acked-by: Adam Jackson 
Cc: Sean Paul 
Cc: David Airlie 
Cc: Rob Clark 
Acked-by: Rob Clark 
Cc: sta...@vger.kernel.org
Signed-off-by: Daniel Vetter 
Link: 
https://patchwork.freedesktop.org/patch/msgid/20190905185318.31363-1-daniel.vet...@ffwll.ch
Cc: Yves-Alexis Perez 
Signed-off-by: Greg Kroah-Hartman 

---
 drivers/gpu/drm/drm_ioctl.c |7 ++-
 1 file changed, 6 insertions(+), 1 deletion(-)

--- a/drivers/gpu/drm/drm_ioctl.c
+++ b/drivers/gpu/drm/drm_ioctl.c
@@ -321,7 +321,12 @@ drm_setclientcap(struct drm_device *dev,
case DRM_CLIENT_CAP_ATOMIC:
if (!drm_core_check_feature(dev, DRIVER_ATOMIC))
return -EINVAL;
-   if (req->value > 1)
+   /* The modesetting DDX has a totally broken idea of atomic. */
+   if (current->comm[0] == 'X' && req->value == 1) {
+   pr_info("broken atomic modeset userspace detected, 
disabling atomic\n");
+   return -EOPNOTSUPP;
+   }
+   if (req->value > 2)
return -EINVAL;
file_priv->atomic = req->value;
file_priv->universal_planes = req->value;




[PATCH 5.4 20/50] ASoC: rsnd: Dont treat master SSI in multi SSI setup as parent

2020-05-08 Thread Greg Kroah-Hartman
From: Matthias Blankertz 

[ Upstream commit 0c258657ddfe81b4fc0183378d800c97ba0b7cdd ]

The master SSI of a multi-SSI setup was attached both to the
RSND_MOD_SSI slot and the RSND_MOD_SSIP slot of the rsnd_dai_stream.
This is not correct wrt. the meaning of being "parent" in the rest of
the SSI code, where it seems to indicate an SSI that provides clock and
word sync but is not transmitting/receiving audio data.

Not treating the multi-SSI master as parent allows removal of various
special cases to the rsnd_ssi_is_parent conditions introduced in commit
a09fb3f28a60 ("ASoC: rsnd: Fix parent SSI start/stop in multi-SSI mode").
It also fixes the issue that operations performed via rsnd_dai_call()
were performed twice for the master SSI. This caused some "status check
failed" spam when stopping a multi-SSI stream as the driver attempted to
stop the master SSI twice.

Signed-off-by: Matthias Blankertz 
Acked-by: Kuninori Morimoto 
Link: 
https://lore.kernel.org/r/20200417153017.1744454-2-matthias.blanke...@cetitec.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/sh/rcar/ssi.c | 11 +++
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
index d51fb3a394486..9900a4f6f4e53 100644
--- a/sound/soc/sh/rcar/ssi.c
+++ b/sound/soc/sh/rcar/ssi.c
@@ -407,7 +407,7 @@ static void rsnd_ssi_config_init(struct rsnd_mod *mod,
 * We shouldn't exchange SWSP after running.
 * This means, parent needs to care it.
 */
-   if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
+   if (rsnd_ssi_is_parent(mod, io))
goto init_end;
 
if (rsnd_io_is_play(io))
@@ -559,7 +559,7 @@ static int rsnd_ssi_start(struct rsnd_mod *mod,
 * EN is for data output.
 * SSI parent EN is not needed.
 */
-   if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
+   if (rsnd_ssi_is_parent(mod, io))
return 0;
 
ssi->cr_en = EN;
@@ -582,7 +582,7 @@ static int rsnd_ssi_stop(struct rsnd_mod *mod,
if (!rsnd_ssi_is_run_mods(mod, io))
return 0;
 
-   if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
+   if (rsnd_ssi_is_parent(mod, io))
return 0;
 
cr  =   ssi->cr_own |
@@ -620,7 +620,7 @@ static int rsnd_ssi_irq(struct rsnd_mod *mod,
if (rsnd_is_gen1(priv))
return 0;
 
-   if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
+   if (rsnd_ssi_is_parent(mod, io))
return 0;
 
if (!rsnd_ssi_is_run_mods(mod, io))
@@ -737,6 +737,9 @@ static void rsnd_ssi_parent_attach(struct rsnd_mod *mod,
if (!rsnd_rdai_is_clk_master(rdai))
return;
 
+   if (rsnd_ssi_is_multi_slave(mod, io))
+   return;
+
switch (rsnd_mod_id(mod)) {
case 1:
case 2:
-- 
2.20.1





[PATCH 5.4 15/50] remoteproc: qcom_q6v5_mss: fix a bug in q6v5_probe()

2020-05-08 Thread Greg Kroah-Hartman
From: Alex Elder 

[ Upstream commit 13c060b50a341dd60303e5264d12108b5747f200 ]

If looking up the DT "firmware-name" property fails in q6v6_probe(),
the function returns without freeing the remoteproc structure
that has been allocated.  Fix this by jumping to the free_rproc
label, which takes care of this.

Signed-off-by: Alex Elder 
Link: https://lore.kernel.org/r/20200403175005.17130-3-el...@linaro.org
Signed-off-by: Bjorn Andersson 
Signed-off-by: Sasha Levin 
---
 drivers/remoteproc/qcom_q6v5_mss.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/remoteproc/qcom_q6v5_mss.c 
b/drivers/remoteproc/qcom_q6v5_mss.c
index 783d00131a2a9..6ba065d5c4d95 100644
--- a/drivers/remoteproc/qcom_q6v5_mss.c
+++ b/drivers/remoteproc/qcom_q6v5_mss.c
@@ -1440,7 +1440,7 @@ static int q6v5_probe(struct platform_device *pdev)
ret = of_property_read_string_index(pdev->dev.of_node, "firmware-name",
1, >hexagon_mdt_image);
if (ret < 0 && ret != -EINVAL)
-   return ret;
+   goto free_rproc;
 
platform_set_drvdata(pdev, qproc);
 
-- 
2.20.1





[PATCH 5.4 17/50] wimax/i2400m: Fix potential urb refcnt leak

2020-05-08 Thread Greg Kroah-Hartman
From: Xiyu Yang 

[ Upstream commit 7717cbec172c3554d470023b4020d5781961187e ]

i2400mu_bus_bm_wait_for_ack() invokes usb_get_urb(), which increases the
refcount of the "notif_urb".

When i2400mu_bus_bm_wait_for_ack() returns, local variable "notif_urb"
becomes invalid, so the refcount should be decreased to keep refcount
balanced.

The issue happens in all paths of i2400mu_bus_bm_wait_for_ack(), which
forget to decrease the refcnt increased by usb_get_urb(), causing a
refcnt leak.

Fix this issue by calling usb_put_urb() before the
i2400mu_bus_bm_wait_for_ack() returns.

Signed-off-by: Xiyu Yang 
Signed-off-by: Xin Tan 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
---
 drivers/net/wimax/i2400m/usb-fw.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/wimax/i2400m/usb-fw.c 
b/drivers/net/wimax/i2400m/usb-fw.c
index 529ebca1e9e13..1f7709d24f352 100644
--- a/drivers/net/wimax/i2400m/usb-fw.c
+++ b/drivers/net/wimax/i2400m/usb-fw.c
@@ -354,6 +354,7 @@ ssize_t i2400mu_bus_bm_wait_for_ack(struct i2400m *i2400m,
usb_autopm_put_interface(i2400mu->usb_iface);
d_fnend(8, dev, "(i2400m %p ack %p size %zu) = %ld\n",
i2400m, ack, ack_size, (long) result);
+   usb_put_urb(_urb);
return result;
 
 error_exceeded:
-- 
2.20.1





[PATCH 4.19 09/32] ASoC: codecs: hdac_hdmi: Fix incorrect use of list_for_each_entry

2020-05-08 Thread Greg Kroah-Hartman
From: Amadeusz Sławiński 

[ Upstream commit 326b509238171d37402dbe308e154cc234ed1960 ]

If we don't find any pcm, pcm will point at address at an offset from
the the list head and not a meaningful structure. Fix this by returning
correct pcm if found and NULL if not. Found with coccinelle.

Signed-off-by: Amadeusz Sławiński 
Link: 
https://lore.kernel.org/r/20200415162849.308-1-amadeuszx.slawin...@linux.intel.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/codecs/hdac_hdmi.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/sound/soc/codecs/hdac_hdmi.c b/sound/soc/codecs/hdac_hdmi.c
index be2473166bfaf..4594b1447900a 100644
--- a/sound/soc/codecs/hdac_hdmi.c
+++ b/sound/soc/codecs/hdac_hdmi.c
@@ -148,14 +148,14 @@ static struct hdac_hdmi_pcm *
 hdac_hdmi_get_pcm_from_cvt(struct hdac_hdmi_priv *hdmi,
   struct hdac_hdmi_cvt *cvt)
 {
-   struct hdac_hdmi_pcm *pcm = NULL;
+   struct hdac_hdmi_pcm *pcm;
 
list_for_each_entry(pcm, >pcm_list, head) {
if (pcm->cvt == cvt)
-   break;
+   return pcm;
}
 
-   return pcm;
+   return NULL;
 }
 
 static void hdac_hdmi_jack_report(struct hdac_hdmi_pcm *pcm,
-- 
2.20.1





[PATCH 4.19 10/32] drm/amdgpu: Correctly initialize thermal controller for GPUs with Powerplay table v0 (e.g Hawaii)

2020-05-08 Thread Greg Kroah-Hartman
From: Sandeep Raghuraman 

[ Upstream commit bbc25dadc7ed19f9d6b2e30980f0eb4c741bb8bf ]

Initialize thermal controller fields in the PowerPlay table for Hawaii
GPUs, so that fan speeds are reported.

Signed-off-by: Sandeep Raghuraman 
Signed-off-by: Alex Deucher 
Signed-off-by: Sasha Levin 
---
 .../drm/amd/powerplay/hwmgr/processpptables.c | 26 +++
 1 file changed, 26 insertions(+)

diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c 
b/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c
index 925e17104f909..b9e08b06ed5db 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c
@@ -983,6 +983,32 @@ static int init_thermal_controller(
struct pp_hwmgr *hwmgr,
const ATOM_PPLIB_POWERPLAYTABLE *powerplay_table)
 {
+   hwmgr->thermal_controller.ucType =
+   powerplay_table->sThermalController.ucType;
+   hwmgr->thermal_controller.ucI2cLine =
+   powerplay_table->sThermalController.ucI2cLine;
+   hwmgr->thermal_controller.ucI2cAddress =
+   powerplay_table->sThermalController.ucI2cAddress;
+
+   hwmgr->thermal_controller.fanInfo.bNoFan =
+   (0 != (powerplay_table->sThermalController.ucFanParameters &
+   ATOM_PP_FANPARAMETERS_NOFAN));
+
+   hwmgr->thermal_controller.fanInfo.ucTachometerPulsesPerRevolution =
+   powerplay_table->sThermalController.ucFanParameters &
+   ATOM_PP_FANPARAMETERS_TACHOMETER_PULSES_PER_REVOLUTION_MASK;
+
+   hwmgr->thermal_controller.fanInfo.ulMinRPM
+   = powerplay_table->sThermalController.ucFanMinRPM * 100UL;
+   hwmgr->thermal_controller.fanInfo.ulMaxRPM
+   = powerplay_table->sThermalController.ucFanMaxRPM * 100UL;
+
+   set_hw_cap(hwmgr,
+  ATOM_PP_THERMALCONTROLLER_NONE != 
hwmgr->thermal_controller.ucType,
+  PHM_PlatformCaps_ThermalController);
+
+   hwmgr->thermal_controller.use_hw_fan_control = 1;
+
return 0;
 }
 
-- 
2.20.1





[PATCH 4.19 14/32] ASoC: rsnd: Dont treat master SSI in multi SSI setup as parent

2020-05-08 Thread Greg Kroah-Hartman
From: Matthias Blankertz 

[ Upstream commit 0c258657ddfe81b4fc0183378d800c97ba0b7cdd ]

The master SSI of a multi-SSI setup was attached both to the
RSND_MOD_SSI slot and the RSND_MOD_SSIP slot of the rsnd_dai_stream.
This is not correct wrt. the meaning of being "parent" in the rest of
the SSI code, where it seems to indicate an SSI that provides clock and
word sync but is not transmitting/receiving audio data.

Not treating the multi-SSI master as parent allows removal of various
special cases to the rsnd_ssi_is_parent conditions introduced in commit
a09fb3f28a60 ("ASoC: rsnd: Fix parent SSI start/stop in multi-SSI mode").
It also fixes the issue that operations performed via rsnd_dai_call()
were performed twice for the master SSI. This caused some "status check
failed" spam when stopping a multi-SSI stream as the driver attempted to
stop the master SSI twice.

Signed-off-by: Matthias Blankertz 
Acked-by: Kuninori Morimoto 
Link: 
https://lore.kernel.org/r/20200417153017.1744454-2-matthias.blanke...@cetitec.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/sh/rcar/ssi.c | 11 +++
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
index 3fe88f7743824..d5f663bb965f1 100644
--- a/sound/soc/sh/rcar/ssi.c
+++ b/sound/soc/sh/rcar/ssi.c
@@ -375,7 +375,7 @@ static void rsnd_ssi_config_init(struct rsnd_mod *mod,
 * We shouldn't exchange SWSP after running.
 * This means, parent needs to care it.
 */
-   if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
+   if (rsnd_ssi_is_parent(mod, io))
goto init_end;
 
if (rsnd_io_is_play(io))
@@ -531,7 +531,7 @@ static int rsnd_ssi_start(struct rsnd_mod *mod,
 * EN is for data output.
 * SSI parent EN is not needed.
 */
-   if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
+   if (rsnd_ssi_is_parent(mod, io))
return 0;
 
ssi->cr_en = EN;
@@ -554,7 +554,7 @@ static int rsnd_ssi_stop(struct rsnd_mod *mod,
if (!rsnd_ssi_is_run_mods(mod, io))
return 0;
 
-   if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
+   if (rsnd_ssi_is_parent(mod, io))
return 0;
 
cr  =   ssi->cr_own |
@@ -592,7 +592,7 @@ static int rsnd_ssi_irq(struct rsnd_mod *mod,
if (rsnd_is_gen1(priv))
return 0;
 
-   if (rsnd_ssi_is_parent(mod, io) && !rsnd_ssi_multi_slaves(io))
+   if (rsnd_ssi_is_parent(mod, io))
return 0;
 
if (!rsnd_ssi_is_run_mods(mod, io))
@@ -674,6 +674,9 @@ static void rsnd_ssi_parent_attach(struct rsnd_mod *mod,
if (!rsnd_rdai_is_clk_master(rdai))
return;
 
+   if (rsnd_ssi_is_multi_slave(mod, io))
+   return;
+
switch (rsnd_mod_id(mod)) {
case 1:
case 2:
-- 
2.20.1





[PATCH 4.19 11/32] wimax/i2400m: Fix potential urb refcnt leak

2020-05-08 Thread Greg Kroah-Hartman
From: Xiyu Yang 

[ Upstream commit 7717cbec172c3554d470023b4020d5781961187e ]

i2400mu_bus_bm_wait_for_ack() invokes usb_get_urb(), which increases the
refcount of the "notif_urb".

When i2400mu_bus_bm_wait_for_ack() returns, local variable "notif_urb"
becomes invalid, so the refcount should be decreased to keep refcount
balanced.

The issue happens in all paths of i2400mu_bus_bm_wait_for_ack(), which
forget to decrease the refcnt increased by usb_get_urb(), causing a
refcnt leak.

Fix this issue by calling usb_put_urb() before the
i2400mu_bus_bm_wait_for_ack() returns.

Signed-off-by: Xiyu Yang 
Signed-off-by: Xin Tan 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
---
 drivers/net/wimax/i2400m/usb-fw.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/wimax/i2400m/usb-fw.c 
b/drivers/net/wimax/i2400m/usb-fw.c
index 529ebca1e9e13..1f7709d24f352 100644
--- a/drivers/net/wimax/i2400m/usb-fw.c
+++ b/drivers/net/wimax/i2400m/usb-fw.c
@@ -354,6 +354,7 @@ ssize_t i2400mu_bus_bm_wait_for_ack(struct i2400m *i2400m,
usb_autopm_put_interface(i2400mu->usb_iface);
d_fnend(8, dev, "(i2400m %p ack %p size %zu) = %ld\n",
i2400m, ack, ack_size, (long) result);
+   usb_put_urb(_urb);
return result;
 
 error_exceeded:
-- 
2.20.1





[PATCH 4.19 15/32] ASoC: rsnd: Fix "status check failed" spam for multi-SSI

2020-05-08 Thread Greg Kroah-Hartman
From: Matthias Blankertz 

[ Upstream commit 54cb6221688660670a2e430892d7f4e6370263b8 ]

Fix the rsnd_ssi_stop function to skip disabling the individual SSIs of
a multi-SSI setup, as the actual stop is performed by rsnd_ssiu_stop_gen2
- the same logic as in rsnd_ssi_start. The attempt to disable these SSIs
was harmless, but caused a "status check failed" message to be printed
for every SSI in the multi-SSI setup.
The disabling of interrupts is still performed, as they are enabled for
all SSIs in rsnd_ssi_init, but care is taken to not accidentally set the
EN bit for an SSI where it was not set by rsnd_ssi_start.

Signed-off-by: Matthias Blankertz 
Acked-by: Kuninori Morimoto 
Link: 
https://lore.kernel.org/r/20200417153017.1744454-3-matthias.blanke...@cetitec.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/sh/rcar/ssi.c | 8 +++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
index d5f663bb965f1..a6cf2ac223e42 100644
--- a/sound/soc/sh/rcar/ssi.c
+++ b/sound/soc/sh/rcar/ssi.c
@@ -566,10 +566,16 @@ static int rsnd_ssi_stop(struct rsnd_mod *mod,
 * Capture:  It might not receave data. Do nothing
 */
if (rsnd_io_is_play(io)) {
-   rsnd_mod_write(mod, SSICR, cr | EN);
+   rsnd_mod_write(mod, SSICR, cr | ssi->cr_en);
rsnd_ssi_status_check(mod, DIRQ);
}
 
+   /* In multi-SSI mode, stop is performed by setting ssi0129 in
+* SSI_CONTROL to 0 (in rsnd_ssio_stop_gen2). Do nothing here.
+*/
+   if (rsnd_ssi_multi_slaves_runtime(io))
+   return 0;
+
/*
 * disable SSI,
 * and, wait idle state
-- 
2.20.1





[PATCH 4.19 16/32] cifs: protect updating server->dstaddr with a spinlock

2020-05-08 Thread Greg Kroah-Hartman
From: Ronnie Sahlberg 

[ Upstream commit fada37f6f62995cc449b36ebba1220594bfe55fe ]

We use a spinlock while we are reading and accessing the destination address 
for a server.
We need to also use this spinlock to protect when we are modifying this address 
from
reconn_set_ipaddr().

Signed-off-by: Ronnie Sahlberg 
Reviewed-by: Jeff Layton 
Signed-off-by: Steve French 
Signed-off-by: Sasha Levin 
---
 fs/cifs/connect.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index 975f800b9dd4d..9e569d60c636b 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -353,8 +353,10 @@ static int reconn_set_ipaddr(struct TCP_Server_Info 
*server)
return rc;
}
 
+   spin_lock(_tcp_ses_lock);
rc = cifs_convert_address((struct sockaddr *)>dstaddr, ipaddr,
  strlen(ipaddr));
+   spin_unlock(_tcp_ses_lock);
kfree(ipaddr);
 
return !rc ? -1 : 0;
-- 
2.20.1





[PATCH 4.19 13/32] net: stmmac: Fix sub-second increment

2020-05-08 Thread Greg Kroah-Hartman
From: Julien Beraud 

[ Upstream commit 91a2559c1dc5b0f7e1256d42b1508935e8eabfbf ]

In fine adjustement mode, which is the current default, the sub-second
increment register is the number of nanoseconds that will be added to
the clock when the accumulator overflows. At each clock cycle, the
value of the addend register is added to the accumulator.
Currently, we use 20ns = 1e09ns / 50MHz as this value whatever the
frequency of the ptp clock actually is.
The adjustment is then done on the addend register, only incrementing
every X clock cycles X being the ratio between 50MHz and ptp_clock_rate
(addend = 2^32 * 50MHz/ptp_clock_rate).
This causes the following issues :
- In case the frequency of the ptp clock is inferior or equal to 50MHz,
  the addend value calculation will overflow and the default
  addend value will be set to 0, causing the clock to not work at
  all. (For instance, for ptp_clock_rate = 50MHz, addend = 2^32).
- The resolution of the timestamping clock is limited to 20ns while it
  is not needed, thus limiting the accuracy of the timestamping to
  20ns.

Fix this by setting sub-second increment to 2e09ns / ptp_clock_rate.
It will allow to reach the minimum possible frequency for
ptp_clk_ref, which is 5MHz for GMII 1000Mps Full-Duplex by setting the
sub-second-increment to a higher value. For instance, for 25MHz, it
gives ssinc = 80ns and default_addend = 2^31.
It will also allow to use a lower value for sub-second-increment, thus
improving the timestamping accuracy with frequencies higher than
100MHz, for instance, for 200MHz, ssinc = 10ns and default_addend =
2^31.

v1->v2:
 - Remove modifications to the calculation of default addend, which broke
 compatibility with clock frequencies for which 20 / ptp_clk_freq
 is not an integer.
 - Modify description according to discussions.

Signed-off-by: Julien Beraud 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
---
 .../net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c| 12 
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
index 7423262ce5907..e1fbd7c81bfa9 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
@@ -36,12 +36,16 @@ static void config_sub_second_increment(void __iomem 
*ioaddr,
unsigned long data;
u32 reg_value;
 
-   /* For GMAC3.x, 4.x versions, convert the ptp_clock to nano second
-*  formula = (1/ptp_clock) * 10
-* where ptp_clock is 50MHz if fine method is used to update system
+   /* For GMAC3.x, 4.x versions, in "fine adjustement mode" set sub-second
+* increment to twice the number of nanoseconds of a clock cycle.
+* The calculation of the default_addend value by the caller will set it
+* to mid-range = 2^31 when the remainder of this division is zero,
+* which will make the accumulator overflow once every 2 ptp_clock
+* cycles, adding twice the number of nanoseconds of a clock cycle :
+* 20ULL / ptp_clock.
 */
if (value & PTP_TCR_TSCFUPDT)
-   data = (10ULL / 5000);
+   data = (20ULL / ptp_clock);
else
data = (10ULL / ptp_clock);
 
-- 
2.20.1





[PATCH 4.14 22/22] cgroup, netclassid: remove double cond_resched

2020-05-08 Thread Greg Kroah-Hartman
From: Jiri Slaby 

commit 526f3d96b8f83b1b13d73bd0b5c79cc2c487ec8e upstream.

Commit 018d26fcd12a ("cgroup, netclassid: periodically release file_lock
on classid") added a second cond_resched to write_classid indirectly by
update_classid_task. Remove the one in write_classid.

Signed-off-by: Jiri Slaby 
Cc: Dmitry Yakunin 
Cc: Konstantin Khlebnikov 
Cc: David S. Miller 
Signed-off-by: David S. Miller 
Signed-off-by: Greg Kroah-Hartman 

---
 net/core/netclassid_cgroup.c |4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

--- a/net/core/netclassid_cgroup.c
+++ b/net/core/netclassid_cgroup.c
@@ -131,10 +131,8 @@ static int write_classid(struct cgroup_s
cs->classid = (u32)value;
 
css_task_iter_start(css, 0, );
-   while ((p = css_task_iter_next())) {
+   while ((p = css_task_iter_next()))
update_classid_task(p, cs->classid);
-   cond_resched();
-   }
css_task_iter_end();
 
return 0;




[PATCH 4.19 21/32] net: systemport: suppress warnings on failed Rx SKB allocations

2020-05-08 Thread Greg Kroah-Hartman
From: Doug Berger 

[ Upstream commit 3554e54a46125030c534820c297ed7f6c3907e24 ]

The driver is designed to drop Rx packets and reclaim the buffers
when an allocation fails, and the network interface needs to safely
handle this packet loss. Therefore, an allocation failure of Rx
SKBs is relatively benign.

However, the output of the warning message occurs with a high
scheduling priority that can cause excessive jitter/latency for
other high priority processing.

This commit suppresses the warning messages to prevent scheduling
problems while retaining the failure count in the statistics of
the network interface.

Signed-off-by: Doug Berger 
Acked-by: Florian Fainelli 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
---
 drivers/net/ethernet/broadcom/bcmsysport.c |3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/drivers/net/ethernet/broadcom/bcmsysport.c
+++ b/drivers/net/ethernet/broadcom/bcmsysport.c
@@ -677,7 +677,8 @@ static struct sk_buff *bcm_sysport_rx_re
dma_addr_t mapping;
 
/* Allocate a new SKB for a new packet */
-   skb = netdev_alloc_skb(priv->netdev, RX_BUF_LENGTH);
+   skb = __netdev_alloc_skb(priv->netdev, RX_BUF_LENGTH,
+GFP_ATOMIC | __GFP_NOWARN);
if (!skb) {
priv->mib.alloc_rx_buff_failed++;
netif_err(priv, rx_err, ndev, "SKB alloc failed\n");




[PATCH 4.19 19/32] lib/mpi: Fix building for powerpc with clang

2020-05-08 Thread Greg Kroah-Hartman
From: Nathan Chancellor 

[ Upstream commit 5990cdee689c6885b27c6d969a3d58b09002b0bc ]

0day reports over and over on an powerpc randconfig with clang:

lib/mpi/generic_mpih-mul1.c:37:13: error: invalid use of a cast in a
inline asm context requiring an l-value: remove the cast or build with
-fheinous-gnu-extensions

Remove the superfluous casts, which have been done previously for x86
and arm32 in commit dea632cadd12 ("lib/mpi: fix build with clang") and
commit 7b7c1df2883d ("lib/mpi/longlong.h: fix building with 32-bit
x86").

Reported-by: kbuild test robot 
Signed-off-by: Nathan Chancellor 
Acked-by: Herbert Xu 
Signed-off-by: Michael Ellerman 
Link: https://github.com/ClangBuiltLinux/linux/issues/991
Link: https://lore.kernel.org/r/20200413195041.24064-1-natechancel...@gmail.com
Signed-off-by: Sasha Levin 
---
 lib/mpi/longlong.h | 34 +-
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/lib/mpi/longlong.h b/lib/mpi/longlong.h
index 08c60d10747fd..e01b705556aa6 100644
--- a/lib/mpi/longlong.h
+++ b/lib/mpi/longlong.h
@@ -756,22 +756,22 @@ do {  
\
 do { \
if (__builtin_constant_p(bh) && (bh) == 0) \
__asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \
-   : "=r" ((USItype)(sh)), \
-   "=" ((USItype)(sl)) \
+   : "=r" (sh), \
+   "=" (sl) \
: "%r" ((USItype)(ah)), \
"%r" ((USItype)(al)), \
"rI" ((USItype)(bl))); \
else if (__builtin_constant_p(bh) && (bh) == ~(USItype) 0) \
__asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \
-   : "=r" ((USItype)(sh)), \
-   "=" ((USItype)(sl)) \
+   : "=r" (sh), \
+   "=" (sl) \
: "%r" ((USItype)(ah)), \
"%r" ((USItype)(al)), \
"rI" ((USItype)(bl))); \
else \
__asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3" \
-   : "=r" ((USItype)(sh)), \
-   "=" ((USItype)(sl)) \
+   : "=r" (sh), \
+   "=" (sl) \
: "%r" ((USItype)(ah)), \
"r" ((USItype)(bh)), \
"%r" ((USItype)(al)), \
@@ -781,36 +781,36 @@ do { \
 do { \
if (__builtin_constant_p(ah) && (ah) == 0) \
__asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \
-   : "=r" ((USItype)(sh)), \
-   "=" ((USItype)(sl)) \
+   : "=r" (sh), \
+   "=" (sl) \
: "r" ((USItype)(bh)), \
"rI" ((USItype)(al)), \
"r" ((USItype)(bl))); \
else if (__builtin_constant_p(ah) && (ah) == ~(USItype) 0) \
__asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \
-   : "=r" ((USItype)(sh)), \
-   "=" ((USItype)(sl)) \
+   : "=r" (sh), \
+   "=" (sl) \
: "r" ((USItype)(bh)), \
"rI" ((USItype)(al)), \
"r" ((USItype)(bl))); \
else if (__builtin_constant_p(bh) && (bh) == 0) \
__asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \
-   : "=r" ((USItype)(sh)), \
-   "=" ((USItype)(sl)) \
+   : "=r" (sh), \
+   "=" (sl) \
: "r" ((USItype)(ah)), \
"rI" ((USItype)(al)), \
"r" ((USItype)(bl))); \
else if (__builtin_constant_p(bh) && (bh) == ~(USItype) 0) \
__asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \
-   : "=r" ((USItype)(sh)), \
-   "=" ((USItype)(sl)) \
+   : "=r" (sh), \
+   "=" (sl) \
: "r" ((USItype)(ah)), \
"rI" ((USItype)(al)), \
"r" ((USItype)(bl))); \
else \
__asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \
-   : "=r" ((USItype)(sh)), \
-   "=" ((USItype)(sl)) \
+   : "=r" (sh), \
+   "=" (sl) \
: "r" ((USItype)(ah)), \
"r" ((USItype)(bh)), \
"rI" ((USItype)(al)), \
@@ -821,7 +821,7 @@ do { \
 do { \
USItype __m0 = (m0), __m1 = (m1); \
__asm__ ("mulhwu %0,%1,%2" \
-   : "=r" ((USItype) ph) \
+   : "=r" (ph) \
: "%r" (__m0), \
"r" (__m1)); \
(pl) = __m0 * __m1; \
-- 
2.20.1





[PATCH 4.14 06/22] ASoC: rsnd: Fix HDMI channel mapping for multi-SSI mode

2020-05-08 Thread Greg Kroah-Hartman
From: Matthias Blankertz 

[ Upstream commit b94e164759b82d0c1c80d4b1c8f12c9bee83f11d ]

The HDMI?_SEL register maps up to four stereo SSI data lanes onto the
sdata[0..3] inputs of the HDMI output block. The upper half of the
register contains four blocks of 4 bits, with the most significant
controlling the sdata3 line and the least significant the sdata0 line.

The shift calculation has an off-by-one error, causing the parent SSI to
be mapped to sdata3, the first multi-SSI child to sdata0 and so forth.
As the parent SSI transmits the stereo L/R channels, and the HDMI core
expects it on the sdata0 line, this causes no audio to be output when
playing stereo audio on a multichannel capable HDMI out, and
multichannel audio has permutated channels.

Fix the shift calculation to map the parent SSI to sdata0, the first
child to sdata1 etc.

Signed-off-by: Matthias Blankertz 
Acked-by: Kuninori Morimoto 
Link: 
https://lore.kernel.org/r/20200415141017.384017-3-matthias.blanke...@cetitec.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/sh/rcar/ssiu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sound/soc/sh/rcar/ssiu.c b/sound/soc/sh/rcar/ssiu.c
index 4d948757d300d..5e5ed54754739 100644
--- a/sound/soc/sh/rcar/ssiu.c
+++ b/sound/soc/sh/rcar/ssiu.c
@@ -172,7 +172,7 @@ static int rsnd_ssiu_init_gen2(struct rsnd_mod *mod,
i;
 
for_each_rsnd_mod_array(i, pos, io, rsnd_ssi_array) {
-   shift   = (i * 4) + 16;
+   shift   = (i * 4) + 20;
val = (val & ~(0xF << shift)) |
rsnd_mod_id(pos) << shift;
}
-- 
2.20.1





[PATCH 4.14 21/22] mac80211: add ieee80211_is_any_nullfunc()

2020-05-08 Thread Greg Kroah-Hartman
From: Thomas Pedersen 

commit 30b2f0be23fb40e58d0ad2caf8702c2a44cda2e1 upstream.

commit 08a5bdde3812 ("mac80211: consider QoS Null frames for 
STA_NULLFUNC_ACKED")
Fixed a bug where we failed to take into account a
nullfunc frame can be either non-QoS or QoS. It turns out
there is at least one more bug in
ieee80211_sta_tx_notify(), introduced in
commit 7b6ddeaf27ec ("mac80211: use QoS NDP for AP probing"),
where we forgot to check for the QoS variant and so
assumed the QoS nullfunc frame never went out

Fix this by adding a helper ieee80211_is_any_nullfunc()
which consolidates the check for non-QoS and QoS nullfunc
frames. Replace existing compound conditionals and add a
couple more missing checks for QoS variant.

Signed-off-by: Thomas Pedersen 
Link: https://lore.kernel.org/r/20200114055940.18502-3-tho...@adapt-ip.com
Signed-off-by: Johannes Berg 
Signed-off-by: Greg Kroah-Hartman 

---
 include/linux/ieee80211.h |9 +
 net/mac80211/mlme.c   |2 +-
 net/mac80211/rx.c |8 +++-
 net/mac80211/status.c |5 ++---
 net/mac80211/tx.c |2 +-
 5 files changed, 16 insertions(+), 10 deletions(-)

--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
@@ -622,6 +622,15 @@ static inline bool ieee80211_is_qos_null
 }
 
 /**
+ * ieee80211_is_any_nullfunc - check if frame is regular or QoS nullfunc frame
+ * @fc: frame control bytes in little-endian byteorder
+ */
+static inline bool ieee80211_is_any_nullfunc(__le16 fc)
+{
+   return (ieee80211_is_nullfunc(fc) || ieee80211_is_qos_nullfunc(fc));
+}
+
+/**
  * ieee80211_is_bufferable_mmpdu - check if frame is bufferable MMPDU
  * @fc: frame control field in little-endian byteorder
  */
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -2273,7 +2273,7 @@ void ieee80211_sta_tx_notify(struct ieee
if (!ieee80211_is_data(hdr->frame_control))
return;
 
-   if (ieee80211_is_nullfunc(hdr->frame_control) &&
+   if (ieee80211_is_any_nullfunc(hdr->frame_control) &&
sdata->u.mgd.probe_send_count > 0) {
if (ack)
ieee80211_sta_reset_conn_monitor(sdata);
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1255,8 +1255,7 @@ ieee80211_rx_h_check_dup(struct ieee8021
return RX_CONTINUE;
 
if (ieee80211_is_ctl(hdr->frame_control) ||
-   ieee80211_is_nullfunc(hdr->frame_control) ||
-   ieee80211_is_qos_nullfunc(hdr->frame_control) ||
+   ieee80211_is_any_nullfunc(hdr->frame_control) ||
is_multicast_ether_addr(hdr->addr1))
return RX_CONTINUE;
 
@@ -1643,8 +1642,7 @@ ieee80211_rx_h_sta_process(struct ieee80
 * Drop (qos-)data::nullfunc frames silently, since they
 * are used only to control station power saving mode.
 */
-   if (ieee80211_is_nullfunc(hdr->frame_control) ||
-   ieee80211_is_qos_nullfunc(hdr->frame_control)) {
+   if (ieee80211_is_any_nullfunc(hdr->frame_control)) {
I802_DEBUG_INC(rx->local->rx_handlers_drop_nullfunc);
 
/*
@@ -2134,7 +2132,7 @@ static int ieee80211_drop_unencrypted(st
 
/* Drop unencrypted frames if key is set. */
if (unlikely(!ieee80211_has_protected(fc) &&
-!ieee80211_is_nullfunc(fc) &&
+!ieee80211_is_any_nullfunc(fc) &&
 ieee80211_is_data(fc) && rx->key))
return -EACCES;
 
--- a/net/mac80211/status.c
+++ b/net/mac80211/status.c
@@ -478,8 +478,7 @@ static void ieee80211_report_ack_skb(str
rcu_read_lock();
sdata = ieee80211_sdata_from_skb(local, skb);
if (sdata) {
-   if (ieee80211_is_nullfunc(hdr->frame_control) ||
-   ieee80211_is_qos_nullfunc(hdr->frame_control))
+   if (ieee80211_is_any_nullfunc(hdr->frame_control))
cfg80211_probe_status(sdata->dev, hdr->addr1,
  cookie, acked,
  GFP_ATOMIC);
@@ -856,7 +855,7 @@ static void __ieee80211_tx_status(struct
I802_DEBUG_INC(local->dot11FailedCount);
}
 
-   if ((ieee80211_is_nullfunc(fc) || ieee80211_is_qos_nullfunc(fc)) &&
+   if (ieee80211_is_any_nullfunc(fc) &&
ieee80211_has_pm(fc) &&
ieee80211_hw_check(>hw, REPORTS_TX_ACK_STATUS) &&
!(info->flags & IEEE80211_TX_CTL_INJECTED) &&
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -296,7 +296,7 @@ ieee80211_tx_h_check_assoc(struct ieee80
if (unlikely(test_bit(SCAN_SW_SCANNING, >local->scanning)) &&
test_bit(SDATA_STATE_OFFCHANNEL, >sdata->state) &&
!ieee80211_is_probe_req(hdr->frame_control) &&
-   !ieee80211_is_nullfunc(hdr->frame_control))
+   !ieee80211_is_any_nullfunc(hdr->frame_control))
/*
   

[PATCH 4.14 00/22] 4.14.180-rc1 review

2020-05-08 Thread Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.14.180 release.
There are 22 patches in this series, all will be posted as a response
to this one.  If anyone has any issues with these being applied, please
let me know.

Responses should be made by Sun, 10 May 2020 12:29:44 +.
Anything received after that time might be too late.

The whole patch series can be found in one patch at:

https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.14.180-rc1.gz
or in the git tree and branch at:

git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git 
linux-4.14.y
and the diffstat can be found below.

thanks,

greg k-h

-
Pseudo-Shortlog of commits:

Greg Kroah-Hartman 
Linux 4.14.180-rc1

Jiri Slaby 
cgroup, netclassid: remove double cond_resched

Thomas Pedersen 
mac80211: add ieee80211_is_any_nullfunc()

Takashi Iwai 
ALSA: hda: Match both PCI ID and SSID for driver blacklist

Steven Rostedt (VMware) 
tracing: Reverse the order of trace_types_lock and event_mutex

Jere Leppänen 
sctp: Fix SHUTDOWN CTSN Ack in the peer restart case

Doug Berger 
net: systemport: suppress warnings on failed Rx SKB allocations

Doug Berger 
net: bcmgenet: suppress warnings on failed Rx SKB allocations

Nathan Chancellor 
lib/mpi: Fix building for powerpc with clang

Florian Fainelli 
net: dsa: b53: Rework ARL bin logic

Jeremie Francois (on alpha) 
scripts/config: allow colons in option strings for sed

Philipp Rudo 
s390/ftrace: fix potential crashes when switching tracers

Ronnie Sahlberg 
cifs: protect updating server->dstaddr with a spinlock

Julien Beraud 
net: stmmac: Fix sub-second increment

Julien Beraud 
net: stmmac: fix enabling socfpga's ptp_ref_clock

Xiyu Yang 
wimax/i2400m: Fix potential urb refcnt leak

Amadeusz Sławiński 
ASoC: codecs: hdac_hdmi: Fix incorrect use of list_for_each_entry

Matthias Blankertz 
ASoC: rsnd: Fix HDMI channel mapping for multi-SSI mode

Sebastian Reichel 
ASoC: sgtl5000: Fix VAG power-on handling

Tyler Hicks 
selftests/ipc: Fix test failure seen after initial test run

Amadeusz Sławiński 
ASoC: topology: Check return value of pcm_new_ver

Alexey Kardashevskiy 
powerpc/pci/of: Parse unassigned resources

Jia He 
vhost: vsock: kick send_pkt worker once device is started


-

Diffstat:

 Makefile   |  4 +--
 arch/powerpc/kernel/pci_of_scan.c  | 12 ++--
 arch/s390/kernel/diag.c|  2 +-
 arch/s390/kernel/smp.c |  4 +--
 arch/s390/kernel/trace.c   |  2 +-
 drivers/net/dsa/b53/b53_common.c   | 30 ---
 drivers/net/dsa/b53/b53_regs.h |  3 ++
 drivers/net/ethernet/broadcom/bcmsysport.c |  3 +-
 drivers/net/ethernet/broadcom/genet/bcmgenet.c |  3 +-
 .../net/ethernet/stmicro/stmmac/dwmac-socfpga.c|  9 --
 .../net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c  | 12 +---
 drivers/net/wimax/i2400m/usb-fw.c  |  1 +
 drivers/vhost/vsock.c  |  5 
 fs/cifs/connect.c  |  2 ++
 include/linux/ieee80211.h  |  9 ++
 kernel/trace/trace.c   |  5 
 kernel/trace/trace_events.c| 31 ++--
 lib/mpi/longlong.h | 34 +++---
 net/core/netclassid_cgroup.c   |  4 +--
 net/mac80211/mlme.c|  2 +-
 net/mac80211/rx.c  |  8 ++---
 net/mac80211/status.c  |  5 ++--
 net/mac80211/tx.c  |  2 +-
 net/sctp/sm_make_chunk.c   |  6 +++-
 scripts/config |  5 +++-
 sound/pci/hda/hda_intel.c  |  9 +++---
 sound/soc/codecs/hdac_hdmi.c   |  6 ++--
 sound/soc/codecs/sgtl5000.c| 34 ++
 sound/soc/codecs/sgtl5000.h|  1 +
 sound/soc/sh/rcar/ssiu.c   |  2 +-
 sound/soc/soc-topology.c   |  4 ++-
 tools/testing/selftests/ipc/msgque.c   |  2 +-
 32 files changed, 182 insertions(+), 79 deletions(-)




[PATCH 4.19 22/32] sctp: Fix SHUTDOWN CTSN Ack in the peer restart case

2020-05-08 Thread Greg Kroah-Hartman
From: Jere Leppänen 

commit 12dfd78e3a74825e6f0bc8df7ef9f938fbc6bfe3 upstream.

When starting shutdown in sctp_sf_do_dupcook_a(), get the value for
SHUTDOWN Cumulative TSN Ack from the new association, which is
reconstructed from the cookie, instead of the old association, which
the peer doesn't have anymore.

Otherwise the SHUTDOWN is either ignored or replied to with an ABORT
by the peer because CTSN Ack doesn't match the peer's Initial TSN.

Fixes: bdf6fa52f01b ("sctp: handle association restarts when the socket is 
closed.")
Signed-off-by: Jere Leppänen 
Acked-by: Marcelo Ricardo Leitner 
Signed-off-by: David S. Miller 
Signed-off-by: Greg Kroah-Hartman 

---
 net/sctp/sm_make_chunk.c |6 +-
 1 file changed, 5 insertions(+), 1 deletion(-)

--- a/net/sctp/sm_make_chunk.c
+++ b/net/sctp/sm_make_chunk.c
@@ -871,7 +871,11 @@ struct sctp_chunk *sctp_make_shutdown(co
struct sctp_chunk *retval;
__u32 ctsn;
 
-   ctsn = sctp_tsnmap_get_ctsn(>peer.tsn_map);
+   if (chunk && chunk->asoc)
+   ctsn = sctp_tsnmap_get_ctsn(>asoc->peer.tsn_map);
+   else
+   ctsn = sctp_tsnmap_get_ctsn(>peer.tsn_map);
+
shut.cum_tsn_ack = htonl(ctsn);
 
retval = sctp_make_control(asoc, SCTP_CID_SHUTDOWN, 0,




[PATCH 4.14 08/22] wimax/i2400m: Fix potential urb refcnt leak

2020-05-08 Thread Greg Kroah-Hartman
From: Xiyu Yang 

[ Upstream commit 7717cbec172c3554d470023b4020d5781961187e ]

i2400mu_bus_bm_wait_for_ack() invokes usb_get_urb(), which increases the
refcount of the "notif_urb".

When i2400mu_bus_bm_wait_for_ack() returns, local variable "notif_urb"
becomes invalid, so the refcount should be decreased to keep refcount
balanced.

The issue happens in all paths of i2400mu_bus_bm_wait_for_ack(), which
forget to decrease the refcnt increased by usb_get_urb(), causing a
refcnt leak.

Fix this issue by calling usb_put_urb() before the
i2400mu_bus_bm_wait_for_ack() returns.

Signed-off-by: Xiyu Yang 
Signed-off-by: Xin Tan 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
---
 drivers/net/wimax/i2400m/usb-fw.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/wimax/i2400m/usb-fw.c 
b/drivers/net/wimax/i2400m/usb-fw.c
index 502c346aa790b..7d396c81ec3eb 100644
--- a/drivers/net/wimax/i2400m/usb-fw.c
+++ b/drivers/net/wimax/i2400m/usb-fw.c
@@ -354,6 +354,7 @@ ssize_t i2400mu_bus_bm_wait_for_ack(struct i2400m *i2400m,
usb_autopm_put_interface(i2400mu->usb_iface);
d_fnend(8, dev, "(i2400m %p ack %p size %zu) = %ld\n",
i2400m, ack, ack_size, (long) result);
+   usb_put_urb(_urb);
return result;
 
 error_exceeded:
-- 
2.20.1





[PATCH 4.19 17/32] s390/ftrace: fix potential crashes when switching tracers

2020-05-08 Thread Greg Kroah-Hartman
From: Philipp Rudo 

[ Upstream commit 8ebf6da9db1b2a20bb86cc1bee2552e894d03308 ]

Switching tracers include instruction patching. To prevent that a
instruction is patched while it's read the instruction patching is done
in stop_machine 'context'. This also means that any function called
during stop_machine must not be traced. Thus add 'notrace' to all
functions called within stop_machine.

Fixes: 1ec2772e0c3c ("s390/diag: add a statistic for diagnose calls")
Fixes: 38f2c691a4b3 ("s390: improve wait logic of stop_machine")
Fixes: 4ecf0a43e729 ("processor: get rid of cpu_relax_yield")
Signed-off-by: Philipp Rudo 
Signed-off-by: Vasily Gorbik 
Signed-off-by: Sasha Levin 
---
 arch/s390/kernel/diag.c  | 2 +-
 arch/s390/kernel/smp.c   | 4 ++--
 arch/s390/kernel/trace.c | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/s390/kernel/diag.c b/arch/s390/kernel/diag.c
index 35c842aa87058..4c7cf8787a848 100644
--- a/arch/s390/kernel/diag.c
+++ b/arch/s390/kernel/diag.c
@@ -128,7 +128,7 @@ void diag_stat_inc(enum diag_stat_enum nr)
 }
 EXPORT_SYMBOL(diag_stat_inc);
 
-void diag_stat_inc_norecursion(enum diag_stat_enum nr)
+void notrace diag_stat_inc_norecursion(enum diag_stat_enum nr)
 {
this_cpu_inc(diag_stat.counter[nr]);
trace_s390_diagnose_norecursion(diag_map[nr].code);
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index ecd24711f3aa9..8e31dfd85de32 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -393,7 +393,7 @@ int smp_find_processor_id(u16 address)
return -1;
 }
 
-bool arch_vcpu_is_preempted(int cpu)
+bool notrace arch_vcpu_is_preempted(int cpu)
 {
if (test_cpu_flag_of(CIF_ENABLED_WAIT, cpu))
return false;
@@ -403,7 +403,7 @@ bool arch_vcpu_is_preempted(int cpu)
 }
 EXPORT_SYMBOL(arch_vcpu_is_preempted);
 
-void smp_yield_cpu(int cpu)
+void notrace smp_yield_cpu(int cpu)
 {
if (MACHINE_HAS_DIAG9C) {
diag_stat_inc_norecursion(DIAG_STAT_X09C);
diff --git a/arch/s390/kernel/trace.c b/arch/s390/kernel/trace.c
index 490b52e850145..11a669f3cc93c 100644
--- a/arch/s390/kernel/trace.c
+++ b/arch/s390/kernel/trace.c
@@ -14,7 +14,7 @@ EXPORT_TRACEPOINT_SYMBOL(s390_diagnose);
 
 static DEFINE_PER_CPU(unsigned int, diagnose_trace_depth);
 
-void trace_s390_diagnose_norecursion(int diag_nr)
+void notrace trace_s390_diagnose_norecursion(int diag_nr)
 {
unsigned long flags;
unsigned int *depth;
-- 
2.20.1





<    8   9   10   11   12   13   14   15   16   17   >