]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 5.6
authorSasha Levin <sashal@kernel.org>
Fri, 5 Jun 2020 01:12:18 +0000 (21:12 -0400)
committerSasha Levin <sashal@kernel.org>
Fri, 5 Jun 2020 01:12:18 +0000 (21:12 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
29 files changed:
queue-5.6/arc-fix-iccm-dccm-runtime-size-checks.patch [new file with mode: 0644]
queue-5.6/arc-plat-eznps-restrict-to-config_isa_arcompact.patch [new file with mode: 0644]
queue-5.6/dmaengine-ti-k3-udma-fix-tr-mode-flags-for-slave_sg-.patch [new file with mode: 0644]
queue-5.6/drm-amd-display-dp-training-to-set-properly-scrambli.patch [new file with mode: 0644]
queue-5.6/drm-edid-add-oculus-rift-s-to-non-desktop-list.patch [new file with mode: 0644]
queue-5.6/efi-earlycon-fix-early-printk-for-wider-fonts.patch [new file with mode: 0644]
queue-5.6/efi-libstub-avoid-returning-uninitialized-data-from-.patch [new file with mode: 0644]
queue-5.6/evm-fix-rcu-list-related-warnings.patch [new file with mode: 0644]
queue-5.6/i2c-altera-fix-race-between-xfer_msg-and-isr-thread.patch [new file with mode: 0644]
queue-5.6/io_uring-don-t-prepare-drain-reqs-twice.patch [new file with mode: 0644]
queue-5.6/io_uring-fix-force_async-req-preparation.patch [new file with mode: 0644]
queue-5.6/io_uring-initialize-ctx-sqo_wait-earlier.patch [new file with mode: 0644]
queue-5.6/io_uring-reset-ebusy-error-when-io-sq-thread-is-wake.patch [new file with mode: 0644]
queue-5.6/net-bmac-fix-read-of-mac-address-from-rom.patch [new file with mode: 0644]
queue-5.6/net-ethernet-freescale-rework-quiesce-activate-for-u.patch [new file with mode: 0644]
queue-5.6/net-ethernet-stmmac-enable-interface-clocks-on-probe.patch [new file with mode: 0644]
queue-5.6/net-ethernet-ti-fix-some-return-value-check-of-cpsw_.patch [new file with mode: 0644]
queue-5.6/net-fix-return-value-about-devm_platform_ioremap_res.patch [new file with mode: 0644]
queue-5.6/net-phy-propagate-an-error-back-to-the-callers-of-ph.patch [new file with mode: 0644]
queue-5.6/net-smsc911x-fix-runtime-pm-imbalance-on-error.patch [new file with mode: 0644]
queue-5.6/null_blk-return-error-for-invalid-zone-size.patch [new file with mode: 0644]
queue-5.6/riscv-fix-print_vm_layout-build-error-if-nommu.patch [new file with mode: 0644]
queue-5.6/s390-mm-fix-set_huge_pte_at-for-empty-ptes.patch [new file with mode: 0644]
queue-5.6/scsi-pm-balance-pm_only-counter-of-request-queue-dur.patch [new file with mode: 0644]
queue-5.6/selftests-mlxsw-qos_mc_aware-specify-arping-timeout-.patch [new file with mode: 0644]
queue-5.6/series
queue-5.6/wireguard-selftests-use-newer-iproute2-for-gcc-10.patch [new file with mode: 0644]
queue-5.6/x86-hyperv-properly-suspend-resume-reenlightenment-n.patch [new file with mode: 0644]
queue-5.6/x86-mmiotrace-use-cpumask_available-for-cpumask_var_.patch [new file with mode: 0644]

diff --git a/queue-5.6/arc-fix-iccm-dccm-runtime-size-checks.patch b/queue-5.6/arc-fix-iccm-dccm-runtime-size-checks.patch
new file mode 100644 (file)
index 0000000..6a71f82
--- /dev/null
@@ -0,0 +1,54 @@
+From 24b5c326075c75f149184b7b52da5488cd3703ac Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 2 Apr 2020 20:54:28 +0300
+Subject: ARC: Fix ICCM & DCCM runtime size checks
+
+From: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
+
+[ Upstream commit 43900edf67d7ef3ac8909854d75b8a1fba2d570c ]
+
+As of today the ICCM and DCCM size checks are incorrectly using
+mismatched units (KiB checked against bytes). The CONFIG_ARC_DCCM_SZ
+and CONFIG_ARC_ICCM_SZ are in KiB, but the size calculated in
+runtime and stored in cpu->dccm.sz and cpu->iccm.sz is in bytes.
+
+Fix that.
+
+Reported-by: Paul Greco <pmgreco@us.ibm.com>
+Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
+Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arc/kernel/setup.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arc/kernel/setup.c b/arch/arc/kernel/setup.c
+index aa41af6ef4ac..efdedf83b954 100644
+--- a/arch/arc/kernel/setup.c
++++ b/arch/arc/kernel/setup.c
+@@ -11,6 +11,7 @@
+ #include <linux/clocksource.h>
+ #include <linux/console.h>
+ #include <linux/module.h>
++#include <linux/sizes.h>
+ #include <linux/cpu.h>
+ #include <linux/of_clk.h>
+ #include <linux/of_fdt.h>
+@@ -409,12 +410,12 @@ static void arc_chk_core_config(void)
+       if ((unsigned int)__arc_dccm_base != cpu->dccm.base_addr)
+               panic("Linux built with incorrect DCCM Base address\n");
+-      if (CONFIG_ARC_DCCM_SZ != cpu->dccm.sz)
++      if (CONFIG_ARC_DCCM_SZ * SZ_1K != cpu->dccm.sz)
+               panic("Linux built with incorrect DCCM Size\n");
+ #endif
+ #ifdef CONFIG_ARC_HAS_ICCM
+-      if (CONFIG_ARC_ICCM_SZ != cpu->iccm.sz)
++      if (CONFIG_ARC_ICCM_SZ * SZ_1K != cpu->iccm.sz)
+               panic("Linux built with incorrect ICCM Size\n");
+ #endif
+-- 
+2.25.1
+
diff --git a/queue-5.6/arc-plat-eznps-restrict-to-config_isa_arcompact.patch b/queue-5.6/arc-plat-eznps-restrict-to-config_isa_arcompact.patch
new file mode 100644 (file)
index 0000000..6d82852
--- /dev/null
@@ -0,0 +1,38 @@
+From 223427df529d1a63d425b9b5d8c9eb29e7264e26 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 14 Apr 2020 11:41:51 -0700
+Subject: ARC: [plat-eznps]: Restrict to CONFIG_ISA_ARCOMPACT
+
+From: Vineet Gupta <vgupta@synopsys.com>
+
+[ Upstream commit 799587d5731db9dcdafaac4002463aa7d9cd6cf7 ]
+
+Elide invalid configuration EZNPS + ARCv2, triggered by a
+make allyesconfig build.
+
+Granted the root cause is in source code (asm/barrier.h) where we check
+for ARCv2 before PLAT_EZNPS, but it is better to avoid such combinations
+at onset rather then baking subtle nuances into code.
+
+Reported-by: kbuild test robot <lkp@intel.com>
+Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arc/plat-eznps/Kconfig | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/arc/plat-eznps/Kconfig b/arch/arc/plat-eznps/Kconfig
+index a931d0a256d0..a645bca5899a 100644
+--- a/arch/arc/plat-eznps/Kconfig
++++ b/arch/arc/plat-eznps/Kconfig
+@@ -6,6 +6,7 @@
+ menuconfig ARC_PLAT_EZNPS
+       bool "\"EZchip\" ARC dev platform"
++      depends on ISA_ARCOMPACT
+       select CPU_BIG_ENDIAN
+       select CLKSRC_NPS if !PHYS_ADDR_T_64BIT
+       select EZNPS_GIC
+-- 
+2.25.1
+
diff --git a/queue-5.6/dmaengine-ti-k3-udma-fix-tr-mode-flags-for-slave_sg-.patch b/queue-5.6/dmaengine-ti-k3-udma-fix-tr-mode-flags-for-slave_sg-.patch
new file mode 100644 (file)
index 0000000..5e80d98
--- /dev/null
@@ -0,0 +1,48 @@
+From 215737bd769241b3ce5c759fca054f2661bef54c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 12 May 2020 16:45:31 +0300
+Subject: dmaengine: ti: k3-udma: Fix TR mode flags for slave_sg and memcpy
+
+From: Peter Ujfalusi <peter.ujfalusi@ti.com>
+
+[ Upstream commit be4054b8b6671ebc977eb7774b8e889d2d05d3e3 ]
+
+cppi5_tr_csf_set() clears previously set Configuration Specific Flags.
+Setting the EOP flag clears the SUPR_EVT flag for the last TR which is not
+desirable as we do not want to have events from the TR.
+
+Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
+Link: https://lore.kernel.org/r/20200512134531.5742-1-peter.ujfalusi@ti.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/dma/ti/k3-udma.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/dma/ti/k3-udma.c b/drivers/dma/ti/k3-udma.c
+index 0536866a58ce..4bfbca2add1b 100644
+--- a/drivers/dma/ti/k3-udma.c
++++ b/drivers/dma/ti/k3-udma.c
+@@ -2148,7 +2148,8 @@ udma_prep_slave_sg_tr(struct udma_chan *uc, struct scatterlist *sgl,
+               d->residue += sg_dma_len(sgent);
+       }
+-      cppi5_tr_csf_set(&tr_req[tr_idx - 1].flags, CPPI5_TR_CSF_EOP);
++      cppi5_tr_csf_set(&tr_req[tr_idx - 1].flags,
++                       CPPI5_TR_CSF_SUPR_EVT | CPPI5_TR_CSF_EOP);
+       return d;
+ }
+@@ -2725,7 +2726,8 @@ udma_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src,
+               tr_req[1].dicnt3 = 1;
+       }
+-      cppi5_tr_csf_set(&tr_req[num_tr - 1].flags, CPPI5_TR_CSF_EOP);
++      cppi5_tr_csf_set(&tr_req[num_tr - 1].flags,
++                       CPPI5_TR_CSF_SUPR_EVT | CPPI5_TR_CSF_EOP);
+       if (uc->config.metadata_size)
+               d->vd.tx.metadata_ops = &metadata_ops;
+-- 
+2.25.1
+
diff --git a/queue-5.6/drm-amd-display-dp-training-to-set-properly-scrambli.patch b/queue-5.6/drm-amd-display-dp-training-to-set-properly-scrambli.patch
new file mode 100644 (file)
index 0000000..96c3ec7
--- /dev/null
@@ -0,0 +1,74 @@
+From 1719e14aa1f51eaead14b275e9c4e23a4bc16020 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 28 Apr 2020 13:04:35 -0400
+Subject: drm/amd/display: DP training to set properly SCRAMBLING_DISABLE
+
+From: Vladimir Stempen <vladimir.stempen@amd.com>
+
+[ Upstream commit b6ef55ccba7ed00fc10e3e6f619c8f886162427f ]
+
+[Why]
+DP training sequence to set SCRAMBLING_DISABLE bit properly based on
+training pattern - per DP Spec.
+
+[How]
+Update dpcd_pattern.v1_4.SCRAMBLING_DISABLE with 1 for TPS1, TPS2, TPS3,
+but not for TPS4.
+
+Signed-off-by: Vladimir Stempen <vladimir.stempen@amd.com>
+Reviewed-by: Wenjing Liu <Wenjing.Liu@amd.com>
+Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../gpu/drm/amd/display/dc/core/dc_link_dp.c  | 27 +++++++++++++++++++
+ 1 file changed, 27 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
+index 1b6c75a4dd60..fbcd979438e2 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
+@@ -220,6 +220,30 @@ static enum dpcd_training_patterns
+       return dpcd_tr_pattern;
+ }
++static uint8_t dc_dp_initialize_scrambling_data_symbols(
++      struct dc_link *link,
++      enum dc_dp_training_pattern pattern)
++{
++      uint8_t disable_scrabled_data_symbols = 0;
++
++      switch (pattern) {
++      case DP_TRAINING_PATTERN_SEQUENCE_1:
++      case DP_TRAINING_PATTERN_SEQUENCE_2:
++      case DP_TRAINING_PATTERN_SEQUENCE_3:
++              disable_scrabled_data_symbols = 1;
++              break;
++      case DP_TRAINING_PATTERN_SEQUENCE_4:
++              disable_scrabled_data_symbols = 0;
++              break;
++      default:
++              ASSERT(0);
++              DC_LOG_HW_LINK_TRAINING("%s: Invalid HW Training pattern: %d\n",
++                      __func__, pattern);
++              break;
++      }
++      return disable_scrabled_data_symbols;
++}
++
+ static inline bool is_repeater(struct dc_link *link, uint32_t offset)
+ {
+       return (!link->is_lttpr_mode_transparent && offset != 0);
+@@ -252,6 +276,9 @@ static void dpcd_set_lt_pattern_and_lane_settings(
+       dpcd_pattern.v1_4.TRAINING_PATTERN_SET =
+               dc_dp_training_pattern_to_dpcd_training_pattern(link, pattern);
++      dpcd_pattern.v1_4.SCRAMBLING_DISABLE =
++              dc_dp_initialize_scrambling_data_symbols(link, pattern);
++
+       dpcd_lt_buffer[DP_TRAINING_PATTERN_SET - DP_TRAINING_PATTERN_SET]
+               = dpcd_pattern.raw;
+-- 
+2.25.1
+
diff --git a/queue-5.6/drm-edid-add-oculus-rift-s-to-non-desktop-list.patch b/queue-5.6/drm-edid-add-oculus-rift-s-to-non-desktop-list.patch
new file mode 100644 (file)
index 0000000..064d631
--- /dev/null
@@ -0,0 +1,40 @@
+From d603b669092ecafac88d7e33d75f0f820227b5ab Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 8 May 2020 04:06:28 +1000
+Subject: drm/edid: Add Oculus Rift S to non-desktop list
+
+From: Jan Schmidt <jan@centricular.com>
+
+[ Upstream commit 5a3f610877e9d08968ea7237551049581f02b163 ]
+
+Add a quirk for the Oculus Rift S OVR0012 display so
+it shows up as a non-desktop display.
+
+Signed-off-by: Jan Schmidt <jan@centricular.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20200507180628.740936-1-jan@centricular.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/drm_edid.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
+index 079800a07d6e..5c611baba2fc 100644
+--- a/drivers/gpu/drm/drm_edid.c
++++ b/drivers/gpu/drm/drm_edid.c
+@@ -191,10 +191,11 @@ static const struct edid_quirk {
+       { "HVR", 0xaa01, EDID_QUIRK_NON_DESKTOP },
+       { "HVR", 0xaa02, EDID_QUIRK_NON_DESKTOP },
+-      /* Oculus Rift DK1, DK2, and CV1 VR Headsets */
++      /* Oculus Rift DK1, DK2, CV1 and Rift S VR Headsets */
+       { "OVR", 0x0001, EDID_QUIRK_NON_DESKTOP },
+       { "OVR", 0x0003, EDID_QUIRK_NON_DESKTOP },
+       { "OVR", 0x0004, EDID_QUIRK_NON_DESKTOP },
++      { "OVR", 0x0012, EDID_QUIRK_NON_DESKTOP },
+       /* Windows Mixed Reality Headsets */
+       { "ACR", 0x7fce, EDID_QUIRK_NON_DESKTOP },
+-- 
+2.25.1
+
diff --git a/queue-5.6/efi-earlycon-fix-early-printk-for-wider-fonts.patch b/queue-5.6/efi-earlycon-fix-early-printk-for-wider-fonts.patch
new file mode 100644 (file)
index 0000000..5c4715a
--- /dev/null
@@ -0,0 +1,54 @@
+From c3a345fe1b086569cc3072f515ec5a797fb62349 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 12 Apr 2020 10:49:27 +0800
+Subject: efi/earlycon: Fix early printk for wider fonts
+
+From: Dave Young <dyoung@redhat.com>
+
+[ Upstream commit 8f592ada59b321d248391bae175cd78a12972223 ]
+
+When I play with terminus fonts I noticed the efi early printk does
+not work because the earlycon code assumes font width is 8.
+
+Here add the code to adapt with larger fonts.  Tested with all kinds
+of kernel built-in fonts on my laptop. Also tested with a local draft
+patch for 14x28 !bold terminus font.
+
+Signed-off-by: Dave Young <dyoung@redhat.com>
+Link: https://lore.kernel.org/r/20200412024927.GA6884@dhcp-128-65.nay.redhat.com
+Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/firmware/efi/earlycon.c | 14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/firmware/efi/earlycon.c b/drivers/firmware/efi/earlycon.c
+index 5d4f84781aa0..a52236e11e5f 100644
+--- a/drivers/firmware/efi/earlycon.c
++++ b/drivers/firmware/efi/earlycon.c
+@@ -114,14 +114,16 @@ static void efi_earlycon_write_char(u32 *dst, unsigned char c, unsigned int h)
+       const u32 color_black = 0x00000000;
+       const u32 color_white = 0x00ffffff;
+       const u8 *src;
+-      u8 s8;
+-      int m;
++      int m, n, bytes;
++      u8 x;
+-      src = font->data + c * font->height;
+-      s8 = *(src + h);
++      bytes = BITS_TO_BYTES(font->width);
++      src = font->data + c * font->height * bytes + h * bytes;
+-      for (m = 0; m < 8; m++) {
+-              if ((s8 >> (7 - m)) & 1)
++      for (m = 0; m < font->width; m++) {
++              n = m % 8;
++              x = *(src + m / 8);
++              if ((x >> (7 - n)) & 1)
+                       *dst = color_white;
+               else
+                       *dst = color_black;
+-- 
+2.25.1
+
diff --git a/queue-5.6/efi-libstub-avoid-returning-uninitialized-data-from-.patch b/queue-5.6/efi-libstub-avoid-returning-uninitialized-data-from-.patch
new file mode 100644 (file)
index 0000000..51622d8
--- /dev/null
@@ -0,0 +1,44 @@
+From 01643c0302993bd13ffd1bb063992213e7d9b808 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 26 Apr 2020 21:49:46 +0200
+Subject: efi/libstub: Avoid returning uninitialized data from setup_graphics()
+
+From: Heinrich Schuchardt <xypron.glpk@gmx.de>
+
+[ Upstream commit 081d5150845ba3fa49151a2f55d3cc03b0987509 ]
+
+Currently, setup_graphics() ignores the return value of efi_setup_gop(). As
+AllocatePool() does not zero out memory, the screen information table will
+contain uninitialized data in this case.
+
+We should free the screen information table if efi_setup_gop() returns an
+error code.
+
+Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
+Link: https://lore.kernel.org/r/20200426194946.112768-1-xypron.glpk@gmx.de
+Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/firmware/efi/libstub/arm-stub.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/firmware/efi/libstub/arm-stub.c b/drivers/firmware/efi/libstub/arm-stub.c
+index 7bbef4a67350..30e77a9e62b2 100644
+--- a/drivers/firmware/efi/libstub/arm-stub.c
++++ b/drivers/firmware/efi/libstub/arm-stub.c
+@@ -59,7 +59,11 @@ static struct screen_info *setup_graphics(void)
+               si = alloc_screen_info();
+               if (!si)
+                       return NULL;
+-              efi_setup_gop(si, &gop_proto, size);
++              status = efi_setup_gop(si, &gop_proto, size);
++              if (status != EFI_SUCCESS) {
++                      free_screen_info(si);
++                      return NULL;
++              }
+       }
+       return si;
+ }
+-- 
+2.25.1
+
diff --git a/queue-5.6/evm-fix-rcu-list-related-warnings.patch b/queue-5.6/evm-fix-rcu-list-related-warnings.patch
new file mode 100644 (file)
index 0000000..34b73ec
--- /dev/null
@@ -0,0 +1,93 @@
+From 88f8ea156969db09d5a53d27ab4d158321f4d42f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 30 Apr 2020 21:32:05 +0530
+Subject: evm: Fix RCU list related warnings
+
+From: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>
+
+[ Upstream commit 770f60586d2af0590be263f55fd079226313922c ]
+
+This patch fixes the following warning and few other instances of
+traversal of evm_config_xattrnames list:
+
+[   32.848432] =============================
+[   32.848707] WARNING: suspicious RCU usage
+[   32.848966] 5.7.0-rc1-00006-ga8d5875ce5f0b #1 Not tainted
+[   32.849308] -----------------------------
+[   32.849567] security/integrity/evm/evm_main.c:231 RCU-list traversed in non-reader section!!
+
+Since entries are only added to the list and never deleted, use
+list_for_each_entry_lockless() instead of list_for_each_entry_rcu for
+traversing the list.  Also, add a relevant comment in evm_secfs.c to
+indicate this fact.
+
+Reported-by: kernel test robot <lkp@intel.com>
+Suggested-by: Paul E. McKenney <paulmck@kernel.org>
+Signed-off-by: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>
+Acked-by: Paul E. McKenney <paulmck@kernel.org> (RCU viewpoint)
+Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ security/integrity/evm/evm_crypto.c | 2 +-
+ security/integrity/evm/evm_main.c   | 4 ++--
+ security/integrity/evm/evm_secfs.c  | 9 ++++++++-
+ 3 files changed, 11 insertions(+), 4 deletions(-)
+
+diff --git a/security/integrity/evm/evm_crypto.c b/security/integrity/evm/evm_crypto.c
+index cc826c2767a3..fbc2ee6d46fc 100644
+--- a/security/integrity/evm/evm_crypto.c
++++ b/security/integrity/evm/evm_crypto.c
+@@ -209,7 +209,7 @@ static int evm_calc_hmac_or_hash(struct dentry *dentry,
+       data->hdr.length = crypto_shash_digestsize(desc->tfm);
+       error = -ENODATA;
+-      list_for_each_entry_rcu(xattr, &evm_config_xattrnames, list) {
++      list_for_each_entry_lockless(xattr, &evm_config_xattrnames, list) {
+               bool is_ima = false;
+               if (strcmp(xattr->name, XATTR_NAME_IMA) == 0)
+diff --git a/security/integrity/evm/evm_main.c b/security/integrity/evm/evm_main.c
+index f9a81b187fae..a2c393385db0 100644
+--- a/security/integrity/evm/evm_main.c
++++ b/security/integrity/evm/evm_main.c
+@@ -99,7 +99,7 @@ static int evm_find_protected_xattrs(struct dentry *dentry)
+       if (!(inode->i_opflags & IOP_XATTR))
+               return -EOPNOTSUPP;
+-      list_for_each_entry_rcu(xattr, &evm_config_xattrnames, list) {
++      list_for_each_entry_lockless(xattr, &evm_config_xattrnames, list) {
+               error = __vfs_getxattr(dentry, inode, xattr->name, NULL, 0);
+               if (error < 0) {
+                       if (error == -ENODATA)
+@@ -230,7 +230,7 @@ static int evm_protected_xattr(const char *req_xattr_name)
+       struct xattr_list *xattr;
+       namelen = strlen(req_xattr_name);
+-      list_for_each_entry_rcu(xattr, &evm_config_xattrnames, list) {
++      list_for_each_entry_lockless(xattr, &evm_config_xattrnames, list) {
+               if ((strlen(xattr->name) == namelen)
+                   && (strncmp(req_xattr_name, xattr->name, namelen) == 0)) {
+                       found = 1;
+diff --git a/security/integrity/evm/evm_secfs.c b/security/integrity/evm/evm_secfs.c
+index c11c1f7b3ddd..0f37ef27268d 100644
+--- a/security/integrity/evm/evm_secfs.c
++++ b/security/integrity/evm/evm_secfs.c
+@@ -234,7 +234,14 @@ static ssize_t evm_write_xattrs(struct file *file, const char __user *buf,
+               goto out;
+       }
+-      /* Guard against races in evm_read_xattrs */
++      /*
++       * xattr_list_mutex guards against races in evm_read_xattrs().
++       * Entries are only added to the evm_config_xattrnames list
++       * and never deleted. Therefore, the list is traversed
++       * using list_for_each_entry_lockless() without holding
++       * the mutex in evm_calc_hmac_or_hash(), evm_find_protected_xattrs()
++       * and evm_protected_xattr().
++       */
+       mutex_lock(&xattr_list_mutex);
+       list_for_each_entry(tmp, &evm_config_xattrnames, list) {
+               if (strcmp(xattr->name, tmp->name) == 0) {
+-- 
+2.25.1
+
diff --git a/queue-5.6/i2c-altera-fix-race-between-xfer_msg-and-isr-thread.patch b/queue-5.6/i2c-altera-fix-race-between-xfer_msg-and-isr-thread.patch
new file mode 100644 (file)
index 0000000..b7898ec
--- /dev/null
@@ -0,0 +1,93 @@
+From bd36433dd8af2762c5dfea6b93a2d0152ec47910 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 8 May 2020 22:12:48 +0900
+Subject: i2c: altera: Fix race between xfer_msg and isr thread
+
+From: Atsushi Nemoto <atsushi.nemoto@sord.co.jp>
+
+[ Upstream commit 5d4c7977499a736f3f80826bdc9744344ad55589 ]
+
+Use a mutex to protect access to idev->msg_len, idev->buf, etc. which
+are modified by both altr_i2c_xfer_msg() and altr_i2c_isr().
+
+This is the minimal fix for easy backporting. A cleanup to remove the
+spinlock will be added later.
+
+Signed-off-by: Atsushi Nemoto <atsushi.nemoto@sord.co.jp>
+Acked-by: Thor Thayer <thor.thayer@linux.intel.com>
+[wsa: updated commit message]
+Signed-off-by: Wolfram Sang <wsa@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/i2c/busses/i2c-altera.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/i2c/busses/i2c-altera.c b/drivers/i2c/busses/i2c-altera.c
+index 92d2c706c2a7..a60042431370 100644
+--- a/drivers/i2c/busses/i2c-altera.c
++++ b/drivers/i2c/busses/i2c-altera.c
+@@ -70,6 +70,7 @@
+  * @isr_mask: cached copy of local ISR enables.
+  * @isr_status: cached copy of local ISR status.
+  * @lock: spinlock for IRQ synchronization.
++ * @isr_mutex: mutex for IRQ thread.
+  */
+ struct altr_i2c_dev {
+       void __iomem *base;
+@@ -86,6 +87,7 @@ struct altr_i2c_dev {
+       u32 isr_mask;
+       u32 isr_status;
+       spinlock_t lock;        /* IRQ synchronization */
++      struct mutex isr_mutex;
+ };
+ static void
+@@ -245,10 +247,11 @@ static irqreturn_t altr_i2c_isr(int irq, void *_dev)
+       struct altr_i2c_dev *idev = _dev;
+       u32 status = idev->isr_status;
++      mutex_lock(&idev->isr_mutex);
+       if (!idev->msg) {
+               dev_warn(idev->dev, "unexpected interrupt\n");
+               altr_i2c_int_clear(idev, ALTR_I2C_ALL_IRQ);
+-              return IRQ_HANDLED;
++              goto out;
+       }
+       read = (idev->msg->flags & I2C_M_RD) != 0;
+@@ -301,6 +304,8 @@ static irqreturn_t altr_i2c_isr(int irq, void *_dev)
+               complete(&idev->msg_complete);
+               dev_dbg(idev->dev, "Message Complete\n");
+       }
++out:
++      mutex_unlock(&idev->isr_mutex);
+       return IRQ_HANDLED;
+ }
+@@ -312,6 +317,7 @@ static int altr_i2c_xfer_msg(struct altr_i2c_dev *idev, struct i2c_msg *msg)
+       u32 value;
+       u8 addr = i2c_8bit_addr_from_msg(msg);
++      mutex_lock(&idev->isr_mutex);
+       idev->msg = msg;
+       idev->msg_len = msg->len;
+       idev->buf = msg->buf;
+@@ -336,6 +342,7 @@ static int altr_i2c_xfer_msg(struct altr_i2c_dev *idev, struct i2c_msg *msg)
+               altr_i2c_int_enable(idev, imask, true);
+               altr_i2c_fill_tx_fifo(idev);
+       }
++      mutex_unlock(&idev->isr_mutex);
+       time_left = wait_for_completion_timeout(&idev->msg_complete,
+                                               ALTR_I2C_XFER_TIMEOUT);
+@@ -409,6 +416,7 @@ static int altr_i2c_probe(struct platform_device *pdev)
+       idev->dev = &pdev->dev;
+       init_completion(&idev->msg_complete);
+       spin_lock_init(&idev->lock);
++      mutex_init(&idev->isr_mutex);
+       ret = device_property_read_u32(idev->dev, "fifo-size",
+                                      &idev->fifo_size);
+-- 
+2.25.1
+
diff --git a/queue-5.6/io_uring-don-t-prepare-drain-reqs-twice.patch b/queue-5.6/io_uring-don-t-prepare-drain-reqs-twice.patch
new file mode 100644 (file)
index 0000000..a80bd26
--- /dev/null
@@ -0,0 +1,46 @@
+From e3673d17471e16cd26fc1be4acec8ef6ec154d8c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 17 May 2020 14:02:11 +0300
+Subject: io_uring: don't prepare DRAIN reqs twice
+
+From: Pavel Begunkov <asml.silence@gmail.com>
+
+[ Upstream commit 650b548129b60b0d23508351800108196f4aa89f ]
+
+If req->io is not NULL, it's already prepared. Don't do it again,
+it's dangerous.
+
+Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/io_uring.c | 13 +++++++------
+ 1 file changed, 7 insertions(+), 6 deletions(-)
+
+diff --git a/fs/io_uring.c b/fs/io_uring.c
+index 8bdf2629f7fd..aa800f70c55e 100644
+--- a/fs/io_uring.c
++++ b/fs/io_uring.c
+@@ -4262,12 +4262,13 @@ static int io_req_defer(struct io_kiocb *req, const struct io_uring_sqe *sqe)
+       if (!req_need_defer(req) && list_empty_careful(&ctx->defer_list))
+               return 0;
+-      if (!req->io && io_alloc_async_ctx(req))
+-              return -EAGAIN;
+-
+-      ret = io_req_defer_prep(req, sqe);
+-      if (ret < 0)
+-              return ret;
++      if (!req->io) {
++              if (io_alloc_async_ctx(req))
++                      return -EAGAIN;
++              ret = io_req_defer_prep(req, sqe);
++              if (ret < 0)
++                      return ret;
++      }
+       spin_lock_irq(&ctx->completion_lock);
+       if (!req_need_defer(req) && list_empty(&ctx->defer_list)) {
+-- 
+2.25.1
+
diff --git a/queue-5.6/io_uring-fix-force_async-req-preparation.patch b/queue-5.6/io_uring-fix-force_async-req-preparation.patch
new file mode 100644 (file)
index 0000000..79182bc
--- /dev/null
@@ -0,0 +1,45 @@
+From 50113de6007ce740a8bfb59f037aea9a1a99f501 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 17 May 2020 14:02:12 +0300
+Subject: io_uring: fix FORCE_ASYNC req preparation
+
+From: Pavel Begunkov <asml.silence@gmail.com>
+
+[ Upstream commit bd2ab18a1d6267446eae1b47dd839050452bdf7f ]
+
+As for other not inlined requests, alloc req->io for FORCE_ASYNC reqs,
+so they can be prepared properly.
+
+Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/io_uring.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/fs/io_uring.c b/fs/io_uring.c
+index aa800f70c55e..504484dc33e4 100644
+--- a/fs/io_uring.c
++++ b/fs/io_uring.c
+@@ -4823,9 +4823,15 @@ fail_req:
+                       io_double_put_req(req);
+               }
+       } else if (req->flags & REQ_F_FORCE_ASYNC) {
+-              ret = io_req_defer_prep(req, sqe);
+-              if (unlikely(ret < 0))
+-                      goto fail_req;
++              if (!req->io) {
++                      ret = -EAGAIN;
++                      if (io_alloc_async_ctx(req))
++                              goto fail_req;
++                      ret = io_req_defer_prep(req, sqe);
++                      if (unlikely(ret < 0))
++                              goto fail_req;
++              }
++
+               /*
+                * Never try inline submit of IOSQE_ASYNC is set, go straight
+                * to async execution.
+-- 
+2.25.1
+
diff --git a/queue-5.6/io_uring-initialize-ctx-sqo_wait-earlier.patch b/queue-5.6/io_uring-initialize-ctx-sqo_wait-earlier.patch
new file mode 100644 (file)
index 0000000..ed21dd4
--- /dev/null
@@ -0,0 +1,76 @@
+From 1ffa915aceff5bcc6eae5a9a2af70deef2254616 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 17 May 2020 09:20:00 -0600
+Subject: io_uring: initialize ctx->sqo_wait earlier
+
+From: Jens Axboe <axboe@kernel.dk>
+
+[ Upstream commit 583863ed918136412ddf14de2e12534f17cfdc6f ]
+
+Ensure that ctx->sqo_wait is initialized as soon as the ctx is allocated,
+instead of deferring it to the offload setup. This fixes a syzbot
+reported lockdep complaint, which is really due to trying to wake_up
+on an uninitialized wait queue:
+
+RSP: 002b:00007fffb1fb9aa8 EFLAGS: 00000246 ORIG_RAX: 00000000000001a9
+RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 0000000000441319
+RDX: 0000000000000001 RSI: 0000000020000140 RDI: 000000000000047b
+RBP: 0000000000010475 R08: 0000000000000001 R09: 00000000004002c8
+R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000402260
+R13: 00000000004022f0 R14: 0000000000000000 R15: 0000000000000000
+INFO: trying to register non-static key.
+the code is fine but needs lockdep annotation.
+turning off the locking correctness validator.
+CPU: 1 PID: 7090 Comm: syz-executor222 Not tainted 5.7.0-rc1-next-20200415-syzkaller #0
+Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+Call Trace:
+ __dump_stack lib/dump_stack.c:77 [inline]
+ dump_stack+0x188/0x20d lib/dump_stack.c:118
+ assign_lock_key kernel/locking/lockdep.c:913 [inline]
+ register_lock_class+0x1664/0x1760 kernel/locking/lockdep.c:1225
+ __lock_acquire+0x104/0x4c50 kernel/locking/lockdep.c:4234
+ lock_acquire+0x1f2/0x8f0 kernel/locking/lockdep.c:4934
+ __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
+ _raw_spin_lock_irqsave+0x8c/0xbf kernel/locking/spinlock.c:159
+ __wake_up_common_lock+0xb4/0x130 kernel/sched/wait.c:122
+ io_cqring_ev_posted+0xa5/0x1e0 fs/io_uring.c:1160
+ io_poll_remove_all fs/io_uring.c:4357 [inline]
+ io_ring_ctx_wait_and_kill+0x2bc/0x5a0 fs/io_uring.c:7305
+ io_uring_create fs/io_uring.c:7843 [inline]
+ io_uring_setup+0x115e/0x22b0 fs/io_uring.c:7870
+ do_syscall_64+0xf6/0x7d0 arch/x86/entry/common.c:295
+ entry_SYSCALL_64_after_hwframe+0x49/0xb3
+RIP: 0033:0x441319
+Code: e8 5c ae 02 00 48 83 c4 18 c3 0f 1f 80 00 00 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 0f 83 bb 0a fc ff c3 66 2e 0f 1f 84 00 00 00 00
+RSP: 002b:00007fffb1fb9aa8 EFLAGS: 00000246 ORIG_RAX: 00000000000001a9
+
+Reported-by: syzbot+8c91f5d054e998721c57@syzkaller.appspotmail.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/io_uring.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/fs/io_uring.c b/fs/io_uring.c
+index 832e042531bc..8bdf2629f7fd 100644
+--- a/fs/io_uring.c
++++ b/fs/io_uring.c
+@@ -822,6 +822,7 @@ static struct io_ring_ctx *io_ring_ctx_alloc(struct io_uring_params *p)
+               goto err;
+       ctx->flags = p->flags;
++      init_waitqueue_head(&ctx->sqo_wait);
+       init_waitqueue_head(&ctx->cq_wait);
+       INIT_LIST_HEAD(&ctx->cq_overflow_list);
+       init_completion(&ctx->completions[0]);
+@@ -6004,7 +6005,6 @@ static int io_sq_offload_start(struct io_ring_ctx *ctx,
+ {
+       int ret;
+-      init_waitqueue_head(&ctx->sqo_wait);
+       mmgrab(current->mm);
+       ctx->sqo_mm = current->mm;
+-- 
+2.25.1
+
diff --git a/queue-5.6/io_uring-reset-ebusy-error-when-io-sq-thread-is-wake.patch b/queue-5.6/io_uring-reset-ebusy-error-when-io-sq-thread-is-wake.patch
new file mode 100644 (file)
index 0000000..9c5a826
--- /dev/null
@@ -0,0 +1,111 @@
+From 87b1faaec93d2add7929319d9d0f565b4c44c3eb Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 20 May 2020 21:24:35 +0800
+Subject: io_uring: reset -EBUSY error when io sq thread is waken up
+
+From: Xiaoguang Wang <xiaoguang.wang@linux.alibaba.com>
+
+[ Upstream commit d4ae271dfaae2a5f41c015f2f20d62a1deeec734 ]
+
+In io_sq_thread(), currently if we get an -EBUSY error and go to sleep,
+we will won't clear it again, which will result in io_sq_thread() will
+never have a chance to submit sqes again. Below test program test.c
+can reveal this bug:
+
+int main(int argc, char *argv[])
+{
+        struct io_uring ring;
+        int i, fd, ret;
+        struct io_uring_sqe *sqe;
+        struct io_uring_cqe *cqe;
+        struct iovec *iovecs;
+        void *buf;
+        struct io_uring_params p;
+
+        if (argc < 2) {
+                printf("%s: file\n", argv[0]);
+                return 1;
+        }
+
+        memset(&p, 0, sizeof(p));
+        p.flags = IORING_SETUP_SQPOLL;
+        ret = io_uring_queue_init_params(4, &ring, &p);
+        if (ret < 0) {
+                fprintf(stderr, "queue_init: %s\n", strerror(-ret));
+                return 1;
+        }
+
+        fd = open(argv[1], O_RDONLY | O_DIRECT);
+        if (fd < 0) {
+                perror("open");
+                return 1;
+        }
+
+        iovecs = calloc(10, sizeof(struct iovec));
+        for (i = 0; i < 10; i++) {
+                if (posix_memalign(&buf, 4096, 4096))
+                        return 1;
+                iovecs[i].iov_base = buf;
+                iovecs[i].iov_len = 4096;
+        }
+
+        ret = io_uring_register_files(&ring, &fd, 1);
+        if (ret < 0) {
+                fprintf(stderr, "%s: register %d\n", __FUNCTION__, ret);
+                return ret;
+        }
+
+        for (i = 0; i < 10; i++) {
+                sqe = io_uring_get_sqe(&ring);
+                if (!sqe)
+                        break;
+
+                io_uring_prep_readv(sqe, 0, &iovecs[i], 1, 0);
+                sqe->flags |= IOSQE_FIXED_FILE;
+
+                ret = io_uring_submit(&ring);
+                sleep(1);
+                printf("submit %d\n", i);
+        }
+
+        for (i = 0; i < 10; i++) {
+                io_uring_wait_cqe(&ring, &cqe);
+                printf("receive: %d\n", i);
+                if (cqe->res != 4096) {
+                        fprintf(stderr, "ret=%d, wanted 4096\n", cqe->res);
+                        ret = 1;
+                }
+                io_uring_cqe_seen(&ring, cqe);
+        }
+
+        close(fd);
+        io_uring_queue_exit(&ring);
+        return 0;
+}
+sudo ./test testfile
+above command will hang on the tenth request, to fix this bug, when io
+sq_thread is waken up, we reset the variable 'ret' to be zero.
+
+Suggested-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Xiaoguang Wang <xiaoguang.wang@linux.alibaba.com>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/io_uring.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/fs/io_uring.c b/fs/io_uring.c
+index 504484dc33e4..c6e1f76a6ee0 100644
+--- a/fs/io_uring.c
++++ b/fs/io_uring.c
+@@ -5224,6 +5224,7 @@ static int io_sq_thread(void *data)
+                               finish_wait(&ctx->sqo_wait, &wait);
+                               ctx->rings->sq_flags &= ~IORING_SQ_NEED_WAKEUP;
++                              ret = 0;
+                               continue;
+                       }
+                       finish_wait(&ctx->sqo_wait, &wait);
+-- 
+2.25.1
+
diff --git a/queue-5.6/net-bmac-fix-read-of-mac-address-from-rom.patch b/queue-5.6/net-bmac-fix-read-of-mac-address-from-rom.patch
new file mode 100644 (file)
index 0000000..8d6f9a8
--- /dev/null
@@ -0,0 +1,43 @@
+From 08fb4d6bf0c514444be0b8c8eb68cf4df43c7f81 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 19 May 2020 09:05:58 +0800
+Subject: net: bmac: Fix read of MAC address from ROM
+
+From: Jeremy Kerr <jk@ozlabs.org>
+
+[ Upstream commit ef01cee2ee1b369c57a936166483d40942bcc3e3 ]
+
+In bmac_get_station_address, We're reading two bytes at a time from ROM,
+but we do that six times, resulting in 12 bytes of read & writes. This
+means we will write off the end of the six-byte destination buffer.
+
+This change fixes the for-loop to only read/write six bytes.
+
+Based on a proposed fix from Finn Thain <fthain@telegraphics.com.au>.
+
+Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
+Reported-by: Stan Johnson <userm57@yahoo.com>
+Tested-by: Stan Johnson <userm57@yahoo.com>
+Reported-by: Finn Thain <fthain@telegraphics.com.au>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/apple/bmac.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/ethernet/apple/bmac.c b/drivers/net/ethernet/apple/bmac.c
+index a58185b1d8bf..3e3711b60d01 100644
+--- a/drivers/net/ethernet/apple/bmac.c
++++ b/drivers/net/ethernet/apple/bmac.c
+@@ -1182,7 +1182,7 @@ bmac_get_station_address(struct net_device *dev, unsigned char *ea)
+       int i;
+       unsigned short data;
+-      for (i = 0; i < 6; i++)
++      for (i = 0; i < 3; i++)
+               {
+                       reset_and_select_srom(dev);
+                       data = read_srom(dev, i + EnetAddressOffset/2, SROMAddressBits);
+-- 
+2.25.1
+
diff --git a/queue-5.6/net-ethernet-freescale-rework-quiesce-activate-for-u.patch b/queue-5.6/net-ethernet-freescale-rework-quiesce-activate-for-u.patch
new file mode 100644 (file)
index 0000000..90f0d80
--- /dev/null
@@ -0,0 +1,78 @@
+From eb33ca9ec783a9a0071c0c3fda589d2b8b25d172 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 20 May 2020 17:53:50 +0200
+Subject: net/ethernet/freescale: rework quiesce/activate for ucc_geth
+
+From: Valentin Longchamp <valentin@longchamp.me>
+
+[ Upstream commit 79dde73cf9bcf1dd317a2667f78b758e9fe139ed ]
+
+ugeth_quiesce/activate are used to halt the controller when there is a
+link change that requires to reconfigure the mac.
+
+The previous implementation called netif_device_detach(). This however
+causes the initial activation of the netdevice to fail precisely because
+it's detached. For details, see [1].
+
+A possible workaround was the revert of commit
+net: linkwatch: add check for netdevice being present to linkwatch_do_dev
+However, the check introduced in the above commit is correct and shall be
+kept.
+
+The netif_device_detach() is thus replaced with
+netif_tx_stop_all_queues() that prevents any tranmission. This allows to
+perform mac config change required by the link change, without detaching
+the corresponding netdevice and thus not preventing its initial
+activation.
+
+[1] https://lists.openwall.net/netdev/2020/01/08/201
+
+Signed-off-by: Valentin Longchamp <valentin@longchamp.me>
+Acked-by: Matteo Ghidoni <matteo.ghidoni@ch.abb.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/freescale/ucc_geth.c | 13 +++++++------
+ 1 file changed, 7 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/net/ethernet/freescale/ucc_geth.c b/drivers/net/ethernet/freescale/ucc_geth.c
+index 0d101c00286f..ab1b4a77b4a3 100644
+--- a/drivers/net/ethernet/freescale/ucc_geth.c
++++ b/drivers/net/ethernet/freescale/ucc_geth.c
+@@ -42,6 +42,7 @@
+ #include <soc/fsl/qe/ucc.h>
+ #include <soc/fsl/qe/ucc_fast.h>
+ #include <asm/machdep.h>
++#include <net/sch_generic.h>
+ #include "ucc_geth.h"
+@@ -1548,11 +1549,8 @@ static int ugeth_disable(struct ucc_geth_private *ugeth, enum comm_dir mode)
+ static void ugeth_quiesce(struct ucc_geth_private *ugeth)
+ {
+-      /* Prevent any further xmits, plus detach the device. */
+-      netif_device_detach(ugeth->ndev);
+-
+-      /* Wait for any current xmits to finish. */
+-      netif_tx_disable(ugeth->ndev);
++      /* Prevent any further xmits */
++      netif_tx_stop_all_queues(ugeth->ndev);
+       /* Disable the interrupt to avoid NAPI rescheduling. */
+       disable_irq(ugeth->ug_info->uf_info.irq);
+@@ -1565,7 +1563,10 @@ static void ugeth_activate(struct ucc_geth_private *ugeth)
+ {
+       napi_enable(&ugeth->napi);
+       enable_irq(ugeth->ug_info->uf_info.irq);
+-      netif_device_attach(ugeth->ndev);
++
++      /* allow to xmit again  */
++      netif_tx_wake_all_queues(ugeth->ndev);
++      __netdev_watchdog_up(ugeth->ndev);
+ }
+ /* Called every time the controller might need to be made
+-- 
+2.25.1
+
diff --git a/queue-5.6/net-ethernet-stmmac-enable-interface-clocks-on-probe.patch b/queue-5.6/net-ethernet-stmmac-enable-interface-clocks-on-probe.patch
new file mode 100644 (file)
index 0000000..7b364fc
--- /dev/null
@@ -0,0 +1,62 @@
+From 76495ed82b770dd853df030ec8723bf19ead9835 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 May 2020 12:49:34 +0100
+Subject: net: ethernet: stmmac: Enable interface clocks on probe for IPQ806x
+
+From: Jonathan McDowell <noodles@earth.li>
+
+[ Upstream commit a96ac8a0045e3cbe3e5af6d1b3c78c6c2065dec5 ]
+
+The ipq806x_gmac_probe() function enables the PTP clock but not the
+appropriate interface clocks. This means that if the bootloader hasn't
+done so attempting to bring up the interface will fail with an error
+like:
+
+[   59.028131] ipq806x-gmac-dwmac 37600000.ethernet: Failed to reset the dma
+[   59.028196] ipq806x-gmac-dwmac 37600000.ethernet eth1: stmmac_hw_setup: DMA engine initialization failed
+[   59.034056] ipq806x-gmac-dwmac 37600000.ethernet eth1: stmmac_open: Hw setup failed
+
+This patch, a slightly cleaned up version of one posted by Sergey
+Sergeev in:
+
+https://forum.openwrt.org/t/support-for-mikrotik-rb3011uias-rm/4064/257
+
+correctly enables the clock; we have already configured the source just
+before this.
+
+Tested on a MikroTik RB3011.
+
+Signed-off-by: Jonathan McDowell <noodles@earth.li>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c
+index 6ae13dc19510..02102c781a8c 100644
+--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c
++++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c
+@@ -319,6 +319,19 @@ static int ipq806x_gmac_probe(struct platform_device *pdev)
+       /* Enable PTP clock */
+       regmap_read(gmac->nss_common, NSS_COMMON_CLK_GATE, &val);
+       val |= NSS_COMMON_CLK_GATE_PTP_EN(gmac->id);
++      switch (gmac->phy_mode) {
++      case PHY_INTERFACE_MODE_RGMII:
++              val |= NSS_COMMON_CLK_GATE_RGMII_RX_EN(gmac->id) |
++                      NSS_COMMON_CLK_GATE_RGMII_TX_EN(gmac->id);
++              break;
++      case PHY_INTERFACE_MODE_SGMII:
++              val |= NSS_COMMON_CLK_GATE_GMII_RX_EN(gmac->id) |
++                              NSS_COMMON_CLK_GATE_GMII_TX_EN(gmac->id);
++              break;
++      default:
++              /* We don't get here; the switch above will have errored out */
++              unreachable();
++      }
+       regmap_write(gmac->nss_common, NSS_COMMON_CLK_GATE, val);
+       if (gmac->phy_mode == PHY_INTERFACE_MODE_SGMII) {
+-- 
+2.25.1
+
diff --git a/queue-5.6/net-ethernet-ti-fix-some-return-value-check-of-cpsw_.patch b/queue-5.6/net-ethernet-ti-fix-some-return-value-check-of-cpsw_.patch
new file mode 100644 (file)
index 0000000..da67c5a
--- /dev/null
@@ -0,0 +1,73 @@
+From 54e2f9ee785a7666731fed57278b6276f3872b9d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 20 May 2020 11:41:15 +0800
+Subject: net: ethernet: ti: fix some return value check of cpsw_ale_create()
+
+From: Wei Yongjun <weiyongjun1@huawei.com>
+
+[ Upstream commit 3469660d1b15ccfdf7b33295c306b6298ca730aa ]
+
+cpsw_ale_create() can return both NULL and PTR_ERR(), but all of
+the caller only check NULL for error handling. This patch convert
+it to only return PTR_ERR() in all error cases, and the caller using
+IS_ERR() instead of NULL test.
+
+Fixes: 4b41d3436796 ("net: ethernet: ti: cpsw: allow untagged traffic on host port")
+Reported-by: Hulk Robot <hulkci@huawei.com>
+Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/ti/cpsw_ale.c    | 2 +-
+ drivers/net/ethernet/ti/cpsw_priv.c   | 4 ++--
+ drivers/net/ethernet/ti/netcp_ethss.c | 4 ++--
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/net/ethernet/ti/cpsw_ale.c b/drivers/net/ethernet/ti/cpsw_ale.c
+index ecdbde539eb7..4eb14b174c1a 100644
+--- a/drivers/net/ethernet/ti/cpsw_ale.c
++++ b/drivers/net/ethernet/ti/cpsw_ale.c
+@@ -917,7 +917,7 @@ struct cpsw_ale *cpsw_ale_create(struct cpsw_ale_params *params)
+       ale = devm_kzalloc(params->dev, sizeof(*ale), GFP_KERNEL);
+       if (!ale)
+-              return NULL;
++              return ERR_PTR(-ENOMEM);
+       ale->p0_untag_vid_mask =
+               devm_kmalloc_array(params->dev, BITS_TO_LONGS(VLAN_N_VID),
+diff --git a/drivers/net/ethernet/ti/cpsw_priv.c b/drivers/net/ethernet/ti/cpsw_priv.c
+index 97a058ca60ac..d0b6c418a870 100644
+--- a/drivers/net/ethernet/ti/cpsw_priv.c
++++ b/drivers/net/ethernet/ti/cpsw_priv.c
+@@ -490,9 +490,9 @@ int cpsw_init_common(struct cpsw_common *cpsw, void __iomem *ss_regs,
+       ale_params.ale_ports            = CPSW_ALE_PORTS_NUM;
+       cpsw->ale = cpsw_ale_create(&ale_params);
+-      if (!cpsw->ale) {
++      if (IS_ERR(cpsw->ale)) {
+               dev_err(dev, "error initializing ale engine\n");
+-              return -ENODEV;
++              return PTR_ERR(cpsw->ale);
+       }
+       dma_params.dev          = dev;
+diff --git a/drivers/net/ethernet/ti/netcp_ethss.c b/drivers/net/ethernet/ti/netcp_ethss.c
+index fb36115e9c51..fdbae734acce 100644
+--- a/drivers/net/ethernet/ti/netcp_ethss.c
++++ b/drivers/net/ethernet/ti/netcp_ethss.c
+@@ -3704,9 +3704,9 @@ static int gbe_probe(struct netcp_device *netcp_device, struct device *dev,
+               ale_params.nu_switch_ale = true;
+       }
+       gbe_dev->ale = cpsw_ale_create(&ale_params);
+-      if (!gbe_dev->ale) {
++      if (IS_ERR(gbe_dev->ale)) {
+               dev_err(gbe_dev->dev, "error initializing ale engine\n");
+-              ret = -ENODEV;
++              ret = PTR_ERR(gbe_dev->ale);
+               goto free_sec_ports;
+       } else {
+               dev_dbg(gbe_dev->dev, "Created a gbe ale engine\n");
+-- 
+2.25.1
+
diff --git a/queue-5.6/net-fix-return-value-about-devm_platform_ioremap_res.patch b/queue-5.6/net-fix-return-value-about-devm_platform_ioremap_res.patch
new file mode 100644 (file)
index 0000000..a8b4887
--- /dev/null
@@ -0,0 +1,81 @@
+From 840c84a425920883109de62f001a2e71f3f91f37 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 22 May 2020 19:03:21 +0800
+Subject: net: Fix return value about devm_platform_ioremap_resource()
+
+From: Tiezhu Yang <yangtiezhu@loongson.cn>
+
+[ Upstream commit ef24d6c3d6965158dfe23ae961d87e9a343e18a2 ]
+
+When call function devm_platform_ioremap_resource(), we should use IS_ERR()
+to check the return value and return PTR_ERR() if failed.
+
+Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/can/ifi_canfd/ifi_canfd.c     | 5 ++++-
+ drivers/net/can/sun4i_can.c               | 2 +-
+ drivers/net/dsa/b53/b53_srab.c            | 2 +-
+ drivers/net/ethernet/marvell/pxa168_eth.c | 2 +-
+ 4 files changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/can/ifi_canfd/ifi_canfd.c b/drivers/net/can/ifi_canfd/ifi_canfd.c
+index 04d59bede5ea..74503cacf594 100644
+--- a/drivers/net/can/ifi_canfd/ifi_canfd.c
++++ b/drivers/net/can/ifi_canfd/ifi_canfd.c
+@@ -947,8 +947,11 @@ static int ifi_canfd_plat_probe(struct platform_device *pdev)
+       u32 id, rev;
+       addr = devm_platform_ioremap_resource(pdev, 0);
++      if (IS_ERR(addr))
++              return PTR_ERR(addr);
++
+       irq = platform_get_irq(pdev, 0);
+-      if (IS_ERR(addr) || irq < 0)
++      if (irq < 0)
+               return -EINVAL;
+       id = readl(addr + IFI_CANFD_IP_ID);
+diff --git a/drivers/net/can/sun4i_can.c b/drivers/net/can/sun4i_can.c
+index e3ba8ab0cbf4..e2c6cf4b2228 100644
+--- a/drivers/net/can/sun4i_can.c
++++ b/drivers/net/can/sun4i_can.c
+@@ -792,7 +792,7 @@ static int sun4ican_probe(struct platform_device *pdev)
+       addr = devm_platform_ioremap_resource(pdev, 0);
+       if (IS_ERR(addr)) {
+-              err = -EBUSY;
++              err = PTR_ERR(addr);
+               goto exit;
+       }
+diff --git a/drivers/net/dsa/b53/b53_srab.c b/drivers/net/dsa/b53/b53_srab.c
+index 0a1be5259be0..38cd8285ac67 100644
+--- a/drivers/net/dsa/b53/b53_srab.c
++++ b/drivers/net/dsa/b53/b53_srab.c
+@@ -609,7 +609,7 @@ static int b53_srab_probe(struct platform_device *pdev)
+       priv->regs = devm_platform_ioremap_resource(pdev, 0);
+       if (IS_ERR(priv->regs))
+-              return -ENOMEM;
++              return PTR_ERR(priv->regs);
+       dev = b53_switch_alloc(&pdev->dev, &b53_srab_ops, priv);
+       if (!dev)
+diff --git a/drivers/net/ethernet/marvell/pxa168_eth.c b/drivers/net/ethernet/marvell/pxa168_eth.c
+index 7a0d785b826c..17243bb5ba91 100644
+--- a/drivers/net/ethernet/marvell/pxa168_eth.c
++++ b/drivers/net/ethernet/marvell/pxa168_eth.c
+@@ -1418,7 +1418,7 @@ static int pxa168_eth_probe(struct platform_device *pdev)
+       pep->base = devm_platform_ioremap_resource(pdev, 0);
+       if (IS_ERR(pep->base)) {
+-              err = -ENOMEM;
++              err = PTR_ERR(pep->base);
+               goto err_netdev;
+       }
+-- 
+2.25.1
+
diff --git a/queue-5.6/net-phy-propagate-an-error-back-to-the-callers-of-ph.patch b/queue-5.6/net-phy-propagate-an-error-back-to-the-callers-of-ph.patch
new file mode 100644 (file)
index 0000000..51905d0
--- /dev/null
@@ -0,0 +1,52 @@
+From 17853840bfca58fd661c7aeceacc5d7827564c0d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 17 May 2020 14:53:40 +0300
+Subject: net: phy: propagate an error back to the callers of phy_sfp_probe
+
+From: Leon Romanovsky <leonro@mellanox.com>
+
+[ Upstream commit e3f2d5579c0b8ad9d1fb6a5813cee38a86386e05 ]
+
+The compilation warning below reveals that the errors returned from
+the sfp_bus_add_upstream() call are not propagated to the callers.
+Fix it by returning "ret".
+
+14:37:51 drivers/net/phy/phy_device.c: In function 'phy_sfp_probe':
+14:37:51 drivers/net/phy/phy_device.c:1236:6: warning: variable 'ret'
+   set but not used [-Wunused-but-set-variable]
+14:37:51  1236 |  int ret;
+14:37:51       |      ^~~
+
+Fixes: 298e54fa810e ("net: phy: add core phylib sfp support")
+Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/phy/phy_device.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
+index 28e3c5c0e3c3..faca0d84f5af 100644
+--- a/drivers/net/phy/phy_device.c
++++ b/drivers/net/phy/phy_device.c
+@@ -1239,7 +1239,7 @@ int phy_sfp_probe(struct phy_device *phydev,
+                 const struct sfp_upstream_ops *ops)
+ {
+       struct sfp_bus *bus;
+-      int ret;
++      int ret = 0;
+       if (phydev->mdio.dev.fwnode) {
+               bus = sfp_bus_find_fwnode(phydev->mdio.dev.fwnode);
+@@ -1251,7 +1251,7 @@ int phy_sfp_probe(struct phy_device *phydev,
+               ret = sfp_bus_add_upstream(bus, phydev, ops);
+               sfp_bus_put(bus);
+       }
+-      return 0;
++      return ret;
+ }
+ EXPORT_SYMBOL(phy_sfp_probe);
+-- 
+2.25.1
+
diff --git a/queue-5.6/net-smsc911x-fix-runtime-pm-imbalance-on-error.patch b/queue-5.6/net-smsc911x-fix-runtime-pm-imbalance-on-error.patch
new file mode 100644 (file)
index 0000000..5eefa1e
--- /dev/null
@@ -0,0 +1,63 @@
+From 2d542b917c62c26953d9e99999a7c0984b714ed9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 23 May 2020 16:08:20 +0800
+Subject: net: smsc911x: Fix runtime PM imbalance on error
+
+From: Dinghao Liu <dinghao.liu@zju.edu.cn>
+
+[ Upstream commit 539d39ad0c61b35f69565a037d7586deaf6d6166 ]
+
+Remove runtime PM usage counter decrement when the
+increment function has not been called to keep the
+counter balanced.
+
+Signed-off-by: Dinghao Liu <dinghao.liu@zju.edu.cn>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/smsc/smsc911x.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/ethernet/smsc/smsc911x.c b/drivers/net/ethernet/smsc/smsc911x.c
+index 49a6a9167af4..fc168f85e7af 100644
+--- a/drivers/net/ethernet/smsc/smsc911x.c
++++ b/drivers/net/ethernet/smsc/smsc911x.c
+@@ -2493,20 +2493,20 @@ static int smsc911x_drv_probe(struct platform_device *pdev)
+       retval = smsc911x_init(dev);
+       if (retval < 0)
+-              goto out_disable_resources;
++              goto out_init_fail;
+       netif_carrier_off(dev);
+       retval = smsc911x_mii_init(pdev, dev);
+       if (retval) {
+               SMSC_WARN(pdata, probe, "Error %i initialising mii", retval);
+-              goto out_disable_resources;
++              goto out_init_fail;
+       }
+       retval = register_netdev(dev);
+       if (retval) {
+               SMSC_WARN(pdata, probe, "Error %i registering device", retval);
+-              goto out_disable_resources;
++              goto out_init_fail;
+       } else {
+               SMSC_TRACE(pdata, probe,
+                          "Network interface: \"%s\"", dev->name);
+@@ -2547,9 +2547,10 @@ static int smsc911x_drv_probe(struct platform_device *pdev)
+       return 0;
+-out_disable_resources:
++out_init_fail:
+       pm_runtime_put(&pdev->dev);
+       pm_runtime_disable(&pdev->dev);
++out_disable_resources:
+       (void)smsc911x_disable_resources(pdev);
+ out_enable_resources_fail:
+       smsc911x_free_resources(pdev);
+-- 
+2.25.1
+
diff --git a/queue-5.6/null_blk-return-error-for-invalid-zone-size.patch b/queue-5.6/null_blk-return-error-for-invalid-zone-size.patch
new file mode 100644 (file)
index 0000000..5d58dd4
--- /dev/null
@@ -0,0 +1,65 @@
+From c0832c9b56a0c743e3a1a41a47ebb1756689c5be Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 20 May 2020 16:01:51 -0700
+Subject: null_blk: return error for invalid zone size
+
+From: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
+
+[ Upstream commit e274832590211c4b1b1e807ca66fad8b5bb8b328 ]
+
+In null_init_zone_dev() check if the zone size is larger than device
+capacity, return error if needed.
+
+This also fixes the following oops :-
+
+null_blk: changed the number of conventional zones to 4294967295
+BUG: kernel NULL pointer dereference, address: 0000000000000010
+PGD 7d76c5067 P4D 7d76c5067 PUD 7d240c067 PMD 0
+Oops: 0002 [#1] SMP NOPTI
+CPU: 4 PID: 5508 Comm: nullbtests.sh Tainted: G OE 5.7.0-rc4lblk-fnext0
+Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.0-59-gc9ba5276e4
+RIP: 0010:null_init_zoned_dev+0x17a/0x27f [null_blk]
+RSP: 0018:ffffc90007007e00 EFLAGS: 00010246
+RAX: 0000000000000020 RBX: ffff8887fb3f3c00 RCX: 0000000000000007
+RDX: 0000000000000000 RSI: ffff8887ca09d688 RDI: ffff888810fea510
+RBP: 0000000000000010 R08: ffff8887ca09d688 R09: 0000000000000000
+R10: 0000000000000000 R11: 0000000000000000 R12: ffff8887c26e8000
+R13: ffffffffa05e9390 R14: 0000000000000000 R15: 0000000000000001
+FS:  00007fcb5256f740(0000) GS:ffff888810e00000(0000) knlGS:0000000000000000
+CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+CR2: 0000000000000010 CR3: 000000081e8fe000 CR4: 00000000003406e0
+Call Trace:
+ null_add_dev+0x534/0x71b [null_blk]
+ nullb_device_power_store.cold.41+0x8/0x2e [null_blk]
+ configfs_write_file+0xe6/0x150
+ vfs_write+0xba/0x1e0
+ ksys_write+0x5f/0xe0
+ do_syscall_64+0x60/0x250
+ entry_SYSCALL_64_after_hwframe+0x49/0xb3
+RIP: 0033:0x7fcb51c71840
+
+Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/block/null_blk_zoned.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/block/null_blk_zoned.c b/drivers/block/null_blk_zoned.c
+index ed34785dd64b..5dc955f5ea0a 100644
+--- a/drivers/block/null_blk_zoned.c
++++ b/drivers/block/null_blk_zoned.c
+@@ -20,6 +20,10 @@ int null_zone_init(struct nullb_device *dev)
+               pr_err("zone_size must be power-of-two\n");
+               return -EINVAL;
+       }
++      if (dev->zone_size > dev->size) {
++              pr_err("Zone size larger than device capacity\n");
++              return -EINVAL;
++      }
+       dev->zone_size_sects = dev->zone_size << ZONE_SIZE_SHIFT;
+       dev->nr_zones = dev_size >>
+-- 
+2.25.1
+
diff --git a/queue-5.6/riscv-fix-print_vm_layout-build-error-if-nommu.patch b/queue-5.6/riscv-fix-print_vm_layout-build-error-if-nommu.patch
new file mode 100644 (file)
index 0000000..6348d97
--- /dev/null
@@ -0,0 +1,44 @@
+From df459f3d9a53e68dfb4f044ca1386e72fe468562 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 14 May 2020 19:53:35 +0800
+Subject: riscv: Fix print_vm_layout build error if NOMMU
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Kefeng Wang <wangkefeng.wang@huawei.com>
+
+[ Upstream commit 8fa3cdff05f009855a6a99a7d77a41004009bbab ]
+
+arch/riscv/mm/init.c: In function ‘print_vm_layout’:
+arch/riscv/mm/init.c:68:37: error: ‘FIXADDR_START’ undeclared (first use in this function);
+arch/riscv/mm/init.c:69:20: error: ‘FIXADDR_TOP’ undeclared
+arch/riscv/mm/init.c:70:37: error: ‘PCI_IO_START’ undeclared
+arch/riscv/mm/init.c:71:20: error: ‘PCI_IO_END’ undeclared
+arch/riscv/mm/init.c:72:38: error: ‘VMEMMAP_START’ undeclared
+arch/riscv/mm/init.c:73:20: error: ‘VMEMMAP_END’ undeclared (first use in this function);
+
+Reported-by: Hulk Robot <hulkci@huawei.com>
+Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
+Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/riscv/mm/init.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
+index 157924baa191..1dc26384a6c4 100644
+--- a/arch/riscv/mm/init.c
++++ b/arch/riscv/mm/init.c
+@@ -46,7 +46,7 @@ static void setup_zero_page(void)
+       memset((void *)empty_zero_page, 0, PAGE_SIZE);
+ }
+-#ifdef CONFIG_DEBUG_VM
++#if defined(CONFIG_MMU) && defined(CONFIG_DEBUG_VM)
+ static inline void print_mlk(char *name, unsigned long b, unsigned long t)
+ {
+       pr_notice("%12s : 0x%08lx - 0x%08lx   (%4ld kB)\n", name, b, t,
+-- 
+2.25.1
+
diff --git a/queue-5.6/s390-mm-fix-set_huge_pte_at-for-empty-ptes.patch b/queue-5.6/s390-mm-fix-set_huge_pte_at-for-empty-ptes.patch
new file mode 100644 (file)
index 0000000..e2c510a
--- /dev/null
@@ -0,0 +1,58 @@
+From 3707a98dcbf42fc77e9337770fb7d57cd8b3db6c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 6 May 2020 13:04:07 +0200
+Subject: s390/mm: fix set_huge_pte_at() for empty ptes
+
+From: Gerald Schaefer <gerald.schaefer@de.ibm.com>
+
+[ Upstream commit ac8372f3b4e41015549b331a4f350224661e7fc6 ]
+
+On s390, the layout of normal and large ptes (i.e. pmds/puds) differs.
+Therefore, set_huge_pte_at() does a conversion from a normal pte to
+the corresponding large pmd/pud. So, when converting an empty pte, this
+should result in an empty pmd/pud, which would return true for
+pmd/pud_none().
+
+However, after conversion we also mark the pmd/pud as large, and
+therefore present. For empty ptes, this will result in an empty pmd/pud
+that is also marked as large, and pmd/pud_none() would not return true.
+
+There is currently no issue with this behaviour, as set_huge_pte_at()
+does not seem to be called for empty ptes. It would be valid though, so
+let's fix this by not marking empty ptes as large in set_huge_pte_at().
+
+This was found by testing a patch from from Anshuman Khandual, which is
+currently discussed on LKML ("mm/debug: Add more arch page table helper
+tests").
+
+Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
+Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/s390/mm/hugetlbpage.c | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/arch/s390/mm/hugetlbpage.c b/arch/s390/mm/hugetlbpage.c
+index 5674710a4841..7dfae86afa47 100644
+--- a/arch/s390/mm/hugetlbpage.c
++++ b/arch/s390/mm/hugetlbpage.c
+@@ -159,10 +159,13 @@ void set_huge_pte_at(struct mm_struct *mm, unsigned long addr,
+               rste &= ~_SEGMENT_ENTRY_NOEXEC;
+       /* Set correct table type for 2G hugepages */
+-      if ((pte_val(*ptep) & _REGION_ENTRY_TYPE_MASK) == _REGION_ENTRY_TYPE_R3)
+-              rste |= _REGION_ENTRY_TYPE_R3 | _REGION3_ENTRY_LARGE;
+-      else
++      if ((pte_val(*ptep) & _REGION_ENTRY_TYPE_MASK) == _REGION_ENTRY_TYPE_R3) {
++              if (likely(pte_present(pte)))
++                      rste |= _REGION3_ENTRY_LARGE;
++              rste |= _REGION_ENTRY_TYPE_R3;
++      } else if (likely(pte_present(pte)))
+               rste |= _SEGMENT_ENTRY_LARGE;
++
+       clear_huge_pte_skeys(mm, rste);
+       pte_val(*ptep) = rste;
+ }
+-- 
+2.25.1
+
diff --git a/queue-5.6/scsi-pm-balance-pm_only-counter-of-request-queue-dur.patch b/queue-5.6/scsi-pm-balance-pm_only-counter-of-request-queue-dur.patch
new file mode 100644 (file)
index 0000000..f1ece55
--- /dev/null
@@ -0,0 +1,83 @@
+From 0366a350f5c25c7cea036ef582e689cb4e3b3e24 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 5 May 2020 21:55:35 -0700
+Subject: scsi: pm: Balance pm_only counter of request queue during system
+ resume
+
+From: Can Guo <cang@codeaurora.org>
+
+[ Upstream commit 05d18ae1cc8a0308b12f37b4ab94afce3535fac9 ]
+
+During system resume, scsi_resume_device() decreases a request queue's
+pm_only counter if the scsi device was quiesced before. But after that, if
+the scsi device's RPM status is RPM_SUSPENDED, the pm_only counter is still
+held (non-zero). Current SCSI resume hook only sets the RPM status of the
+scsi_device and its request queue to RPM_ACTIVE, but leaves the pm_only
+counter unchanged. This may make the request queue's pm_only counter remain
+non-zero after resume hook returns, hence those who are waiting on the
+mq_freeze_wq would never be woken up. Fix this by calling
+blk_post_runtime_resume() if a sdev's RPM status was RPM_SUSPENDED.
+
+(struct request_queue)0xFFFFFF815B69E938
+       pm_only = (counter = 2),
+       rpm_status = 0,
+       dev = 0xFFFFFF815B0511A0,
+
+((struct device)0xFFFFFF815B0511A0)).power
+       is_suspended = FALSE,
+       runtime_status = RPM_ACTIVE,
+
+(struct scsi_device)0xffffff815b051000
+       request_queue = 0xFFFFFF815B69E938,
+       sdev_state = SDEV_RUNNING,
+       quiesced_by = 0x0,
+
+B::v.f_/task_0xFFFFFF810C246940
+-000|__switch_to(prev = 0xFFFFFF810C246940, next = 0xFFFFFF80A49357C0)
+-001|context_switch(inline)
+-001|__schedule(?)
+-002|schedule()
+-003|blk_queue_enter(q = 0xFFFFFF815B69E938, flags = 0)
+-004|generic_make_request(?)
+-005|submit_bio(bio = 0xFFFFFF80A8195B80)
+
+Link: https://lore.kernel.org/r/1588740936-28846-1-git-send-email-cang@codeaurora.org
+Reviewed-by: Bart Van Assche <bvanassche@acm.org>
+Signed-off-by: Can Guo <cang@codeaurora.org>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/scsi_pm.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/scsi/scsi_pm.c b/drivers/scsi/scsi_pm.c
+index 3717eea37ecb..5f0ad8b32e3a 100644
+--- a/drivers/scsi/scsi_pm.c
++++ b/drivers/scsi/scsi_pm.c
+@@ -80,6 +80,10 @@ static int scsi_dev_type_resume(struct device *dev,
+       dev_dbg(dev, "scsi resume: %d\n", err);
+       if (err == 0) {
++              bool was_runtime_suspended;
++
++              was_runtime_suspended = pm_runtime_suspended(dev);
++
+               pm_runtime_disable(dev);
+               err = pm_runtime_set_active(dev);
+               pm_runtime_enable(dev);
+@@ -93,8 +97,10 @@ static int scsi_dev_type_resume(struct device *dev,
+                */
+               if (!err && scsi_is_sdev_device(dev)) {
+                       struct scsi_device *sdev = to_scsi_device(dev);
+-
+-                      blk_set_runtime_active(sdev->request_queue);
++                      if (was_runtime_suspended)
++                              blk_post_runtime_resume(sdev->request_queue, 0);
++                      else
++                              blk_set_runtime_active(sdev->request_queue);
+               }
+       }
+-- 
+2.25.1
+
diff --git a/queue-5.6/selftests-mlxsw-qos_mc_aware-specify-arping-timeout-.patch b/queue-5.6/selftests-mlxsw-qos_mc_aware-specify-arping-timeout-.patch
new file mode 100644 (file)
index 0000000..4d19a7f
--- /dev/null
@@ -0,0 +1,45 @@
+From 336daf4fa32beb7c0e1b38690b5549367d06eeb8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 May 2020 15:11:45 +0300
+Subject: selftests: mlxsw: qos_mc_aware: Specify arping timeout as an integer
+
+From: Amit Cohen <amitc@mellanox.com>
+
+[ Upstream commit 46ca11177ed593f39d534f8d2c74ec5344e90c11 ]
+
+Starting from iputils s20190709 (used in Fedora 31), arping does not
+support timeout being specified as a decimal:
+
+$ arping -c 1 -I swp1 -b 192.0.2.66 -q -w 0.1
+arping: invalid argument: '0.1'
+
+Previously, such timeouts were rounded to an integer.
+
+Fix this by specifying the timeout as an integer.
+
+Fixes: a5ee171d087e ("selftests: mlxsw: qos_mc_aware: Add a test for UC awareness")
+Signed-off-by: Amit Cohen <amitc@mellanox.com>
+Reviewed-by: Petr Machata <petrm@mellanox.com>
+Signed-off-by: Ido Schimmel <idosch@mellanox.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/testing/selftests/drivers/net/mlxsw/qos_mc_aware.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/testing/selftests/drivers/net/mlxsw/qos_mc_aware.sh b/tools/testing/selftests/drivers/net/mlxsw/qos_mc_aware.sh
+index 24dd8ed48580..b025daea062d 100755
+--- a/tools/testing/selftests/drivers/net/mlxsw/qos_mc_aware.sh
++++ b/tools/testing/selftests/drivers/net/mlxsw/qos_mc_aware.sh
+@@ -300,7 +300,7 @@ test_uc_aware()
+       local i
+       for ((i = 0; i < attempts; ++i)); do
+-              if $ARPING -c 1 -I $h1 -b 192.0.2.66 -q -w 0.1; then
++              if $ARPING -c 1 -I $h1 -b 192.0.2.66 -q -w 1; then
+                       ((passes++))
+               fi
+-- 
+2.25.1
+
index 297415a264a6ab5affadbff4e75c9f5a8280ce99..f3bc9963ae8af4ce8b6bfca55fd573408669b164 100644 (file)
@@ -1,2 +1,30 @@
 x86-syscalls-revert-x86-syscalls-make-__x32_syscall_.patch
 revert-cgroup-add-memory-barriers-to-plug-cgroup_rst.patch
+arc-fix-iccm-dccm-runtime-size-checks.patch
+arc-plat-eznps-restrict-to-config_isa_arcompact.patch
+efi-libstub-avoid-returning-uninitialized-data-from-.patch
+evm-fix-rcu-list-related-warnings.patch
+scsi-pm-balance-pm_only-counter-of-request-queue-dur.patch
+efi-earlycon-fix-early-printk-for-wider-fonts.patch
+x86-hyperv-properly-suspend-resume-reenlightenment-n.patch
+dmaengine-ti-k3-udma-fix-tr-mode-flags-for-slave_sg-.patch
+i2c-altera-fix-race-between-xfer_msg-and-isr-thread.patch
+io_uring-initialize-ctx-sqo_wait-earlier.patch
+io_uring-don-t-prepare-drain-reqs-twice.patch
+io_uring-fix-force_async-req-preparation.patch
+net-phy-propagate-an-error-back-to-the-callers-of-ph.patch
+x86-mmiotrace-use-cpumask_available-for-cpumask_var_.patch
+net-bmac-fix-read-of-mac-address-from-rom.patch
+drm-edid-add-oculus-rift-s-to-non-desktop-list.patch
+s390-mm-fix-set_huge_pte_at-for-empty-ptes.patch
+io_uring-reset-ebusy-error-when-io-sq-thread-is-wake.patch
+drm-amd-display-dp-training-to-set-properly-scrambli.patch
+riscv-fix-print_vm_layout-build-error-if-nommu.patch
+wireguard-selftests-use-newer-iproute2-for-gcc-10.patch
+null_blk-return-error-for-invalid-zone-size.patch
+net-ethernet-ti-fix-some-return-value-check-of-cpsw_.patch
+net-ethernet-freescale-rework-quiesce-activate-for-u.patch
+net-ethernet-stmmac-enable-interface-clocks-on-probe.patch
+selftests-mlxsw-qos_mc_aware-specify-arping-timeout-.patch
+net-fix-return-value-about-devm_platform_ioremap_res.patch
+net-smsc911x-fix-runtime-pm-imbalance-on-error.patch
diff --git a/queue-5.6/wireguard-selftests-use-newer-iproute2-for-gcc-10.patch b/queue-5.6/wireguard-selftests-use-newer-iproute2-for-gcc-10.patch
new file mode 100644 (file)
index 0000000..b864af6
--- /dev/null
@@ -0,0 +1,38 @@
+From ffb92029c4d28c8b51b5b50672f194ed2a627838 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 19 May 2020 22:49:27 -0600
+Subject: wireguard: selftests: use newer iproute2 for gcc-10
+
+From: Jason A. Donenfeld <Jason@zx2c4.com>
+
+[ Upstream commit ee3c1aa3f34b7842c1557cfe5d8c3f7b8c692de8 ]
+
+gcc-10 switched to defaulting to -fno-common, which broke iproute2-5.4.
+This was fixed in iproute-5.6, so switch to that. Because we're after a
+stable testing surface, we generally don't like to bump these
+unnecessarily, but in this case, being able to actually build is a basic
+necessity.
+
+Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/testing/selftests/wireguard/qemu/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/testing/selftests/wireguard/qemu/Makefile b/tools/testing/selftests/wireguard/qemu/Makefile
+index 90598a425c18..4bdd6c1a19d3 100644
+--- a/tools/testing/selftests/wireguard/qemu/Makefile
++++ b/tools/testing/selftests/wireguard/qemu/Makefile
+@@ -44,7 +44,7 @@ endef
+ $(eval $(call tar_download,MUSL,musl,1.2.0,.tar.gz,https://musl.libc.org/releases/,c6de7b191139142d3f9a7b5b702c9cae1b5ee6e7f57e582da9328629408fd4e8))
+ $(eval $(call tar_download,IPERF,iperf,3.7,.tar.gz,https://downloads.es.net/pub/iperf/,d846040224317caf2f75c843d309a950a7db23f9b44b94688ccbe557d6d1710c))
+ $(eval $(call tar_download,BASH,bash,5.0,.tar.gz,https://ftp.gnu.org/gnu/bash/,b4a80f2ac66170b2913efbfb9f2594f1f76c7b1afd11f799e22035d63077fb4d))
+-$(eval $(call tar_download,IPROUTE2,iproute2,5.4.0,.tar.xz,https://www.kernel.org/pub/linux/utils/net/iproute2/,fe97aa60a0d4c5ac830be18937e18dc3400ca713a33a89ad896ff1e3d46086ae))
++$(eval $(call tar_download,IPROUTE2,iproute2,5.6.0,.tar.xz,https://www.kernel.org/pub/linux/utils/net/iproute2/,1b5b0e25ce6e23da7526ea1da044e814ad85ba761b10dd29c2b027c056b04692))
+ $(eval $(call tar_download,IPTABLES,iptables,1.8.4,.tar.bz2,https://www.netfilter.org/projects/iptables/files/,993a3a5490a544c2cbf2ef15cf7e7ed21af1845baf228318d5c36ef8827e157c))
+ $(eval $(call tar_download,NMAP,nmap,7.80,.tar.bz2,https://nmap.org/dist/,fcfa5a0e42099e12e4bf7a68ebe6fde05553383a682e816a7ec9256ab4773faa))
+ $(eval $(call tar_download,IPUTILS,iputils,s20190709,.tar.gz,https://github.com/iputils/iputils/archive/s20190709.tar.gz/#,a15720dd741d7538dd2645f9f516d193636ae4300ff7dbc8bfca757bf166490a))
+-- 
+2.25.1
+
diff --git a/queue-5.6/x86-hyperv-properly-suspend-resume-reenlightenment-n.patch b/queue-5.6/x86-hyperv-properly-suspend-resume-reenlightenment-n.patch
new file mode 100644 (file)
index 0000000..a370dc9
--- /dev/null
@@ -0,0 +1,86 @@
+From f694344d91d727c2ea96e380a86437995689cb41 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 12 May 2020 18:01:53 +0200
+Subject: x86/hyperv: Properly suspend/resume reenlightenment notifications
+
+From: Vitaly Kuznetsov <vkuznets@redhat.com>
+
+[ Upstream commit 38dce4195f0daefb566279fd9fd51e1fbd62ae1b ]
+
+Errors during hibernation with reenlightenment notifications enabled were
+reported:
+
+ [   51.730435] PM: hibernation entry
+ [   51.737435] PM: Syncing filesystems ...
+ ...
+ [   54.102216] Disabling non-boot CPUs ...
+ [   54.106633] smpboot: CPU 1 is now offline
+ [   54.110006] unchecked MSR access error: WRMSR to 0x40000106 (tried to
+     write 0x47c72780000100ee) at rIP: 0xffffffff90062f24
+     native_write_msr+0x4/0x20)
+ [   54.110006] Call Trace:
+ [   54.110006]  hv_cpu_die+0xd9/0xf0
+ ...
+
+Normally, hv_cpu_die() just reassigns reenlightenment notifications to some
+other CPU when the CPU receiving them goes offline. Upon hibernation, there
+is no other CPU which is still online so cpumask_any_but(cpu_online_mask)
+returns >= nr_cpu_ids and using it as hv_vp_index index is incorrect.
+Disable the feature when cpumask_any_but() fails.
+
+Also, as we now disable reenlightenment notifications upon hibernation we
+need to restore them on resume. Check if hv_reenlightenment_cb was
+previously set and restore from hv_resume().
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
+Reviewed-by: Dexuan Cui <decui@microsoft.com>
+Reviewed-by: Tianyu Lan <Tianyu.Lan@microsoft.com>
+Link: https://lore.kernel.org/r/20200512160153.134467-1-vkuznets@redhat.com
+Signed-off-by: Wei Liu <wei.liu@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/hyperv/hv_init.c | 19 +++++++++++++++++--
+ 1 file changed, 17 insertions(+), 2 deletions(-)
+
+diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
+index fd51bac11b46..acf76b466db6 100644
+--- a/arch/x86/hyperv/hv_init.c
++++ b/arch/x86/hyperv/hv_init.c
+@@ -226,10 +226,18 @@ static int hv_cpu_die(unsigned int cpu)
+       rdmsrl(HV_X64_MSR_REENLIGHTENMENT_CONTROL, *((u64 *)&re_ctrl));
+       if (re_ctrl.target_vp == hv_vp_index[cpu]) {
+-              /* Reassign to some other online CPU */
++              /*
++               * Reassign reenlightenment notifications to some other online
++               * CPU or just disable the feature if there are no online CPUs
++               * left (happens on hibernation).
++               */
+               new_cpu = cpumask_any_but(cpu_online_mask, cpu);
+-              re_ctrl.target_vp = hv_vp_index[new_cpu];
++              if (new_cpu < nr_cpu_ids)
++                      re_ctrl.target_vp = hv_vp_index[new_cpu];
++              else
++                      re_ctrl.enabled = 0;
++
+               wrmsrl(HV_X64_MSR_REENLIGHTENMENT_CONTROL, *((u64 *)&re_ctrl));
+       }
+@@ -293,6 +301,13 @@ static void hv_resume(void)
+       hv_hypercall_pg = hv_hypercall_pg_saved;
+       hv_hypercall_pg_saved = NULL;
++
++      /*
++       * Reenlightenment notifications are disabled by hv_cpu_die(0),
++       * reenable them here if hv_reenlightenment_cb was previously set.
++       */
++      if (hv_reenlightenment_cb)
++              set_hv_tscchange_cb(hv_reenlightenment_cb);
+ }
+ /* Note: when the ops are called, only CPU0 is online and IRQs are disabled. */
+-- 
+2.25.1
+
diff --git a/queue-5.6/x86-mmiotrace-use-cpumask_available-for-cpumask_var_.patch b/queue-5.6/x86-mmiotrace-use-cpumask_available-for-cpumask_var_.patch
new file mode 100644 (file)
index 0000000..401dc9e
--- /dev/null
@@ -0,0 +1,67 @@
+From 3ac657992166d89fe213dc590c52c876b7d071b4 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 8 Apr 2020 13:53:23 -0700
+Subject: x86/mmiotrace: Use cpumask_available() for cpumask_var_t variables
+
+From: Nathan Chancellor <natechancellor@gmail.com>
+
+[ Upstream commit d7110a26e5905ec2fe3fc88bc6a538901accb72b ]
+
+When building with Clang + -Wtautological-compare and
+CONFIG_CPUMASK_OFFSTACK unset:
+
+  arch/x86/mm/mmio-mod.c:375:6: warning: comparison of array 'downed_cpus'
+  equal to a null pointer is always false [-Wtautological-pointer-compare]
+          if (downed_cpus == NULL &&
+              ^~~~~~~~~~~    ~~~~
+  arch/x86/mm/mmio-mod.c:405:6: warning: comparison of array 'downed_cpus'
+  equal to a null pointer is always false [-Wtautological-pointer-compare]
+          if (downed_cpus == NULL || cpumask_weight(downed_cpus) == 0)
+              ^~~~~~~~~~~    ~~~~
+  2 warnings generated.
+
+Commit
+
+  f7e30f01a9e2 ("cpumask: Add helper cpumask_available()")
+
+added cpumask_available() to fix warnings of this nature. Use that here
+so that clang does not warn regardless of CONFIG_CPUMASK_OFFSTACK's
+value.
+
+Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
+Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
+Signed-off-by: Borislav Petkov <bp@suse.de>
+Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
+Acked-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
+Link: https://github.com/ClangBuiltLinux/linux/issues/982
+Link: https://lkml.kernel.org/r/20200408205323.44490-1-natechancellor@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/mm/mmio-mod.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/x86/mm/mmio-mod.c b/arch/x86/mm/mmio-mod.c
+index 673de6063345..92530af38b09 100644
+--- a/arch/x86/mm/mmio-mod.c
++++ b/arch/x86/mm/mmio-mod.c
+@@ -372,7 +372,7 @@ static void enter_uniprocessor(void)
+       int cpu;
+       int err;
+-      if (downed_cpus == NULL &&
++      if (!cpumask_available(downed_cpus) &&
+           !alloc_cpumask_var(&downed_cpus, GFP_KERNEL)) {
+               pr_notice("Failed to allocate mask\n");
+               goto out;
+@@ -402,7 +402,7 @@ static void leave_uniprocessor(void)
+       int cpu;
+       int err;
+-      if (downed_cpus == NULL || cpumask_weight(downed_cpus) == 0)
++      if (!cpumask_available(downed_cpus) || cpumask_weight(downed_cpus) == 0)
+               return;
+       pr_notice("Re-enabling CPUs...\n");
+       for_each_cpu(cpu, downed_cpus) {
+-- 
+2.25.1
+