From: Sasha Levin Date: Fri, 5 Jun 2020 01:12:18 +0000 (-0400) Subject: Fixes for 5.6 X-Git-Tag: v5.7.1~20 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d6b12819eef955b5be2b6f814072dd35b5ed8491;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 5.6 Signed-off-by: Sasha Levin --- 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 index 00000000000..6a71f829675 --- /dev/null +++ b/queue-5.6/arc-fix-iccm-dccm-runtime-size-checks.patch @@ -0,0 +1,54 @@ +From 24b5c326075c75f149184b7b52da5488cd3703ac Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 2 Apr 2020 20:54:28 +0300 +Subject: ARC: Fix ICCM & DCCM runtime size checks + +From: Eugeniy Paltsev + +[ 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 +Signed-off-by: Eugeniy Paltsev +Signed-off-by: Vineet Gupta +Signed-off-by: Sasha Levin +--- + 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 + #include + #include ++#include + #include + #include + #include +@@ -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 index 00000000000..6d828526a65 --- /dev/null +++ b/queue-5.6/arc-plat-eznps-restrict-to-config_isa_arcompact.patch @@ -0,0 +1,38 @@ +From 223427df529d1a63d425b9b5d8c9eb29e7264e26 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 14 Apr 2020 11:41:51 -0700 +Subject: ARC: [plat-eznps]: Restrict to CONFIG_ISA_ARCOMPACT + +From: Vineet Gupta + +[ 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 +Signed-off-by: Vineet Gupta +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..5e80d984e95 --- /dev/null +++ b/queue-5.6/dmaengine-ti-k3-udma-fix-tr-mode-flags-for-slave_sg-.patch @@ -0,0 +1,48 @@ +From 215737bd769241b3ce5c759fca054f2661bef54c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Link: https://lore.kernel.org/r/20200512134531.5742-1-peter.ujfalusi@ti.com +Signed-off-by: Vinod Koul +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..96c3ec7b65a --- /dev/null +++ b/queue-5.6/drm-amd-display-dp-training-to-set-properly-scrambli.patch @@ -0,0 +1,74 @@ +From 1719e14aa1f51eaead14b275e9c4e23a4bc16020 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 28 Apr 2020 13:04:35 -0400 +Subject: drm/amd/display: DP training to set properly SCRAMBLING_DISABLE + +From: Vladimir Stempen + +[ 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 +Reviewed-by: Wenjing Liu +Acked-by: Rodrigo Siqueira +Signed-off-by: Alex Deucher +Signed-off-by: Sasha Levin +--- + .../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 index 00000000000..064d631925f --- /dev/null +++ b/queue-5.6/drm-edid-add-oculus-rift-s-to-non-desktop-list.patch @@ -0,0 +1,40 @@ +From d603b669092ecafac88d7e33d75f0f820227b5ab Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 8 May 2020 04:06:28 +1000 +Subject: drm/edid: Add Oculus Rift S to non-desktop list + +From: Jan Schmidt + +[ 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 +Signed-off-by: Dave Airlie +Link: https://patchwork.freedesktop.org/patch/msgid/20200507180628.740936-1-jan@centricular.com +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..5c4715a4f7c --- /dev/null +++ b/queue-5.6/efi-earlycon-fix-early-printk-for-wider-fonts.patch @@ -0,0 +1,54 @@ +From c3a345fe1b086569cc3072f515ec5a797fb62349 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 12 Apr 2020 10:49:27 +0800 +Subject: efi/earlycon: Fix early printk for wider fonts + +From: Dave Young + +[ 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 +Link: https://lore.kernel.org/r/20200412024927.GA6884@dhcp-128-65.nay.redhat.com +Signed-off-by: Ard Biesheuvel +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..51622d88f37 --- /dev/null +++ b/queue-5.6/efi-libstub-avoid-returning-uninitialized-data-from-.patch @@ -0,0 +1,44 @@ +From 01643c0302993bd13ffd1bb063992213e7d9b808 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 26 Apr 2020 21:49:46 +0200 +Subject: efi/libstub: Avoid returning uninitialized data from setup_graphics() + +From: Heinrich Schuchardt + +[ 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 +Link: https://lore.kernel.org/r/20200426194946.112768-1-xypron.glpk@gmx.de +Signed-off-by: Ard Biesheuvel +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..34b73eca17f --- /dev/null +++ b/queue-5.6/evm-fix-rcu-list-related-warnings.patch @@ -0,0 +1,93 @@ +From 88f8ea156969db09d5a53d27ab4d158321f4d42f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 30 Apr 2020 21:32:05 +0530 +Subject: evm: Fix RCU list related warnings + +From: Madhuparna Bhowmik + +[ 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 +Suggested-by: Paul E. McKenney +Signed-off-by: Madhuparna Bhowmik +Acked-by: Paul E. McKenney (RCU viewpoint) +Signed-off-by: Mimi Zohar +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..b7898ec66df --- /dev/null +++ b/queue-5.6/i2c-altera-fix-race-between-xfer_msg-and-isr-thread.patch @@ -0,0 +1,93 @@ +From bd36433dd8af2762c5dfea6b93a2d0152ec47910 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 8 May 2020 22:12:48 +0900 +Subject: i2c: altera: Fix race between xfer_msg and isr thread + +From: Atsushi Nemoto + +[ 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 +Acked-by: Thor Thayer +[wsa: updated commit message] +Signed-off-by: Wolfram Sang +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..a80bd26fce5 --- /dev/null +++ b/queue-5.6/io_uring-don-t-prepare-drain-reqs-twice.patch @@ -0,0 +1,46 @@ +From e3673d17471e16cd26fc1be4acec8ef6ec154d8c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 17 May 2020 14:02:11 +0300 +Subject: io_uring: don't prepare DRAIN reqs twice + +From: Pavel Begunkov + +[ 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 +Signed-off-by: Jens Axboe +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..79182bc7469 --- /dev/null +++ b/queue-5.6/io_uring-fix-force_async-req-preparation.patch @@ -0,0 +1,45 @@ +From 50113de6007ce740a8bfb59f037aea9a1a99f501 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 17 May 2020 14:02:12 +0300 +Subject: io_uring: fix FORCE_ASYNC req preparation + +From: Pavel Begunkov + +[ 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 +Signed-off-by: Jens Axboe +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..ed21dd41173 --- /dev/null +++ b/queue-5.6/io_uring-initialize-ctx-sqo_wait-earlier.patch @@ -0,0 +1,76 @@ +From 1ffa915aceff5bcc6eae5a9a2af70deef2254616 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 17 May 2020 09:20:00 -0600 +Subject: io_uring: initialize ctx->sqo_wait earlier + +From: Jens Axboe + +[ 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 +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..9c5a826caec --- /dev/null +++ b/queue-5.6/io_uring-reset-ebusy-error-when-io-sq-thread-is-wake.patch @@ -0,0 +1,111 @@ +From 87b1faaec93d2add7929319d9d0f565b4c44c3eb Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Signed-off-by: Xiaoguang Wang +Signed-off-by: Jens Axboe +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..8d6f9a87541 --- /dev/null +++ b/queue-5.6/net-bmac-fix-read-of-mac-address-from-rom.patch @@ -0,0 +1,43 @@ +From 08fb4d6bf0c514444be0b8c8eb68cf4df43c7f81 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 19 May 2020 09:05:58 +0800 +Subject: net: bmac: Fix read of MAC address from ROM + +From: Jeremy Kerr + +[ 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 . + +Signed-off-by: Jeremy Kerr +Reported-by: Stan Johnson +Tested-by: Stan Johnson +Reported-by: Finn Thain +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..90f0d80dc44 --- /dev/null +++ b/queue-5.6/net-ethernet-freescale-rework-quiesce-activate-for-u.patch @@ -0,0 +1,78 @@ +From eb33ca9ec783a9a0071c0c3fda589d2b8b25d172 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 20 May 2020 17:53:50 +0200 +Subject: net/ethernet/freescale: rework quiesce/activate for ucc_geth + +From: Valentin Longchamp + +[ 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 +Acked-by: Matteo Ghidoni +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + 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 + #include + #include ++#include + + #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 index 00000000000..7b364fc995d --- /dev/null +++ b/queue-5.6/net-ethernet-stmmac-enable-interface-clocks-on-probe.patch @@ -0,0 +1,62 @@ +From 76495ed82b770dd853df030ec8723bf19ead9835 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 21 May 2020 12:49:34 +0100 +Subject: net: ethernet: stmmac: Enable interface clocks on probe for IPQ806x + +From: Jonathan McDowell + +[ 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 +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..da67c5a6dd6 --- /dev/null +++ b/queue-5.6/net-ethernet-ti-fix-some-return-value-check-of-cpsw_.patch @@ -0,0 +1,73 @@ +From 54e2f9ee785a7666731fed57278b6276f3872b9d Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Signed-off-by: Wei Yongjun +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..a8b4887197c --- /dev/null +++ b/queue-5.6/net-fix-return-value-about-devm_platform_ioremap_res.patch @@ -0,0 +1,81 @@ +From 840c84a425920883109de62f001a2e71f3f91f37 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 22 May 2020 19:03:21 +0800 +Subject: net: Fix return value about devm_platform_ioremap_resource() + +From: Tiezhu Yang + +[ 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 +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..51905d043f2 --- /dev/null +++ b/queue-5.6/net-phy-propagate-an-error-back-to-the-callers-of-ph.patch @@ -0,0 +1,52 @@ +From 17853840bfca58fd661c7aeceacc5d7827564c0d Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..5eefa1e6208 --- /dev/null +++ b/queue-5.6/net-smsc911x-fix-runtime-pm-imbalance-on-error.patch @@ -0,0 +1,63 @@ +From 2d542b917c62c26953d9e99999a7c0984b714ed9 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 23 May 2020 16:08:20 +0800 +Subject: net: smsc911x: Fix runtime PM imbalance on error + +From: Dinghao Liu + +[ 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 +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..5d58dd45e54 --- /dev/null +++ b/queue-5.6/null_blk-return-error-for-invalid-zone-size.patch @@ -0,0 +1,65 @@ +From c0832c9b56a0c743e3a1a41a47ebb1756689c5be Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 20 May 2020 16:01:51 -0700 +Subject: null_blk: return error for invalid zone size + +From: Chaitanya Kulkarni + +[ 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 +Signed-off-by: Jens Axboe +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..6348d97ec1e --- /dev/null +++ b/queue-5.6/riscv-fix-print_vm_layout-build-error-if-nommu.patch @@ -0,0 +1,44 @@ +From df459f3d9a53e68dfb4f044ca1386e72fe468562 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Signed-off-by: Kefeng Wang +Signed-off-by: Palmer Dabbelt +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..e2c510a4734 --- /dev/null +++ b/queue-5.6/s390-mm-fix-set_huge_pte_at-for-empty-ptes.patch @@ -0,0 +1,58 @@ +From 3707a98dcbf42fc77e9337770fb7d57cd8b3db6c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 6 May 2020 13:04:07 +0200 +Subject: s390/mm: fix set_huge_pte_at() for empty ptes + +From: Gerald Schaefer + +[ 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 +Signed-off-by: Vasily Gorbik +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..f1ece55aa6b --- /dev/null +++ b/queue-5.6/scsi-pm-balance-pm_only-counter-of-request-queue-dur.patch @@ -0,0 +1,83 @@ +From 0366a350f5c25c7cea036ef582e689cb4e3b3e24 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +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 + +[ 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 +Signed-off-by: Can Guo +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..4d19a7f9a8c --- /dev/null +++ b/queue-5.6/selftests-mlxsw-qos_mc_aware-specify-arping-timeout-.patch @@ -0,0 +1,45 @@ +From 336daf4fa32beb7c0e1b38690b5549367d06eeb8 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 21 May 2020 15:11:45 +0300 +Subject: selftests: mlxsw: qos_mc_aware: Specify arping timeout as an integer + +From: Amit Cohen + +[ 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 +Reviewed-by: Petr Machata +Signed-off-by: Ido Schimmel +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + 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 + diff --git a/queue-5.6/series b/queue-5.6/series index 297415a264a..f3bc9963ae8 100644 --- a/queue-5.6/series +++ b/queue-5.6/series @@ -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 index 00000000000..b864af6e04e --- /dev/null +++ b/queue-5.6/wireguard-selftests-use-newer-iproute2-for-gcc-10.patch @@ -0,0 +1,38 @@ +From ffb92029c4d28c8b51b5b50672f194ed2a627838 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 19 May 2020 22:49:27 -0600 +Subject: wireguard: selftests: use newer iproute2 for gcc-10 + +From: Jason A. Donenfeld + +[ 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 +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..a370dc9abdb --- /dev/null +++ b/queue-5.6/x86-hyperv-properly-suspend-resume-reenlightenment-n.patch @@ -0,0 +1,86 @@ +From f694344d91d727c2ea96e380a86437995689cb41 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 12 May 2020 18:01:53 +0200 +Subject: x86/hyperv: Properly suspend/resume reenlightenment notifications + +From: Vitaly Kuznetsov + +[ 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 +Reviewed-by: Dexuan Cui +Reviewed-by: Tianyu Lan +Link: https://lore.kernel.org/r/20200512160153.134467-1-vkuznets@redhat.com +Signed-off-by: Wei Liu +Signed-off-by: Sasha Levin +--- + 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 index 00000000000..401dc9ecfce --- /dev/null +++ b/queue-5.6/x86-mmiotrace-use-cpumask_available-for-cpumask_var_.patch @@ -0,0 +1,67 @@ +From 3ac657992166d89fe213dc590c52c876b7d071b4 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 8 Apr 2020 13:53:23 -0700 +Subject: x86/mmiotrace: Use cpumask_available() for cpumask_var_t variables + +From: Nathan Chancellor + +[ 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 +Signed-off-by: Nathan Chancellor +Signed-off-by: Borislav Petkov +Reviewed-by: Nick Desaulniers +Acked-by: Steven Rostedt (VMware) +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 +--- + 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 +