[PATCH 5.10 645/663] dm writecache: fix performance degradation in ssd mode

2021-03-01 Thread Greg Kroah-Hartman
From: Mikulas Patocka 

commit cb728484a7710c202f02b96aa0962ce9b07aa5c2 upstream.

Fix a thinko in ssd_commit_superblock. region.count is in sectors, not
bytes. This bug doesn't corrupt data, but it causes performance
degradation.

Signed-off-by: Mikulas Patocka 
Fixes: dc8a01ae1dbd ("dm writecache: optimize superblock write")
Cc: sta...@vger.kernel.org # v5.7+
Reported-by: J. Bruce Fields 
Signed-off-by: Mike Snitzer 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/md/dm-writecache.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/md/dm-writecache.c
+++ b/drivers/md/dm-writecache.c
@@ -523,7 +523,7 @@ static void ssd_commit_superblock(struct
 
region.bdev = wc->ssd_dev->bdev;
region.sector = 0;
-   region.count = PAGE_SIZE;
+   region.count = PAGE_SIZE >> SECTOR_SHIFT;
 
if (unlikely(region.sector + region.count > wc->metadata_sectors))
region.count = wc->metadata_sectors - region.sector;




[PATCH 5.10 412/663] drm/msm: Fix races managing the OOB state for timestamp vs timestamps.

2021-03-01 Thread Greg Kroah-Hartman
From: Eric Anholt 

[ Upstream commit 5f98b33b04c02c0d9088c7486c59d058696782f9 ]

Now that we're not racing with GPU setup, also fix races of timestamps
against other timestamps.  In freedreno CI, we were seeing this path trigger
timeouts on setting the GMU bit, producing:

[drm:_a6xx_gmu_set_oob] *ERROR* Timeout waiting for GMU OOB set GPU_SET: 0x0

and this triggered especially on the first set of tests right after
boot (it's probably easier to lose the race than one might think,
given that we start many tests in parallel, and waiting for NFS to
page in code probably means that lots of tests hit the same point of
screen init at the same time).  As of this patch, the message seems to
have completely gone away.

Signed-off-by: Eric Anholt 
Fixes: 4b565ca5a2cb ("drm/msm: Add A6XX device support")
Reviewed-by: Jordan Crouse 
Signed-off-by: Rob Clark 
Signed-off-by: Sasha Levin 
---
 drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 4 
 1 file changed, 4 insertions(+)

diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c 
b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
index 9fda02550d80d..83b50f6d6bb78 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
@@ -1066,6 +1066,9 @@ static int a6xx_get_timestamp(struct msm_gpu *gpu, 
uint64_t *value)
 {
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
+   static DEFINE_MUTEX(perfcounter_oob);
+
+   mutex_lock(_oob);
 
/* Force the GPU power on so we can read this register */
a6xx_gmu_set_oob(_gpu->gmu, GMU_OOB_PERFCOUNTER_SET);
@@ -1074,6 +1077,7 @@ static int a6xx_get_timestamp(struct msm_gpu *gpu, 
uint64_t *value)
REG_A6XX_RBBM_PERFCTR_CP_0_HI);
 
a6xx_gmu_clear_oob(_gpu->gmu, GMU_OOB_PERFCOUNTER_SET);
+   mutex_unlock(_oob);
return 0;
 }
 
-- 
2.27.0





[PATCH 5.10 642/663] dm table: fix iterate_devices based device capability checks

2021-03-01 Thread Greg Kroah-Hartman
From: Jeffle Xu 

commit a4c8dd9c2d0987cf542a2a0c42684c9c6d78a04e upstream.

According to the definition of dm_iterate_devices_fn:
 * This function must iterate through each section of device used by the
 * target until it encounters a non-zero return code, which it then returns.
 * Returns zero if no callout returned non-zero.

For some target type (e.g. dm-stripe), one call of iterate_devices() may
iterate multiple underlying devices internally, in which case a non-zero
return code returned by iterate_devices_callout_fn will stop the iteration
in advance. No iterate_devices_callout_fn should return non-zero unless
device iteration should stop.

Rename dm_table_requires_stable_pages() to dm_table_any_dev_attr() and
elevate it for reuse to stop iterating (and return non-zero) on the
first device that causes iterate_devices_callout_fn to return non-zero.
Use dm_table_any_dev_attr() to properly iterate through devices.

Rename device_is_nonrot() to device_is_rotational() and invert logic
accordingly to fix improper disposition.

Fixes: c3c4555edd10 ("dm table: clear add_random unless all devices have it 
set")
Fixes: 4693c9668fdc ("dm table: propagate non rotational flag")
Cc: sta...@vger.kernel.org
Signed-off-by: Jeffle Xu 
Signed-off-by: Mike Snitzer 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/md/dm-table.c |   97 ++
 1 file changed, 51 insertions(+), 46 deletions(-)

--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
@@ -1302,6 +1302,46 @@ struct dm_target *dm_table_find_target(s
return >targets[(KEYS_PER_NODE * n) + k];
 }
 
+/*
+ * type->iterate_devices() should be called when the sanity check needs to
+ * iterate and check all underlying data devices. iterate_devices() will
+ * iterate all underlying data devices until it encounters a non-zero return
+ * code, returned by whether the input iterate_devices_callout_fn, or
+ * iterate_devices() itself internally.
+ *
+ * For some target type (e.g. dm-stripe), one call of iterate_devices() may
+ * iterate multiple underlying devices internally, in which case a non-zero
+ * return code returned by iterate_devices_callout_fn will stop the iteration
+ * in advance.
+ *
+ * Cases requiring _any_ underlying device supporting some kind of attribute,
+ * should use the iteration structure like dm_table_any_dev_attr(), or call
+ * it directly. @func should handle semantics of positive examples, e.g.
+ * capable of something.
+ *
+ * Cases requiring _all_ underlying devices supporting some kind of attribute,
+ * should use the iteration structure like dm_table_supports_nowait() or
+ * dm_table_supports_discards(). Or introduce dm_table_all_devs_attr() that
+ * uses an @anti_func that handle semantics of counter examples, e.g. not
+ * capable of something. So: return !dm_table_any_dev_attr(t, anti_func);
+ */
+static bool dm_table_any_dev_attr(struct dm_table *t,
+ iterate_devices_callout_fn func)
+{
+   struct dm_target *ti;
+   unsigned int i;
+
+   for (i = 0; i < dm_table_get_num_targets(t); i++) {
+   ti = dm_table_get_target(t, i);
+
+   if (ti->type->iterate_devices &&
+   ti->type->iterate_devices(ti, func, NULL))
+   return true;
+}
+
+   return false;
+}
+
 static int count_device(struct dm_target *ti, struct dm_dev *dev,
sector_t start, sector_t len, void *data)
 {
@@ -1602,12 +1642,12 @@ static int dm_table_supports_dax_write_c
return false;
 }
 
-static int device_is_nonrot(struct dm_target *ti, struct dm_dev *dev,
-   sector_t start, sector_t len, void *data)
+static int device_is_rotational(struct dm_target *ti, struct dm_dev *dev,
+   sector_t start, sector_t len, void *data)
 {
struct request_queue *q = bdev_get_queue(dev->bdev);
 
-   return q && blk_queue_nonrot(q);
+   return q && !blk_queue_nonrot(q);
 }
 
 static int device_is_not_random(struct dm_target *ti, struct dm_dev *dev,
@@ -1618,23 +1658,6 @@ static int device_is_not_random(struct d
return q && !blk_queue_add_random(q);
 }
 
-static bool dm_table_all_devices_attribute(struct dm_table *t,
-  iterate_devices_callout_fn func)
-{
-   struct dm_target *ti;
-   unsigned i;
-
-   for (i = 0; i < dm_table_get_num_targets(t); i++) {
-   ti = dm_table_get_target(t, i);
-
-   if (!ti->type->iterate_devices ||
-   !ti->type->iterate_devices(ti, func, NULL))
-   return false;
-   }
-
-   return true;
-}
-
 static int device_not_write_same_capable(struct dm_target *ti, struct dm_dev 
*dev,
 sector_t start, sector_t len, void 
*data)
 {
@@ -1786,27 +1809,6 @@ static int device_requires_stable_pages(
return q && blk_queue_stable_writes(q);
 }
 
-/*
- 

[PATCH 5.11 377/775] watchdog: intel-mid_wdt: Postpone IRQ handler registration till SCU is ready

2021-03-01 Thread Greg Kroah-Hartman
From: Andy Shevchenko 

[ Upstream commit f285c9532b5bd3de7e37a6203318437cab79bd9a ]

When SCU is not ready and CONFIG_DEBUG_SHIRQ=y we got deferred probe followed
by fired test IRQ which immediately makes kernel panic. Fix this by delaying
IRQ handler registration till SCU is ready.

Fixes: 80ae679b8f86 ("watchdog: intel-mid_wdt: Convert to use new SCU IPC API")
Signed-off-by: Andy Shevchenko 
Reviewed-by: Guenter Roeck 
Acked-by: Linus Walleij 
Reviewed-by: Mika Westerberg 
Signed-off-by: Sasha Levin 
---
 drivers/watchdog/intel-mid_wdt.c | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/watchdog/intel-mid_wdt.c b/drivers/watchdog/intel-mid_wdt.c
index 1ae03b64ef8bf..9b2173f765c8c 100644
--- a/drivers/watchdog/intel-mid_wdt.c
+++ b/drivers/watchdog/intel-mid_wdt.c
@@ -154,6 +154,10 @@ static int mid_wdt_probe(struct platform_device *pdev)
watchdog_set_nowayout(wdt_dev, WATCHDOG_NOWAYOUT);
watchdog_set_drvdata(wdt_dev, mid);
 
+   mid->scu = devm_intel_scu_ipc_dev_get(dev);
+   if (!mid->scu)
+   return -EPROBE_DEFER;
+
ret = devm_request_irq(dev, pdata->irq, mid_wdt_irq,
   IRQF_SHARED | IRQF_NO_SUSPEND, "watchdog",
   wdt_dev);
@@ -162,10 +166,6 @@ static int mid_wdt_probe(struct platform_device *pdev)
return ret;
}
 
-   mid->scu = devm_intel_scu_ipc_dev_get(dev);
-   if (!mid->scu)
-   return -EPROBE_DEFER;
-
/*
 * The firmware followed by U-Boot leaves the watchdog running
 * with the default threshold which may vary. When we get here
-- 
2.27.0





[PATCH 5.11 169/775] drm/gma500: Fix error return code in psb_driver_load()

2021-03-01 Thread Greg Kroah-Hartman
From: Jialin Zhang 

[ Upstream commit 6926872ae24452d4f2176a3ba2dee659497de2c4 ]

Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 5c49fd3aa0ab ("gma500: Add the core DRM files and headers")
Reported-by: Hulk Robot 
Signed-off-by: Jialin Zhang 
Signed-off-by: Daniel Vetter 
Link: 
https://patchwork.freedesktop.org/patch/msgid/20201130020216.1906141-1-zhangjiali...@huawei.com
Signed-off-by: Sasha Levin 
---
 drivers/gpu/drm/gma500/psb_drv.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
index cc2d59e8471da..134068f9328d5 100644
--- a/drivers/gpu/drm/gma500/psb_drv.c
+++ b/drivers/gpu/drm/gma500/psb_drv.c
@@ -312,6 +312,8 @@ static int psb_driver_load(struct drm_device *dev, unsigned 
long flags)
if (ret)
goto out_err;
 
+   ret = -ENOMEM;
+
dev_priv->mmu = psb_mmu_driver_init(dev, 1, 0, 0);
if (!dev_priv->mmu)
goto out_err;
-- 
2.27.0





[PATCH 5.11 163/775] net/mlx5e: Fix CQ params of ICOSQ and async ICOSQ

2021-03-01 Thread Greg Kroah-Hartman
From: Maxim Mikityanskiy 

[ Upstream commit ebf79b6be67c0a77a9ab7cdf74c43fd7d9619f0c ]

The commit mentioned below has split the parameters of ICOSQ and async
ICOSQ, but it contained a typo: the CQ parameters were swapped for ICOSQ
and async ICOSQ. Async ICOSQ is longer than the normal ICOSQ, and the CQ
size must be the same as the size of the corresponding SQ, but due to
this bug, the CQ of async ICOSQ was much shorter than async ICOSQ
itself. It led to overflows of the CQ with such messages in dmesg, in
particular, when running multiple kTLS-offloaded streams:

mlx5_core :08:00.0: cq_err_event_notifier:529:(pid 9422): CQ error
on CQN 0x406, syndrome 0x1
mlx5_core :08:00.0 eth2: mlx5e_cq_error_event: cqn=0x000406
event=0x04

This commit fixes the issue by using the corresponding parameters for
ICOSQ and async ICOSQ.

Fixes: c293ac927fbb ("net/mlx5e: Refactor build channel params")
Signed-off-by: Maxim Mikityanskiy 
Reviewed-by: Tariq Toukan 
Signed-off-by: Saeed Mahameed 
Signed-off-by: Sasha Levin 
---
 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c 
b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
index 3edc826cc6bbe..a2e0b548bf570 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
@@ -1827,12 +1827,12 @@ static int mlx5e_open_queues(struct mlx5e_channel *c,
 
mlx5e_build_create_cq_param(, c);
 
-   err = mlx5e_open_cq(c->priv, icocq_moder, >icosq.cqp, ,
+   err = mlx5e_open_cq(c->priv, icocq_moder, >async_icosq.cqp, 
,
>async_icosq.cq);
if (err)
return err;
 
-   err = mlx5e_open_cq(c->priv, icocq_moder, >async_icosq.cqp, 
,
+   err = mlx5e_open_cq(c->priv, icocq_moder, >icosq.cqp, ,
>icosq.cq);
if (err)
goto err_close_async_icosq_cq;
-- 
2.27.0





[PATCH 5.10 162/663] media: imx: Fix csc/scaler unregister

2021-03-01 Thread Greg Kroah-Hartman
From: Ezequiel Garcia 

[ Upstream commit 89b14485caa4b7b2eaf70be0064f0978e68ebeee ]

The csc/scaler device private struct is released by
ipu_csc_scaler_video_device_release(), which can be called
by video_unregister_device() if there are no users
of the underlying struct video device.

Therefore, the mutex can't be held when calling
video_unregister_device() as its memory may be freed
by it, leading to a kernel oops.

Fortunately, the fix is quite simple as no locking
is needed when calling video_unregister_device(): v4l2-core
already has its own internal locking, and the structures
are also properly refcounted.

Fixes: a8ef0488cc59 ("media: imx: add csc/scaler mem2mem device")
Signed-off-by: Ezequiel Garcia 
Reviewed-by: Philipp Zabel 
Signed-off-by: Hans Verkuil 
Signed-off-by: Mauro Carvalho Chehab 
Signed-off-by: Sasha Levin 
---
 drivers/staging/media/imx/imx-media-csc-scaler.c | 4 
 1 file changed, 4 deletions(-)

diff --git a/drivers/staging/media/imx/imx-media-csc-scaler.c 
b/drivers/staging/media/imx/imx-media-csc-scaler.c
index fab1155a5958c..63a0204502a8b 100644
--- a/drivers/staging/media/imx/imx-media-csc-scaler.c
+++ b/drivers/staging/media/imx/imx-media-csc-scaler.c
@@ -869,11 +869,7 @@ void imx_media_csc_scaler_device_unregister(struct 
imx_media_video_dev *vdev)
struct ipu_csc_scaler_priv *priv = vdev_to_priv(vdev);
struct video_device *vfd = priv->vdev.vfd;
 
-   mutex_lock(>mutex);
-
video_unregister_device(vfd);
-
-   mutex_unlock(>mutex);
 }
 
 struct imx_media_video_dev *
-- 
2.27.0





[PATCH 5.10 108/663] net/mlx5: Disable devlink reload for multi port slave device

2021-03-01 Thread Greg Kroah-Hartman
From: Shay Drory 

[ Upstream commit d89ddaae1766f8fe571ea6eb63ec098ff556f1dd ]

Devlink reload can't be allowed on a multi port slave device, because
reload of slave device doesn't take effect.

The right flow is to disable devlink reload for multi port slave
device. Hence, disabling it in mlx5_core probing.

Fixes: 4383cfcc65e7 ("net/mlx5: Add devlink reload")
Signed-off-by: Shay Drory 
Reviewed-by: Moshe Shemesh 
Signed-off-by: Saeed Mahameed 
Signed-off-by: Sasha Levin 
---
 drivers/net/ethernet/mellanox/mlx5/core/main.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c 
b/drivers/net/ethernet/mellanox/mlx5/core/main.c
index e455a2f31f070..8246b6285d5a4 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
@@ -1380,7 +1380,8 @@ static int init_one(struct pci_dev *pdev, const struct 
pci_device_id *id)
dev_err(>dev, "mlx5_crdump_enable failed with error code 
%d\n", err);
 
pci_save_state(pdev);
-   devlink_reload_enable(devlink);
+   if (!mlx5_core_is_mp_slave(dev))
+   devlink_reload_enable(devlink);
return 0;
 
 err_load_one:
-- 
2.27.0





[PATCH 5.10 368/663] regulator: bd718x7, bd71828, Fix dvs voltage levels

2021-03-01 Thread Greg Kroah-Hartman
From: Matti Vaittinen 

[ Upstream commit c294554111a835598b557db789d9ad2379b512a2 ]

The ROHM BD718x7 and BD71828 drivers support setting HW state
specific voltages from device-tree. This is used also by various
in-tree DTS files.

These drivers do incorrectly try to compose bit-map using enum
values. By a chance this works for first two valid levels having
values 1 and 2 - but setting values for the rest of the levels
do indicate capability of setting values for first levels as
well. Luckily the regulators which support setting values for
SUSPEND/LPSR do usually also support setting values for RUN
and IDLE too - thus this has not been such a fatal issue.

Fix this by defining the old enum values as bits and fixing the
parsing code. This allows keeping existing IC specific drivers
intact and only slightly changing the rohm-regulator.c

Fixes: 21b72156ede8b ("regulator: bd718x7: Split driver to common and bd718x7 
specific parts")
Signed-off-by: Matti Vaittinen 
Acked-by: Lee Jones 
Link: https://lore.kernel.org/r/20210212080023.GA880728@localhost.localdomain
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 drivers/regulator/rohm-regulator.c |  9 ++---
 include/linux/mfd/rohm-generic.h   | 14 ++
 2 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/drivers/regulator/rohm-regulator.c 
b/drivers/regulator/rohm-regulator.c
index 399002383b28b..5c558b153d55e 100644
--- a/drivers/regulator/rohm-regulator.c
+++ b/drivers/regulator/rohm-regulator.c
@@ -52,9 +52,12 @@ int rohm_regulator_set_dvs_levels(const struct 
rohm_dvs_config *dvs,
char *prop;
unsigned int reg, mask, omask, oreg = desc->enable_reg;
 
-   for (i = 0; i < ROHM_DVS_LEVEL_MAX && !ret; i++) {
-   if (dvs->level_map & (1 << i)) {
-   switch (i + 1) {
+   for (i = 0; i < ROHM_DVS_LEVEL_VALID_AMOUNT && !ret; i++) {
+   int bit;
+
+   bit = BIT(i);
+   if (dvs->level_map & bit) {
+   switch (bit) {
case ROHM_DVS_LEVEL_RUN:
prop = "rohm,dvs-run-voltage";
reg = dvs->run_reg;
diff --git a/include/linux/mfd/rohm-generic.h b/include/linux/mfd/rohm-generic.h
index 4283b5b33e040..2b85b9deb03ae 100644
--- a/include/linux/mfd/rohm-generic.h
+++ b/include/linux/mfd/rohm-generic.h
@@ -20,14 +20,12 @@ struct rohm_regmap_dev {
struct regmap *regmap;
 };
 
-enum {
-   ROHM_DVS_LEVEL_UNKNOWN,
-   ROHM_DVS_LEVEL_RUN,
-   ROHM_DVS_LEVEL_IDLE,
-   ROHM_DVS_LEVEL_SUSPEND,
-   ROHM_DVS_LEVEL_LPSR,
-   ROHM_DVS_LEVEL_MAX = ROHM_DVS_LEVEL_LPSR,
-};
+#define ROHM_DVS_LEVEL_RUN BIT(0)
+#define ROHM_DVS_LEVEL_IDLEBIT(1)
+#define ROHM_DVS_LEVEL_SUSPEND BIT(2)
+#define ROHM_DVS_LEVEL_LPSRBIT(3)
+#define ROHM_DVS_LEVEL_VALID_AMOUNT4
+#define ROHM_DVS_LEVEL_UNKNOWN 0
 
 /**
  * struct rohm_dvs_config - dynamic voltage scaling register descriptions
-- 
2.27.0





[PATCH 5.11 159/775] Bluetooth: hci_qca: Fixed issue during suspend

2021-03-01 Thread Greg Kroah-Hartman
From: Venkata Lakshmi Narayana Gubba 

[ Upstream commit 55c0bd77479b60ea29fd390faf4545cfb3a1d79e ]

If BT SoC is running with ROM FW then just return in
qca_suspend function as ROM FW does not support
in-band sleep.

Fixes: 2be43abac5a8 ("Bluetooth: hci_qca: Wait for timeout during suspend")
Signed-off-by: Venkata Lakshmi Narayana Gubba 
Signed-off-by: Marcel Holtmann 
Signed-off-by: Sasha Levin 
---
 drivers/bluetooth/hci_qca.c | 12 +++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
index ff2fb68a45b1e..de36af63e1825 100644
--- a/drivers/bluetooth/hci_qca.c
+++ b/drivers/bluetooth/hci_qca.c
@@ -77,7 +77,8 @@ enum qca_flags {
QCA_MEMDUMP_COLLECTION,
QCA_HW_ERROR_EVENT,
QCA_SSR_TRIGGERED,
-   QCA_BT_OFF
+   QCA_BT_OFF,
+   QCA_ROM_FW
 };
 
 enum qca_capabilities {
@@ -1664,6 +1665,7 @@ static int qca_setup(struct hci_uart *hu)
if (ret)
return ret;
 
+   clear_bit(QCA_ROM_FW, >flags);
/* Patch downloading has to be done without IBS mode */
set_bit(QCA_IBS_DISABLED, >flags);
 
@@ -1721,12 +1723,14 @@ retry:
hu->hdev->cmd_timeout = qca_cmd_timeout;
} else if (ret == -ENOENT) {
/* No patch/nvm-config found, run with original fw/config */
+   set_bit(QCA_ROM_FW, >flags);
ret = 0;
} else if (ret == -EAGAIN) {
/*
 * Userspace firmware loader will return -EAGAIN in case no
 * patch/nvm-config is found, so run with original fw/config.
 */
+   set_bit(QCA_ROM_FW, >flags);
ret = 0;
}
 
@@ -2103,6 +2107,12 @@ static int __maybe_unused qca_suspend(struct device *dev)
 
set_bit(QCA_SUSPENDING, >flags);
 
+   /* if BT SoC is running with default firmware then it does not
+* support in-band sleep
+*/
+   if (test_bit(QCA_ROM_FW, >flags))
+   return 0;
+
/* During SSR after memory dump collection, controller will be
 * powered off and then powered on.If controller is powered off
 * during SSR then we should wait until SSR is completed.
-- 
2.27.0





[PATCH 5.10 606/663] mmc: sdhci-pci-o2micro: Bug fix for SDR104 HW tuning failure

2021-03-01 Thread Greg Kroah-Hartman
From: Shirley Her 

commit 1ad9f88014ae1d5abccb6fe930bc4c5c311bdc05 upstream.

Force chip enter L0 power state during SDR104 HW tuning to avoid tuning failure

Signed-off-by: Shirley Her 
Link: https://lore.kernel.org/r/20210206014051.3418-1-shirley@bayhubtech.com
Fixes: 7b7d897e8898 ("mmc: sdhci-pci-o2micro: Add HW tuning for SDR104 mode")
Cc: sta...@vger.kernel.org
Signed-off-by: Ulf Hansson 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/mmc/host/sdhci-pci-o2micro.c |   20 
 1 file changed, 20 insertions(+)

--- a/drivers/mmc/host/sdhci-pci-o2micro.c
+++ b/drivers/mmc/host/sdhci-pci-o2micro.c
@@ -33,6 +33,8 @@
 #define O2_SD_ADMA20xE7
 #define O2_SD_INF_MOD  0xF1
 #define O2_SD_MISC_CTRL4   0xFC
+#define O2_SD_MISC_CTRL0x1C0
+#define O2_SD_PWR_FORCE_L0 0x0002
 #define O2_SD_TUNING_CTRL  0x300
 #define O2_SD_PLL_SETTING  0x304
 #define O2_SD_MISC_SETTING 0x308
@@ -300,6 +302,8 @@ static int sdhci_o2_execute_tuning(struc
 {
struct sdhci_host *host = mmc_priv(mmc);
int current_bus_width = 0;
+   u32 scratch32 = 0;
+   u16 scratch = 0;
 
/*
 * This handler only implements the eMMC tuning that is specific to
@@ -312,6 +316,17 @@ static int sdhci_o2_execute_tuning(struc
if (WARN_ON((opcode != MMC_SEND_TUNING_BLOCK_HS200) &&
(opcode != MMC_SEND_TUNING_BLOCK)))
return -EINVAL;
+
+   /* Force power mode enter L0 */
+   scratch = sdhci_readw(host, O2_SD_MISC_CTRL);
+   scratch |= O2_SD_PWR_FORCE_L0;
+   sdhci_writew(host, scratch, O2_SD_MISC_CTRL);
+
+   /* wait DLL lock, timeout value 5ms */
+   if (readx_poll_timeout(sdhci_o2_pll_dll_wdt_control, host,
+   scratch32, (scratch32 & O2_DLL_LOCK_STATUS), 1, 5000))
+   pr_warn("%s: DLL can't lock in 5ms after force L0 during 
tuning.\n",
+   mmc_hostname(host->mmc));
/*
 * Judge the tuning reason, whether caused by dll shift
 * If cause by dll shift, should call sdhci_o2_dll_recovery
@@ -344,6 +359,11 @@ static int sdhci_o2_execute_tuning(struc
sdhci_set_bus_width(host, current_bus_width);
}
 
+   /* Cancel force power mode enter L0 */
+   scratch = sdhci_readw(host, O2_SD_MISC_CTRL);
+   scratch &= ~(O2_SD_PWR_FORCE_L0);
+   sdhci_writew(host, scratch, O2_SD_MISC_CTRL);
+
sdhci_reset(host, SDHCI_RESET_CMD);
sdhci_reset(host, SDHCI_RESET_DATA);
 




[PATCH 5.10 635/663] spi: fsl: invert spisel_boot signal on MPC8309

2021-03-01 Thread Greg Kroah-Hartman
From: Rasmus Villemoes 

commit 9d2aa6dbf87af89c13cac2d1b4cccad83fb14a7e upstream.

Commit 7a2da5d7960a ("spi: fsl: Fix driver breakage when SPI_CS_HIGH
is not set in spi->mode") broke our MPC8309 board by effectively
inverting the boolean value passed to fsl_spi_cs_control. The
SPISEL_BOOT signal is used as chipselect, but it's not a gpio, so
we cannot rely on gpiolib handling the polarity.

Adapt to the new world order by inverting the logic here. This does
assume that the slave sitting at the SPISEL_BOOT is active low, but
should that ever turn out not to be the case, one can create a stub
gpiochip driver controlling a single gpio (or rather, a single "spo",
special-purpose output).

Fixes: 7a2da5d7960a ("spi: fsl: Fix driver breakage when SPI_CS_HIGH is not set 
in spi->mode")
Cc: sta...@vger.kernel.org
Signed-off-by: Rasmus Villemoes 
Link: 
https://lore.kernel.org/r/20210130143545.505613-1-rasmus.villem...@prevas.dk
Signed-off-by: Mark Brown 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/spi/spi-fsl-spi.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/spi/spi-fsl-spi.c
+++ b/drivers/spi/spi-fsl-spi.c
@@ -695,7 +695,7 @@ static void fsl_spi_cs_control(struct sp
 
if (WARN_ON_ONCE(!pinfo->immr_spi_cs))
return;
-   iowrite32be(on ? SPI_BOOT_SEL_BIT : 0, pinfo->immr_spi_cs);
+   iowrite32be(on ? 0 : SPI_BOOT_SEL_BIT, pinfo->immr_spi_cs);
}
 }
 




[PATCH 5.11 010/775] PCI: qcom: Use PHY_REFCLK_USE_PAD only for ipq8064

2021-03-01 Thread Greg Kroah-Hartman
From: Ansuel Smith 

commit 2cfef1971aea6119ee27429181d6cb3383031ac2 upstream.

The use of PHY_REFCLK_USE_PAD introduced a regression for apq8064 devices.
It was tested that while apq doesn't require the padding, ipq SoC must use
it or the kernel hangs on boot.

Link: https://lore.kernel.org/r/2020101916.8269-1-ansuels...@gmail.com
Fixes: de3c4bf64897 ("PCI: qcom: Add support for tx term offset for rev 2.1.0")
Reported-by: Ilia Mirkin 
Signed-off-by: Ilia Mirkin 
Signed-off-by: Ansuel Smith 
Signed-off-by: Lorenzo Pieralisi 
Signed-off-by: Bjorn Helgaas 
Acked-by: Stanimir Varbanov 
Cc: sta...@vger.kernel.org  # v4.19+
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/pci/controller/dwc/pcie-qcom.c |4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

--- a/drivers/pci/controller/dwc/pcie-qcom.c
+++ b/drivers/pci/controller/dwc/pcie-qcom.c
@@ -398,7 +398,9 @@ static int qcom_pcie_init_2_1_0(struct q
 
/* enable external reference clock */
val = readl(pcie->parf + PCIE20_PARF_PHY_REFCLK);
-   val &= ~PHY_REFCLK_USE_PAD;
+   /* USE_PAD is required only for ipq806x */
+   if (!of_device_is_compatible(node, "qcom,pcie-apq8064"))
+   val &= ~PHY_REFCLK_USE_PAD;
val |= PHY_REFCLK_SSP_EN;
writel(val, pcie->parf + PCIE20_PARF_PHY_REFCLK);
 




[PATCH 5.11 226/775] media: atomisp: Fix a buffer overflow in debug code

2021-03-01 Thread Greg Kroah-Hartman
From: Dan Carpenter 

[ Upstream commit 625993166b551d633917ca35d4afb7b46d7451b4 ]

The "pad" variable is a user controlled string and we haven't properly
clamped it at this point so the debug code could print from beyond the
of the array.

Fixes: a49d25364dfb ("staging/atomisp: Add support for the Intel IPU v2")
Signed-off-by: Dan Carpenter 
Signed-off-by: Hans Verkuil 
Signed-off-by: Mauro Carvalho Chehab 
Signed-off-by: Sasha Levin 
---
 .../media/atomisp/pci/atomisp_subdev.c| 24 ---
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/media/atomisp/pci/atomisp_subdev.c 
b/drivers/staging/media/atomisp/pci/atomisp_subdev.c
index b666cb23e5ca1..2ef5f44e4b6b6 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_subdev.c
+++ b/drivers/staging/media/atomisp/pci/atomisp_subdev.c
@@ -349,12 +349,20 @@ static int isp_subdev_get_selection(struct v4l2_subdev 
*sd,
return 0;
 }
 
-static char *atomisp_pad_str[] = { "ATOMISP_SUBDEV_PAD_SINK",
-  "ATOMISP_SUBDEV_PAD_SOURCE_CAPTURE",
-  "ATOMISP_SUBDEV_PAD_SOURCE_VF",
-  "ATOMISP_SUBDEV_PAD_SOURCE_PREVIEW",
-  "ATOMISP_SUBDEV_PAD_SOURCE_VIDEO"
-};
+static const char *atomisp_pad_str(unsigned int pad)
+{
+   static const char *const pad_str[] = {
+   "ATOMISP_SUBDEV_PAD_SINK",
+   "ATOMISP_SUBDEV_PAD_SOURCE_CAPTURE",
+   "ATOMISP_SUBDEV_PAD_SOURCE_VF",
+   "ATOMISP_SUBDEV_PAD_SOURCE_PREVIEW",
+   "ATOMISP_SUBDEV_PAD_SOURCE_VIDEO",
+   };
+
+   if (pad >= ARRAY_SIZE(pad_str))
+   return "ATOMISP_INVALID_PAD";
+   return pad_str[pad];
+}
 
 int atomisp_subdev_set_selection(struct v4l2_subdev *sd,
 struct v4l2_subdev_pad_config *cfg,
@@ -378,7 +386,7 @@ int atomisp_subdev_set_selection(struct v4l2_subdev *sd,
 
dev_dbg(isp->dev,
"sel: pad %s tgt %s l %d t %d w %d h %d which %s f 0x%8.8x\n",
-   atomisp_pad_str[pad], target == V4L2_SEL_TGT_CROP
+   atomisp_pad_str(pad), target == V4L2_SEL_TGT_CROP
? "V4L2_SEL_TGT_CROP" : "V4L2_SEL_TGT_COMPOSE",
r->left, r->top, r->width, r->height,
which == V4L2_SUBDEV_FORMAT_TRY ? "V4L2_SUBDEV_FORMAT_TRY"
@@ -612,7 +620,7 @@ void atomisp_subdev_set_ffmt(struct v4l2_subdev *sd,
enum atomisp_input_stream_id stream_id;
 
dev_dbg(isp->dev, "ffmt: pad %s w %d h %d code 0x%8.8x which %s\n",
-   atomisp_pad_str[pad], ffmt->width, ffmt->height, ffmt->code,
+   atomisp_pad_str(pad), ffmt->width, ffmt->height, ffmt->code,
which == V4L2_SUBDEV_FORMAT_TRY ? "V4L2_SUBDEV_FORMAT_TRY"
: "V4L2_SUBDEV_FORMAT_ACTIVE");
 
-- 
2.27.0





[PATCH 5.10 655/663] drm/i915: Reject 446-480MHz HDMI clock on GLK

2021-03-01 Thread Greg Kroah-Hartman
From: Ville Syrjälä 

commit 7a6c6243b44a439bda4bf099032be35ebcf53406 upstream.

The BXT/GLK DPLL can't generate certain frequencies. We already
reject the 233-240MHz range on both. But on GLK the DPLL max
frequency was bumped from 300MHz to 594MHz, so now we get to
also worry about the 446-480MHz range (double the original
problem range). Reject any frequency within the higher
problematic range as well.

Cc: sta...@vger.kernel.org
Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/3000
Signed-off-by: Ville Syrjälä 
Link: 
https://patchwork.freedesktop.org/patch/msgid/20210203093044.30532-1-ville.syrj...@linux.intel.com
Reviewed-by: Mika Kahola 
(cherry picked from commit 41751b3e5c1ac656a86f8d45a8891115281b729e)
Signed-off-by: Rodrigo Vivi 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/gpu/drm/i915/display/intel_hdmi.c |6 +-
 1 file changed, 5 insertions(+), 1 deletion(-)

--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -2216,7 +2216,11 @@ hdmi_port_clock_valid(struct intel_hdmi
  has_hdmi_sink))
return MODE_CLOCK_HIGH;
 
-   /* BXT DPLL can't generate 223-240 MHz */
+   /* GLK DPLL can't generate 446-480 MHz */
+   if (IS_GEMINILAKE(dev_priv) && clock > 44 && clock < 48)
+   return MODE_CLOCK_RANGE;
+
+   /* BXT/GLK DPLL can't generate 223-240 MHz */
if (IS_GEN9_LP(dev_priv) && clock > 22 && clock < 24)
return MODE_CLOCK_RANGE;
 




[PATCH 5.10 566/663] media: smipcie: fix interrupt handling and IR timeout

2021-03-01 Thread Greg Kroah-Hartman
From: Sean Young 

commit 6532923237b427ed30cc7b4486f6f1ccdee3c647 upstream.

After the first IR message, interrupts are no longer received. In addition,
the code generates a timeout IR message of 10ms but sets the timeout value
to 100ms, so no timeout was ever generated.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=204317

Fixes: a49a7a4635de ("media: smipcie: add universal ir capability")
Tested-by: Laz Lev 
Cc: sta...@vger.kernel.org # v5.1+
Signed-off-by: Sean Young 
Signed-off-by: Mauro Carvalho Chehab 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/media/pci/smipcie/smipcie-ir.c |   48 ++---
 1 file changed, 27 insertions(+), 21 deletions(-)

--- a/drivers/media/pci/smipcie/smipcie-ir.c
+++ b/drivers/media/pci/smipcie/smipcie-ir.c
@@ -60,38 +60,44 @@ static void smi_ir_decode(struct smi_rc
 {
struct smi_dev *dev = ir->dev;
struct rc_dev *rc_dev = ir->rc_dev;
-   u32 dwIRControl, dwIRData;
-   u8 index, ucIRCount, readLoop;
+   u32 control, data;
+   u8 index, ir_count, read_loop;
 
-   dwIRControl = smi_read(IR_Init_Reg);
+   control = smi_read(IR_Init_Reg);
 
-   if (dwIRControl & rbIRVld) {
-   ucIRCount = (u8) smi_read(IR_Data_Cnt);
+   dev_dbg(_dev->dev, "ircontrol: 0x%08x\n", control);
 
-   readLoop = ucIRCount/4;
-   if (ucIRCount % 4)
-   readLoop += 1;
-   for (index = 0; index < readLoop; index++) {
-   dwIRData = smi_read(IR_DATA_BUFFER_BASE + (index * 4));
-
-   ir->irData[index*4 + 0] = (u8)(dwIRData);
-   ir->irData[index*4 + 1] = (u8)(dwIRData >> 8);
-   ir->irData[index*4 + 2] = (u8)(dwIRData >> 16);
-   ir->irData[index*4 + 3] = (u8)(dwIRData >> 24);
+   if (control & rbIRVld) {
+   ir_count = (u8)smi_read(IR_Data_Cnt);
+
+   dev_dbg(_dev->dev, "ircount %d\n", ir_count);
+
+   read_loop = ir_count / 4;
+   if (ir_count % 4)
+   read_loop += 1;
+   for (index = 0; index < read_loop; index++) {
+   data = smi_read(IR_DATA_BUFFER_BASE + (index * 4));
+   dev_dbg(_dev->dev, "IRData 0x%08x\n", data);
+
+   ir->irData[index * 4 + 0] = (u8)(data);
+   ir->irData[index * 4 + 1] = (u8)(data >> 8);
+   ir->irData[index * 4 + 2] = (u8)(data >> 16);
+   ir->irData[index * 4 + 3] = (u8)(data >> 24);
}
-   smi_raw_process(rc_dev, ir->irData, ucIRCount);
-   smi_set(IR_Init_Reg, rbIRVld);
+   smi_raw_process(rc_dev, ir->irData, ir_count);
}
 
-   if (dwIRControl & rbIRhighidle) {
+   if (control & rbIRhighidle) {
struct ir_raw_event rawir = {};
 
+   dev_dbg(_dev->dev, "high idle\n");
+
rawir.pulse = 0;
rawir.duration = SMI_SAMPLE_PERIOD * SMI_SAMPLE_IDLEMIN;
ir_raw_event_store_with_filter(rc_dev, );
-   smi_set(IR_Init_Reg, rbIRhighidle);
}
 
+   smi_set(IR_Init_Reg, rbIRVld);
ir_raw_event_handle(rc_dev);
 }
 
@@ -150,7 +156,7 @@ int smi_ir_init(struct smi_dev *dev)
rc_dev->dev.parent = >pci_dev->dev;
 
rc_dev->map_name = dev->info->rc_map;
-   rc_dev->timeout = MS_TO_US(100);
+   rc_dev->timeout = SMI_SAMPLE_PERIOD * SMI_SAMPLE_IDLEMIN;
rc_dev->rx_resolution = SMI_SAMPLE_PERIOD;
 
ir->rc_dev = rc_dev;
@@ -173,7 +179,7 @@ void smi_ir_exit(struct smi_dev *dev)
struct smi_rc *ir = >ir;
struct rc_dev *rc_dev = ir->rc_dev;
 
-   smi_ir_stop(ir);
rc_unregister_device(rc_dev);
+   smi_ir_stop(ir);
ir->rc_dev = NULL;
 }




[PATCH 5.10 483/663] cpufreq: ACPI: Set cpuinfo.max_freq directly if max boost is known

2021-03-01 Thread Greg Kroah-Hartman
From: Rafael J. Wysocki 

commit 538b0188da4653b9f4511a114f014354fb6fb7a5 upstream.

Commit 3c55e94c0ade ("cpufreq: ACPI: Extend frequency tables to cover
boost frequencies") attempted to address a performance issue involving
acpi-cpufreq, the schedutil governor and scale-invariance on x86 by
extending the frequency tables created by acpi-cpufreq to cover the
entire range of "turbo" (or "boost") frequencies, but that caused
frequencies reported via /proc/cpuinfo and the scaling_cur_freq
attribute in sysfs to change which may confuse users and monitoring
tools.

For this reason, revert the part of commit 3c55e94c0ade adding the
extra entry to the frequency table and use the observation that
in principle cpuinfo.max_freq need not be equal to the maximum
frequency listed in the frequency table for the given policy.

Namely, modify cpufreq_frequency_table_cpuinfo() to allow cpufreq
drivers to set their own cpuinfo.max_freq above that frequency and
change  acpi-cpufreq to set cpuinfo.max_freq to the maximum boost
frequency found via CPPC.

This should be sufficient to let all of the cpufreq subsystem know
the real maximum frequency of the CPU without changing frequency
reporting.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=211305
Fixes: 3c55e94c0ade ("cpufreq: ACPI: Extend frequency tables to cover boost 
frequencies")
Reported-by: Matt McDonald 
Tested-by: Matt McDonald 
Signed-off-by: Rafael J. Wysocki 
Tested-by: Giovanni Gherdovich 
Tested-by: Michael Larabel 
Cc: 5.11+  # 5.11+
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/cpufreq/acpi-cpufreq.c |   62 ++---
 drivers/cpufreq/freq_table.c   |8 -
 2 files changed, 23 insertions(+), 47 deletions(-)

--- a/drivers/cpufreq/acpi-cpufreq.c
+++ b/drivers/cpufreq/acpi-cpufreq.c
@@ -54,7 +54,6 @@ struct acpi_cpufreq_data {
unsigned int resume;
unsigned int cpu_feature;
unsigned int acpi_perf_cpu;
-   unsigned int first_perf_state;
cpumask_var_t freqdomain_cpus;
void (*cpu_freq_write)(struct acpi_pct_register *reg, u32 val);
u32 (*cpu_freq_read)(struct acpi_pct_register *reg);
@@ -223,10 +222,10 @@ static unsigned extract_msr(struct cpufr
 
perf = to_perf_data(data);
 
-   cpufreq_for_each_entry(pos, policy->freq_table + data->first_perf_state)
+   cpufreq_for_each_entry(pos, policy->freq_table)
if (msr == perf->states[pos->driver_data].status)
return pos->frequency;
-   return policy->freq_table[data->first_perf_state].frequency;
+   return policy->freq_table[0].frequency;
 }
 
 static unsigned extract_freq(struct cpufreq_policy *policy, u32 val)
@@ -365,7 +364,6 @@ static unsigned int get_cur_freq_on_cpu(
struct cpufreq_policy *policy;
unsigned int freq;
unsigned int cached_freq;
-   unsigned int state;
 
pr_debug("%s (%d)\n", __func__, cpu);
 
@@ -377,11 +375,7 @@ static unsigned int get_cur_freq_on_cpu(
if (unlikely(!data || !policy->freq_table))
return 0;
 
-   state = to_perf_data(data)->state;
-   if (state < data->first_perf_state)
-   state = data->first_perf_state;
-
-   cached_freq = policy->freq_table[state].frequency;
+   cached_freq = policy->freq_table[to_perf_data(data)->state].frequency;
freq = extract_freq(policy, get_cur_val(cpumask_of(cpu), data));
if (freq != cached_freq) {
/*
@@ -680,7 +674,6 @@ static int acpi_cpufreq_cpu_init(struct
struct cpuinfo_x86 *c = _data(cpu);
unsigned int valid_states = 0;
unsigned int result = 0;
-   unsigned int state_count;
u64 max_boost_ratio;
unsigned int i;
 #ifdef CONFIG_SMP
@@ -795,28 +788,8 @@ static int acpi_cpufreq_cpu_init(struct
goto err_unreg;
}
 
-   state_count = perf->state_count + 1;
-
-   max_boost_ratio = get_max_boost_ratio(cpu);
-   if (max_boost_ratio) {
-   /*
-* Make a room for one more entry to represent the highest
-* available "boost" frequency.
-*/
-   state_count++;
-   valid_states++;
-   data->first_perf_state = valid_states;
-   } else {
-   /*
-* If the maximum "boost" frequency is unknown, ask the arch
-* scale-invariance code to use the "nominal" performance for
-* CPU utilization scaling so as to prevent the schedutil
-* governor from selecting inadequate CPU frequencies.
-*/
-   arch_set_max_freq_ratio(true);
-   }
-
-   freq_table = kcalloc(state_count, sizeof(*freq_table), GFP_KERNEL);
+   freq_table = kcalloc(perf->state_count + 1, sizeof(*freq_table),
+GFP_KERNEL);
if (!freq_table) {
result = -ENOMEM;
goto err_unreg;
@@ -851,27 +824,25 

[PATCH 4.19 030/247] ARM: dts: exynos: correct PMIC interrupt trigger level on Spring

2021-03-01 Thread Greg Kroah-Hartman
From: Krzysztof Kozlowski 

[ Upstream commit 77e6a5467cb8657cf8b5e610a30a4c502085e4f9 ]

The Samsung PMIC datasheets describe the interrupt line as active low
with a requirement of acknowledge from the CPU.  Without specifying the
interrupt type in Devicetree, kernel might apply some fixed
configuration, not necessarily working for this hardware.

Fixes: 53dd4138bb0a ("ARM: dts: Add exynos5250-spring device tree")
Signed-off-by: Krzysztof Kozlowski 
Link: https://lore.kernel.org/r/20201210212903.216728-4-k...@kernel.org
Signed-off-by: Sasha Levin 
---
 arch/arm/boot/dts/exynos5250-spring.dts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/boot/dts/exynos5250-spring.dts 
b/arch/arm/boot/dts/exynos5250-spring.dts
index 3d501926c2278..2355c53164840 100644
--- a/arch/arm/boot/dts/exynos5250-spring.dts
+++ b/arch/arm/boot/dts/exynos5250-spring.dts
@@ -108,7 +108,7 @@
compatible = "samsung,s5m8767-pmic";
reg = <0x66>;
interrupt-parent = <>;
-   interrupts = <2 IRQ_TYPE_NONE>;
+   interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
pinctrl-names = "default";
pinctrl-0 = <_irq _dvs _ds>;
wakeup-source;
-- 
2.27.0





[PATCH 5.11 026/775] Bluetooth: Fix initializing response id after clearing struct

2021-03-01 Thread Greg Kroah-Hartman
From: Christopher William Snowhill 

[ Upstream commit a5687c644015a097304a2e47476c0ecab2065734 ]

Looks like this was missed when patching the source to clear the structures
throughout, causing this one instance to clear the struct after the response
id is assigned.

Fixes: eddb7732119d ("Bluetooth: A2MP: Fix not initializing all members")
Signed-off-by: Christopher William Snowhill 
Signed-off-by: Marcel Holtmann 
Signed-off-by: Sasha Levin 
---
 net/bluetooth/a2mp.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/bluetooth/a2mp.c b/net/bluetooth/a2mp.c
index da7fd7c8c2dc0..cc26e4c047ad0 100644
--- a/net/bluetooth/a2mp.c
+++ b/net/bluetooth/a2mp.c
@@ -381,9 +381,9 @@ static int a2mp_getampassoc_req(struct amp_mgr *mgr, struct 
sk_buff *skb,
hdev = hci_dev_get(req->id);
if (!hdev || hdev->amp_type == AMP_TYPE_BREDR || tmp) {
struct a2mp_amp_assoc_rsp rsp;
-   rsp.id = req->id;
 
memset(, 0, sizeof(rsp));
+   rsp.id = req->id;
 
if (tmp) {
rsp.status = A2MP_STATUS_COLLISION_OCCURED;
-- 
2.27.0





[PATCH 5.10 639/663] gfs2: Lock imbalance on error path in gfs2_recover_one

2021-03-01 Thread Greg Kroah-Hartman
From: Andreas Gruenbacher 

commit 834ec3e1ee65029029225a86c12337a6cd385af7 upstream.

In gfs2_recover_one, fix a sd_log_flush_lock imbalance when a recovery
pass fails.

Fixes: c9ebc4b73799 ("gfs2: allow journal replay to hold sd_log_flush_lock")
Cc: sta...@vger.kernel.org # v5.7+
Signed-off-by: Andreas Gruenbacher 
Signed-off-by: Greg Kroah-Hartman 
---
 fs/gfs2/recovery.c |4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

--- a/fs/gfs2/recovery.c
+++ b/fs/gfs2/recovery.c
@@ -514,8 +514,10 @@ void gfs2_recover_func(struct work_struc
error = foreach_descriptor(jd, head.lh_tail,
   head.lh_blkno, pass);
lops_after_scan(jd, error, pass);
-   if (error)
+   if (error) {
+   up_read(>sd_log_flush_lock);
goto fail_gunlock_thaw;
+   }
}
 
recover_local_statfs(jd, );




[PATCH 5.11 283/775] crypto: ecdh_helper - Ensure len >= secret.len in decode_key()

2021-03-01 Thread Greg Kroah-Hartman
From: Daniele Alessandrelli 

[ Upstream commit a53ab94eb6850c3657392e2d2ce9b38c387a2633 ]

The length ('len' parameter) passed to crypto_ecdh_decode_key() is never
checked against the length encoded in the passed buffer ('buf'
parameter). This could lead to an out-of-bounds access when the passed
length is less than the encoded length.

Add a check to prevent that.

Fixes: 3c4b23901a0c7 ("crypto: ecdh - Add ECDH software support")
Signed-off-by: Daniele Alessandrelli 
Signed-off-by: Herbert Xu 
Signed-off-by: Sasha Levin 
---
 crypto/ecdh_helper.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/crypto/ecdh_helper.c b/crypto/ecdh_helper.c
index 66fcb2ea81544..fca63b559f655 100644
--- a/crypto/ecdh_helper.c
+++ b/crypto/ecdh_helper.c
@@ -67,6 +67,9 @@ int crypto_ecdh_decode_key(const char *buf, unsigned int len,
if (secret.type != CRYPTO_KPP_SECRET_TYPE_ECDH)
return -EINVAL;
 
+   if (unlikely(len < secret.len))
+   return -EINVAL;
+
ptr = ecdh_unpack_data(>curve_id, ptr, 
sizeof(params->curve_id));
ptr = ecdh_unpack_data(>key_size, ptr, 
sizeof(params->key_size));
if (secret.len != crypto_ecdh_key_len(params))
-- 
2.27.0





[PATCH 5.10 549/663] soc: samsung: exynos-asv: dont defer early on not-supported SoCs

2021-03-01 Thread Greg Kroah-Hartman
From: Marek Szyprowski 

commit 0458b88267c637fb872b0359da9ff0b243081e9e upstream.

Check if the SoC is really supported before gathering the needed
resources. This fixes endless deferred probe on some SoCs other than
Exynos5422 (like Exynos5410).

Fixes: 5ea428595cc5 ("soc: samsung: Add Exynos Adaptive Supply Voltage driver")
Cc: 
Signed-off-by: Marek Szyprowski 
Reviewed-by: Pankaj Dubey 
Link: https://lore.kernel.org/r/20201207190517.262051-2-k...@kernel.org
Signed-off-by: Krzysztof Kozlowski 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/soc/samsung/exynos-asv.c |   10 +-
 1 file changed, 5 insertions(+), 5 deletions(-)

--- a/drivers/soc/samsung/exynos-asv.c
+++ b/drivers/soc/samsung/exynos-asv.c
@@ -119,11 +119,6 @@ static int exynos_asv_probe(struct platf
u32 product_id = 0;
int ret, i;
 
-   cpu_dev = get_cpu_device(0);
-   ret = dev_pm_opp_get_opp_count(cpu_dev);
-   if (ret < 0)
-   return -EPROBE_DEFER;
-
asv = devm_kzalloc(>dev, sizeof(*asv), GFP_KERNEL);
if (!asv)
return -ENOMEM;
@@ -144,6 +139,11 @@ static int exynos_asv_probe(struct platf
return -ENODEV;
}
 
+   cpu_dev = get_cpu_device(0);
+   ret = dev_pm_opp_get_opp_count(cpu_dev);
+   if (ret < 0)
+   return -EPROBE_DEFER;
+
ret = of_property_read_u32(pdev->dev.of_node, "samsung,asv-bin",
   >of_bin);
if (ret < 0)




[PATCH 5.10 208/663] ASoC: cpcap: fix microphone timeslot mask

2021-03-01 Thread Greg Kroah-Hartman
From: Sebastian Reichel 

[ Upstream commit de5bfae2fd962a9da99f56382305ec7966a604b9 ]

The correct mask is 0x1f8 (Bit 3-8), but due to missing BIT() 0xf (Bit
0-3) was set instead. This means setting of CPCAP_BIT_MIC1_RX_TIMESLOT0
(Bit 3) still worked (part of both masks). On the other hand the code
does not properly clear the other MIC timeslot bits. I think this
is not a problem, since they are probably initialized to 0 and not
touched by the driver anywhere else. But the mask also contains some
wrong bits, that will be cleared. Bit 0 (CPCAP_BIT_SMB_CDC) should be
safe, since the driver enforces it to be 0 anyways.

Bit 1-2 are CPCAP_BIT_FS_INV and CPCAP_BIT_CLK_INV. This means enabling
audio recording forces the codec into SND_SOC_DAIFMT_NB_NF mode, which
is obviously bad.

The bug probably remained undetected, because there are not many use
cases for routing microphone to the CPU on platforms using cpcap and
user base is small. I do remember having some issues with bad sound
quality when testing voice recording back when I wrote the driver.
It probably was this bug.

Fixes: f6cdf2d3445d ("ASoC: cpcap: new codec")
Reported-by: Dan Carpenter 
Signed-off-by: Sebastian Reichel 
Reviewed-by: Tony Lindgren 
Link: https://lore.kernel.org/r/20210123172945.3958622-1-...@kernel.org
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/codecs/cpcap.c | 12 ++--
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/sound/soc/codecs/cpcap.c b/sound/soc/codecs/cpcap.c
index f046987ee4cdb..c0425e3707d9c 100644
--- a/sound/soc/codecs/cpcap.c
+++ b/sound/soc/codecs/cpcap.c
@@ -1264,12 +1264,12 @@ static int cpcap_voice_hw_params(struct 
snd_pcm_substream *substream,
 
if (direction == SNDRV_PCM_STREAM_CAPTURE) {
mask = 0x;
-   mask |= CPCAP_BIT_MIC1_RX_TIMESLOT0;
-   mask |= CPCAP_BIT_MIC1_RX_TIMESLOT1;
-   mask |= CPCAP_BIT_MIC1_RX_TIMESLOT2;
-   mask |= CPCAP_BIT_MIC2_TIMESLOT0;
-   mask |= CPCAP_BIT_MIC2_TIMESLOT1;
-   mask |= CPCAP_BIT_MIC2_TIMESLOT2;
+   mask |= BIT(CPCAP_BIT_MIC1_RX_TIMESLOT0);
+   mask |= BIT(CPCAP_BIT_MIC1_RX_TIMESLOT1);
+   mask |= BIT(CPCAP_BIT_MIC1_RX_TIMESLOT2);
+   mask |= BIT(CPCAP_BIT_MIC2_TIMESLOT0);
+   mask |= BIT(CPCAP_BIT_MIC2_TIMESLOT1);
+   mask |= BIT(CPCAP_BIT_MIC2_TIMESLOT2);
val = 0x;
if (channels >= 2)
val = BIT(CPCAP_BIT_MIC1_RX_TIMESLOT0);
-- 
2.27.0





[PATCH 5.10 097/663] ibmvnic: Set to CLOSED state even on error

2021-03-01 Thread Greg Kroah-Hartman
From: Sukadev Bhattiprolu 

[ Upstream commit d4083d3c00f60a09ad82e3bf17ff57fec69c8aa6 ]

If set_link_state() fails for any reason, we still cleanup the adapter
state and cannot recover from a partial close anyway. So set the adapter
to CLOSED state. That way if a new soft/hard reset is processed, the
adapter will remain in the CLOSED state until the next ibmvnic_open().

Fixes: 01d9bd792d16 ("ibmvnic: Reorganize device close")
Signed-off-by: Sukadev Bhattiprolu 
Reported-by: Abdul Haleem 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
---
 drivers/net/ethernet/ibm/ibmvnic.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/ibm/ibmvnic.c 
b/drivers/net/ethernet/ibm/ibmvnic.c
index ee16e0e4fa5fc..d789c3cb7f87b 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -1329,10 +1329,8 @@ static int __ibmvnic_close(struct net_device *netdev)
 
adapter->state = VNIC_CLOSING;
rc = set_link_state(adapter, IBMVNIC_LOGICAL_LNK_DN);
-   if (rc)
-   return rc;
adapter->state = VNIC_CLOSED;
-   return 0;
+   return rc;
 }
 
 static int ibmvnic_close(struct net_device *netdev)
-- 
2.27.0





[PATCH 5.10 200/663] perf/arm-cmn: Fix PMU instance naming

2021-03-01 Thread Greg Kroah-Hartman
From: Robin Murphy 

[ Upstream commit 79d7c3dca99fa96033695ddf5d495b775a3a137b ]

Although it's neat to avoid the suffix for the typical case of a
single PMU, it means systems with multiple CMN instances end up with
inconsistent naming. I think it also breaks perf tool's "uncore alias"
logic if the common instance prefix is also the full name of one.

Avoid any surprises by not trying to be clever and simply numbering
every instance, even when it might technically prove redundant.

Fixes: 0ba64770a2f2 ("perf: Add Arm CMN-600 PMU driver")
Signed-off-by: Robin Murphy 
Link: 
https://lore.kernel.org/r/649a2281233f193d59240b13ed91b57337c77b32.1611839564.git.robin.mur...@arm.com
Signed-off-by: Will Deacon 
Signed-off-by: Sasha Levin 
---
 Documentation/admin-guide/perf/arm-cmn.rst |  2 +-
 drivers/perf/arm-cmn.c | 13 -
 2 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/Documentation/admin-guide/perf/arm-cmn.rst 
b/Documentation/admin-guide/perf/arm-cmn.rst
index 0e48093460140..796e25b7027b2 100644
--- a/Documentation/admin-guide/perf/arm-cmn.rst
+++ b/Documentation/admin-guide/perf/arm-cmn.rst
@@ -17,7 +17,7 @@ PMU events
 --
 
 The PMU driver registers a single PMU device for the whole interconnect,
-see /sys/bus/event_source/devices/arm_cmn. Multi-chip systems may link
+see /sys/bus/event_source/devices/arm_cmn_0. Multi-chip systems may link
 more than one CMN together via external CCIX links - in this situation,
 each mesh counts its own events entirely independently, and additional
 PMU devices will be named arm_cmn_{1..n}.
diff --git a/drivers/perf/arm-cmn.c b/drivers/perf/arm-cmn.c
index a76ff594f3ca4..f3071b5ddaaef 100644
--- a/drivers/perf/arm-cmn.c
+++ b/drivers/perf/arm-cmn.c
@@ -1502,7 +1502,7 @@ static int arm_cmn_probe(struct platform_device *pdev)
struct arm_cmn *cmn;
const char *name;
static atomic_t id;
-   int err, rootnode, this_id;
+   int err, rootnode;
 
cmn = devm_kzalloc(>dev, sizeof(*cmn), GFP_KERNEL);
if (!cmn)
@@ -1549,14 +1549,9 @@ static int arm_cmn_probe(struct platform_device *pdev)
.cancel_txn = arm_cmn_end_txn,
};
 
-   this_id = atomic_fetch_inc();
-   if (this_id == 0) {
-   name = "arm_cmn";
-   } else {
-   name = devm_kasprintf(cmn->dev, GFP_KERNEL, "arm_cmn_%d", 
this_id);
-   if (!name)
-   return -ENOMEM;
-   }
+   name = devm_kasprintf(cmn->dev, GFP_KERNEL, "arm_cmn_%d", 
atomic_fetch_inc());
+   if (!name)
+   return -ENOMEM;
 
err = cpuhp_state_add_instance(arm_cmn_hp_state, >cpuhp_node);
if (err)
-- 
2.27.0





[PATCH 5.11 121/775] bpf: Fix bpf_fib_lookup helper MTU check for SKB ctx

2021-03-01 Thread Greg Kroah-Hartman
From: Jesper Dangaard Brouer 

[ Upstream commit 2c0a10af688c02adcf127aad29e923e0056c6b69 ]

BPF end-user on Cilium slack-channel (Carlo Carraro) wants to use
bpf_fib_lookup for doing MTU-check, but *prior* to extending packet size,
by adjusting fib_params 'tot_len' with the packet length plus the expected
encap size. (Just like the bpf_check_mtu helper supports). He discovered
that for SKB ctx the param->tot_len was not used, instead skb->len was used
(via MTU check in is_skb_forwardable() that checks against netdev MTU).

Fix this by using fib_params 'tot_len' for MTU check. If not provided (e.g.
zero) then keep existing TC behaviour intact. Notice that 'tot_len' for MTU
check is done like XDP code-path, which checks against FIB-dst MTU.

V16:
- Revert V13 optimization, 2nd lookup is against egress/resulting netdev

V13:
- Only do ifindex lookup one time, calling dev_get_by_index_rcu().

V10:
- Use same method as XDP for 'tot_len' MTU check

Fixes: 4c79579b44b1 ("bpf: Change bpf_fib_lookup to return lookup status")
Reported-by: Carlo Carraro 
Signed-off-by: Jesper Dangaard Brouer 
Signed-off-by: Daniel Borkmann 
Link: 
https://lore.kernel.org/bpf/161287789444.790810.15247494756551413508.stgit@firesoul
Signed-off-by: Sasha Levin 
---
 net/core/filter.c | 13 ++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/net/core/filter.c b/net/core/filter.c
index 255aeee724026..ee665720a41a0 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -5552,6 +5552,7 @@ BPF_CALL_4(bpf_skb_fib_lookup, struct sk_buff *, skb,
 {
struct net *net = dev_net(skb->dev);
int rc = -EAFNOSUPPORT;
+   bool check_mtu = false;
 
if (plen < sizeof(*params))
return -EINVAL;
@@ -5559,22 +5560,28 @@ BPF_CALL_4(bpf_skb_fib_lookup, struct sk_buff *, skb,
if (flags & ~(BPF_FIB_LOOKUP_DIRECT | BPF_FIB_LOOKUP_OUTPUT))
return -EINVAL;
 
+   if (params->tot_len)
+   check_mtu = true;
+
switch (params->family) {
 #if IS_ENABLED(CONFIG_INET)
case AF_INET:
-   rc = bpf_ipv4_fib_lookup(net, params, flags, false);
+   rc = bpf_ipv4_fib_lookup(net, params, flags, check_mtu);
break;
 #endif
 #if IS_ENABLED(CONFIG_IPV6)
case AF_INET6:
-   rc = bpf_ipv6_fib_lookup(net, params, flags, false);
+   rc = bpf_ipv6_fib_lookup(net, params, flags, check_mtu);
break;
 #endif
}
 
-   if (!rc) {
+   if (rc == BPF_FIB_LKUP_RET_SUCCESS && !check_mtu) {
struct net_device *dev;
 
+   /* When tot_len isn't provided by user, check skb
+* against MTU of FIB lookup resulting net_device
+*/
dev = dev_get_by_index_rcu(net, params->ifindex);
if (!is_skb_forwardable(dev, skb))
rc = BPF_FIB_LKUP_RET_FRAG_NEEDED;
-- 
2.27.0





[PATCH 5.10 246/663] ima: Free IMA measurement buffer on error

2021-03-01 Thread Greg Kroah-Hartman
From: Lakshmi Ramasubramanian 

[ Upstream commit 6d14c6517885fa68524238787420511b87d671df ]

IMA allocates kernel virtual memory to carry forward the measurement
list, from the current kernel to the next kernel on kexec system call,
in ima_add_kexec_buffer() function.  In error code paths this memory
is not freed resulting in memory leak.

Free the memory allocated for the IMA measurement list in
the error code paths in ima_add_kexec_buffer() function.

Signed-off-by: Lakshmi Ramasubramanian 
Suggested-by: Tyler Hicks 
Fixes: 7b8589cc29e7 ("ima: on soft reboot, save the measurement list")
Signed-off-by: Mimi Zohar 
Signed-off-by: Sasha Levin 
---
 security/integrity/ima/ima_kexec.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/security/integrity/ima/ima_kexec.c 
b/security/integrity/ima/ima_kexec.c
index 121de3e04af23..206ddcaa5c67a 100644
--- a/security/integrity/ima/ima_kexec.c
+++ b/security/integrity/ima/ima_kexec.c
@@ -119,6 +119,7 @@ void ima_add_kexec_buffer(struct kimage *image)
ret = kexec_add_buffer();
if (ret) {
pr_err("Error passing over kexec measurement buffer.\n");
+   vfree(kexec_buffer);
return;
}
 
-- 
2.27.0





[PATCH 5.10 442/663] octeontx2-af: Fix an off by one in rvu_dbg_qsize_write()

2021-03-01 Thread Greg Kroah-Hartman
From: Dan Carpenter 

[ Upstream commit 3a2eb515d1367c0f667b76089a6e727279c688b8 ]

This code does not allocate enough memory for the NUL terminator so it
ends up putting it one character beyond the end of the buffer.

Fixes: 8756828a8148 ("octeontx2-af: Add NPA aura and pool contexts to debugfs")
Signed-off-by: Dan Carpenter 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
---
 drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c 
b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c
index 77adad4adb1bc..809f50ab0432e 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c
@@ -332,7 +332,7 @@ static ssize_t rvu_dbg_qsize_write(struct file *filp,
u16 pcifunc;
int ret, lf;
 
-   cmd_buf = memdup_user(buffer, count);
+   cmd_buf = memdup_user(buffer, count + 1);
if (IS_ERR(cmd_buf))
return -ENOMEM;
 
-- 
2.27.0





Re: [GIT PULL] Kmap conversions for 5.12, take 2

2021-03-01 Thread Linus Torvalds
On Mon, Mar 1, 2021 at 8:52 AM David Sterba  wrote:
>
> Ira Weiny (6):
>   mm/highmem: Lift memcpy_[to|from]_page to core
>   mm/highmem: Convert memcpy_[to|from]_page() to kmap_local_page()
>   mm/highmem: Introduce memcpy_page(), memmove_page(), and memset_page()
>   mm/highmem: Add VM_BUG_ON() to mem*_page() calls
>   btrfs: use memcpy_[to|from]_page() and kmap_local_page()
>   btrfs: use copy_highpage() instead of 2 kmaps()

So I've pulled this now, although I still end up wondering about one case there:

-   char *map;
-
-   map = kmap(page);
-   memcpy(map, data_start, datal);
+   memcpy_to_page(page, 0, data_start, datal);
flush_dcache_page(page);
-   kunmap(page);

where that flush_dcache_page() is now done outside the kmap of the page.

If you have an architecture that does both (a) highmem and (b) virtual
caches, it means that the "memcpy_to_page()" gets done using one
virtual address, and the flush_dcache_page() could in theory be done
using another virtual address.

I do not believe this is a problem in practice (flush_dcache_page()
might have to kmap it again, but presumably get the same virtual
address, although who the heck knows). And I personally don't know
that we should even care any more - I've been arguing that we should
start deprecating highmem entirely, and while there are 32-bit arm
chips that still use them, I hope to $DEITY that those ARM chips
aren't the garbage virtual cached ones.

Furthermore, I think that kunmap() always guaranteed that the cache
was flushed anyway before unmapping, because anything else would have
been too broken for words anyway. So I think _all_ of those
flush_dcache_page() cases were just largely bogus.

I can't be bothered to really look into it, because at some point,
crap hardware is just too crap to even care about. Pure virtual caches
are where I personally say "I don't care". But I'm mentioning it
because there might be some masochistic person out there that finds
this issue interesting, and wants to do some self-flagellation to dive
into this all and make sure it's ok.

   Linus


[PATCH 5.11 257/775] KVM: nSVM: Dont strip hosts C-bit from guests CR3 when reading PDPTRs

2021-03-01 Thread Greg Kroah-Hartman
From: Sean Christopherson 

[ Upstream commit 2732be90235347a3be4babdc9f88a1ea93970b0b ]

Don't clear the SME C-bit when reading a guest PDPTR, as the GPA (CR3) is
in the guest domain.

Barring a bizarre paravirtual use case, this is likely a benign bug.  SME
is not emulated by KVM, loading SEV guest PDPTRs is doomed as KVM can't
use the correct key to read guest memory, and setting guest MAXPHYADDR
higher than the host, i.e. overlapping the C-bit, would cause faults in
the guest.

Note, for SEV guests, stripping the C-bit is technically aligned with CPU
behavior, but for KVM it's the greater of two evils.  Because KVM doesn't
have access to the guest's encryption key, ignoring the C-bit would at
best result in KVM reading garbage.  By keeping the C-bit, KVM will
fail its read (unless userspace creates a memslot with the C-bit set).
The guest will still undoubtedly die, as KVM will use '0' for the PDPTR
value, but that's preferable to interpreting encrypted data as a PDPTR.

Fixes: d0ec49d4de90 ("kvm/x86/svm: Support Secure Memory Encryption within KVM")
Cc: Tom Lendacky 
Cc: Brijesh Singh 
Signed-off-by: Sean Christopherson 
Message-Id: <20210204000117.3303214-3-sea...@google.com>
Signed-off-by: Paolo Bonzini 
Signed-off-by: Sasha Levin 
---
 arch/x86/kvm/svm/nested.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/kvm/svm/nested.c b/arch/x86/kvm/svm/nested.c
index db30670dd8c4a..8ded795a18151 100644
--- a/arch/x86/kvm/svm/nested.c
+++ b/arch/x86/kvm/svm/nested.c
@@ -58,7 +58,7 @@ static u64 nested_svm_get_tdp_pdptr(struct kvm_vcpu *vcpu, 
int index)
u64 pdpte;
int ret;
 
-   ret = kvm_vcpu_read_guest_page(vcpu, gpa_to_gfn(__sme_clr(cr3)), ,
+   ret = kvm_vcpu_read_guest_page(vcpu, gpa_to_gfn(cr3), ,
   offset_in_page(cr3) + index * 8, 8);
if (ret)
return 0;
-- 
2.27.0





[PATCH 5.10 438/663] i40e: Fix VFs not created

2021-03-01 Thread Greg Kroah-Hartman
From: Sylwester Dziedziuch 

[ Upstream commit dc8812626440fa6a27f1f3f654f6dc435e042e42 ]

When creating VFs they were sometimes not getting resources.
It was caused by not executing i40e_reset_all_vfs due to
flag __I40E_VF_DISABLE being set on PF. Because of this
IAVF was never able to finish setup sequence never
getting reset indication from PF.
Changed test_and_set_bit __I40E_VF_DISABLE in
i40e_sync_filters_subtask to test_bit and removed clear_bit.
This function should not set this bit it should only check
if it hasn't been already set.

Fixes: a7542b876075 ("i40e: check __I40E_VF_DISABLE bit in 
i40e_sync_filters_subtask")
Signed-off-by: Sylwester Dziedziuch 
Tested-by: Konrad Jankowski 
Signed-off-by: Tony Nguyen 
Signed-off-by: Sasha Levin 
---
 drivers/net/ethernet/intel/i40e/i40e_main.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c 
b/drivers/net/ethernet/intel/i40e/i40e_main.c
index b268adb3e1d44..3ca5644785556 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -2616,7 +2616,7 @@ static void i40e_sync_filters_subtask(struct i40e_pf *pf)
return;
if (!test_and_clear_bit(__I40E_MACVLAN_SYNC_PENDING, pf->state))
return;
-   if (test_and_set_bit(__I40E_VF_DISABLE, pf->state)) {
+   if (test_bit(__I40E_VF_DISABLE, pf->state)) {
set_bit(__I40E_MACVLAN_SYNC_PENDING, pf->state);
return;
}
@@ -2634,7 +2634,6 @@ static void i40e_sync_filters_subtask(struct i40e_pf *pf)
}
}
}
-   clear_bit(__I40E_VF_DISABLE, pf->state);
 }
 
 /**
-- 
2.27.0





[PATCH 5.10 037/663] staging: vchiq: Fix bulk userdata handling

2021-03-01 Thread Greg Kroah-Hartman
From: Phil Elwell 

[ Upstream commit 96ae327678eceabf455b11a88ba14ad540d4b046 ]

The addition of the local 'userdata' pointer to
vchiq_irq_queue_bulk_tx_rx omitted the case where neither BLOCKING nor
WAITING modes are used, in which case the value provided by the
caller is not returned to them as expected, but instead it is replaced
with a NULL. This lack of a suitable context may cause the application
to crash or otherwise malfunction.

Fixes: 4184da4f316a ("staging: vchiq: fix __user annotations")
Tested-by: Stefan Wahren 
Acked-by: Dan Carpenter 
Signed-off-by: Phil Elwell 
Link: https://lore.kernel.org/r/20210105162030.1415213-2-p...@raspberrypi.com
Signed-off-by: Greg Kroah-Hartman 
Signed-off-by: Sasha Levin 
---
 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c 
b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
index 01125d9f991bb..5bc9b394212b8 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
@@ -953,7 +953,7 @@ static int vchiq_irq_queue_bulk_tx_rx(struct vchiq_instance 
*instance,
struct vchiq_service *service;
struct bulk_waiter_node *waiter = NULL;
bool found = false;
-   void *userdata = NULL;
+   void *userdata;
int status = 0;
int ret;
 
@@ -992,6 +992,8 @@ static int vchiq_irq_queue_bulk_tx_rx(struct vchiq_instance 
*instance,
"found bulk_waiter %pK for pid %d", waiter,
current->pid);
userdata = >bulk_waiter;
+   } else {
+   userdata = args->userdata;
}
 
/*
-- 
2.27.0





[PATCH 5.10 177/663] media: imx7: csi: Fix pad link validation

2021-03-01 Thread Greg Kroah-Hartman
From: Rui Miguel Silva 

[ Upstream commit f5ffb81f51376eb5a12e8c4cb4871426c65bb2af ]

We can not make the assumption that the bound subdev is always a CSI
mux, in i.MX6UL/i.MX6ULL that is not the case. So, just get the entity
selected by source directly upstream from the CSI.

Fixes: 86e02d07871c ("media: imx5/6/7: csi: Mark a bound video mux as a CSI 
mux")
Reported-by: Fabio Estevam 
Signed-off-by: Rui Miguel Silva 
Tested-by: Fabio Estevam 
Tested-by: Sébastien Szymanski 
Signed-off-by: Hans Verkuil 
Signed-off-by: Mauro Carvalho Chehab 
Signed-off-by: Sasha Levin 
---
 drivers/staging/media/imx/imx7-media-csi.c | 15 +--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/media/imx/imx7-media-csi.c 
b/drivers/staging/media/imx/imx7-media-csi.c
index 31e36168f9d0f..ac52b1daf9914 100644
--- a/drivers/staging/media/imx/imx7-media-csi.c
+++ b/drivers/staging/media/imx/imx7-media-csi.c
@@ -499,6 +499,7 @@ static int imx7_csi_pad_link_validate(struct v4l2_subdev 
*sd,
  struct v4l2_subdev_format *sink_fmt)
 {
struct imx7_csi *csi = v4l2_get_subdevdata(sd);
+   struct media_entity *src;
struct media_pad *pad;
int ret;
 
@@ -509,11 +510,21 @@ static int imx7_csi_pad_link_validate(struct v4l2_subdev 
*sd,
if (!csi->src_sd)
return -EPIPE;
 
+   src = >src_sd->entity;
+
+   /*
+* if the source is neither a CSI MUX or CSI-2 get the one directly
+* upstream from this CSI
+*/
+   if (src->function != MEDIA_ENT_F_VID_IF_BRIDGE &&
+   src->function != MEDIA_ENT_F_VID_MUX)
+   src = >sd.entity;
+
/*
-* find the entity that is selected by the CSI mux. This is needed
+* find the entity that is selected by the source. This is needed
 * to distinguish between a parallel or CSI-2 pipeline.
 */
-   pad = imx_media_pipeline_pad(>src_sd->entity, 0, 0, true);
+   pad = imx_media_pipeline_pad(src, 0, 0, true);
if (!pad)
return -ENODEV;
 
-- 
2.27.0





[PATCH 5.11 052/775] cpufreq: brcmstb-avs-cpufreq: Free resources in error path

2021-03-01 Thread Greg Kroah-Hartman
From: Christophe JAILLET 

[ Upstream commit 05f456286fd489558c72a4711d22a5612c965685 ]

If 'cpufreq_register_driver()' fails, we must release the resources
allocated in 'brcm_avs_prepare_init()' as already done in the remove
function.

To do that, introduce a new function 'brcm_avs_prepare_uninit()' in order
to avoid code duplication. This also makes the code more readable (IMHO).

Fixes: de322e085995 ("cpufreq: brcmstb-avs-cpufreq: AVS CPUfreq driver for 
Broadcom STB SoCs")
Signed-off-by: Christophe JAILLET 
[ Viresh: Updated Subject ]
Signed-off-by: Viresh Kumar 
Signed-off-by: Sasha Levin 
---
 drivers/cpufreq/brcmstb-avs-cpufreq.c | 21 -
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/drivers/cpufreq/brcmstb-avs-cpufreq.c 
b/drivers/cpufreq/brcmstb-avs-cpufreq.c
index 3e31e5d28b79c..e25ccb744187d 100644
--- a/drivers/cpufreq/brcmstb-avs-cpufreq.c
+++ b/drivers/cpufreq/brcmstb-avs-cpufreq.c
@@ -597,6 +597,16 @@ unmap_base:
return ret;
 }
 
+static void brcm_avs_prepare_uninit(struct platform_device *pdev)
+{
+   struct private_data *priv;
+
+   priv = platform_get_drvdata(pdev);
+
+   iounmap(priv->avs_intr_base);
+   iounmap(priv->base);
+}
+
 static int brcm_avs_cpufreq_init(struct cpufreq_policy *policy)
 {
struct cpufreq_frequency_table *freq_table;
@@ -732,21 +742,22 @@ static int brcm_avs_cpufreq_probe(struct platform_device 
*pdev)
 
brcm_avs_driver.driver_data = pdev;
 
-   return cpufreq_register_driver(_avs_driver);
+   ret = cpufreq_register_driver(_avs_driver);
+   if (ret)
+   brcm_avs_prepare_uninit(pdev);
+
+   return ret;
 }
 
 static int brcm_avs_cpufreq_remove(struct platform_device *pdev)
 {
-   struct private_data *priv;
int ret;
 
ret = cpufreq_unregister_driver(_avs_driver);
if (ret)
return ret;
 
-   priv = platform_get_drvdata(pdev);
-   iounmap(priv->base);
-   iounmap(priv->avs_intr_base);
+   brcm_avs_prepare_uninit(pdev);
 
return 0;
 }
-- 
2.27.0





[PATCH 5.10 031/663] ARM: dts: exynos: correct PMIC interrupt trigger level on Arndale Octa

2021-03-01 Thread Greg Kroah-Hartman
From: Krzysztof Kozlowski 

[ Upstream commit 1ac8893c4fa3d4a34915dc5cdab568a39db5086c ]

The Samsung PMIC datasheets describe the interrupt line as active low
with a requirement of acknowledge from the CPU.  The falling edge
interrupt will mostly work but it's not correct.

Fixes: 1fed2252713e ("ARM: dts: fix pinctrl for s2mps11-irq on 
exynos5420-arndale-octa")
Signed-off-by: Krzysztof Kozlowski 
Tested-by: Marek Szyprowski 
Link: https://lore.kernel.org/r/20201210212903.216728-5-k...@kernel.org
Signed-off-by: Sasha Levin 
---
 arch/arm/boot/dts/exynos5420-arndale-octa.dts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/boot/dts/exynos5420-arndale-octa.dts 
b/arch/arm/boot/dts/exynos5420-arndale-octa.dts
index dd7f8385d81e7..3d9b93d2b242c 100644
--- a/arch/arm/boot/dts/exynos5420-arndale-octa.dts
+++ b/arch/arm/boot/dts/exynos5420-arndale-octa.dts
@@ -349,7 +349,7 @@
reg = <0x66>;
 
interrupt-parent = <>;
-   interrupts = <2 IRQ_TYPE_EDGE_FALLING>;
+   interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
pinctrl-names = "default";
pinctrl-0 = <_irq>;
 
-- 
2.27.0





[PATCH 4.19 033/247] arm64: dts: exynos: correct PMIC interrupt trigger level on TM2

2021-03-01 Thread Greg Kroah-Hartman
From: Krzysztof Kozlowski 

[ Upstream commit e98e2367dfb4b6d7a80c8ce795c644124eff5f36 ]

The Samsung PMIC datasheets describe the interrupt line as active low
with a requirement of acknowledge from the CPU.  Without specifying the
interrupt type in Devicetree, kernel might apply some fixed
configuration, not necessarily working for this hardware.

Fixes: 01e5d2352152 ("arm64: dts: exynos: Add dts file for Exynos5433-based TM2 
board")
Signed-off-by: Krzysztof Kozlowski 
Tested-by: Marek Szyprowski 
Link: https://lore.kernel.org/r/20201210212903.216728-7-k...@kernel.org
Signed-off-by: Sasha Levin 
---
 arch/arm64/boot/dts/exynos/exynos5433-tm2-common.dtsi | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm64/boot/dts/exynos/exynos5433-tm2-common.dtsi 
b/arch/arm64/boot/dts/exynos/exynos5433-tm2-common.dtsi
index a1e3194b74837..d64f97d97c350 100644
--- a/arch/arm64/boot/dts/exynos/exynos5433-tm2-common.dtsi
+++ b/arch/arm64/boot/dts/exynos/exynos5433-tm2-common.dtsi
@@ -378,7 +378,7 @@
s2mps13-pmic@66 {
compatible = "samsung,s2mps13-pmic";
interrupt-parent = <>;
-   interrupts = <7 IRQ_TYPE_NONE>;
+   interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
reg = <0x66>;
samsung,s2mps11-wrstbi-ground;
 
-- 
2.27.0





[PATCH 5.10 121/663] net: axienet: Handle deferred probe on clock properly

2021-03-01 Thread Greg Kroah-Hartman
From: Robert Hancock 

[ Upstream commit 57baf8cc70ea4cf5503c9d42f31f6a86d7f5ff1a ]

This driver is set up to use a clock mapping in the device tree if it is
present, but still work without one for backward compatibility. However,
if getting the clock returns -EPROBE_DEFER, then we need to abort and
return that error from our driver initialization so that the probe can
be retried later after the clock is set up.

Move clock initialization to earlier in the process so we do not waste as
much effort if the clock is not yet available. Switch to use
devm_clk_get_optional and abort initialization on any error reported.
Also enable the clock regardless of whether the controller is using an MDIO
bus, as the clock is required in any case.

Fixes: 09a0354cadec267be7f ("net: axienet: Use clock framework to get device 
clock rate")
Signed-off-by: Robert Hancock 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
---
 .../net/ethernet/xilinx/xilinx_axienet_main.c | 26 +--
 1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c 
b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
index 9aafd3ecdaa4d..eea0bb7c23ede 100644
--- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
+++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
@@ -1805,6 +1805,18 @@ static int axienet_probe(struct platform_device *pdev)
lp->options = XAE_OPTION_DEFAULTS;
lp->rx_bd_num = RX_BD_NUM_DEFAULT;
lp->tx_bd_num = TX_BD_NUM_DEFAULT;
+
+   lp->clk = devm_clk_get_optional(>dev, NULL);
+   if (IS_ERR(lp->clk)) {
+   ret = PTR_ERR(lp->clk);
+   goto free_netdev;
+   }
+   ret = clk_prepare_enable(lp->clk);
+   if (ret) {
+   dev_err(>dev, "Unable to enable clock: %d\n", ret);
+   goto free_netdev;
+   }
+
/* Map device registers */
ethres = platform_get_resource(pdev, IORESOURCE_MEM, 0);
lp->regs = devm_ioremap_resource(>dev, ethres);
@@ -1980,20 +1992,6 @@ static int axienet_probe(struct platform_device *pdev)
 
lp->phy_node = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0);
if (lp->phy_node) {
-   lp->clk = devm_clk_get(>dev, NULL);
-   if (IS_ERR(lp->clk)) {
-   dev_warn(>dev, "Failed to get clock: %ld\n",
-PTR_ERR(lp->clk));
-   lp->clk = NULL;
-   } else {
-   ret = clk_prepare_enable(lp->clk);
-   if (ret) {
-   dev_err(>dev, "Unable to enable clock: 
%d\n",
-   ret);
-   goto free_netdev;
-   }
-   }
-
ret = axienet_mdio_setup(lp);
if (ret)
dev_warn(>dev,
-- 
2.27.0





[PATCH 5.10 259/663] power: supply: cpcap: Add missing IRQF_ONESHOT to fix regression

2021-03-01 Thread Greg Kroah-Hartman
From: Tony Lindgren 

[ Upstream commit e62333e26be649bfc3c167b9f2bbca38b92332c5 ]

Commit 25d76fed7ffe ("phy: cpcap-usb: Use IRQF_ONESHOT") started causing
errors loading phy-cpcap-usb driver:

cpcap_battery cpcap_battery.0: failed to register power supply
genirq: Flags mismatch irq 211. 2080 (se0conn) vs. 0080 (se0conn)
cpcap-usb-phy cpcap-usb-phy.0: could not get irq se0conn: -16

Let's fix this by adding the missing IRQF_ONESHOT to also cpcap-battery
and cpcap-charger drivers.

Fixes: 25d76fed7ffe ("phy: cpcap-usb: Use IRQF_ONESHOT")
Reported-by: Merlijn Wajer 
Signed-off-by: Tony Lindgren 
Signed-off-by: Sebastian Reichel 
Signed-off-by: Sasha Levin 
---
 drivers/power/supply/cpcap-battery.c | 2 +-
 drivers/power/supply/cpcap-charger.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/power/supply/cpcap-battery.c 
b/drivers/power/supply/cpcap-battery.c
index 295611b3b15e9..7a974b5bd9dd1 100644
--- a/drivers/power/supply/cpcap-battery.c
+++ b/drivers/power/supply/cpcap-battery.c
@@ -666,7 +666,7 @@ static int cpcap_battery_init_irq(struct platform_device 
*pdev,
 
error = devm_request_threaded_irq(ddata->dev, irq, NULL,
  cpcap_battery_irq_thread,
- IRQF_SHARED,
+ IRQF_SHARED | IRQF_ONESHOT,
  name, ddata);
if (error) {
dev_err(ddata->dev, "could not get irq %s: %i\n",
diff --git a/drivers/power/supply/cpcap-charger.c 
b/drivers/power/supply/cpcap-charger.c
index c0d452e3dc8b0..804ac7f84c301 100644
--- a/drivers/power/supply/cpcap-charger.c
+++ b/drivers/power/supply/cpcap-charger.c
@@ -708,7 +708,7 @@ static int cpcap_usb_init_irq(struct platform_device *pdev,
 
error = devm_request_threaded_irq(ddata->dev, irq, NULL,
  cpcap_charger_irq_thread,
- IRQF_SHARED,
+ IRQF_SHARED | IRQF_ONESHOT,
  name, ddata);
if (error) {
dev_err(ddata->dev, "could not get irq %s: %i\n",
-- 
2.27.0





[PATCH 5.10 168/663] media: tm6000: Fix memleak in tm6000_start_stream

2021-03-01 Thread Greg Kroah-Hartman
From: Dinghao Liu 

[ Upstream commit 76aaf8a96771c16365b8510f1fb97738dc88026e ]

When usb_clear_halt() fails, dvb->bulk_urb->transfer_buffer
and dvb->bulk_urb should be freed just like when
usb_submit_urb() fails.

Fixes: 3169c9b26fffa ("V4L/DVB (12788): tm6000: Add initial DVB-T support")
Signed-off-by: Dinghao Liu 
Signed-off-by: Hans Verkuil 
Signed-off-by: Mauro Carvalho Chehab 
Signed-off-by: Sasha Levin 
---
 drivers/media/usb/tm6000/tm6000-dvb.c | 4 
 1 file changed, 4 insertions(+)

diff --git a/drivers/media/usb/tm6000/tm6000-dvb.c 
b/drivers/media/usb/tm6000/tm6000-dvb.c
index 19c90fa9e443d..293a460f4616c 100644
--- a/drivers/media/usb/tm6000/tm6000-dvb.c
+++ b/drivers/media/usb/tm6000/tm6000-dvb.c
@@ -141,6 +141,10 @@ static int tm6000_start_stream(struct tm6000_core *dev)
if (ret < 0) {
printk(KERN_ERR "tm6000: error %i in %s during pipe reset\n",
ret, __func__);
+
+   kfree(dvb->bulk_urb->transfer_buffer);
+   usb_free_urb(dvb->bulk_urb);
+   dvb->bulk_urb = NULL;
return ret;
} else
printk(KERN_ERR "tm6000: pipe reset\n");
-- 
2.27.0





[PATCH 5.10 277/663] dmaengine: fsldma: Fix a resource leak in an error handling path of the probe function

2021-03-01 Thread Greg Kroah-Hartman
From: Christophe JAILLET 

[ Upstream commit b202d4e82531a62a33a6b14d321dd2aad491578e ]

In case of error, the previous 'fsl_dma_chan_probe()' calls must be undone
by some 'fsl_dma_chan_remove()', as already done in the remove function.

It was added in the remove function in commit 77cd62e8082b ("fsldma: allow
Freescale Elo DMA driver to be compiled as a module")

Fixes: d3f620b2c4fe ("fsldma: simplify IRQ probing and handling")
Signed-off-by: Christophe JAILLET 
Link: 
https://lore.kernel.org/r/20201212160614.92576-1-christophe.jail...@wanadoo.fr
Signed-off-by: Vinod Koul 
Signed-off-by: Sasha Levin 
---
 drivers/dma/fsldma.c | 5 +
 1 file changed, 5 insertions(+)

diff --git a/drivers/dma/fsldma.c b/drivers/dma/fsldma.c
index 554f70a0c18c0..f8459cc5315df 100644
--- a/drivers/dma/fsldma.c
+++ b/drivers/dma/fsldma.c
@@ -1214,6 +1214,7 @@ static int fsldma_of_probe(struct platform_device *op)
 {
struct fsldma_device *fdev;
struct device_node *child;
+   unsigned int i;
int err;
 
fdev = kzalloc(sizeof(*fdev), GFP_KERNEL);
@@ -1292,6 +1293,10 @@ static int fsldma_of_probe(struct platform_device *op)
return 0;
 
 out_free_fdev:
+   for (i = 0; i < FSL_DMA_MAX_CHANS_PER_DEVICE; i++) {
+   if (fdev->chan[i])
+   fsl_dma_chan_remove(fdev->chan[i]);
+   }
irq_dispose_mapping(fdev->irq);
iounmap(fdev->regs);
 out_free:
-- 
2.27.0





[PATCH 5.10 494/663] usb: dwc3: gadget: Fix dep->interval for fullspeed interrupt

2021-03-01 Thread Greg Kroah-Hartman
From: Thinh Nguyen 

commit 4b049f55ed95cd889bcdb3034fd75e1f01852b38 upstream.

The dep->interval captures the number of frames/microframes per interval
from bInterval. Fullspeed interrupt endpoint bInterval is the number of
frames per interval and not 2^(bInterval - 1). So fix it here. This
change is only for debugging purpose and should not affect the interrupt
endpoint operation.

Fixes: 72246da40f37 ("usb: Introduce DesignWare USB3 DRD Driver")
Cc: 
Signed-off-by: Thinh Nguyen 
Link: 
https://lore.kernel.org/r/1263b563dedc4ab8b0fb854fba06ce4bc56bd495.1612820995.git.thinh.ngu...@synopsys.com
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/usb/dwc3/gadget.c |7 ++-
 1 file changed, 6 insertions(+), 1 deletion(-)

--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -615,8 +615,13 @@ static int dwc3_gadget_set_ep_config(str
if (dwc->gadget->speed == USB_SPEED_FULL)
bInterval_m1 = 0;
 
+   if (usb_endpoint_type(desc) == USB_ENDPOINT_XFER_INT &&
+   dwc->gadget->speed == USB_SPEED_FULL)
+   dep->interval = desc->bInterval;
+   else
+   dep->interval = 1 << (desc->bInterval - 1);
+
params.param1 |= DWC3_DEPCFG_BINTERVAL_M1(bInterval_m1);
-   dep->interval = 1 << (desc->bInterval - 1);
}
 
return dwc3_send_gadget_ep_cmd(dep, DWC3_DEPCMD_SETEPCONFIG, );




[PATCH 5.10 387/663] perf intel-pt: Fix IPC with CYC threshold

2021-03-01 Thread Greg Kroah-Hartman
From: Adrian Hunter 

[ Upstream commit 6af4b60033e0ce0332fcdf256c965ad41942821a ]

The code assumed every CYC-eligible packet has a CYC packet, which is not
the case when CYC thresholds are used. Fix by checking if a CYC packet is
actually present in that case.

Fixes: 5b1dc0fd1da06 ("perf intel-pt: Add support for samples to contain IPC 
ratio")
Signed-off-by: Adrian Hunter 
Reviewed-by: Andi Kleen 
Cc: Jiri Olsa 
Link: https://lore.kernel.org/r/20210205175350.23817-4-adrian.hun...@intel.com
Signed-off-by: Arnaldo Carvalho de Melo 
Signed-off-by: Sasha Levin 
---
 .../util/intel-pt-decoder/intel-pt-decoder.c  | 27 +++
 .../util/intel-pt-decoder/intel-pt-decoder.h  |  1 +
 tools/perf/util/intel-pt.c| 13 +
 3 files changed, 41 insertions(+)

diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c 
b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
index ef29f6b25e60a..197eb58a39cb7 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
@@ -24,6 +24,13 @@
 #include "intel-pt-decoder.h"
 #include "intel-pt-log.h"
 
+#define BITULL(x) (1ULL << (x))
+
+/* IA32_RTIT_CTL MSR bits */
+#define INTEL_PT_CYC_ENABLEBITULL(1)
+#define INTEL_PT_CYC_THRESHOLD (BITULL(22) | BITULL(21) | BITULL(20) | 
BITULL(19))
+#define INTEL_PT_CYC_THRESHOLD_SHIFT   19
+
 #define INTEL_PT_BLK_SIZE 1024
 
 #define BIT63 (((uint64_t)1 << 63))
@@ -167,6 +174,8 @@ struct intel_pt_decoder {
uint64_t sample_tot_cyc_cnt;
uint64_t base_cyc_cnt;
uint64_t cyc_cnt_timestamp;
+   uint64_t ctl;
+   uint64_t cyc_threshold;
double tsc_to_cyc;
bool continuous_period;
bool overflow;
@@ -204,6 +213,14 @@ static uint64_t intel_pt_lower_power_of_2(uint64_t x)
return x << i;
 }
 
+static uint64_t intel_pt_cyc_threshold(uint64_t ctl)
+{
+   if (!(ctl & INTEL_PT_CYC_ENABLE))
+   return 0;
+
+   return (ctl & INTEL_PT_CYC_THRESHOLD) >> INTEL_PT_CYC_THRESHOLD_SHIFT;
+}
+
 static void intel_pt_setup_period(struct intel_pt_decoder *decoder)
 {
if (decoder->period_type == INTEL_PT_PERIOD_TICKS) {
@@ -245,12 +262,15 @@ struct intel_pt_decoder *intel_pt_decoder_new(struct 
intel_pt_params *params)
 
decoder->flags  = params->flags;
 
+   decoder->ctl= params->ctl;
decoder->period = params->period;
decoder->period_type= params->period_type;
 
decoder->max_non_turbo_ratio= params->max_non_turbo_ratio;
decoder->max_non_turbo_ratio_fp = params->max_non_turbo_ratio;
 
+   decoder->cyc_threshold = intel_pt_cyc_threshold(decoder->ctl);
+
intel_pt_setup_period(decoder);
 
decoder->mtc_shift = params->mtc_period;
@@ -2017,6 +2037,7 @@ static int intel_pt_hop_trace(struct intel_pt_decoder 
*decoder, bool *no_tip, in
 
 static int intel_pt_walk_trace(struct intel_pt_decoder *decoder)
 {
+   int last_packet_type = INTEL_PT_PAD;
bool no_tip = false;
int err;
 
@@ -2025,6 +2046,12 @@ static int intel_pt_walk_trace(struct intel_pt_decoder 
*decoder)
if (err)
return err;
 next:
+   if (decoder->cyc_threshold) {
+   if (decoder->sample_cyc && last_packet_type != 
INTEL_PT_CYC)
+   decoder->sample_cyc = false;
+   last_packet_type = decoder->packet.type;
+   }
+
if (decoder->hop) {
switch (intel_pt_hop_trace(decoder, _tip, )) {
case HOP_IGNORE:
diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h 
b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h
index b52937b03c8c8..48adaa78acfc2 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h
@@ -244,6 +244,7 @@ struct intel_pt_params {
void *data;
bool return_compression;
bool branch_enable;
+   uint64_t ctl;
uint64_t period;
enum intel_pt_period_type period_type;
unsigned max_non_turbo_ratio;
diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c
index 710ce798a2686..dc023b8c6003a 100644
--- a/tools/perf/util/intel-pt.c
+++ b/tools/perf/util/intel-pt.c
@@ -893,6 +893,18 @@ static bool intel_pt_sampling_mode(struct intel_pt *pt)
return false;
 }
 
+static u64 intel_pt_ctl(struct intel_pt *pt)
+{
+   struct evsel *evsel;
+   u64 config;
+
+   evlist__for_each_entry(pt->session->evlist, evsel) {
+   if (intel_pt_get_config(pt, >core.attr, ))
+   return config;
+   }
+   return 0;
+}
+
 static u64 intel_pt_ns_to_ticks(const struct intel_pt *pt, u64 ns)
 {
u64 quot, rem;
@@ -1026,6 +1038,7 @@ static struct intel_pt_queue *intel_pt_alloc_queue(struct 
intel_pt *pt,

[PATCH 5.10 224/663] ASoC: SOF: debug: Fix a potential issue on string buffer termination

2021-03-01 Thread Greg Kroah-Hartman
From: Hui Wang 

[ Upstream commit 9037c3bde65d339017ef41d81cb58069ffc321d4 ]

The function simple_write_to_buffer() doesn't add string termination
at the end of buf, we need to handle it on our own. This change refers
to the function tokenize_input() in debug.c and the function
sof_dfsentry_trace_filter_write() in trace.c.

Fixes: 091c12e1f50c ("ASoC: SOF: debug: add new debugfs entries for IPC flood 
test")
Reviewed-by: Kai Vehmanen 
Signed-off-by: Hui Wang 
Link: https://lore.kernel.org/r/20210208103857.75705-1-hui.w...@canonical.com
Signed-off-by: Mark Brown 
Signed-off-by: Sasha Levin 
---
 sound/soc/sof/debug.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sound/soc/sof/debug.c b/sound/soc/sof/debug.c
index 9419a99bab536..3ef51b2210237 100644
--- a/sound/soc/sof/debug.c
+++ b/sound/soc/sof/debug.c
@@ -350,7 +350,7 @@ static ssize_t sof_dfsentry_write(struct file *file, const 
char __user *buffer,
char *string;
int ret;
 
-   string = kzalloc(count, GFP_KERNEL);
+   string = kzalloc(count+1, GFP_KERNEL);
if (!string)
return -ENOMEM;
 
-- 
2.27.0





[PATCH 5.10 063/663] usb: dwc2: Do not update data length if it is 0 on inbound transfers

2021-03-01 Thread Greg Kroah-Hartman
From: Guenter Roeck 

[ Upstream commit 415fa1c7305dedbb345e2cc8ac91769bc1c83f1a ]

The DWC2 documentation states that transfers with zero data length should
set the number of packets to 1 and the transfer length to 0. This is not
currently the case for inbound transfers: the transfer length is set to
the maximum packet length. This can have adverse effects if the chip
actually does transfer data as it is programmed to do. Follow chip
documentation and keep the transfer length set to 0 in that situation.

Fixes: 56f5b1cff22a1 ("staging: Core files for the DWC2 driver")
Tested-by: Nicolas Saenz Julienne 
Reviewed-by: Douglas Anderson 
Signed-off-by: Guenter Roeck 
Signed-off-by: Nicolas Saenz Julienne 
Link: https://lore.kernel.org/r/20210113112052.17063-2-nsaenzjulie...@suse.de
Signed-off-by: Greg Kroah-Hartman 
Signed-off-by: Sasha Levin 
---
 drivers/usb/dwc2/hcd.c | 15 ---
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
index e9ac215b96633..fc3269f5faf19 100644
--- a/drivers/usb/dwc2/hcd.c
+++ b/drivers/usb/dwc2/hcd.c
@@ -1313,19 +1313,20 @@ static void dwc2_hc_start_transfer(struct dwc2_hsotg 
*hsotg,
if (num_packets > max_hc_pkt_count) {
num_packets = max_hc_pkt_count;
chan->xfer_len = num_packets * chan->max_packet;
+   } else if (chan->ep_is_in) {
+   /*
+* Always program an integral # of max packets
+* for IN transfers.
+* Note: This assumes that the input buffer is
+* aligned and sized accordingly.
+*/
+   chan->xfer_len = num_packets * chan->max_packet;
}
} else {
/* Need 1 packet for transfer length of 0 */
num_packets = 1;
}
 
-   if (chan->ep_is_in)
-   /*
-* Always program an integral # of max packets for IN
-* transfers
-*/
-   chan->xfer_len = num_packets * chan->max_packet;
-
if (chan->ep_type == USB_ENDPOINT_XFER_INT ||
chan->ep_type == USB_ENDPOINT_XFER_ISOC)
/*
-- 
2.27.0





[PATCH 5.10 633/663] f2fs: flush data when enabling checkpoint back

2021-03-01 Thread Greg Kroah-Hartman
From: Jaegeuk Kim 

commit b0ff4fe746fd028eef920ddc8c7b0361c1ede6ec upstream.

During checkpoint=disable period, f2fs bypasses all the synchronous IOs such as
sync and fsync. So, when enabling it back, we must flush all of them in order
to keep the data persistent. Otherwise, suddern power-cut right after enabling
checkpoint will cause data loss.

Fixes: 4354994f097d ("f2fs: checkpoint disabling")
Cc: sta...@vger.kernel.org
Reviewed-by: Chao Yu 
Signed-off-by: Jaegeuk Kim 
Signed-off-by: Greg Kroah-Hartman 
---
 fs/f2fs/super.c |3 +++
 1 file changed, 3 insertions(+)

--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -1764,6 +1764,9 @@ restore_flag:
 
 static void f2fs_enable_checkpoint(struct f2fs_sb_info *sbi)
 {
+   /* we should flush all the data to keep data consistency */
+   sync_inodes_sb(sbi->sb);
+
down_write(>gc_lock);
f2fs_dirty_to_prefree(sbi);
 




[PATCH 5.11 327/775] rtc: rx6110: fix build against modular I2C

2021-03-01 Thread Greg Kroah-Hartman
From: Arnd Bergmann 

[ Upstream commit def8550f543e6c9101f3e1a03160b2aab8c02e8a ]

With CONFIG_I2C=m, the #ifdef section is disabled, as shown
by this warning:

drivers/rtc/rtc-rx6110.c:314:12: error: unused function 'rx6110_probe' 
[-Werror,-Wunused-function]

Change the driver to use IS_ENABLED() instead, which works
for both module and built-in subsystems.

Fixes: afa819c2c6bf ("rtc: rx6110: add i2c support")
Signed-off-by: Arnd Bergmann 
Signed-off-by: Alexandre Belloni 
Link: https://lore.kernel.org/r/20201230145938.3254459-1-a...@kernel.org
Signed-off-by: Sasha Levin 
---
 drivers/rtc/rtc-rx6110.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/rtc/rtc-rx6110.c b/drivers/rtc/rtc-rx6110.c
index a7b671a210223..79161d4c6ce4d 100644
--- a/drivers/rtc/rtc-rx6110.c
+++ b/drivers/rtc/rtc-rx6110.c
@@ -331,7 +331,7 @@ static int rx6110_probe(struct rx6110_data *rx6110, struct 
device *dev)
return 0;
 }
 
-#ifdef CONFIG_SPI_MASTER
+#if IS_ENABLED(CONFIG_SPI_MASTER)
 static struct regmap_config regmap_spi_config = {
.reg_bits = 8,
.val_bits = 8,
@@ -411,7 +411,7 @@ static void rx6110_spi_unregister(void)
 }
 #endif /* CONFIG_SPI_MASTER */
 
-#ifdef CONFIG_I2C
+#if IS_ENABLED(CONFIG_I2C)
 static struct regmap_config regmap_i2c_config = {
.reg_bits = 8,
.val_bits = 8,
-- 
2.27.0





[PATCH 5.10 006/663] scsi: qla2xxx: Fix mailbox Ch erroneous error

2021-03-01 Thread Greg Kroah-Hartman
From: Quinn Tran 

commit 044c218b04503858ca4e17f61899c8baa0ae9ba1 upstream.

Mailbox Ch/dump ram extend expects mb register 10 to be set. If not
set/clear, firmware can pick up garbage from previous invocation of this
mailbox. Example: mctp dump can set mb10.  On subsequent flash read which
use mailbox cmd Ch, mb10 can retain previous value.

Link: https://lore.kernel.org/r/20210111093134.1206-6-njav...@marvell.com
Cc: sta...@vger.kernel.org
Reviewed-by: Himanshu Madhani 
Signed-off-by: Quinn Tran 
Signed-off-by: Nilesh Javali 
Signed-off-by: Martin K. Petersen 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/scsi/qla2xxx/qla_dbg.c |1 +
 drivers/scsi/qla2xxx/qla_mbx.c |3 ++-
 2 files changed, 3 insertions(+), 1 deletion(-)

--- a/drivers/scsi/qla2xxx/qla_dbg.c
+++ b/drivers/scsi/qla2xxx/qla_dbg.c
@@ -202,6 +202,7 @@ qla24xx_dump_ram(struct qla_hw_data *ha,
wrt_reg_word(>mailbox0, MBC_DUMP_RISC_RAM_EXTENDED);
wrt_reg_word(>mailbox1, LSW(addr));
wrt_reg_word(>mailbox8, MSW(addr));
+   wrt_reg_word(>mailbox10, 0);
 
wrt_reg_word(>mailbox2, MSW(LSD(dump_dma)));
wrt_reg_word(>mailbox3, LSW(LSD(dump_dma)));
--- a/drivers/scsi/qla2xxx/qla_mbx.c
+++ b/drivers/scsi/qla2xxx/qla_mbx.c
@@ -4277,7 +4277,8 @@ qla2x00_dump_ram(scsi_qla_host_t *vha, d
if (MSW(addr) || IS_FWI2_CAPABLE(vha->hw)) {
mcp->mb[0] = MBC_DUMP_RISC_RAM_EXTENDED;
mcp->mb[8] = MSW(addr);
-   mcp->out_mb = MBX_8|MBX_0;
+   mcp->mb[10] = 0;
+   mcp->out_mb = MBX_10|MBX_8|MBX_0;
} else {
mcp->mb[0] = MBC_DUMP_RISC_RAM;
mcp->out_mb = MBX_0;




[PATCH 5.10 231/663] drm/vc4: hdmi: Fix up CEC registers

2021-03-01 Thread Greg Kroah-Hartman
From: Dom Cobley 

[ Upstream commit 5a32bfd563e8b5766e57475c2c81c769e5a13f5d ]

The commit 311e305fdb4e ("drm/vc4: hdmi: Implement a register layout
abstraction") forgot one CEC register, and made a copy and paste mistake
for another one. Fix those mistakes.

Fixes: 311e305fdb4e ("drm/vc4: hdmi: Implement a register layout abstraction")
Reviewed-by: Dave Stevenson 
Signed-off-by: Dom Cobley 
Signed-off-by: Maxime Ripard 
Acked-by: Hans Verkuil 
Tested-by: Hans Verkuil 
Link: 
https://patchwork.freedesktop.org/patch/msgid/2021042309.193441-5-max...@cerno.tech
(cherry picked from commit 303085bc11bb7aebeeaaf09213f99fd7aa539a34)
Signed-off-by: Maarten Lankhorst 
Signed-off-by: Sasha Levin 
---
 drivers/gpu/drm/vc4/vc4_hdmi_regs.h | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/vc4/vc4_hdmi_regs.h 
b/drivers/gpu/drm/vc4/vc4_hdmi_regs.h
index 7c6b4818f2455..6c0dfbbe1a7ef 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi_regs.h
+++ b/drivers/gpu/drm/vc4/vc4_hdmi_regs.h
@@ -29,6 +29,7 @@ enum vc4_hdmi_field {
HDMI_CEC_CPU_MASK_SET,
HDMI_CEC_CPU_MASK_STATUS,
HDMI_CEC_CPU_STATUS,
+   HDMI_CEC_CPU_SET,
 
/*
 * Transmit data, first byte is low byte of the 32-bit reg.
@@ -196,9 +197,10 @@ static const struct vc4_hdmi_register vc4_hdmi_fields[] = {
VC4_HDMI_REG(HDMI_TX_PHY_RESET_CTL, 0x02c0),
VC4_HDMI_REG(HDMI_TX_PHY_CTL_0, 0x02c4),
VC4_HDMI_REG(HDMI_CEC_CPU_STATUS, 0x0340),
+   VC4_HDMI_REG(HDMI_CEC_CPU_SET, 0x0344),
VC4_HDMI_REG(HDMI_CEC_CPU_CLEAR, 0x0348),
VC4_HDMI_REG(HDMI_CEC_CPU_MASK_STATUS, 0x034c),
-   VC4_HDMI_REG(HDMI_CEC_CPU_MASK_SET, 0x034c),
+   VC4_HDMI_REG(HDMI_CEC_CPU_MASK_SET, 0x0350),
VC4_HDMI_REG(HDMI_CEC_CPU_MASK_CLEAR, 0x0354),
VC4_HDMI_REG(HDMI_RAM_PACKET_START, 0x0400),
 };
-- 
2.27.0





[PATCH 5.11 114/775] net/mlx5: Disable devlink reload for lag devices

2021-03-01 Thread Greg Kroah-Hartman
From: Shay Drory 

[ Upstream commit edac23c2b3d3ac64cfcd351087295893671adbf5 ]

Devlink reload can't be allowed on lag devices since reloading one lag
device will cause traffic on the bond to get stucked.
Users who wish to reload a lag device, need to remove the device from
the bond, and only then reload it.

Fixes: 4383cfcc65e7 ("net/mlx5: Add devlink reload")
Signed-off-by: Shay Drory 
Reviewed-by: Moshe Shemesh 
Signed-off-by: Saeed Mahameed 
Signed-off-by: Sasha Levin 
---
 drivers/net/ethernet/mellanox/mlx5/core/devlink.c | 5 +
 1 file changed, 5 insertions(+)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c 
b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
index c7073193db140..41474e42a819a 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
@@ -128,6 +128,11 @@ static int mlx5_devlink_reload_down(struct devlink 
*devlink, bool netns_change,
 {
struct mlx5_core_dev *dev = devlink_priv(devlink);
 
+   if (mlx5_lag_is_active(dev)) {
+   NL_SET_ERR_MSG_MOD(extack, "reload is unsupported in Lag 
mode\n");
+   return -EOPNOTSUPP;
+   }
+
switch (action) {
case DEVLINK_RELOAD_ACTION_DRIVER_REINIT:
mlx5_unload_one(dev, false);
-- 
2.27.0





[PATCH 5.10 144/663] crypto: sun4i-ss - linearize buffers content must be kept

2021-03-01 Thread Greg Kroah-Hartman
From: Corentin Labbe 

[ Upstream commit 583513510a7acd2306787865bcd19ebb2f629d42 ]

When running the non-optimized cipher function, SS produce partial random
output.
This is due to linearize buffers being reseted after each loop.

For preserving stack, instead of moving them back to start of function,
I move them in sun4i_ss_ctx.

Fixes: 8d3bcb9900ca ("crypto: sun4i-ss - reduce stack usage")
Signed-off-by: Corentin Labbe 
Signed-off-by: Herbert Xu 
Signed-off-by: Sasha Levin 
---
 drivers/crypto/allwinner/sun4i-ss/sun4i-ss-cipher.c | 12 
 drivers/crypto/allwinner/sun4i-ss/sun4i-ss.h|  2 ++
 2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/drivers/crypto/allwinner/sun4i-ss/sun4i-ss-cipher.c 
b/drivers/crypto/allwinner/sun4i-ss/sun4i-ss-cipher.c
index b72de8939497b..19f1aa577ed4d 100644
--- a/drivers/crypto/allwinner/sun4i-ss/sun4i-ss-cipher.c
+++ b/drivers/crypto/allwinner/sun4i-ss/sun4i-ss-cipher.c
@@ -233,8 +233,6 @@ static int sun4i_ss_cipher_poll(struct skcipher_request 
*areq)
 
while (oleft) {
if (ileft) {
-   char buf[4 * SS_RX_MAX];/* buffer for linearize SG src 
*/
-
/*
 * todo is the number of consecutive 4byte word that we
 * can read from current SG
@@ -256,12 +254,12 @@ static int sun4i_ss_cipher_poll(struct skcipher_request 
*areq)
 */
todo = min(rx_cnt * 4 - ob, ileft);
todo = min_t(size_t, todo, mi.length - oi);
-   memcpy(buf + ob, mi.addr + oi, todo);
+   memcpy(ss->buf + ob, mi.addr + oi, todo);
ileft -= todo;
oi += todo;
ob += todo;
if (!(ob % 4)) {
-   writesl(ss->base + SS_RXFIFO, buf,
+   writesl(ss->base + SS_RXFIFO, ss->buf,
ob / 4);
ob = 0;
}
@@ -295,13 +293,11 @@ static int sun4i_ss_cipher_poll(struct skcipher_request 
*areq)
oo = 0;
}
} else {
-   char bufo[4 * SS_TX_MAX]; /* buffer for linearize SG 
dst */
-
/*
 * read obl bytes in bufo, we read at maximum for
 * emptying the device
 */
-   readsl(ss->base + SS_TXFIFO, bufo, tx_cnt);
+   readsl(ss->base + SS_TXFIFO, ss->bufo, tx_cnt);
obl = tx_cnt * 4;
obo = 0;
do {
@@ -313,7 +309,7 @@ static int sun4i_ss_cipher_poll(struct skcipher_request 
*areq)
 */
todo = min_t(size_t,
 mo.length - oo, obl - obo);
-   memcpy(mo.addr + oo, bufo + obo, todo);
+   memcpy(mo.addr + oo, ss->bufo + obo, todo);
oleft -= todo;
obo += todo;
oo += todo;
diff --git a/drivers/crypto/allwinner/sun4i-ss/sun4i-ss.h 
b/drivers/crypto/allwinner/sun4i-ss/sun4i-ss.h
index 163962f9e2845..02105b39fbfec 100644
--- a/drivers/crypto/allwinner/sun4i-ss/sun4i-ss.h
+++ b/drivers/crypto/allwinner/sun4i-ss/sun4i-ss.h
@@ -148,6 +148,8 @@ struct sun4i_ss_ctx {
struct reset_control *reset;
struct device *dev;
struct resource *res;
+   char buf[4 * SS_RX_MAX];/* buffer for linearize SG src */
+   char bufo[4 * SS_TX_MAX]; /* buffer for linearize SG dst */
spinlock_t slock; /* control the use of the device */
 #ifdef CONFIG_CRYPTO_DEV_SUN4I_SS_PRNG
u32 seed[SS_SEED_LEN / BITS_PER_LONG];
-- 
2.27.0





[PATCH 5.10 041/663] bpf: Add bpf_patch_call_args prototype to include/linux/bpf.h

2021-03-01 Thread Greg Kroah-Hartman
From: Andrii Nakryiko 

[ Upstream commit a643bff752dcf72a07e1b2ab2f8587e4f51118be ]

Add bpf_patch_call_args() prototype. This function is called from BPF verifier
and only if CONFIG_BPF_JIT_ALWAYS_ON is not defined. This fixes compiler
warning about missing prototype in some kernel configurations.

Fixes: 1ea47e01ad6e ("bpf: add support for bpf_call to interpreter")
Reported-by: kernel test robot 
Signed-off-by: Andrii Nakryiko 
Signed-off-by: Alexei Starovoitov 
Acked-by: Yonghong Song 
Link: https://lore.kernel.org/bpf/20210112075520.4103414-2-and...@kernel.org
Signed-off-by: Sasha Levin 
---
 include/linux/bpf.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/include/linux/bpf.h b/include/linux/bpf.h
index 2b16bf48aab61..642ce03f19c4c 100644
--- a/include/linux/bpf.h
+++ b/include/linux/bpf.h
@@ -1371,7 +1371,10 @@ static inline void bpf_long_memcpy(void *dst, const void 
*src, u32 size)
 /* verify correctness of eBPF program */
 int bpf_check(struct bpf_prog **fp, union bpf_attr *attr,
  union bpf_attr __user *uattr);
+
+#ifndef CONFIG_BPF_JIT_ALWAYS_ON
 void bpf_patch_call_args(struct bpf_insn *insn, u32 stack_depth);
+#endif
 
 struct btf *bpf_get_btf_vmlinux(void);
 
-- 
2.27.0





[PATCH 5.10 174/663] sched/fair: Avoid stale CPU util_est value for schedutil in task dequeue

2021-03-01 Thread Greg Kroah-Hartman
From: Xuewen Yan 

[ Upstream commit 8c1f560c1ea3f19e22ba356f62680d9d449c9ec2 ]

CPU (root cfs_rq) estimated utilization (util_est) is currently used in
dequeue_task_fair() to drive frequency selection before it is updated.

with:

CPU_util: rq->cfs.avg.util_avg
CPU_util_est: rq->cfs.avg.util_est
CPU_utilization : max(CPU_util, CPU_util_est)
task_util   : p->se.avg.util_avg
task_util_est   : p->se.avg.util_est

dequeue_task_fair():

/* (1) CPU_util and task_util update + inform schedutil about
   CPU_utilization changes */
for_each_sched_entity() /* 2 loops */
(dequeue_entity() ->) update_load_avg() -> cfs_rq_util_change()
 -> cpufreq_update_util() ->...-> sugov_update_[shared\|single]
 -> sugov_get_util() -> cpu_util_cfs()

/* (2) CPU_util_est and task_util_est update */
util_est_dequeue()

cpu_util_cfs() uses CPU_utilization which could lead to a false (too
high) utilization value for schedutil in task ramp-down or ramp-up
scenarios during task dequeue.

To mitigate the issue split the util_est update (2) into:

 (A) CPU_util_est update in util_est_dequeue()
 (B) task_util_est update in util_est_update()

Place (A) before (1) and keep (B) where (2) is. The latter is necessary
since (B) relies on task_util update in (1).

Fixes: 7f65ea42eb00 ("sched/fair: Add util_est on top of PELT")
Signed-off-by: Xuewen Yan 
Signed-off-by: Peter Zijlstra (Intel) 
Reviewed-by: Dietmar Eggemann 
Reviewed-by: Vincent Guittot 
Link: 
https://lkml.kernel.org/r/1608283672-18240-1-git-send-email-xuewen.ya...@gmail.com
Signed-off-by: Sasha Levin 
---
 kernel/sched/fair.c | 43 ---
 1 file changed, 28 insertions(+), 15 deletions(-)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index ae7ceba8fd4f2..f3a1b7ac4458b 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -3932,6 +3932,22 @@ static inline void util_est_enqueue(struct cfs_rq 
*cfs_rq,
trace_sched_util_est_cfs_tp(cfs_rq);
 }
 
+static inline void util_est_dequeue(struct cfs_rq *cfs_rq,
+   struct task_struct *p)
+{
+   unsigned int enqueued;
+
+   if (!sched_feat(UTIL_EST))
+   return;
+
+   /* Update root cfs_rq's estimated utilization */
+   enqueued  = cfs_rq->avg.util_est.enqueued;
+   enqueued -= min_t(unsigned int, enqueued, _task_util_est(p));
+   WRITE_ONCE(cfs_rq->avg.util_est.enqueued, enqueued);
+
+   trace_sched_util_est_cfs_tp(cfs_rq);
+}
+
 /*
  * Check if a (signed) value is within a specified (unsigned) margin,
  * based on the observation that:
@@ -3945,23 +3961,16 @@ static inline bool within_margin(int value, int margin)
return ((unsigned int)(value + margin - 1) < (2 * margin - 1));
 }
 
-static void
-util_est_dequeue(struct cfs_rq *cfs_rq, struct task_struct *p, bool task_sleep)
+static inline void util_est_update(struct cfs_rq *cfs_rq,
+  struct task_struct *p,
+  bool task_sleep)
 {
long last_ewma_diff;
struct util_est ue;
-   int cpu;
 
if (!sched_feat(UTIL_EST))
return;
 
-   /* Update root cfs_rq's estimated utilization */
-   ue.enqueued  = cfs_rq->avg.util_est.enqueued;
-   ue.enqueued -= min_t(unsigned int, ue.enqueued, _task_util_est(p));
-   WRITE_ONCE(cfs_rq->avg.util_est.enqueued, ue.enqueued);
-
-   trace_sched_util_est_cfs_tp(cfs_rq);
-
/*
 * Skip update of task's estimated utilization when the task has not
 * yet completed an activation, e.g. being migrated.
@@ -4001,8 +4010,7 @@ util_est_dequeue(struct cfs_rq *cfs_rq, struct 
task_struct *p, bool task_sleep)
 * To avoid overestimation of actual task utilization, skip updates if
 * we cannot grant there is idle time in this CPU.
 */
-   cpu = cpu_of(rq_of(cfs_rq));
-   if (task_util(p) > capacity_orig_of(cpu))
+   if (task_util(p) > capacity_orig_of(cpu_of(rq_of(cfs_rq
return;
 
/*
@@ -4085,8 +4093,11 @@ static inline void
 util_est_enqueue(struct cfs_rq *cfs_rq, struct task_struct *p) {}
 
 static inline void
-util_est_dequeue(struct cfs_rq *cfs_rq, struct task_struct *p,
-bool task_sleep) {}
+util_est_dequeue(struct cfs_rq *cfs_rq, struct task_struct *p) {}
+
+static inline void
+util_est_update(struct cfs_rq *cfs_rq, struct task_struct *p,
+   bool task_sleep) {}
 static inline void update_misfit_status(struct task_struct *p, struct rq *rq) 
{}
 
 #endif /* CONFIG_SMP */
@@ -5589,6 +5600,8 @@ static void dequeue_task_fair(struct rq *rq, struct 
task_struct *p, int flags)
int idle_h_nr_running = task_has_idle_policy(p);
bool was_sched_idle = sched_idle_rq(rq);
 
+   util_est_dequeue(>cfs, p);
+
for_each_sched_entity(se) {
cfs_rq = cfs_rq_of(se);
dequeue_entity(cfs_rq, se, flags);

[PATCH 5.10 059/663] Bluetooth: drop HCI device reference before return

2021-03-01 Thread Greg Kroah-Hartman
From: Pan Bian 

[ Upstream commit 5a3ef03afe7e12982dc3b978f4c5077c907f7501 ]

Call hci_dev_put() to decrement reference count of HCI device hdev if
fails to duplicate memory.

Fixes: 0b26ab9dce74 ("Bluetooth: AMP: Handle Accept phylink command status evt")
Signed-off-by: Pan Bian 
Signed-off-by: Marcel Holtmann 
Signed-off-by: Sasha Levin 
---
 net/bluetooth/a2mp.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/net/bluetooth/a2mp.c b/net/bluetooth/a2mp.c
index cc26e4c047ad0..463bad58478b2 100644
--- a/net/bluetooth/a2mp.c
+++ b/net/bluetooth/a2mp.c
@@ -512,6 +512,7 @@ static int a2mp_createphyslink_req(struct amp_mgr *mgr, 
struct sk_buff *skb,
assoc = kmemdup(req->amp_assoc, assoc_len, GFP_KERNEL);
if (!assoc) {
amp_ctrl_put(ctrl);
+   hci_dev_put(hdev);
return -ENOMEM;
}
 
-- 
2.27.0





[PATCH 5.11 340/775] RDMA/rtrs-srv: Use sysfs_remove_file_self for disconnect

2021-03-01 Thread Greg Kroah-Hartman
From: Jack Wang 

[ Upstream commit f991fdac813f1598a9bb17b602ce04812ba9148c ]

Remove self first to avoid deadlock, we don't want to
use close_work to remove sess sysfs.

Fixes: 91b11610af8d ("RDMA/rtrs: server: sysfs interface functions")
Link: 
https://lore.kernel.org/r/20201217141915.56989-5-jinpu.w...@cloud.ionos.com
Signed-off-by: Jack Wang 
Tested-by: Lutz Pogrell 
Signed-off-by: Jason Gunthorpe 
Signed-off-by: Sasha Levin 
---
 drivers/infiniband/ulp/rtrs/rtrs-srv-sysfs.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/infiniband/ulp/rtrs/rtrs-srv-sysfs.c 
b/drivers/infiniband/ulp/rtrs/rtrs-srv-sysfs.c
index d2edff3b8f0df..cca3a0acbabc5 100644
--- a/drivers/infiniband/ulp/rtrs/rtrs-srv-sysfs.c
+++ b/drivers/infiniband/ulp/rtrs/rtrs-srv-sysfs.c
@@ -51,6 +51,8 @@ static ssize_t rtrs_srv_disconnect_store(struct kobject *kobj,
sockaddr_to_str((struct sockaddr *)>s.dst_addr, str, sizeof(str));
 
rtrs_info(s, "disconnect for path %s requested\n", str);
+   /* first remove sysfs itself to avoid deadlock */
+   sysfs_remove_file_self(>kobj, >attr);
close_sess(sess);
 
return count;
-- 
2.27.0





[PATCH 5.11 329/775] dmaengine: ti: k3-udma: Set rflow count for BCDMA split channels

2021-03-01 Thread Greg Kroah-Hartman
From: Vignesh Raghavendra 

[ Upstream commit aecf9d38361090857aa58708e500ee79bed1e273 ]

BCDMA RX channels have one flow per channel, therefore set the rflow_cnt
to rchan_cnt.

Without this patch, request for BCDMA RX channel allocation fails as
rflow_cnt is 0 thus fails to reserve a rflow for the channel.

Fixes: 8844898028d4 ("dmaengine: ti: k3-udma: Add support for BCDMA channel TPL 
handling")
Signed-off-by: Vignesh Raghavendra 
Acked-by: Peter Ujfalusi 
Link: https://lore.kernel.org/r/20210112141403.30286-1-vigne...@ti.com
Signed-off-by: Vinod Koul 
Signed-off-by: Sasha Levin 
---
 drivers/dma/ti/k3-udma.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/dma/ti/k3-udma.c b/drivers/dma/ti/k3-udma.c
index f474a12323354..46bc1a419bdfb 100644
--- a/drivers/dma/ti/k3-udma.c
+++ b/drivers/dma/ti/k3-udma.c
@@ -4306,6 +4306,7 @@ static int udma_get_mmrs(struct platform_device *pdev, 
struct udma_dev *ud)
ud->bchan_cnt = BCDMA_CAP2_BCHAN_CNT(cap2);
ud->tchan_cnt = BCDMA_CAP2_TCHAN_CNT(cap2);
ud->rchan_cnt = BCDMA_CAP2_RCHAN_CNT(cap2);
+   ud->rflow_cnt = ud->rchan_cnt;
break;
case DMA_TYPE_PKTDMA:
cap4 = udma_read(ud->mmrs[MMR_GCFG], 0x30);
-- 
2.27.0





[PATCH 5.10 109/663] net/mlx5: Disallow RoCE on multi port slave device

2021-03-01 Thread Greg Kroah-Hartman
From: Shay Drory 

[ Upstream commit c70f8597fcc1399ef6d5b5ce648a31d887d5dba2 ]

In dual port mode, setting roce enabled/disable for the slave device
have no effect. e.g.: the slave device roce status remain unchanged.
Therefore disable it and add an error message.
Enable or disable roce of the master device affect both master and slave
devices.

Fixes: cc9defcbb8fa ("net/mlx5: Handle "enable_roce" devlink param")
Signed-off-by: Shay Drory 
Reviewed-by: Moshe Shemesh 
Signed-off-by: Saeed Mahameed 
Signed-off-by: Sasha Levin 
---
 drivers/net/ethernet/mellanox/mlx5/core/devlink.c | 4 
 1 file changed, 4 insertions(+)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c 
b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
index a28f95df2901d..7ffc94c4979b2 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
@@ -282,6 +282,10 @@ static int mlx5_devlink_enable_roce_validate(struct 
devlink *devlink, u32 id,
NL_SET_ERR_MSG_MOD(extack, "Device doesn't support RoCE");
return -EOPNOTSUPP;
}
+   if (mlx5_core_is_mp_slave(dev)) {
+   NL_SET_ERR_MSG_MOD(extack, "Multi port slave device can't 
configure RoCE");
+   return -EOPNOTSUPP;
+   }
 
return 0;
 }
-- 
2.27.0





[PATCH 5.10 054/663] usb: gadget: u_audio: Free requests only after callback

2021-03-01 Thread Greg Kroah-Hartman
From: Jack Pham 

[ Upstream commit 7de8681be2cde9f6953d3be1fa6ce05f9fe6e637 ]

As per the kernel doc for usb_ep_dequeue(), it states that "this
routine is asynchronous, that is, it may return before the completion
routine runs". And indeed since v5.0 the dwc3 gadget driver updated
its behavior to place dequeued requests on to a cancelled list to be
given back later after the endpoint is stopped.

The free_ep() was incorrectly assuming that a request was ready to
be freed after calling dequeue which results in a use-after-free
in dwc3 when it traverses its cancelled list. Fix this by moving
the usb_ep_free_request() call to the callback itself in case the
ep is disabled.

Fixes: eb9fecb9e69b0 ("usb: gadget: f_uac2: split out audio core")
Reported-and-tested-by: Ferry Toth 
Reviewed-and-tested-by: Peter Chen 
Acked-by: Felipe Balbi 
Signed-off-by: Jack Pham 
Signed-off-by: Jerome Brunet 
Link: https://lore.kernel.org/r/20210118084642.322510-2-jbru...@baylibre.com
Signed-off-by: Greg Kroah-Hartman 
Signed-off-by: Sasha Levin 
---
 drivers/usb/gadget/function/u_audio.c | 17 ++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/gadget/function/u_audio.c 
b/drivers/usb/gadget/function/u_audio.c
index e6d32c5367812..908e49dafd620 100644
--- a/drivers/usb/gadget/function/u_audio.c
+++ b/drivers/usb/gadget/function/u_audio.c
@@ -89,7 +89,12 @@ static void u_audio_iso_complete(struct usb_ep *ep, struct 
usb_request *req)
struct snd_uac_chip *uac = prm->uac;
 
/* i/f shutting down */
-   if (!prm->ep_enabled || req->status == -ESHUTDOWN)
+   if (!prm->ep_enabled) {
+   usb_ep_free_request(ep, req);
+   return;
+   }
+
+   if (req->status == -ESHUTDOWN)
return;
 
/*
@@ -336,8 +341,14 @@ static inline void free_ep(struct uac_rtd_params *prm, 
struct usb_ep *ep)
 
for (i = 0; i < params->req_number; i++) {
if (prm->ureq[i].req) {
-   usb_ep_dequeue(ep, prm->ureq[i].req);
-   usb_ep_free_request(ep, prm->ureq[i].req);
+   if (usb_ep_dequeue(ep, prm->ureq[i].req))
+   usb_ep_free_request(ep, prm->ureq[i].req);
+   /*
+* If usb_ep_dequeue() cannot successfully dequeue the
+* request, the request will be freed by the completion
+* callback.
+*/
+
prm->ureq[i].req = NULL;
}
}
-- 
2.27.0





[PATCH 5.11 219/775] bsg: free the request before return error code

2021-03-01 Thread Greg Kroah-Hartman
From: Pan Bian 

[ Upstream commit 0f7b4bc6bb1e57c48ef14f1818df947c1612b206 ]

Free the request rq before returning error code.

Fixes: 972248e9111e ("scsi: bsg-lib: handle bidi requests without block layer 
help")
Signed-off-by: Pan Bian 
Reviewed-by: Christoph Hellwig 
Signed-off-by: Jens Axboe 
Signed-off-by: Sasha Levin 
---
 block/bsg.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/block/bsg.c b/block/bsg.c
index d7bae94b64d95..3d78e843a83f6 100644
--- a/block/bsg.c
+++ b/block/bsg.c
@@ -157,8 +157,10 @@ static int bsg_sg_io(struct request_queue *q, fmode_t 
mode, void __user *uarg)
return PTR_ERR(rq);
 
ret = q->bsg_dev.ops->fill_hdr(rq, , mode);
-   if (ret)
+   if (ret) {
+   blk_put_request(rq);
return ret;
+   }
 
rq->timeout = msecs_to_jiffies(hdr.timeout);
if (!rq->timeout)
-- 
2.27.0





[PATCH 5.11 251/775] mtd: parsers: afs: Fix freeing the part name memory in failure

2021-03-01 Thread Greg Kroah-Hartman
From: Manivannan Sadhasivam 

[ Upstream commit 7b844cf445f0a7daa68be0ce71eb2c88d68b0c5d ]

In the case of failure while parsing the partitions, the iterator should
be pre decremented by one before starting to free the memory allocated
by kstrdup(). Because in the failure case, kstrdup() will not succeed
and thus no memory will be allocated for the current iteration.

Fixes: 1fca1f6abb38 ("mtd: afs: simplify partition parsing")
Signed-off-by: Manivannan Sadhasivam 
Reviewed-by: Linus Walleij 
Cc: Linus Walleij 
Signed-off-by: Miquel Raynal 
Link: 
https://lore.kernel.org/linux-mtd/20210104041137.113075-5-manivannan.sadhasi...@linaro.org
Signed-off-by: Sasha Levin 
---
 drivers/mtd/parsers/afs.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/mtd/parsers/afs.c b/drivers/mtd/parsers/afs.c
index 980e332bdac48..26116694c821b 100644
--- a/drivers/mtd/parsers/afs.c
+++ b/drivers/mtd/parsers/afs.c
@@ -370,10 +370,8 @@ static int parse_afs_partitions(struct mtd_info *mtd,
return i;
 
 out_free_parts:
-   while (i >= 0) {
+   while (--i >= 0)
kfree(parts[i].name);
-   i--;
-   }
kfree(parts);
*pparts = NULL;
return ret;
-- 
2.27.0





[PATCH 5.11 039/775] staging: vchiq: Fix bulk userdata handling

2021-03-01 Thread Greg Kroah-Hartman
From: Phil Elwell 

[ Upstream commit 96ae327678eceabf455b11a88ba14ad540d4b046 ]

The addition of the local 'userdata' pointer to
vchiq_irq_queue_bulk_tx_rx omitted the case where neither BLOCKING nor
WAITING modes are used, in which case the value provided by the
caller is not returned to them as expected, but instead it is replaced
with a NULL. This lack of a suitable context may cause the application
to crash or otherwise malfunction.

Fixes: 4184da4f316a ("staging: vchiq: fix __user annotations")
Tested-by: Stefan Wahren 
Acked-by: Dan Carpenter 
Signed-off-by: Phil Elwell 
Link: https://lore.kernel.org/r/20210105162030.1415213-2-p...@raspberrypi.com
Signed-off-by: Greg Kroah-Hartman 
Signed-off-by: Sasha Levin 
---
 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c 
b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
index f500a70438056..2a8883673ba11 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
@@ -958,7 +958,7 @@ static int vchiq_irq_queue_bulk_tx_rx(struct vchiq_instance 
*instance,
struct vchiq_service *service;
struct bulk_waiter_node *waiter = NULL;
bool found = false;
-   void *userdata = NULL;
+   void *userdata;
int status = 0;
int ret;
 
@@ -997,6 +997,8 @@ static int vchiq_irq_queue_bulk_tx_rx(struct vchiq_instance 
*instance,
"found bulk_waiter %pK for pid %d", waiter,
current->pid);
userdata = >bulk_waiter;
+   } else {
+   userdata = args->userdata;
}
 
/*
-- 
2.27.0





[PATCH 5.11 235/775] sched/eas: Dont update misfit status if the task is pinned

2021-03-01 Thread Greg Kroah-Hartman
From: Qais Yousef 

[ Upstream commit 0ae78eec8aa64e645866e75005162603a77a0f49 ]

If the task is pinned to a cpu, setting the misfit status means that
we'll unnecessarily continuously attempt to migrate the task but fail.

This continuous failure will cause the balance_interval to increase to
a high value, and eventually cause unnecessary significant delays in
balancing the system when real imbalance happens.

Caught while testing uclamp where rt-app calibration loop was pinned to
cpu 0, shortly after which we spawn another task with high util_clamp
value. The task was failing to migrate after over 40ms of runtime due to
balance_interval unnecessary expanded to a very high value from the
calibration loop.

Not done here, but it could be useful to extend the check for pinning to
verify that the affinity of the task has a cpu that fits. We could end
up in a similar situation otherwise.

Fixes: 3b1baa6496e6 ("sched/fair: Add 'group_misfit_task' load-balance type")
Signed-off-by: Qais Yousef 
Signed-off-by: Peter Zijlstra (Intel) 
Reviewed-by: Quentin Perret 
Acked-by: Valentin Schneider 
Link: https://lkml.kernel.org/r/20210119120755.2425264-1-qais.you...@arm.com
Signed-off-by: Sasha Levin 
---
 kernel/sched/fair.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 6918adaf74150..bbc78794224ac 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -4060,7 +4060,7 @@ static inline void update_misfit_status(struct 
task_struct *p, struct rq *rq)
if (!static_branch_unlikely(_asym_cpucapacity))
return;
 
-   if (!p) {
+   if (!p || p->nr_cpus_allowed == 1) {
rq->misfit_task_load = 0;
return;
}
-- 
2.27.0





[PATCH 5.10 124/663] bpf: Clear subreg_def for global function return values

2021-03-01 Thread Greg Kroah-Hartman
From: Ilya Leoshkevich 

[ Upstream commit 45159b27637b0fef6d5ddb86fc7c46b13c77960f ]

test_global_func4 fails on s390 as reported by Yauheni in [1].

The immediate problem is that the zext code includes the instruction,
whose result needs to be zero-extended, into the zero-extension
patchlet, and if this instruction happens to be a branch, then its
delta is not adjusted. As a result, the verifier rejects the program
later.

However, according to [2], as far as the verifier's algorithm is
concerned and as specified by the insn_no_def() function, branching
insns do not define anything. This includes call insns, even though
one might argue that they define %r0.

This means that the real problem is that zero extension kicks in at
all. This happens because clear_caller_saved_regs() sets BPF_REG_0's
subreg_def after global function calls. This can be fixed in many
ways; this patch mimics what helper function call handling already
does.

  [1] 
https://lore.kernel.org/bpf/20200903140542.156624-1-yauheni.kali...@redhat.com/
  [2] 
https://lore.kernel.org/bpf/caadnvq+2rpkcftzw8d+b1uwb35cpbhpf5u3oocnh90d9pet...@mail.gmail.com/

Fixes: 51c39bb1d5d1 ("bpf: Introduce function-by-function verification")
Reported-by: Yauheni Kaliuta 
Signed-off-by: Ilya Leoshkevich 
Signed-off-by: Daniel Borkmann 
Link: https://lore.kernel.org/bpf/20210212040408.90109-1-...@linux.ibm.com
Signed-off-by: Sasha Levin 
---
 kernel/bpf/verifier.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index c09594e70f90a..6c2e4947beaeb 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -4786,8 +4786,9 @@ static int check_func_call(struct bpf_verifier_env *env, 
struct bpf_insn *insn,
subprog);
clear_caller_saved_regs(env, caller->regs);
 
-   /* All global functions return SCALAR_VALUE */
+   /* All global functions return a 64-bit SCALAR_VALUE */
mark_reg_unknown(env, caller->regs, BPF_REG_0);
+   caller->regs[BPF_REG_0].subreg_def = DEF_NOT_SUBREG;
 
/* continue with next insn after call */
return 0;
-- 
2.27.0





[PATCH 5.11 030/775] ARM: dts: exynos: correct PMIC interrupt trigger level on Monk

2021-03-01 Thread Greg Kroah-Hartman
From: Krzysztof Kozlowski 

[ Upstream commit 8528cda2b7c667e9cd173aef1a677c71b7d5a096 ]

The Samsung PMIC datasheets describe the interrupt line as active low
with a requirement of acknowledge from the CPU.  Without specifying the
interrupt type in Devicetree, kernel might apply some fixed
configuration, not necessarily working for this hardware.

Fixes: e0cefb3f79d3 ("ARM: dts: add board dts file for Exynos3250-based Monk 
board")
Signed-off-by: Krzysztof Kozlowski 
Link: https://lore.kernel.org/r/20201210212903.216728-2-k...@kernel.org
Signed-off-by: Sasha Levin 
---
 arch/arm/boot/dts/exynos3250-monk.dts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/boot/dts/exynos3250-monk.dts 
b/arch/arm/boot/dts/exynos3250-monk.dts
index 69451566945dc..fae046e08a5dd 100644
--- a/arch/arm/boot/dts/exynos3250-monk.dts
+++ b/arch/arm/boot/dts/exynos3250-monk.dts
@@ -200,7 +200,7 @@
pmic@66 {
compatible = "samsung,s2mps14-pmic";
interrupt-parent = <>;
-   interrupts = <7 IRQ_TYPE_NONE>;
+   interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
reg = <0x66>;
wakeup-source;
 
-- 
2.27.0





[PATCH 5.10 444/663] vfio/type1: Use follow_pte()

2021-03-01 Thread Greg Kroah-Hartman
From: Alex Williamson 

[ Upstream commit 07956b6269d3ed05d854233d5bb776dca91751dd ]

follow_pfn() doesn't make sure that we're using the correct page
protections, get the pte with follow_pte() so that we can test
protections and get the pfn from the pte.

Fixes: 5cbf3264bc71 ("vfio/type1: Fix VA->PA translation for PFNMAP VMAs in 
vaddr_get_pfn()")
Reviewed-by: Jason Gunthorpe 
Reviewed-by: Cornelia Huck 
Reviewed-by: Peter Xu 
Signed-off-by: Alex Williamson 
Signed-off-by: Sasha Levin 
---
 drivers/vfio/vfio_iommu_type1.c | 15 +--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
index c12fc0d190627..fbd438e9b9b03 100644
--- a/drivers/vfio/vfio_iommu_type1.c
+++ b/drivers/vfio/vfio_iommu_type1.c
@@ -24,6 +24,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -431,9 +432,11 @@ static int follow_fault_pfn(struct vm_area_struct *vma, 
struct mm_struct *mm,
unsigned long vaddr, unsigned long *pfn,
bool write_fault)
 {
+   pte_t *ptep;
+   spinlock_t *ptl;
int ret;
 
-   ret = follow_pfn(vma, vaddr, pfn);
+   ret = follow_pte(vma->vm_mm, vaddr, , );
if (ret) {
bool unlocked = false;
 
@@ -447,9 +450,17 @@ static int follow_fault_pfn(struct vm_area_struct *vma, 
struct mm_struct *mm,
if (ret)
return ret;
 
-   ret = follow_pfn(vma, vaddr, pfn);
+   ret = follow_pte(vma->vm_mm, vaddr, , );
+   if (ret)
+   return ret;
}
 
+   if (write_fault && !pte_write(*ptep))
+   ret = -EFAULT;
+   else
+   *pfn = pte_pfn(*ptep);
+
+   pte_unmap_unlock(ptep, ptl);
return ret;
 }
 
-- 
2.27.0





[PATCH 5.11 328/775] dmaengine: qcom: Always inline gpi_update_reg

2021-03-01 Thread Greg Kroah-Hartman
From: Nathan Chancellor 

[ Upstream commit 0a6d3038d914b51d6860f23ea2b508590e8340de ]

When building with CONFIG_UBSAN_UNSIGNED_OVERFLOW, clang decides not to
inline gpi_update_reg, which causes a linkage failure around __bad_mask:

ld.lld: error: undefined symbol: __bad_mask
>>> referenced by bitfield.h:119 (include/linux/bitfield.h:119)
>>>   dma/qcom/gpi.o:(gpi_update_reg) in archive drivers/built-in.a
>>> referenced by bitfield.h:119 (include/linux/bitfield.h:119)
>>>   dma/qcom/gpi.o:(gpi_update_reg) in archive drivers/built-in.a

If gpi_update_reg is not inlined, the mask value will not be known at
compile time so the check in field_multiplier stays in the final
object file, causing the above linkage failure. Always inline
gpi_update_reg so that this check can never fail.

Fixes: 5d0c3533a19f ("dmaengine: qcom: Add GPI dma driver")
Link: https://github.com/ClangBuiltLinux/linux/issues/1243
Signed-off-by: Nathan Chancellor 
Link: 
https://lore.kernel.org/r/20210112191214.1264793-1-natechancel...@gmail.com
Signed-off-by: Vinod Koul 
Signed-off-by: Sasha Levin 
---
 drivers/dma/qcom/gpi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/dma/qcom/gpi.c b/drivers/dma/qcom/gpi.c
index 1a0bf6b0567a5..e48eb397f433d 100644
--- a/drivers/dma/qcom/gpi.c
+++ b/drivers/dma/qcom/gpi.c
@@ -584,7 +584,7 @@ static inline void gpi_write_reg_field(struct gpii *gpii, 
void __iomem *addr,
gpi_write_reg(gpii, addr, val);
 }
 
-static inline void
+static __always_inline void
 gpi_update_reg(struct gpii *gpii, u32 offset, u32 mask, u32 val)
 {
void __iomem *addr = gpii->regs + offset;
-- 
2.27.0





[PATCH 5.10 531/663] btrfs: do not cleanup upper nodes in btrfs_backref_cleanup_node

2021-03-01 Thread Greg Kroah-Hartman
From: Josef Bacik 

commit 7e2a870a599d4699a626ec26430c7a1ab14a2a49 upstream.

Zygo reported the following panic when testing my error handling patches
for relocation:

  kernel BUG at fs/btrfs/backref.c:2545!
  invalid opcode:  [#1] SMP KASAN PTI CPU: 3 PID: 8472 Comm: btrfs Tainted: 
GW 14
  Hardware name: QEMU Standard PC (i440FX + PIIX,

  Call Trace:
   btrfs_backref_error_cleanup+0x4df/0x530
   build_backref_tree+0x1a5/0x700
   ? _raw_spin_unlock+0x22/0x30
   ? release_extent_buffer+0x225/0x280
   ? free_extent_buffer.part.52+0xd7/0x140
   relocate_tree_blocks+0x2a6/0xb60
   ? kasan_unpoison_shadow+0x35/0x50
   ? do_relocation+0xc10/0xc10
   ? kasan_kmalloc+0x9/0x10
   ? kmem_cache_alloc_trace+0x6a3/0xcb0
   ? free_extent_buffer.part.52+0xd7/0x140
   ? rb_insert_color+0x342/0x360
   ? add_tree_block.isra.36+0x236/0x2b0
   relocate_block_group+0x2eb/0x780
   ? merge_reloc_roots+0x470/0x470
   btrfs_relocate_block_group+0x26e/0x4c0
   btrfs_relocate_chunk+0x52/0x120
   btrfs_balance+0xe2e/0x18f0
   ? pvclock_clocksource_read+0xeb/0x190
   ? btrfs_relocate_chunk+0x120/0x120
   ? lock_contended+0x620/0x6e0
   ? do_raw_spin_lock+0x1e0/0x1e0
   ? do_raw_spin_unlock+0xa8/0x140
   btrfs_ioctl_balance+0x1f9/0x460
   btrfs_ioctl+0x24c8/0x4380
   ? __kasan_check_read+0x11/0x20
   ? check_chain_key+0x1f4/0x2f0
   ? __asan_loadN+0xf/0x20
   ? btrfs_ioctl_get_supported_features+0x30/0x30
   ? kvm_sched_clock_read+0x18/0x30
   ? check_chain_key+0x1f4/0x2f0
   ? lock_downgrade+0x3f0/0x3f0
   ? handle_mm_fault+0xad6/0x2150
   ? do_vfs_ioctl+0xfc/0x9d0
   ? ioctl_file_clone+0xe0/0xe0
   ? check_flags.part.50+0x6c/0x1e0
   ? check_flags.part.50+0x6c/0x1e0
   ? check_flags+0x26/0x30
   ? lock_is_held_type+0xc3/0xf0
   ? syscall_enter_from_user_mode+0x1b/0x60
   ? do_syscall_64+0x13/0x80
   ? rcu_read_lock_sched_held+0xa1/0xd0
   ? __kasan_check_read+0x11/0x20
   ? __fget_light+0xae/0x110
   __x64_sys_ioctl+0xc3/0x100
   do_syscall_64+0x37/0x80
   entry_SYSCALL_64_after_hwframe+0x44/0xa9

This occurs because of this check

  if (RB_EMPTY_NODE(>rb_node))
  BUG_ON(!list_empty(>upper));

As we are dropping the backref node, if we discover that our upper node
in the edge we just cleaned up isn't linked into the cache that we are
now done with this node, thus the BUG_ON().

However this is an erroneous assumption, as we will look up all the
references for a node first, and then process the pending edges.  All of
the 'upper' nodes in our pending edges won't be in the cache's rb_tree
yet, because they haven't been processed.  We could very well have many
edges still left to cleanup on this node.

The fact is we simply do not need this check, we can just process all of
the edges only for this node, because below this check we do the
following

  if (list_empty(>lower)) {
  list_add_tail(>lower, >leaves);
  upper->lowest = 1;
  }

If the upper node truly isn't used yet, then we add it to the
cache->leaves list to be cleaned up later.  If it is still used then the
last child node that has it linked into its node will add it to the
leaves list and then it will be cleaned up.

Fix this problem by dropping this logic altogether.  With this fix I no
longer see the panic when testing with error injection in the backref
code.

CC: sta...@vger.kernel.org # 4.4+
Reviewed-by: Qu Wenruo 
Signed-off-by: Josef Bacik 
Signed-off-by: David Sterba 
Signed-off-by: Greg Kroah-Hartman 
---
 fs/btrfs/backref.c |7 ---
 1 file changed, 7 deletions(-)

--- a/fs/btrfs/backref.c
+++ b/fs/btrfs/backref.c
@@ -2548,13 +2548,6 @@ void btrfs_backref_cleanup_node(struct b
list_del(>list[UPPER]);
btrfs_backref_free_edge(cache, edge);
 
-   if (RB_EMPTY_NODE(>rb_node)) {
-   BUG_ON(!list_empty(>upper));
-   btrfs_backref_drop_node(cache, node);
-   node = upper;
-   node->lowest = 1;
-   continue;
-   }
/*
 * Add the node to leaf node list if no other child block
 * cached.




[PATCH 5.10 196/663] sched/eas: Dont update misfit status if the task is pinned

2021-03-01 Thread Greg Kroah-Hartman
From: Qais Yousef 

[ Upstream commit 0ae78eec8aa64e645866e75005162603a77a0f49 ]

If the task is pinned to a cpu, setting the misfit status means that
we'll unnecessarily continuously attempt to migrate the task but fail.

This continuous failure will cause the balance_interval to increase to
a high value, and eventually cause unnecessary significant delays in
balancing the system when real imbalance happens.

Caught while testing uclamp where rt-app calibration loop was pinned to
cpu 0, shortly after which we spawn another task with high util_clamp
value. The task was failing to migrate after over 40ms of runtime due to
balance_interval unnecessary expanded to a very high value from the
calibration loop.

Not done here, but it could be useful to extend the check for pinning to
verify that the affinity of the task has a cpu that fits. We could end
up in a similar situation otherwise.

Fixes: 3b1baa6496e6 ("sched/fair: Add 'group_misfit_task' load-balance type")
Signed-off-by: Qais Yousef 
Signed-off-by: Peter Zijlstra (Intel) 
Reviewed-by: Quentin Perret 
Acked-by: Valentin Schneider 
Link: https://lkml.kernel.org/r/20210119120755.2425264-1-qais.you...@arm.com
Signed-off-by: Sasha Levin 
---
 kernel/sched/fair.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index f3a1b7ac4458b..3486053060276 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -4049,7 +4049,7 @@ static inline void update_misfit_status(struct 
task_struct *p, struct rq *rq)
if (!static_branch_unlikely(_asym_cpucapacity))
return;
 
-   if (!p) {
+   if (!p || p->nr_cpus_allowed == 1) {
rq->misfit_task_load = 0;
return;
}
-- 
2.27.0





[PATCH 5.10 395/663] phy: rockchip-emmc: emmc_phy_init() always return 0

2021-03-01 Thread Greg Kroah-Hartman
From: Chris Ruehl 

[ Upstream commit 39961bd6b70e5a5d7c4b5483ad8e1db6b5765c60 ]

rockchip_emmc_phy_init() return variable is not set with the error value
if clk_get() failed. 'emmcclk' is optional, thus use clk_get_optional()
and if the return value != NULL make error processing and set the
return code accordingly.

Fixes: 52c0624a10cce phy: rockchip-emmc: Set phyctrl_frqsel based on card clock
Signed-off-by: Chris Ruehl 
Reviewed-by: Douglas Anderson 
Link: https://lore.kernel.org/r/20201210080454.17379-1-chris.ru...@gtsys.com.hk
Signed-off-by: Vinod Koul 
Signed-off-by: Sasha Levin 
---
 drivers/phy/rockchip/phy-rockchip-emmc.c | 8 +---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/phy/rockchip/phy-rockchip-emmc.c 
b/drivers/phy/rockchip/phy-rockchip-emmc.c
index 2dc19ddd120f5..a005fc58bbf02 100644
--- a/drivers/phy/rockchip/phy-rockchip-emmc.c
+++ b/drivers/phy/rockchip/phy-rockchip-emmc.c
@@ -240,15 +240,17 @@ static int rockchip_emmc_phy_init(struct phy *phy)
 * - SDHCI driver to get the PHY
 * - SDHCI driver to init the PHY
 *
-* The clock is optional, so upon any error we just set to NULL.
+* The clock is optional, using clk_get_optional() to get the clock
+* and do error processing if the return value != NULL
 *
 * NOTE: we don't do anything special for EPROBE_DEFER here.  Given the
 * above expected use case, EPROBE_DEFER isn't sensible to expect, so
 * it's just like any other error.
 */
-   rk_phy->emmcclk = clk_get(>dev, "emmcclk");
+   rk_phy->emmcclk = clk_get_optional(>dev, "emmcclk");
if (IS_ERR(rk_phy->emmcclk)) {
-   dev_dbg(>dev, "Error getting emmcclk: %d\n", ret);
+   ret = PTR_ERR(rk_phy->emmcclk);
+   dev_err(>dev, "Error getting emmcclk: %d\n", ret);
rk_phy->emmcclk = NULL;
}
 
-- 
2.27.0





[PATCH 5.11 243/775] crypto: talitos - Work around SEC6 ERRATA (AES-CTR mode data size error)

2021-03-01 Thread Greg Kroah-Hartman
From: Christophe Leroy 

[ Upstream commit 416b846757bcea20006a9197e67ba3a8b5b2a680 ]

Talitos Security Engine AESU considers any input
data size that is not a multiple of 16 bytes to be an error.
This is not a problem in general, except for Counter mode
that is a stream cipher and can have an input of any size.

Test Manager for ctr(aes) fails on 4th test vector which has
a length of 499 while all previous vectors which have a 16 bytes
multiple length succeed.

As suggested by Freescale, round up the input data length to the
nearest 16 bytes.

Fixes: 5e75ae1b3cef ("crypto: talitos - add new crypto modes")
Signed-off-by: Christophe Leroy 
Signed-off-by: Herbert Xu 
Signed-off-by: Sasha Levin 
---
 drivers/crypto/talitos.c | 28 
 drivers/crypto/talitos.h |  1 +
 2 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
index 4fd85f31630ac..b656983c1ef4e 100644
--- a/drivers/crypto/talitos.c
+++ b/drivers/crypto/talitos.c
@@ -1093,11 +1093,12 @@ static void ipsec_esp_decrypt_hwauth_done(struct device 
*dev,
  */
 static int sg_to_link_tbl_offset(struct scatterlist *sg, int sg_count,
 unsigned int offset, int datalen, int elen,
-struct talitos_ptr *link_tbl_ptr)
+struct talitos_ptr *link_tbl_ptr, int align)
 {
int n_sg = elen ? sg_count + 1 : sg_count;
int count = 0;
int cryptlen = datalen + elen;
+   int padding = ALIGN(cryptlen, align) - cryptlen;
 
while (cryptlen && sg && n_sg--) {
unsigned int len = sg_dma_len(sg);
@@ -1121,7 +1122,7 @@ static int sg_to_link_tbl_offset(struct scatterlist *sg, 
int sg_count,
offset += datalen;
}
to_talitos_ptr(link_tbl_ptr + count,
-  sg_dma_address(sg) + offset, len, 0);
+  sg_dma_address(sg) + offset, sg_next(sg) ? len : 
len + padding, 0);
to_talitos_ptr_ext_set(link_tbl_ptr + count, 0, 0);
count++;
cryptlen -= len;
@@ -1144,10 +1145,11 @@ static int talitos_sg_map_ext(struct device *dev, 
struct scatterlist *src,
  unsigned int len, struct talitos_edesc *edesc,
  struct talitos_ptr *ptr, int sg_count,
  unsigned int offset, int tbl_off, int elen,
- bool force)
+ bool force, int align)
 {
struct talitos_private *priv = dev_get_drvdata(dev);
bool is_sec1 = has_ftr_sec1(priv);
+   int aligned_len = ALIGN(len, align);
 
if (!src) {
to_talitos_ptr(ptr, 0, 0, is_sec1);
@@ -1155,22 +1157,22 @@ static int talitos_sg_map_ext(struct device *dev, 
struct scatterlist *src,
}
to_talitos_ptr_ext_set(ptr, elen, is_sec1);
if (sg_count == 1 && !force) {
-   to_talitos_ptr(ptr, sg_dma_address(src) + offset, len, is_sec1);
+   to_talitos_ptr(ptr, sg_dma_address(src) + offset, aligned_len, 
is_sec1);
return sg_count;
}
if (is_sec1) {
-   to_talitos_ptr(ptr, edesc->dma_link_tbl + offset, len, is_sec1);
+   to_talitos_ptr(ptr, edesc->dma_link_tbl + offset, aligned_len, 
is_sec1);
return sg_count;
}
sg_count = sg_to_link_tbl_offset(src, sg_count, offset, len, elen,
->link_tbl[tbl_off]);
+>link_tbl[tbl_off], align);
if (sg_count == 1 && !force) {
/* Only one segment now, so no link tbl needed*/
copy_talitos_ptr(ptr, >link_tbl[tbl_off], is_sec1);
return sg_count;
}
to_talitos_ptr(ptr, edesc->dma_link_tbl +
-   tbl_off * sizeof(struct talitos_ptr), len, is_sec1);
+   tbl_off * sizeof(struct talitos_ptr), aligned_len, 
is_sec1);
to_talitos_ptr_ext_or(ptr, DESC_PTR_LNKTBL_JUMP, is_sec1);
 
return sg_count;
@@ -1182,7 +1184,7 @@ static int talitos_sg_map(struct device *dev, struct 
scatterlist *src,
  unsigned int offset, int tbl_off)
 {
return talitos_sg_map_ext(dev, src, len, edesc, ptr, sg_count, offset,
- tbl_off, 0, false);
+ tbl_off, 0, false, 1);
 }
 
 /*
@@ -1251,7 +1253,7 @@ static int ipsec_esp(struct talitos_edesc *edesc, struct 
aead_request *areq,
 
ret = talitos_sg_map_ext(dev, areq->src, cryptlen, edesc, >ptr[4],
 sg_count, areq->assoclen, tbl_off, elen,
-false);
+false, 1);
 
if (ret > 1) {
tbl_off += ret;
@@ -1271,7 +1273,7 @@ static int 

[PATCH 5.10 217/663] drm/mediatek: Fix aal size config

2021-03-01 Thread Greg Kroah-Hartman
[ Upstream commit 71dcadba34203d8dd35152e368720f977e9cdb81 ]

The orginal setting is not correct, fix it to follow hardware data sheet.
If keep this error setting, mt8173/mt8183 display ok
but mt8192 display abnormal.

Fixes: 0664d1392c26 ("drm/mediatek: Add AAL engine basic function")

Signed-off-by: Yongqiang Niu 
Signed-off-by: Chun-Kuang Hu 
Signed-off-by: Sasha Levin 
---
 drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c 
b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c
index 3064eac1a7507..7fcb717f256c9 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c
@@ -180,7 +180,9 @@ static void mtk_aal_config(struct mtk_ddp_comp *comp, 
unsigned int w,
   unsigned int h, unsigned int vrefresh,
   unsigned int bpc, struct cmdq_pkt *cmdq_pkt)
 {
-   mtk_ddp_write(cmdq_pkt, h << 16 | w, comp, DISP_AAL_SIZE);
+   struct mtk_ddp_comp_dev *priv = dev_get_drvdata(comp->dev);
+
+   mtk_ddp_write(cmdq_pkt, w << 16 | h, >cmdq_reg, priv->regs, 
DISP_AAL_SIZE);
 }
 
 static void mtk_aal_start(struct mtk_ddp_comp *comp)
-- 
2.27.0





[PATCH 5.11 216/775] MIPS: Compare __SYNC_loongson3_war against 0

2021-03-01 Thread Greg Kroah-Hartman
From: Nathan Chancellor 

[ Upstream commit 8790ccf8daf1a8c53b6cb8ce0c9a109274bd3fa8 ]

When building with clang when CONFIG_CPU_LOONGSON3_WORKAROUNDS is
enabled:

 In file included from lib/errseq.c:4:
 In file included from ./include/linux/atomic.h:7:
 ./arch/mips/include/asm/atomic.h:52:1: warning: converting the result of
 '<<' to a boolean always evaluates to true
 [-Wtautological-constant-compare]
 ATOMIC_OPS(atomic64, s64)
 ^
 ./arch/mips/include/asm/atomic.h:40:9: note: expanded from macro
 'ATOMIC_OPS'
 return cmpxchg(>counter, o, n);
^
 ./arch/mips/include/asm/cmpxchg.h:194:7: note: expanded from macro
 'cmpxchg'
 if (!__SYNC_loongson3_war)
  ^
 ./arch/mips/include/asm/sync.h:147:34: note: expanded from macro
 '__SYNC_loongson3_war'
 # define __SYNC_loongson3_war   (1 << 31)
^

While it is not wrong that the result of this shift is always true in a
boolean context, it is not a problem here. Regardless, the warning is
really noisy so rather than making the shift a boolean implicitly, use
it in an equality comparison so the shift is used as an integer value.

Fixes: 4d1dbfe6cbec ("MIPS: atomic: Emit Loongson3 sync workarounds within asm")
Fixes: a91f2a1dba44 ("MIPS: cmpxchg: Omit redundant barriers for Loongson3")
Reported-by: kernel test robot 
Signed-off-by: Nathan Chancellor 
Acked-by: Nick Desaulniers 
Signed-off-by: Thomas Bogendoerfer 
Signed-off-by: Sasha Levin 
---
 arch/mips/include/asm/atomic.h  | 2 +-
 arch/mips/include/asm/cmpxchg.h | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/mips/include/asm/atomic.h b/arch/mips/include/asm/atomic.h
index f904084fcb1fd..27ad767915390 100644
--- a/arch/mips/include/asm/atomic.h
+++ b/arch/mips/include/asm/atomic.h
@@ -248,7 +248,7 @@ static __inline__ int pfx##_sub_if_positive(type i, pfx##_t 
* v)\
 * bltz that can branch to code outside of the LL/SC loop. As   \
 * such, we don't need to emit another barrier here.\
 */ \
-   if (!__SYNC_loongson3_war)  \
+   if (__SYNC_loongson3_war == 0)  \
smp_mb__after_atomic(); \
\
return result;  \
diff --git a/arch/mips/include/asm/cmpxchg.h b/arch/mips/include/asm/cmpxchg.h
index 5b0b3a6777ea5..ed8f3f3c4304a 100644
--- a/arch/mips/include/asm/cmpxchg.h
+++ b/arch/mips/include/asm/cmpxchg.h
@@ -99,7 +99,7 @@ unsigned long __xchg(volatile void *ptr, unsigned long x, int 
size)
 * contains a completion barrier prior to the LL, so we don't   \
 * need to emit an extra one here.  \
 */ \
-   if (!__SYNC_loongson3_war)  \
+   if (__SYNC_loongson3_war == 0)  \
smp_mb__before_llsc();  \
\
__res = (__typeof__(*(ptr)))\
@@ -191,7 +191,7 @@ unsigned long __cmpxchg(volatile void *ptr, unsigned long 
old,
 * contains a completion barrier prior to the LL, so we don't   \
 * need to emit an extra one here.  \
 */ \
-   if (!__SYNC_loongson3_war)  \
+   if (__SYNC_loongson3_war == 0)  \
smp_mb__before_llsc();  \
\
__res = cmpxchg_local((ptr), (old), (new)); \
@@ -201,7 +201,7 @@ unsigned long __cmpxchg(volatile void *ptr, unsigned long 
old,
 * contains a completion barrier after the SC, so we don't  \
 * need to emit an extra one here.  \
 */ \
-   if (!__SYNC_loongson3_war)  \
+   if (__SYNC_loongson3_war == 0)  \
smp_llsc_mb();  \
\
__res;  \
-- 
2.27.0





[PATCH 5.10 326/663] powerpc/47x: Disable 256k page size

2021-03-01 Thread Greg Kroah-Hartman
From: Christophe Leroy 

[ Upstream commit 910a0cb6d259736a0c86e795d4c2f42af8d0d775 ]

PPC47x_TLBE_SIZE isn't defined for 256k pages, leading to a build
break if 256k pages is selected.

So change the kconfig so that 256k pages can't be selected for 47x.

Fixes: e7f75ad01d59 ("powerpc/47x: Base ppc476 support")
Reported-by: kernel test robot 
Signed-off-by: Christophe Leroy 
[mpe: Expand change log to mention build break]
Signed-off-by: Michael Ellerman 
Link: 
https://lore.kernel.org/r/2fed79b1154c872194f98bac4422c23918325e61.1611128938.git.christophe.le...@csgroup.eu
Signed-off-by: Sasha Levin 
---
 arch/powerpc/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 5181872f94523..31ed8083571ff 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -761,7 +761,7 @@ config PPC_64K_PAGES
 
 config PPC_256K_PAGES
bool "256k page size"
-   depends on 44x && !STDBINUTILS
+   depends on 44x && !STDBINUTILS && !PPC_47x
help
  Make the page size 256k.
 
-- 
2.27.0





[PATCH 5.10 074/663] Bluetooth: btusb: Fix memory leak in btusb_mtk_wmt_recv

2021-03-01 Thread Greg Kroah-Hartman
From: Jupeng Zhong 

[ Upstream commit de71a6cb4bf24d8993b9ca90d1ddb131b60251a1 ]

In btusb_mtk_wmt_recv if skb_clone fails, the alocated skb should be
released.

Omit the labels “err_out” and “err_free_skb” in this function
implementation so that the desired exception handling code
would be directly specified in the affected if branches.

Fixes: a1c49c434e15 ("btusb: Add protocol support for MediaTek MT7668U USB 
devices")
Signed-off-by: Jupeng Zhong 
Signed-off-by: Marcel Holtmann 
Signed-off-by: Sasha Levin 
---
 drivers/bluetooth/btusb.c | 20 ++--
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 1c942869baacc..2953b96b3ceda 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -2827,7 +2827,7 @@ static void btusb_mtk_wmt_recv(struct urb *urb)
skb = bt_skb_alloc(HCI_WMT_MAX_EVENT_SIZE, GFP_ATOMIC);
if (!skb) {
hdev->stat.err_rx++;
-   goto err_out;
+   return;
}
 
hci_skb_pkt_type(skb) = HCI_EVENT_PKT;
@@ -2845,13 +2845,18 @@ static void btusb_mtk_wmt_recv(struct urb *urb)
 */
if (test_bit(BTUSB_TX_WAIT_VND_EVT, >flags)) {
data->evt_skb = skb_clone(skb, GFP_ATOMIC);
-   if (!data->evt_skb)
-   goto err_out;
+   if (!data->evt_skb) {
+   kfree_skb(skb);
+   return;
+   }
}
 
err = hci_recv_frame(hdev, skb);
-   if (err < 0)
-   goto err_free_skb;
+   if (err < 0) {
+   kfree_skb(data->evt_skb);
+   data->evt_skb = NULL;
+   return;
+   }
 
if (test_and_clear_bit(BTUSB_TX_WAIT_VND_EVT,
   >flags)) {
@@ -2860,11 +2865,6 @@ static void btusb_mtk_wmt_recv(struct urb *urb)
wake_up_bit(>flags,
BTUSB_TX_WAIT_VND_EVT);
}
-err_out:
-   return;
-err_free_skb:
-   kfree_skb(data->evt_skb);
-   data->evt_skb = NULL;
return;
} else if (urb->status == -ENOENT) {
/* Avoid suspend failed when usb_kill_urb */
-- 
2.27.0





[PATCH 5.11 069/775] x86/MSR: Filter MSR writes through X86_IOC_WRMSR_REGS ioctl too

2021-03-01 Thread Greg Kroah-Hartman
From: Misono Tomohiro 

[ Upstream commit 02a16aa13574c8526beadfc9ae8cc9b66315fa2d ]

Commit

  a7e1f67ed29f ("x86/msr: Filter MSR writes")

introduced a module parameter to disable writing to the MSR device file
and tainted the kernel upon writing. As MSR registers can be written by
the X86_IOC_WRMSR_REGS ioctl too, the same filtering and tainting should
be applied to the ioctl as well.

 [ bp: Massage commit message and space out statements. ]

Fixes: a7e1f67ed29f ("x86/msr: Filter MSR writes")
Signed-off-by: Misono Tomohiro 
Signed-off-by: Borislav Petkov 
Link: 
https://lkml.kernel.org/r/20210127122456.13939-1-misono.tomoh...@jp.fujitsu.com
Signed-off-by: Sasha Levin 
---
 arch/x86/kernel/msr.c | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c
index 8a67d1fa8dc58..ed8ac6bcbafb2 100644
--- a/arch/x86/kernel/msr.c
+++ b/arch/x86/kernel/msr.c
@@ -182,6 +182,13 @@ static long msr_ioctl(struct file *file, unsigned int ioc, 
unsigned long arg)
err = security_locked_down(LOCKDOWN_MSR);
if (err)
break;
+
+   err = filter_write(regs[1]);
+   if (err)
+   return err;
+
+   add_taint(TAINT_CPU_OUT_OF_SPEC, LOCKDEP_STILL_OK);
+
err = wrmsr_safe_regs_on_cpu(cpu, regs);
if (err)
break;
-- 
2.27.0





[PATCH 5.11 033/775] ARM: dts: exynos: correct PMIC interrupt trigger level on Arndale Octa

2021-03-01 Thread Greg Kroah-Hartman
From: Krzysztof Kozlowski 

[ Upstream commit 1ac8893c4fa3d4a34915dc5cdab568a39db5086c ]

The Samsung PMIC datasheets describe the interrupt line as active low
with a requirement of acknowledge from the CPU.  The falling edge
interrupt will mostly work but it's not correct.

Fixes: 1fed2252713e ("ARM: dts: fix pinctrl for s2mps11-irq on 
exynos5420-arndale-octa")
Signed-off-by: Krzysztof Kozlowski 
Tested-by: Marek Szyprowski 
Link: https://lore.kernel.org/r/20201210212903.216728-5-k...@kernel.org
Signed-off-by: Sasha Levin 
---
 arch/arm/boot/dts/exynos5420-arndale-octa.dts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/boot/dts/exynos5420-arndale-octa.dts 
b/arch/arm/boot/dts/exynos5420-arndale-octa.dts
index bf457d0c02ebd..1aad4859c5f14 100644
--- a/arch/arm/boot/dts/exynos5420-arndale-octa.dts
+++ b/arch/arm/boot/dts/exynos5420-arndale-octa.dts
@@ -349,7 +349,7 @@
reg = <0x66>;
 
interrupt-parent = <>;
-   interrupts = <2 IRQ_TYPE_EDGE_FALLING>;
+   interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
pinctrl-names = "default";
pinctrl-0 = <_irq>;
 
-- 
2.27.0





[PATCH 5.11 146/775] arm64: dts: qcom: sm8250: correct sdhc_2 xo clk

2021-03-01 Thread Greg Kroah-Hartman
From: Dmitry Baryshkov 

[ Upstream commit 74097d805edb9305a2a588a8ece82d2495ff5a88 ]

sdhc_2 uses 1920 Hz clock rather than wrongly specified xo_board
(3940 Hz). Specify correct clock to fix DLL setup for SDR104 mode.

Signed-off-by: Dmitry Baryshkov 
Fixes: c4cf0300be84 ("arm64: dts: qcom: sm8250: Add support for SDC2")
Link: 
https://lore.kernel.org/r/20210109011252.3436533-1-dmitry.barysh...@linaro.org
Signed-off-by: Bjorn Andersson 
Signed-off-by: Sasha Levin 
---
 arch/arm64/boot/dts/qcom/sm8250.dtsi | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm64/boot/dts/qcom/sm8250.dtsi 
b/arch/arm64/boot/dts/qcom/sm8250.dtsi
index 65acd1f381eba..1ae90e8b70f32 100644
--- a/arch/arm64/boot/dts/qcom/sm8250.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm8250.dtsi
@@ -1657,7 +1657,7 @@
 
clocks = < GCC_SDCC2_AHB_CLK>,
 < GCC_SDCC2_APPS_CLK>,
-<_board>;
+< RPMH_CXO_CLK>;
clock-names = "iface", "core", "xo";
iommus = <_smmu 0x4a0 0x0>;
qcom,dll-config = <0x0007642c>;
-- 
2.27.0





[PATCH 5.10 497/663] USB: serial: mos7840: fix error code in mos7840_write()

2021-03-01 Thread Greg Kroah-Hartman
From: Dan Carpenter 

commit a70aa7dc60099bbdcbd6faca42a915d80f31161e upstream.

This should return -ENOMEM instead of 0 if the kmalloc() fails.

Fixes: 3f5429746d91 ("USB: Moschip 7840 USB-Serial Driver")
Signed-off-by: Dan Carpenter 
Cc: sta...@vger.kernel.org
Signed-off-by: Johan Hovold 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/usb/serial/mos7840.c |4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

--- a/drivers/usb/serial/mos7840.c
+++ b/drivers/usb/serial/mos7840.c
@@ -883,8 +883,10 @@ static int mos7840_write(struct tty_stru
if (urb->transfer_buffer == NULL) {
urb->transfer_buffer = kmalloc(URB_TRANSFER_BUFFER_SIZE,
   GFP_ATOMIC);
-   if (!urb->transfer_buffer)
+   if (!urb->transfer_buffer) {
+   bytes_sent = -ENOMEM;
goto exit;
+   }
}
transfer_size = min(count, URB_TRANSFER_BUFFER_SIZE);
 




[PATCH 5.11 058/775] soc: qcom: socinfo: Fix an off by one in qcom_show_pmic_model()

2021-03-01 Thread Greg Kroah-Hartman
From: Dan Carpenter 

[ Upstream commit 5fb33d8960dc7abdabc6fe599a30c2c99b082ef6 ]

These need to be < ARRAY_SIZE() instead of <= ARRAY_SIZE() to prevent
accessing one element beyond the end of the array.

Acked-by: Dmitry Baryshkov 
Reviewed-by: Douglas Anderson 
Reviewed-by: Stephen Boyd 
Fixes: e9247e2ce577 ("soc: qcom: socinfo: fix printing of pmic_model")
Signed-off-by: Dan Carpenter 
Link: https://lore.kernel.org/r/YAf+o85Z9lgkq3Nw@mwanda
Signed-off-by: Bjorn Andersson 
Signed-off-by: Sasha Levin 
---
 drivers/soc/qcom/socinfo.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/soc/qcom/socinfo.c b/drivers/soc/qcom/socinfo.c
index d21530d24253e..6daa3c5771d16 100644
--- a/drivers/soc/qcom/socinfo.c
+++ b/drivers/soc/qcom/socinfo.c
@@ -286,7 +286,7 @@ static int qcom_show_pmic_model(struct seq_file *seq, void 
*p)
if (model < 0)
return -EINVAL;
 
-   if (model <= ARRAY_SIZE(pmic_models) && pmic_models[model])
+   if (model < ARRAY_SIZE(pmic_models) && pmic_models[model])
seq_printf(seq, "%s\n", pmic_models[model]);
else
seq_printf(seq, "unknown (%d)\n", model);
-- 
2.27.0





[PATCH 5.4 316/340] um: mm: check more comprehensively for stub changes

2021-03-01 Thread Greg Kroah-Hartman
From: Johannes Berg 

commit 47da29763ec9a153b9b685bff9db659e4e09e494 upstream.

If userspace tries to change the stub, we need to kill it,
because otherwise it can escape the virtual machine. In a
few cases the stub checks weren't good, e.g. if userspace
just tries to

mmap(0x10 - 0x1000, 0x3000, ...)

it could succeed to get a new private/anonymous mapping
replacing the stubs. Fix this by checking everywhere, and
checking for _overlap_, not just direct changes.

Cc: sta...@vger.kernel.org
Fixes: 396fe676 ("uml: cover stubs with a VMA")
Signed-off-by: Johannes Berg 
Signed-off-by: Richard Weinberger 
Signed-off-by: Greg Kroah-Hartman 
---
 arch/um/kernel/tlb.c |   12 +++-
 1 file changed, 11 insertions(+), 1 deletion(-)

--- a/arch/um/kernel/tlb.c
+++ b/arch/um/kernel/tlb.c
@@ -126,6 +126,9 @@ static int add_mmap(unsigned long virt,
struct host_vm_op *last;
int fd = -1, ret = 0;
 
+   if (virt + len > STUB_START && virt < STUB_END)
+   return -EINVAL;
+
if (hvc->userspace)
fd = phys_mapping(phys, );
else
@@ -163,7 +166,7 @@ static int add_munmap(unsigned long addr
struct host_vm_op *last;
int ret = 0;
 
-   if ((addr >= STUB_START) && (addr < STUB_END))
+   if (addr + len > STUB_START && addr < STUB_END)
return -EINVAL;
 
if (hvc->index != 0) {
@@ -193,6 +196,9 @@ static int add_mprotect(unsigned long ad
struct host_vm_op *last;
int ret = 0;
 
+   if (addr + len > STUB_START && addr < STUB_END)
+   return -EINVAL;
+
if (hvc->index != 0) {
last = >ops[hvc->index - 1];
if ((last->type == MPROTECT) &&
@@ -433,6 +439,10 @@ void flush_tlb_page(struct vm_area_struc
struct mm_id *mm_id;
 
address &= PAGE_MASK;
+
+   if (address >= STUB_START && address < STUB_END)
+   goto kill;
+
pgd = pgd_offset(mm, address);
if (!pgd_present(*pgd))
goto kill;




[PATCH 5.4 263/340] tpm_tis: Clean up locality release

2021-03-01 Thread Greg Kroah-Hartman
From: James Bottomley 

commit e42acf104d6e0bd7ccd2f09103d5be5e6d3c637c upstream.

The current release locality code seems to be based on the
misunderstanding that the TPM interrupts when a locality is released:
it doesn't, only when the locality is acquired.

Furthermore, there seems to be no point in waiting for the locality to
be released.  All it does is penalize the last TPM user.  However, if
there's no next TPM user, this is a pointless wait and if there is a
next TPM user, they'll pay the penalty waiting for the new locality
(or possibly not if it's the same as the old locality).

Fix the code by making release_locality as simple write to release
with no waiting for completion.

Cc: sta...@ger.kernel.org
Fixes: 33bafe90824b ("tpm_tis: verify locality released before returning from 
release_locality")
Signed-off-by: James Bottomley 
Reviewed-by: Jerry Snitselaar 
Reviewed-by: Jarkko Sakkinen 
Signed-off-by: Jarkko Sakkinen 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/char/tpm/tpm_tis_core.c |   47 
 1 file changed, 1 insertion(+), 46 deletions(-)

--- a/drivers/char/tpm/tpm_tis_core.c
+++ b/drivers/char/tpm/tpm_tis_core.c
@@ -135,58 +135,13 @@ static bool check_locality(struct tpm_ch
return false;
 }
 
-static bool locality_inactive(struct tpm_chip *chip, int l)
-{
-   struct tpm_tis_data *priv = dev_get_drvdata(>dev);
-   int rc;
-   u8 access;
-
-   rc = tpm_tis_read8(priv, TPM_ACCESS(l), );
-   if (rc < 0)
-   return false;
-
-   if ((access & (TPM_ACCESS_VALID | TPM_ACCESS_ACTIVE_LOCALITY))
-   == TPM_ACCESS_VALID)
-   return true;
-
-   return false;
-}
-
 static int release_locality(struct tpm_chip *chip, int l)
 {
struct tpm_tis_data *priv = dev_get_drvdata(>dev);
-   unsigned long stop, timeout;
-   long rc;
 
tpm_tis_write8(priv, TPM_ACCESS(l), TPM_ACCESS_ACTIVE_LOCALITY);
 
-   stop = jiffies + chip->timeout_a;
-
-   if (chip->flags & TPM_CHIP_FLAG_IRQ) {
-again:
-   timeout = stop - jiffies;
-   if ((long)timeout <= 0)
-   return -1;
-
-   rc = wait_event_interruptible_timeout(priv->int_queue,
- (locality_inactive(chip, 
l)),
- timeout);
-
-   if (rc > 0)
-   return 0;
-
-   if (rc == -ERESTARTSYS && freezing(current)) {
-   clear_thread_flag(TIF_SIGPENDING);
-   goto again;
-   }
-   } else {
-   do {
-   if (locality_inactive(chip, l))
-   return 0;
-   tpm_msleep(TPM_TIMEOUT);
-   } while (time_before(jiffies, stop));
-   }
-   return -1;
+   return 0;
 }
 
 static int request_locality(struct tpm_chip *chip, int l)




[PATCH 5.10 498/663] USB: serial: mos7720: fix error code in mos7720_write()

2021-03-01 Thread Greg Kroah-Hartman
From: Dan Carpenter 

commit fea7372cbc40869876df0f045e367f6f97a1666c upstream.

This code should return -ENOMEM if the kmalloc() fails but instead
it returns success.

Signed-off-by: Dan Carpenter 
Fixes: 0f64478cbc7a ("USB: add USB serial mos7720 driver")
Cc: sta...@vger.kernel.org
Signed-off-by: Johan Hovold 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/usb/serial/mos7720.c |4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

--- a/drivers/usb/serial/mos7720.c
+++ b/drivers/usb/serial/mos7720.c
@@ -1250,8 +1250,10 @@ static int mos7720_write(struct tty_stru
if (urb->transfer_buffer == NULL) {
urb->transfer_buffer = kmalloc(URB_TRANSFER_BUFFER_SIZE,
   GFP_ATOMIC);
-   if (!urb->transfer_buffer)
+   if (!urb->transfer_buffer) {
+   bytes_sent = -ENOMEM;
goto exit;
+   }
}
transfer_size = min(count, URB_TRANSFER_BUFFER_SIZE);
 




[PATCH 5.11 215/775] MIPS: properly stop .eh_frame generation

2021-03-01 Thread Greg Kroah-Hartman
From: Alexander Lobakin 

[ Upstream commit 894ef530012fb5078466efdfb2c15d8b2f1565cd ]

Commit 866b6a89c6d1 ("MIPS: Add DWARF unwinding to assembly") added
-fno-asynchronous-unwind-tables to KBUILD_CFLAGS to prevent compiler
from emitting .eh_frame symbols.
However, as MIPS heavily uses CFI, that's not enough. Use the
approach taken for x86 (as it also uses CFI) and explicitly put CFI
symbols into the .debug_frame section (except for VDSO).
This allows us to drop .eh_frame from DISCARDS as it's no longer
being generated.

Fixes: 866b6a89c6d1 ("MIPS: Add DWARF unwinding to assembly")
Suggested-by: Kees Cook 
Signed-off-by: Alexander Lobakin 
Reviewed-by: Kees Cook 
Reviewed-by: Nathan Chancellor 
Signed-off-by: Thomas Bogendoerfer 
Signed-off-by: Sasha Levin 
---
 arch/mips/include/asm/asm.h| 18 ++
 arch/mips/kernel/vmlinux.lds.S |  1 -
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/arch/mips/include/asm/asm.h b/arch/mips/include/asm/asm.h
index 3682d1a0bb808..ea4b62ece3366 100644
--- a/arch/mips/include/asm/asm.h
+++ b/arch/mips/include/asm/asm.h
@@ -20,10 +20,27 @@
 #include 
 #include 
 
+#ifndef __VDSO__
+/*
+ * Emit CFI data in .debug_frame sections, not .eh_frame sections.
+ * We don't do DWARF unwinding at runtime, so only the offline DWARF
+ * information is useful to anyone. Note we should change this if we
+ * ever decide to enable DWARF unwinding at runtime.
+ */
+#define CFI_SECTIONS   .cfi_sections .debug_frame
+#else
+ /*
+  * For the vDSO, emit both runtime unwind information and debug
+  * symbols for the .dbg file.
+  */
+#define CFI_SECTIONS
+#endif
+
 /*
  * LEAF - declare leaf routine
  */
 #define LEAF(symbol)   \
+   CFI_SECTIONS;   \
.globl  symbol; \
.align  2;  \
.type   symbol, @function;  \
@@ -36,6 +53,7 @@ symbol:   .frame  sp, 0, ra;  
\
  * NESTED - declare nested routine entry point
  */
 #define NESTED(symbol, framesize, rpc) \
+   CFI_SECTIONS;   \
.globl  symbol; \
.align  2;  \
.type   symbol, @function;  \
diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S
index 83e27a181206a..09fa4705ce8eb 100644
--- a/arch/mips/kernel/vmlinux.lds.S
+++ b/arch/mips/kernel/vmlinux.lds.S
@@ -224,6 +224,5 @@ SECTIONS
*(.options)
*(.pdr)
*(.reginfo)
-   *(.eh_frame)
}
 }
-- 
2.27.0





[PATCH 5.10 068/663] arm64: dts: renesas: beacon: Fix EEPROM compatible value

2021-03-01 Thread Greg Kroah-Hartman
From: Geert Uytterhoeven 

[ Upstream commit 74477936a828a7c91a61ba7e625b7ce2299c8c98 ]

"make dtbs_check" fails with:

arch/arm64/boot/dts/renesas/r8a774b1-beacon-rzg2n-kit.dt.yaml: eeprom@50: 
compatible: 'oneOf' conditional failed, one must be fixed:
'microchip,at24c64' does not match 
'^(atmel|catalyst|microchip|nxp|ramtron|renesas|rohm|st),(24(c|cs|lc|mac)[0-9]+|spd)$'

Fix this by dropping the bogus "at" prefix.

Fixes: a1d8a344f1ca0709 ("arm64: dts: renesas: Introduce 
r8a774a1-beacon-rzg2m-kit")
Signed-off-by: Geert Uytterhoeven 
Link: https://lore.kernel.org/r/20210128110136.2293490-1-geert+rene...@glider.be
Signed-off-by: Sasha Levin 
---
 arch/arm64/boot/dts/renesas/beacon-renesom-som.dtsi | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm64/boot/dts/renesas/beacon-renesom-som.dtsi 
b/arch/arm64/boot/dts/renesas/beacon-renesom-som.dtsi
index 6d24b36ca0a7c..289cf711307d6 100644
--- a/arch/arm64/boot/dts/renesas/beacon-renesom-som.dtsi
+++ b/arch/arm64/boot/dts/renesas/beacon-renesom-som.dtsi
@@ -147,7 +147,7 @@
};
 
eeprom@50 {
-   compatible = "microchip,at24c64", "atmel,24c64";
+   compatible = "microchip,24c64", "atmel,24c64";
pagesize = <32>;
read-only;  /* Manufacturing EEPROM programmed at factory */
reg = <0x50>;
-- 
2.27.0





[PATCH 5.4 293/340] watchdog: qcom: Remove incorrect usage of QCOM_WDT_ENABLE_IRQ

2021-03-01 Thread Greg Kroah-Hartman
From: Sai Prakash Ranjan 

commit a4f3407c41605d14f09e490045d0609990cd5d94 upstream.

As per register documentation, QCOM_WDT_ENABLE_IRQ which is BIT(1)
of watchdog control register is wakeup interrupt enable bit and
not related to bark interrupt at all, BIT(0) is used for that.
So remove incorrect usage of this bit when supporting bark irq for
pre-timeout notification. Currently with this bit set and bark
interrupt specified, pre-timeout notification and/or watchdog
reset/bite does not occur.

Fixes: 36375491a439 ("watchdog: qcom: support pre-timeout when the bark irq is 
available")
Cc: sta...@vger.kernel.org
Signed-off-by: Sai Prakash Ranjan 
Reviewed-by: Guenter Roeck 
Reviewed-by: Stephen Boyd 
Link: 
https://lore.kernel.org/r/20210126150241.10009-1-saiprakash.ran...@codeaurora.org
Signed-off-by: Guenter Roeck 
Signed-off-by: Wim Van Sebroeck 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/watchdog/qcom-wdt.c |   13 +
 1 file changed, 1 insertion(+), 12 deletions(-)

--- a/drivers/watchdog/qcom-wdt.c
+++ b/drivers/watchdog/qcom-wdt.c
@@ -22,7 +22,6 @@ enum wdt_reg {
 };
 
 #define QCOM_WDT_ENABLEBIT(0)
-#define QCOM_WDT_ENABLE_IRQBIT(1)
 
 static const u32 reg_offset_data_apcs_tmr[] = {
[WDT_RST] = 0x38,
@@ -58,16 +57,6 @@ struct qcom_wdt *to_qcom_wdt(struct watc
return container_of(wdd, struct qcom_wdt, wdd);
 }
 
-static inline int qcom_get_enable(struct watchdog_device *wdd)
-{
-   int enable = QCOM_WDT_ENABLE;
-
-   if (wdd->pretimeout)
-   enable |= QCOM_WDT_ENABLE_IRQ;
-
-   return enable;
-}
-
 static irqreturn_t qcom_wdt_isr(int irq, void *arg)
 {
struct watchdog_device *wdd = arg;
@@ -86,7 +75,7 @@ static int qcom_wdt_start(struct watchdo
writel(1, wdt_addr(wdt, WDT_RST));
writel(bark * wdt->rate, wdt_addr(wdt, WDT_BARK_TIME));
writel(wdd->timeout * wdt->rate, wdt_addr(wdt, WDT_BITE_TIME));
-   writel(qcom_get_enable(wdd), wdt_addr(wdt, WDT_EN));
+   writel(QCOM_WDT_ENABLE, wdt_addr(wdt, WDT_EN));
return 0;
 }
 




[PATCH 5.11 229/775] media: mtk-vcodec: fix argument used when DEBUG is defined

2021-03-01 Thread Greg Kroah-Hartman
From: Tom Rix 

[ Upstream commit a04e187d231086a1313fd635ac42bdbc997137ad ]

When DEBUG is defined this error occurs

drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c:306:41:
  error: ‘i’ undeclared (first use in this function)
  mtk_v4l2_debug(2, "reg[%d] base=0x%p", i, dev->reg_base[VENC_SYS]);

Reviewing the old line

mtk_v4l2_debug(2, "reg[%d] base=0x%p", i, dev->reg_base[i]);

All the i's need to be changed to VENC_SYS.
Fix a similar error for VENC_LT_SYS.

Fixes: 0dc4b3286125 ("media: mtk-vcodec: venc: support SCP firmware")
Signed-off-by: Tom Rix 
Signed-off-by: Hans Verkuil 
Signed-off-by: Mauro Carvalho Chehab 
Signed-off-by: Sasha Levin 
---
 drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c 
b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c
index dfb42e19bf813..be3842e6ca475 100644
--- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c
+++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c
@@ -303,7 +303,7 @@ static int mtk_vcodec_probe(struct platform_device *pdev)
ret = PTR_ERR((__force void *)dev->reg_base[VENC_SYS]);
goto err_res;
}
-   mtk_v4l2_debug(2, "reg[%d] base=0x%p", i, dev->reg_base[VENC_SYS]);
+   mtk_v4l2_debug(2, "reg[%d] base=0x%p", VENC_SYS, 
dev->reg_base[VENC_SYS]);
 
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
if (res == NULL) {
@@ -332,7 +332,7 @@ static int mtk_vcodec_probe(struct platform_device *pdev)
ret = PTR_ERR((__force void 
*)dev->reg_base[VENC_LT_SYS]);
goto err_res;
}
-   mtk_v4l2_debug(2, "reg[%d] base=0x%p", i, 
dev->reg_base[VENC_LT_SYS]);
+   mtk_v4l2_debug(2, "reg[%d] base=0x%p", VENC_LT_SYS, 
dev->reg_base[VENC_LT_SYS]);
 
dev->enc_lt_irq = platform_get_irq(pdev, 1);
irq_set_status_flags(dev->enc_lt_irq, IRQ_NOAUTOEN);
-- 
2.27.0





[PATCH 5.10 285/663] of/fdt: Make sure no-map does not remove already reserved regions

2021-03-01 Thread Greg Kroah-Hartman
From: Nicolas Boichat 

[ Upstream commit 8a5a75e5e9e55de1cef5d83ca3589cb4899193ef ]

If the device tree is incorrectly configured, and attempts to
define a "no-map" reserved memory that overlaps with the kernel
data/code, the kernel would crash quickly after boot, with no
obvious clue about the nature of the issue.

For example, this would happen if we have the kernel mapped at
these addresses (from /proc/iomem):
4000-41ff : System RAM
  4008-40df : Kernel code
  40e0-411f : reserved
  4120-413e0fff : Kernel data

And we declare a no-map shared-dma-pool region at a fixed address
within that range:
mem_reserved: mem_region {
compatible = "shared-dma-pool";
reg = <0 0x4000 0 0x01A0>;
no-map;
};

To fix this, when removing memory regions at early boot (which is
what "no-map" regions do), we need to make sure that the memory
is not already reserved. If we do, __reserved_mem_reserve_reg
will throw an error:
[0.00] OF: fdt: Reserved memory: failed to reserve memory
   for node 'mem_region': base 0x4000, size 26 MiB
and the code that will try to use the region should also fail,
later on.

We do not do anything for non-"no-map" regions, as memblock
explicitly allows reserved regions to overlap, and the commit
that this fixes removed the check for that precise reason.

[ qperret: fixed conflicts caused by the usage of memblock_mark_nomap ]

Fixes: 094cb98179f19b7 ("of/fdt: memblock_reserve /memreserve/ regions in the 
case of partial overlap")
Signed-off-by: Nicolas Boichat 
Reviewed-by: Stephen Boyd 
Signed-off-by: Quentin Perret 
Link: https://lore.kernel.org/r/20210115114544.1830068-3-qper...@google.com
Signed-off-by: Rob Herring 
Signed-off-by: Sasha Levin 
---
 drivers/of/fdt.c | 10 +-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index e4d4a1e7ef7e2..f2e697000b96f 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
@@ -1149,8 +1149,16 @@ int __init __weak 
early_init_dt_mark_hotplug_memory_arch(u64 base, u64 size)
 int __init __weak early_init_dt_reserve_memory_arch(phys_addr_t base,
phys_addr_t size, bool nomap)
 {
-   if (nomap)
+   if (nomap) {
+   /*
+* If the memory is already reserved (by another region), we
+* should not allow it to be marked nomap.
+*/
+   if (memblock_is_region_reserved(base, size))
+   return -EBUSY;
+
return memblock_mark_nomap(base, size);
+   }
return memblock_reserve(base, size);
 }
 
-- 
2.27.0





[PATCH 5.10 324/663] IB/umad: Return EPOLLERR in case of when device disassociated

2021-03-01 Thread Greg Kroah-Hartman
From: Shay Drory 

[ Upstream commit def4cd43f522253645b72c97181399c241b54536 ]

Currently, polling a umad device will always works, even if the device was
disassociated. A disassociated device should immediately return EPOLLERR
from poll(). Otherwise userspace is endlessly hung on poll() with no idea
that the device has been removed from the system.

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Link: https://lore.kernel.org/r/20210125121339.837518-3-l...@kernel.org
Signed-off-by: Shay Drory 
Signed-off-by: Leon Romanovsky 
Signed-off-by: Jason Gunthorpe 
Signed-off-by: Sasha Levin 
---
 drivers/infiniband/core/user_mad.c | 10 ++
 1 file changed, 10 insertions(+)

diff --git a/drivers/infiniband/core/user_mad.c 
b/drivers/infiniband/core/user_mad.c
index 351631c4db9b3..4688a6657c875 100644
--- a/drivers/infiniband/core/user_mad.c
+++ b/drivers/infiniband/core/user_mad.c
@@ -397,6 +397,11 @@ static ssize_t ib_umad_read(struct file *filp, char __user 
*buf,
mutex_lock(>mutex);
}
 
+   if (file->agents_dead) {
+   mutex_unlock(>mutex);
+   return -EIO;
+   }
+
packet = list_entry(file->recv_list.next, struct ib_umad_packet, list);
list_del(>list);
 
@@ -658,10 +663,14 @@ static __poll_t ib_umad_poll(struct file *filp, struct 
poll_table_struct *wait)
/* we will always be able to post a MAD send */
__poll_t mask = EPOLLOUT | EPOLLWRNORM;
 
+   mutex_lock(>mutex);
poll_wait(filp, >recv_wait, wait);
 
if (!list_empty(>recv_list))
mask |= EPOLLIN | EPOLLRDNORM;
+   if (file->agents_dead)
+   mask = EPOLLERR;
+   mutex_unlock(>mutex);
 
return mask;
 }
@@ -1341,6 +1350,7 @@ static void ib_umad_kill_port(struct ib_umad_port *port)
list_for_each_entry(file, >file_list, port_list) {
mutex_lock(>mutex);
file->agents_dead = 1;
+   wake_up_interruptible(>recv_wait);
mutex_unlock(>mutex);
 
for (id = 0; id < IB_UMAD_MAX_AGENTS; ++id)
-- 
2.27.0





[PATCH 5.4 290/340] floppy: reintroduce O_NDELAY fix

2021-03-01 Thread Greg Kroah-Hartman
From: Jiri Kosina 

commit 8a0c014cd20516ade9654fc13b51345ec58e7be8 upstream.

This issue was originally fixed in 09954bad4 ("floppy: refactor open()
flags handling").

The fix as a side-effect, however, introduce issue for open(O_ACCMODE)
that is being used for ioctl-only open. I wrote a fix for that, but
instead of it being merged, full revert of 09954bad4 was performed,
re-introducing the O_NDELAY / O_NONBLOCK issue, and it strikes again.

This is a forward-port of the original fix to current codebase; the
original submission had the changelog below:


Commit 09954bad4 ("floppy: refactor open() flags handling"), as a
side-effect, causes open(/dev/fdX, O_ACCMODE) to fail. It turns out that
this is being used setfdprm userspace for ioctl-only open().

Reintroduce back the original behavior wrt !(FMODE_READ|FMODE_WRITE)
modes, while still keeping the original O_NDELAY bug fixed.

Link: https://lore.kernel.org/r/nycvar.yfh.7.76.2101221209060.5...@cbobk.fhfr.pm
Cc: sta...@vger.kernel.org
Reported-by: Wim Osterholt 
Tested-by: Wim Osterholt 
Reported-and-tested-by: Kurt Garloff 
Fixes: 09954bad4 ("floppy: refactor open() flags handling")
Fixes: f2791e7ead ("Revert "floppy: refactor open() flags handling"")
Signed-off-by: Jiri Kosina 
Signed-off-by: Denis Efremov 
Signed-off-by: Greg Kroah-Hartman 

---
 drivers/block/floppy.c |   27 ++-
 1 file changed, 14 insertions(+), 13 deletions(-)

--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -4063,21 +4063,22 @@ static int floppy_open(struct block_devi
if (UFDCS->rawcmd == 1)
UFDCS->rawcmd = 2;
 
-   if (!(mode & FMODE_NDELAY)) {
-   if (mode & (FMODE_READ|FMODE_WRITE)) {
-   UDRS->last_checked = 0;
-   clear_bit(FD_OPEN_SHOULD_FAIL_BIT, >flags);
-   check_disk_change(bdev);
-   if (test_bit(FD_DISK_CHANGED_BIT, >flags))
-   goto out;
-   if (test_bit(FD_OPEN_SHOULD_FAIL_BIT, >flags))
-   goto out;
-   }
-   res = -EROFS;
-   if ((mode & FMODE_WRITE) &&
-   !test_bit(FD_DISK_WRITABLE_BIT, >flags))
+   if (mode & (FMODE_READ|FMODE_WRITE)) {
+   UDRS->last_checked = 0;
+   clear_bit(FD_OPEN_SHOULD_FAIL_BIT, >flags);
+   check_disk_change(bdev);
+   if (test_bit(FD_DISK_CHANGED_BIT, >flags))
+   goto out;
+   if (test_bit(FD_OPEN_SHOULD_FAIL_BIT, >flags))
goto out;
}
+
+   res = -EROFS;
+
+   if ((mode & FMODE_WRITE) &&
+   !test_bit(FD_DISK_WRITABLE_BIT, >flags))
+   goto out;
+
mutex_unlock(_lock);
mutex_unlock(_mutex);
return 0;




[PATCH 5.10 095/663] ath9k: fix data bus crash when setting nf_override via debugfs

2021-03-01 Thread Greg Kroah-Hartman
From: Linus Lüssing 

[ Upstream commit 12c8f3d1cdd84f01ee777b756db9dddc1f1c9d17 ]

When trying to set the noise floor via debugfs, a "data bus error"
crash like the following can happen:

[   88.433133] Data bus error, epc == 80221c28, ra == 83314e60
[   88.438895] Oops[#1]:
[   88.441246] CPU: 0 PID: 7263 Comm: sh Not tainted 4.14.195 #0
[   88.447174] task: 838a1c20 task.stack: 82d5e000
[   88.451847] $ 0   :  0030 deadc0de 83141de4
[   88.457248] $ 4   : b810a2c4 a2c4 83230fd4 
[   88.462652] $ 8   : 000a  0001 
[   88.468055] $12   : 7f8ef318   77f802a0
[   88.473457] $16   : 83230080 0002 001b 83230080
[   88.478861] $20   : 83a1c3f8 00841000 77f7adb0 ff92
[   88.484263] $24   : 0fa4 77edd860
[   88.489665] $28   : 82d5e000 82d5fda8  83314e60
[   88.495070] Hi: 
[   88.498044] Lo: 
[   88.501040] epc   : 80221c28 ioread32+0x8/0x10
[   88.505671] ra: 83314e60 ath9k_hw_loadnf+0x88/0x520 [ath9k_hw]
[   88.512049] Status: 1000fc03 KERNEL EXL IE
[   88.516369] Cause : 5080801c (ExcCode 07)
[   88.520508] PrId  : 00019374 (MIPS 24Kc)
[   88.524556] Modules linked in: ath9k ath9k_common pppoe ppp_async l2tp_ppp 
cdc_mbim batman_adv ath9k_hw ath sr9700 smsc95xx sierra_net rndis_host qmi_wwan 
pppox ppp_generic pl2303 nf_conntrack_ipv6 mcs7830 mac80211 kalmia iptable_nat 
ipt_REJECT ipt_MASQUERADE huawei_cdc_ncm ftdi_sio dm9601 cfg80211 cdc_subset 
cdc_ncm cdc_ether cdc_eem ax88179_178a asix xt_time xt_tcpudp xt_tcpmss 
xt_statistic xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_length 
xt_hl xt_ecn xt_dscp xt_conntrack xt_comment xt_TCPMSS xt_REDIRECT xt_NETMAP 
xt_LOG xt_HL xt_FLOWOFFLOAD xt_DSCP xt_CLASSIFY usbserial usbnet usbhid slhc 
rtl8150 r8152 pegasus nf_reject_ipv4 nf_nat_redirect nf_nat_masquerade_ipv4 
nf_conntrack_ipv4 nf_nat_ipv4 nf_nat nf_log_ipv4 nf_flow_table_hw nf_flow_table 
nf_defrag_ipv6 nf_defrag_ipv4 nf_conntrack
[   88.597894]  libcrc32c kaweth iptable_mangle iptable_filter ipt_ECN ipheth 
ip_tables hso hid_generic crc_ccitt compat cdc_wdm cdc_acm br_netfilter hid 
evdev input_core nf_log_ipv6 nf_log_common ip6table_mangle ip6table_filter 
ip6_tables ip6t_REJECT x_tables nf_reject_ipv6 l2tp_netlink l2tp_core 
udp_tunnel ip6_udp_tunnel xfrm6_mode_tunnel xfrm6_mode_transport 
xfrm6_mode_beet ipcomp6 xfrm6_tunnel esp6 ah6 xfrm4_tunnel xfrm4_mode_tunnel 
xfrm4_mode_transport xfrm4_mode_beet ipcomp esp4 ah4 tunnel6 tunnel4 tun 
xfrm_user xfrm_ipcomp af_key xfrm_algo sha256_generic sha1_generic 
jitterentropy_rng drbg md5 hmac echainiv des_generic deflate zlib_inflate 
zlib_deflate cbc authenc crypto_acompress ehci_platform ehci_hcd 
gpio_button_hotplug usbcore nls_base usb_common crc16 mii aead crypto_null 
cryptomgr crc32c_generic
[   88.671671]  crypto_hash
[   88.674292] Process sh (pid: 7263, threadinfo=82d5e000, task=838a1c20, 
tls=77f81efc)
[   88.682279] Stack : 8060 0008 0200    
 0002
[   88.690916] 8050 83230080 82d5fe22 00841000 77f7adb0  
 83156858
[   88.699553]  8352fa00 83ad62b0 835302a8  300a00f8 
0003 82d5fe38
[   88.708190] 82d5fef4 0001 77f54dc4 77f8 77f7adb0 c79fe901 
 
[   88.716828] 8051 0002 00841000 77f54dc4 77f8 801ce4cc 
000b 41824292
[   88.725465] ...
[   88.727994] Call Trace:
[   88.730532] [<80221c28>] ioread32+0x8/0x10
[   88.734765] Code:   8c82  000f <03e8>   08088708 
   aca4  03e8
[   88.744846]
[   88.746464] ---[ end trace db226b2de1b69b9e ]---
[   88.753477] Kernel panic - not syncing: Fatal exception
[   88.759981] Rebooting in 3 seconds..

The "REG_READ(ah, AR_PHY_AGC_CONTROL)" in ath9k_hw_loadnf() does not
like being called when the hardware is asleep, leading to this crash.

The easiest way to reproduce this is trying to set nf_override while
the hardware is down:

  $ ip link set down dev wlan0
  $ echo "-85" > /sys/kernel/debug/ieee80211/phy0/ath9k/nf_override

Fixing this crash by waking the hardware up before trying to set the
noise floor. Similar to what other ath9k debugfs files do.

Tested on a Lima board from 8devices, which has a QCA 4531 chipset.

Fixes: b90189759a7f ("ath9k: add noise floor override option")
Cc: Simon Wunderlich 
Signed-off-by: Linus Lüssing 
Signed-off-by: Kalle Valo 
Link: https://lore.kernel.org/r/20210209184352.4272-1-linus.luess...@c0d3.blue
Signed-off-by: Sasha Levin 
---
 drivers/net/wireless/ath/ath9k/debug.c | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/ath/ath9k/debug.c 
b/drivers/net/wireless/ath/ath9k/debug.c
index 26ea51a721564..859a865c59950 100644
--- a/drivers/net/wireless/ath/ath9k/debug.c
+++ b/drivers/net/wireless/ath/ath9k/debug.c
@@ -1223,8 +1223,11 @@ static ssize_t write_file_nf_override(struct file *file,
 

[PATCH 5.10 660/663] wireguard: queueing: get rid of per-peer ring buffers

2021-03-01 Thread Greg Kroah-Hartman
From: Jason A. Donenfeld 

commit 8b5553ace83cced775eefd0f3f18b5c6214ccf7a upstream.

Having two ring buffers per-peer means that every peer results in two
massive ring allocations. On an 8-core x86_64 machine, this commit
reduces the per-peer allocation from 18,688 bytes to 1,856 bytes, which
is an 90% reduction. Ninety percent! With some single-machine
deployments approaching 500,000 peers, we're talking about a reduction
from 7 gigs of memory down to 700 megs of memory.

In order to get rid of these per-peer allocations, this commit switches
to using a list-based queueing approach. Currently GSO fragments are
chained together using the skb->next pointer (the skb_list_* singly
linked list approach), so we form the per-peer queue around the unused
skb->prev pointer (which sort of makes sense because the links are
pointing backwards). Use of skb_queue_* is not possible here, because
that is based on doubly linked lists and spinlocks. Multiple cores can
write into the queue at any given time, because its writes occur in the
start_xmit path or in the udp_recv path. But reads happen in a single
workqueue item per-peer, amounting to a multi-producer, single-consumer
paradigm.

The MPSC queue is implemented locklessly and never blocks. However, it
is not linearizable (though it is serializable), with a very tight and
unlikely race on writes, which, when hit (some tiny fraction of the
0.15% of partial adds on a fully loaded 16-core x86_64 system), causes
the queue reader to terminate early. However, because every packet sent
queues up the same workqueue item after it is fully added, the worker
resumes again, and stopping early isn't actually a problem, since at
that point the packet wouldn't have yet been added to the encryption
queue. These properties allow us to avoid disabling interrupts or
spinning. The design is based on Dmitry Vyukov's algorithm [1].

Performance-wise, ordinarily list-based queues aren't preferable to
ringbuffers, because of cache misses when following pointers around.
However, we *already* have to follow the adjacent pointers when working
through fragments, so there shouldn't actually be any change there. A
potential downside is that dequeueing is a bit more complicated, but the
ptr_ring structure used prior had a spinlock when dequeueing, so all and
all the difference appears to be a wash.

Actually, from profiling, the biggest performance hit, by far, of this
commit winds up being atomic_add_unless(count, 1, max) and atomic_
dec(count), which account for the majority of CPU time, according to
perf. In that sense, the previous ring buffer was superior in that it
could check if it was full by head==tail, which the list-based approach
cannot do.

But all and all, this enables us to get massive memory savings, allowing
WireGuard to scale for real world deployments, without taking much of a
performance hit.

[1] 
http://www.1024cores.net/home/lock-free-algorithms/queues/intrusive-mpsc-node-based-queue

Reviewed-by: Dmitry Vyukov 
Reviewed-by: Toke Høiland-Jørgensen 
Fixes: e7096c131e51 ("net: WireGuard secure network tunnel")
Signed-off-by: Jason A. Donenfeld 
Signed-off-by: Jakub Kicinski 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/net/wireguard/device.c   |   12 ++---
 drivers/net/wireguard/device.h   |   15 +++---
 drivers/net/wireguard/peer.c |   28 
 drivers/net/wireguard/peer.h |4 -
 drivers/net/wireguard/queueing.c |   86 +++
 drivers/net/wireguard/queueing.h |   45 ++--
 drivers/net/wireguard/receive.c  |   16 ++-
 drivers/net/wireguard/send.c |   31 --
 8 files changed, 144 insertions(+), 93 deletions(-)

--- a/drivers/net/wireguard/device.c
+++ b/drivers/net/wireguard/device.c
@@ -235,8 +235,8 @@ static void wg_destruct(struct net_devic
destroy_workqueue(wg->handshake_receive_wq);
destroy_workqueue(wg->handshake_send_wq);
destroy_workqueue(wg->packet_crypt_wq);
-   wg_packet_queue_free(>decrypt_queue, true);
-   wg_packet_queue_free(>encrypt_queue, true);
+   wg_packet_queue_free(>decrypt_queue);
+   wg_packet_queue_free(>encrypt_queue);
rcu_barrier(); /* Wait for all the peers to be actually freed. */
wg_ratelimiter_uninit();
memzero_explicit(>static_identity, sizeof(wg->static_identity));
@@ -338,12 +338,12 @@ static int wg_newlink(struct net *src_ne
goto err_destroy_handshake_send;
 
ret = wg_packet_queue_init(>encrypt_queue, wg_packet_encrypt_worker,
-  true, MAX_QUEUED_PACKETS);
+  MAX_QUEUED_PACKETS);
if (ret < 0)
goto err_destroy_packet_crypt;
 
ret = wg_packet_queue_init(>decrypt_queue, wg_packet_decrypt_worker,
-  true, MAX_QUEUED_PACKETS);
+  MAX_QUEUED_PACKETS);
if (ret < 0)
goto err_free_encrypt_queue;
 

[PATCH 5.10 133/663] net: amd-xgbe: Fix network fluctuations when using 1G BELFUSE SFP

2021-03-01 Thread Greg Kroah-Hartman
From: Shyam Sundar S K 

[ Upstream commit 9eab3fdb419916f66a72d1572f68d82cd9b3f963 ]

Frequent link up/down events can happen when a Bel Fuse SFP part is
connected to the amd-xgbe device. Try to avoid the frequent link
issues by resetting the PHY as documented in Bel Fuse SFP datasheets.

Fixes: e722ec82374b ("amd-xgbe: Update the BelFuse quirk to support SGMII")
Co-developed-by: Sudheesh Mavila 
Signed-off-by: Sudheesh Mavila 
Signed-off-by: Shyam Sundar S K 
Acked-by: Tom Lendacky 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
---
 drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c 
b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
index d3f72faecd1da..18e48b3bc402b 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c
@@ -922,6 +922,9 @@ static bool xgbe_phy_belfuse_phy_quirks(struct 
xgbe_prv_data *pdata)
if ((phy_id & 0xfff0) != 0x03625d10)
return false;
 
+   /* Reset PHY - wait for self-clearing reset bit to clear */
+   genphy_soft_reset(phy_data->phydev);
+
/* Disable RGMII mode */
phy_write(phy_data->phydev, 0x18, 0x7007);
reg = phy_read(phy_data->phydev, 0x18);
-- 
2.27.0





[PATCH 4.19 074/247] drm/gma500: Fix error return code in psb_driver_load()

2021-03-01 Thread Greg Kroah-Hartman
From: Jialin Zhang 

[ Upstream commit 6926872ae24452d4f2176a3ba2dee659497de2c4 ]

Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 5c49fd3aa0ab ("gma500: Add the core DRM files and headers")
Reported-by: Hulk Robot 
Signed-off-by: Jialin Zhang 
Signed-off-by: Daniel Vetter 
Link: 
https://patchwork.freedesktop.org/patch/msgid/20201130020216.1906141-1-zhangjiali...@huawei.com
Signed-off-by: Sasha Levin 
---
 drivers/gpu/drm/gma500/psb_drv.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
index ac32ab5aa0027..2fa3c7fc4b6d5 100644
--- a/drivers/gpu/drm/gma500/psb_drv.c
+++ b/drivers/gpu/drm/gma500/psb_drv.c
@@ -316,6 +316,8 @@ static int psb_driver_load(struct drm_device *dev, unsigned 
long flags)
if (ret)
goto out_err;
 
+   ret = -ENOMEM;
+
dev_priv->mmu = psb_mmu_driver_init(dev, 1, 0, 0);
if (!dev_priv->mmu)
goto out_err;
-- 
2.27.0





[PATCH 5.11 386/775] RDMA/mlx5: Allow creating all QPs even when non RDMA profile is used

2021-03-01 Thread Greg Kroah-Hartman
From: Mark Bloch 

[ Upstream commit 2614488d1f3cd5989375042286b11424208e20c8 ]

The cited commit disallowed creating any QP which isn't raw ethernet, reg
umr or the special UD qp for testing WC, this proved too strict.

While modify can't be done (no GIDS/GID table for example) just creating a
QP is okay.

This patch partially reverts the bellow mentioned commit and places the
restriction at the modify QP stage and not at the creation.  DEVX commands
should be used to manipulate such QPs.

Fixes: 42caf9cb5937 ("RDMA/mlx5: Allow only raw Ethernet QPs when RoCE isn't 
enabled")
Link: https://lore.kernel.org/r/20210125120709.836718-1-l...@kernel.org
Signed-off-by: Mark Bloch 
Reviewed-by: Maor Gottlieb 
Signed-off-by: Leon Romanovsky 
Signed-off-by: Jason Gunthorpe 
Signed-off-by: Sasha Levin 
---
 drivers/infiniband/hw/mlx5/qp.c | 27 ---
 1 file changed, 20 insertions(+), 7 deletions(-)

diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c
index 0cb7cc642d87d..bab40ad527dae 100644
--- a/drivers/infiniband/hw/mlx5/qp.c
+++ b/drivers/infiniband/hw/mlx5/qp.c
@@ -2432,9 +2432,6 @@ static int check_qp_type(struct mlx5_ib_dev *dev, struct 
ib_qp_init_attr *attr,
case MLX5_IB_QPT_HW_GSI:
case IB_QPT_DRIVER:
case IB_QPT_GSI:
-   if (dev->profile == _eth_profile)
-   goto out;
-   fallthrough;
case IB_QPT_RAW_PACKET:
case IB_QPT_UD:
case MLX5_IB_QPT_REG_UMR:
@@ -2629,10 +2626,6 @@ static int process_create_flags(struct mlx5_ib_dev *dev, 
struct mlx5_ib_qp *qp,
int create_flags = attr->create_flags;
bool cond;
 
-   if (qp->type == IB_QPT_UD && dev->profile == _eth_profile)
-   if (create_flags & ~MLX5_IB_QP_CREATE_WC_TEST)
-   return -EINVAL;
-
if (qp_type == MLX5_IB_QPT_DCT)
return (create_flags) ? -EINVAL : 0;
 
@@ -4211,6 +4204,23 @@ static int mlx5_ib_modify_dct(struct ib_qp *ibqp, struct 
ib_qp_attr *attr,
return 0;
 }
 
+static bool mlx5_ib_modify_qp_allowed(struct mlx5_ib_dev *dev,
+ struct mlx5_ib_qp *qp,
+ enum ib_qp_type qp_type)
+{
+   if (dev->profile != _eth_profile)
+   return true;
+
+   if (qp_type == IB_QPT_RAW_PACKET || qp_type == MLX5_IB_QPT_REG_UMR)
+   return true;
+
+   /* Internal QP used for wc testing, with NOPs in wq */
+   if (qp->flags & MLX5_IB_QP_CREATE_WC_TEST)
+   return true;
+
+   return false;
+}
+
 int mlx5_ib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
  int attr_mask, struct ib_udata *udata)
 {
@@ -4223,6 +4233,9 @@ int mlx5_ib_modify_qp(struct ib_qp *ibqp, struct 
ib_qp_attr *attr,
int err = -EINVAL;
int port;
 
+   if (!mlx5_ib_modify_qp_allowed(dev, qp, ibqp->qp_type))
+   return -EOPNOTSUPP;
+
if (attr_mask & ~(IB_QP_ATTR_STANDARD_BITS | IB_QP_RATE_LIMIT))
return -EOPNOTSUPP;
 
-- 
2.27.0





[PATCH 5.10 618/663] exfat: fix shift-out-of-bounds in exfat_fill_super()

2021-03-01 Thread Greg Kroah-Hartman
From: Namjae Jeon 

commit 78c276f5495aa53a8beebb627e5bf6a54f0af34f upstream.

syzbot reported a warning which could cause shift-out-of-bounds issue.

Call Trace:
 __dump_stack lib/dump_stack.c:79 [inline]
 dump_stack+0x183/0x22e lib/dump_stack.c:120
 ubsan_epilogue lib/ubsan.c:148 [inline]
 __ubsan_handle_shift_out_of_bounds+0x432/0x4d0 lib/ubsan.c:395
 exfat_read_boot_sector fs/exfat/super.c:471 [inline]
 __exfat_fill_super fs/exfat/super.c:556 [inline]
 exfat_fill_super+0x2acb/0x2d00 fs/exfat/super.c:624
 get_tree_bdev+0x406/0x630 fs/super.c:1291
 vfs_get_tree+0x86/0x270 fs/super.c:1496
 do_new_mount fs/namespace.c:2881 [inline]
 path_mount+0x1937/0x2c50 fs/namespace.c:3211
 do_mount fs/namespace.c:3224 [inline]
 __do_sys_mount fs/namespace.c:3432 [inline]
 __se_sys_mount+0x2f9/0x3b0 fs/namespace.c:3409
 do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
 entry_SYSCALL_64_after_hwframe+0x44/0xa9

exfat specification describe sect_per_clus_bits field of boot sector
could be at most 25 - sect_size_bits and at least 0. And sect_size_bits
can also affect this calculation, It also needs validation.
This patch add validation for sect_per_clus_bits and sect_size_bits
field of boot sector.

Fixes: 719c1e182916 ("exfat: add super block operations")
Cc: sta...@vger.kernel.org # v5.9+
Reported-by: syzbot+da4fe66aaadd3c2e2...@syzkaller.appspotmail.com
Reviewed-by: Sungjong Seo 
Tested-by: Randy Dunlap 
Signed-off-by: Namjae Jeon 
Signed-off-by: Greg Kroah-Hartman 
---
 fs/exfat/exfat_raw.h |4 
 fs/exfat/super.c |   31 ++-
 2 files changed, 30 insertions(+), 5 deletions(-)

--- a/fs/exfat/exfat_raw.h
+++ b/fs/exfat/exfat_raw.h
@@ -77,6 +77,10 @@
 
 #define EXFAT_FILE_NAME_LEN15
 
+#define EXFAT_MIN_SECT_SIZE_BITS   9
+#define EXFAT_MAX_SECT_SIZE_BITS   12
+#define EXFAT_MAX_SECT_PER_CLUS_BITS(x)(25 - 
(x)->sect_size_bits)
+
 /* EXFAT: Main and Backup Boot Sector (512 bytes) */
 struct boot_sector {
__u8jmp_boot[BOOTSEC_JUMP_BOOT_LEN];
--- a/fs/exfat/super.c
+++ b/fs/exfat/super.c
@@ -381,8 +381,7 @@ static int exfat_calibrate_blocksize(str
 {
struct exfat_sb_info *sbi = EXFAT_SB(sb);
 
-   if (!is_power_of_2(logical_sect) ||
-   logical_sect < 512 || logical_sect > 4096) {
+   if (!is_power_of_2(logical_sect)) {
exfat_err(sb, "bogus logical sector size %u", logical_sect);
return -EIO;
}
@@ -451,6 +450,25 @@ static int exfat_read_boot_sector(struct
return -EINVAL;
}
 
+   /*
+* sect_size_bits could be at least 9 and at most 12.
+*/
+   if (p_boot->sect_size_bits < EXFAT_MIN_SECT_SIZE_BITS ||
+   p_boot->sect_size_bits > EXFAT_MAX_SECT_SIZE_BITS) {
+   exfat_err(sb, "bogus sector size bits : %u\n",
+   p_boot->sect_size_bits);
+   return -EINVAL;
+   }
+
+   /*
+* sect_per_clus_bits could be at least 0 and at most 25 - 
sect_size_bits.
+*/
+   if (p_boot->sect_per_clus_bits > EXFAT_MAX_SECT_PER_CLUS_BITS(p_boot)) {
+   exfat_err(sb, "bogus sectors bits per cluster : %u\n",
+   p_boot->sect_per_clus_bits);
+   return -EINVAL;
+   }
+
sbi->sect_per_clus = 1 << p_boot->sect_per_clus_bits;
sbi->sect_per_clus_bits = p_boot->sect_per_clus_bits;
sbi->cluster_size_bits = p_boot->sect_per_clus_bits +
@@ -477,16 +495,19 @@ static int exfat_read_boot_sector(struct
sbi->used_clusters = EXFAT_CLUSTERS_UNTRACKED;
 
/* check consistencies */
-   if (sbi->num_FAT_sectors << p_boot->sect_size_bits <
-   sbi->num_clusters * 4) {
+   if ((u64)sbi->num_FAT_sectors << p_boot->sect_size_bits <
+   (u64)sbi->num_clusters * 4) {
exfat_err(sb, "bogus fat length");
return -EINVAL;
}
+
if (sbi->data_start_sector <
-   sbi->FAT1_start_sector + sbi->num_FAT_sectors * p_boot->num_fats) {
+   (u64)sbi->FAT1_start_sector +
+   (u64)sbi->num_FAT_sectors * p_boot->num_fats) {
exfat_err(sb, "bogus data start sector");
return -EINVAL;
}
+
if (sbi->vol_flags & VOLUME_DIRTY)
exfat_warn(sb, "Volume was not properly unmounted. Some data 
may be corrupt. Please run fsck.");
if (sbi->vol_flags & MEDIA_FAILURE)




[PATCH 5.10 519/663] drm/modes: Switch to 64bit maths to avoid integer overflow

2021-03-01 Thread Greg Kroah-Hartman
From: Ville Syrjälä 

commit 5b34ab52401f0f1f191bcb83a182c83b506f4763 upstream.

The new >8k CEA modes have dotclocks reaching 5.94 GHz, which
means our clock*1000 will now overflow the 32bit unsigned
integer. Switch to 64bit maths to avoid it.

Cc: sta...@vger.kernel.org
Reported-by: Randy Dunlap 
Signed-off-by: Ville Syrjälä 
Link: 
https://patchwork.freedesktop.org/patch/msgid/20201022194256.30978-1-ville.syrj...@linux.intel.com
Tested-by: Randy Dunlap 
Reviewed-by: Chris Wilson 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/gpu/drm/drm_modes.c |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -762,7 +762,7 @@ int drm_mode_vrefresh(const struct drm_d
if (mode->htotal == 0 || mode->vtotal == 0)
return 0;
 
-   num = mode->clock * 1000;
+   num = mode->clock;
den = mode->htotal * mode->vtotal;
 
if (mode->flags & DRM_MODE_FLAG_INTERLACE)
@@ -772,7 +772,7 @@ int drm_mode_vrefresh(const struct drm_d
if (mode->vscan > 1)
den *= mode->vscan;
 
-   return DIV_ROUND_CLOSEST(num, den);
+   return DIV_ROUND_CLOSEST_ULL(mul_u32_u32(num, 1000), den);
 }
 EXPORT_SYMBOL(drm_mode_vrefresh);
 




[PATCH 5.10 129/663] net: phy: mscc: adding LCPLL reset to VSC8514

2021-03-01 Thread Greg Kroah-Hartman
From: Bjarni Jonasson 

[ Upstream commit 3cc2c646be0b22037f31c958e96c0544a073d108 ]

At Power-On Reset, transients may cause the LCPLL to lock onto a
clock that is momentarily unstable. This is normally seen in QSGMII
setups where the higher speed 6G SerDes is being used.
This patch adds an initial LCPLL Reset to the PHY (first instance)
to avoid this issue.

Fixes: e4f9ba642f0b ("net: phy: mscc: add support for VSC8514 PHY.")
Signed-off-by: Steen Hegelund 
Signed-off-by: Bjarni Jonasson 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
---
 drivers/net/phy/mscc/mscc.h  |   8 +
 drivers/net/phy/mscc/mscc_main.c | 350 ---
 2 files changed, 236 insertions(+), 122 deletions(-)

diff --git a/drivers/net/phy/mscc/mscc.h b/drivers/net/phy/mscc/mscc.h
index 9481bce94c2ed..c2023f93c0b24 100644
--- a/drivers/net/phy/mscc/mscc.h
+++ b/drivers/net/phy/mscc/mscc.h
@@ -102,6 +102,7 @@ enum rgmii_clock_delay {
 #define PHY_MCB_S6G_READ BIT(30)
 
 #define PHY_S6G_PLL5G_CFG0   0x06
+#define PHY_S6G_PLL5G_CFG2   0x08
 #define PHY_S6G_LCPLL_CFG0x11
 #define PHY_S6G_PLL_CFG  0x2b
 #define PHY_S6G_COMMON_CFG   0x2c
@@ -121,6 +122,9 @@ enum rgmii_clock_delay {
 #define PHY_S6G_PLL_FSM_CTRL_DATA_POS8
 #define PHY_S6G_PLL_FSM_ENA_POS  7
 
+#define PHY_S6G_CFG2_FSM_DIS  1
+#define PHY_S6G_CFG2_FSM_CLK_BP  23
+
 #define MSCC_EXT_PAGE_ACCESS 31
 #define MSCC_PHY_PAGE_STANDARD   0x /* Standard registers */
 #define MSCC_PHY_PAGE_EXTENDED   0x0001 /* Extended registers */
@@ -412,6 +416,10 @@ struct vsc8531_edge_rate_table {
 };
 #endif /* CONFIG_OF_MDIO */
 
+enum csr_target {
+   MACRO_CTRL  = 0x07,
+};
+
 #if IS_ENABLED(CONFIG_MACSEC)
 int vsc8584_macsec_init(struct phy_device *phydev);
 void vsc8584_handle_macsec_interrupt(struct phy_device *phydev);
diff --git a/drivers/net/phy/mscc/mscc_main.c b/drivers/net/phy/mscc/mscc_main.c
index 6bc7406a1ce73..41a410124437d 100644
--- a/drivers/net/phy/mscc/mscc_main.c
+++ b/drivers/net/phy/mscc/mscc_main.c
@@ -710,6 +710,113 @@ static int phy_base_read(struct phy_device *phydev, u32 
regnum)
return __phy_package_read(phydev, regnum);
 }
 
+static u32 vsc85xx_csr_read(struct phy_device *phydev,
+   enum csr_target target, u32 reg)
+{
+   unsigned long deadline;
+   u32 val, val_l, val_h;
+
+   phy_base_write(phydev, MSCC_EXT_PAGE_ACCESS, MSCC_PHY_PAGE_CSR_CNTL);
+
+   /* CSR registers are grouped under different Target IDs.
+* 6-bit Target_ID is split between MSCC_EXT_PAGE_CSR_CNTL_20 and
+* MSCC_EXT_PAGE_CSR_CNTL_19 registers.
+* Target_ID[5:2] maps to bits[3:0] of MSCC_EXT_PAGE_CSR_CNTL_20
+* and Target_ID[1:0] maps to bits[13:12] of MSCC_EXT_PAGE_CSR_CNTL_19.
+*/
+
+   /* Setup the Target ID */
+   phy_base_write(phydev, MSCC_EXT_PAGE_CSR_CNTL_20,
+  MSCC_PHY_CSR_CNTL_20_TARGET(target >> 2));
+
+   if ((target >> 2 == 0x1) || (target >> 2 == 0x3))
+   /* non-MACsec access */
+   target &= 0x3;
+   else
+   target = 0;
+
+   /* Trigger CSR Action - Read into the CSR's */
+   phy_base_write(phydev, MSCC_EXT_PAGE_CSR_CNTL_19,
+  MSCC_PHY_CSR_CNTL_19_CMD | MSCC_PHY_CSR_CNTL_19_READ |
+  MSCC_PHY_CSR_CNTL_19_REG_ADDR(reg) |
+  MSCC_PHY_CSR_CNTL_19_TARGET(target));
+
+   /* Wait for register access*/
+   deadline = jiffies + msecs_to_jiffies(PROC_CMD_NCOMPLETED_TIMEOUT_MS);
+   do {
+   usleep_range(500, 1000);
+   val = phy_base_read(phydev, MSCC_EXT_PAGE_CSR_CNTL_19);
+   } while (time_before(jiffies, deadline) &&
+   !(val & MSCC_PHY_CSR_CNTL_19_CMD));
+
+   if (!(val & MSCC_PHY_CSR_CNTL_19_CMD))
+   return 0x;
+
+   /* Read the Least Significant Word (LSW) (17) */
+   val_l = phy_base_read(phydev, MSCC_EXT_PAGE_CSR_CNTL_17);
+
+   /* Read the Most Significant Word (MSW) (18) */
+   val_h = phy_base_read(phydev, MSCC_EXT_PAGE_CSR_CNTL_18);
+
+   phy_base_write(phydev, MSCC_EXT_PAGE_ACCESS,
+  MSCC_PHY_PAGE_STANDARD);
+
+   return (val_h << 16) | val_l;
+}
+
+static int vsc85xx_csr_write(struct phy_device *phydev,
+enum csr_target target, u32 reg, u32 val)
+{
+   unsigned long deadline;
+
+   phy_base_write(phydev, MSCC_EXT_PAGE_ACCESS, MSCC_PHY_PAGE_CSR_CNTL);
+
+   /* CSR registers are grouped under different Target IDs.
+* 6-bit Target_ID is split between MSCC_EXT_PAGE_CSR_CNTL_20 and
+* MSCC_EXT_PAGE_CSR_CNTL_19 registers.
+* Target_ID[5:2] maps to bits[3:0] of MSCC_EXT_PAGE_CSR_CNTL_20
+* and Target_ID[1:0] maps to bits[13:12] of MSCC_EXT_PAGE_CSR_CNTL_19.
+

[PATCH 5.10 559/663] staging: gdm724x: Fix DMA from stack

2021-03-01 Thread Greg Kroah-Hartman
From: Amey Narkhede 

commit 7c3a0635cd008eaca9a734dc802709ee0b81cac5 upstream.

Stack allocated buffers cannot be used for DMA
on all architectures so allocate hci_packet buffer
using kmalloc.

Reviewed-by: Dan Carpenter 
Signed-off-by: Amey Narkhede 
Link: https://lore.kernel.org/r/20210211053819.34858-1-ameynarkhed...@gmail.com
Cc: stable 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/staging/gdm724x/gdm_usb.c |   10 +++---
 1 file changed, 7 insertions(+), 3 deletions(-)

--- a/drivers/staging/gdm724x/gdm_usb.c
+++ b/drivers/staging/gdm724x/gdm_usb.c
@@ -56,20 +56,24 @@ static int gdm_usb_recv(void *priv_dev,
 
 static int request_mac_address(struct lte_udev *udev)
 {
-   u8 buf[16] = {0,};
-   struct hci_packet *hci = (struct hci_packet *)buf;
+   struct hci_packet *hci;
struct usb_device *usbdev = udev->usbdev;
int actual;
int ret = -1;
 
+   hci = kmalloc(struct_size(hci, data, 1), GFP_KERNEL);
+   if (!hci)
+   return -ENOMEM;
+
hci->cmd_evt = gdm_cpu_to_dev16(udev->gdm_ed, LTE_GET_INFORMATION);
hci->len = gdm_cpu_to_dev16(udev->gdm_ed, 1);
hci->data[0] = MAC_ADDRESS;
 
-   ret = usb_bulk_msg(usbdev, usb_sndbulkpipe(usbdev, 2), buf, 5,
+   ret = usb_bulk_msg(usbdev, usb_sndbulkpipe(usbdev, 2), hci, 5,
   , 1000);
 
udev->request_mac_addr = 1;
+   kfree(hci);
 
return ret;
 }




[PATCH 5.10 471/663] mm/rmap: fix potential pte_unmap on an not mapped pte

2021-03-01 Thread Greg Kroah-Hartman
From: Miaohe Lin 

[ Upstream commit 5d5d19eda6b0ee790af89c45e3f678345be6f50f ]

For PMD-mapped page (usually THP), pvmw->pte is NULL.  For PTE-mapped THP,
pvmw->pte is mapped.  But for HugeTLB pages, pvmw->pte is not mapped and
set to the relevant page table entry.  So in page_vma_mapped_walk_done(),
we may do pte_unmap() for HugeTLB pte which is not mapped.  Fix this by
checking pvmw->page against PageHuge before trying to do pte_unmap().

Link: https://lkml.kernel.org/r/20210127093349.39081-1-linmia...@huawei.com
Fixes: ace71a19cec5 ("mm: introduce page_vma_mapped_walk()")
Signed-off-by: Hongxiang Lou 
Signed-off-by: Miaohe Lin 
Tested-by: Sedat Dilek 
Cc: Kees Cook 
Cc: Nathan Chancellor 
Cc: Mike Kravetz 
Cc: Shakeel Butt 
Cc: Johannes Weiner 
Cc: Vlastimil Babka 
Cc: Michel Lespinasse 
Cc: Nick Desaulniers 
Cc: "Kirill A. Shutemov" 
Cc: Wei Yang 
Cc: Dmitry Safonov <0x7f454...@gmail.com>
Cc: Brian Geffon 
Signed-off-by: Andrew Morton 
Signed-off-by: Linus Torvalds 
Signed-off-by: Sasha Levin 
---
 include/linux/rmap.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/include/linux/rmap.h b/include/linux/rmap.h
index 70085ca1a3fc9..def5c62c93b3b 100644
--- a/include/linux/rmap.h
+++ b/include/linux/rmap.h
@@ -213,7 +213,8 @@ struct page_vma_mapped_walk {
 
 static inline void page_vma_mapped_walk_done(struct page_vma_mapped_walk *pvmw)
 {
-   if (pvmw->pte)
+   /* HugeTLB pte is set to the relevant page table entry without 
pte_mapped. */
+   if (pvmw->pte && !PageHuge(pvmw->page))
pte_unmap(pvmw->pte);
if (pvmw->ptl)
spin_unlock(pvmw->ptl);
-- 
2.27.0





[PATCH 5.11 016/775] MIPS: vmlinux.lds.S: add missing PAGE_ALIGNED_DATA() section

2021-03-01 Thread Greg Kroah-Hartman
From: Alexander Lobakin 

commit 8ac7c87acdcac156670f9920c8acbd84308ff4b1 upstream.

MIPS uses its own declaration of rwdata, and thus it should be kept
in sync with the asm-generic one. Currently PAGE_ALIGNED_DATA() is
missing from the linker script, which emits the following ld
warnings:

mips-alpine-linux-musl-ld: warning: orphan section
`.data..page_aligned' from `arch/mips/kernel/vdso.o' being placed
in section `.data..page_aligned'
mips-alpine-linux-musl-ld: warning: orphan section
`.data..page_aligned' from `arch/mips/vdso/vdso-image.o' being placed
in section `.data..page_aligned'

Add the necessary declaration, so the mentioned structures will be
placed in vmlinux as intended:

80630580 D __end_once
80630580 D __start___dyndbg
80630580 D __start_once
80630580 D __stop___dyndbg
80634000 d mips_vdso_data
80638000 d vdso_data
80638580 D _gp
8063c000 T __init_begin
8063c000 D _edata
8063c000 T _sinittext

->

805a4000 D __end_init_task
805a4000 D __nosave_begin
805a4000 D __nosave_end
805a4000 d mips_vdso_data
805a8000 d vdso_data
805ac000 D mmlist_lock
805ac080 D tasklist_lock

Fixes: ebb5e78cc634 ("MIPS: Initial implementation of a VDSO")
Signed-off-by: Alexander Lobakin 
Reviewed-by: Kees Cook 
Reviewed-by: Nathan Chancellor 
Cc: sta...@vger.kernel.org # 4.4+
Signed-off-by: Thomas Bogendoerfer 
Signed-off-by: Greg Kroah-Hartman 
---
 arch/mips/kernel/vmlinux.lds.S |1 +
 1 file changed, 1 insertion(+)

--- a/arch/mips/kernel/vmlinux.lds.S
+++ b/arch/mips/kernel/vmlinux.lds.S
@@ -90,6 +90,7 @@ SECTIONS
 
INIT_TASK_DATA(THREAD_SIZE)
NOSAVE_DATA
+   PAGE_ALIGNED_DATA(PAGE_SIZE)
CACHELINE_ALIGNED_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
READ_MOSTLY_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
DATA_DATA




[PATCH 5.10 624/663] cpufreq: intel_pstate: Get per-CPU max freq via MSR_HWP_CAPABILITIES if available

2021-03-01 Thread Greg Kroah-Hartman
From: Chen Yu 

commit 6f67e060083a84a4cc364eab6ae40c717165fb0c upstream.

Currently, when turbo is disabled (either by BIOS or by the user),
the intel_pstate driver reads the max non-turbo frequency from the
package-wide MSR_PLATFORM_INFO(0xce) register.

However, on asymmetric platforms it is possible in theory that small
and big core with HWP enabled might have different max non-turbo CPU
frequency, because MSR_HWP_CAPABILITIES is per-CPU scope according
to Intel Software Developer Manual.

The turbo max freq is already per-CPU in current code, so make
similar change to the max non-turbo frequency as well.

Reported-by: Wendy Wang 
Signed-off-by: Chen Yu 
[ rjw: Subject and changelog edits ]
Cc: 4.18+  # 4.18+: a45ee4d4e13b: cpufreq: 
intel_pstate: Change intel_pstate_get_hwp_max() argument
Signed-off-by: Rafael J. Wysocki 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/cpufreq/intel_pstate.c |5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
@@ -1724,11 +1724,9 @@ static void intel_pstate_max_within_limi
 static void intel_pstate_get_cpu_pstates(struct cpudata *cpu)
 {
cpu->pstate.min_pstate = pstate_funcs.get_min();
-   cpu->pstate.max_pstate = pstate_funcs.get_max();
cpu->pstate.max_pstate_physical = pstate_funcs.get_max_physical();
cpu->pstate.turbo_pstate = pstate_funcs.get_turbo();
cpu->pstate.scaling = pstate_funcs.get_scaling();
-   cpu->pstate.max_freq = cpu->pstate.max_pstate * cpu->pstate.scaling;
 
if (hwp_active && !hwp_mode_bdw) {
unsigned int phy_max, current_max;
@@ -1736,9 +1734,12 @@ static void intel_pstate_get_cpu_pstates
intel_pstate_get_hwp_max(cpu, _max, _max);
cpu->pstate.turbo_freq = phy_max * cpu->pstate.scaling;
cpu->pstate.turbo_pstate = phy_max;
+   cpu->pstate.max_pstate = 
HWP_GUARANTEED_PERF(READ_ONCE(cpu->hwp_cap_cached));
} else {
cpu->pstate.turbo_freq = cpu->pstate.turbo_pstate * 
cpu->pstate.scaling;
+   cpu->pstate.max_pstate = pstate_funcs.get_max();
}
+   cpu->pstate.max_freq = cpu->pstate.max_pstate * cpu->pstate.scaling;
 
if (pstate_funcs.get_aperf_mperf_shift)
cpu->aperf_mperf_shift = pstate_funcs.get_aperf_mperf_shift();




<    4   5   6   7   8   9   10   11   12   13   >