From: Sasha Levin Date: Sat, 12 Feb 2022 05:44:12 +0000 (-0500) Subject: Fixes for 5.4 X-Git-Tag: v4.9.302~50 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=37808996df42868def6c5593742e47cf6590d4b7;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 5.4 Signed-off-by: Sasha Levin --- diff --git a/queue-5.4/drm-panel-orientation-quirks-add-quirk-for-the-1netb.patch b/queue-5.4/drm-panel-orientation-quirks-add-quirk-for-the-1netb.patch new file mode 100644 index 00000000000..4ae08cef770 --- /dev/null +++ b/queue-5.4/drm-panel-orientation-quirks-add-quirk-for-the-1netb.patch @@ -0,0 +1,53 @@ +From 5940c39178e6cf6228aa6a8dee8e87a62cc0d3d3 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 13 Jan 2022 08:06:20 +0800 +Subject: drm: panel-orientation-quirks: Add quirk for the 1Netbook OneXPlayer + +From: Raymond Jay Golo + +[ Upstream commit d3cbc6e323c9299d10c8d2e4127c77c7d05d07b1 ] + +The 1Netbook OneXPlayer uses a panel which has been mounted +90 degrees rotated. Add a quirk for this. + +Signed-off-by: Raymond Jay Golo +Signed-off-by: Daniel Vetter +Link: https://patchwork.freedesktop.org/patch/msgid/20220113000619.90988-1-rjgolo@gmail.com +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/drm_panel_orientation_quirks.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/drivers/gpu/drm/drm_panel_orientation_quirks.c b/drivers/gpu/drm/drm_panel_orientation_quirks.c +index 9d1bd8f491ad7..448c2f2d803a6 100644 +--- a/drivers/gpu/drm/drm_panel_orientation_quirks.c ++++ b/drivers/gpu/drm/drm_panel_orientation_quirks.c +@@ -115,6 +115,12 @@ static const struct drm_dmi_panel_orientation_data lcd1280x1920_rightside_up = { + .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP, + }; + ++static const struct drm_dmi_panel_orientation_data lcd1600x2560_leftside_up = { ++ .width = 1600, ++ .height = 2560, ++ .orientation = DRM_MODE_PANEL_ORIENTATION_LEFT_UP, ++}; ++ + static const struct dmi_system_id orientation_data[] = { + { /* Acer One 10 (S1003) */ + .matches = { +@@ -261,6 +267,12 @@ static const struct dmi_system_id orientation_data[] = { + DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "Default string"), + }, + .driver_data = (void *)&onegx1_pro, ++ }, { /* OneXPlayer */ ++ .matches = { ++ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ONE-NETBOOK TECHNOLOGY CO., LTD."), ++ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "ONE XPLAYER"), ++ }, ++ .driver_data = (void *)&lcd1600x2560_leftside_up, + }, { /* Samsung GalaxyBook 10.6 */ + .matches = { + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."), +-- +2.34.1 + diff --git a/queue-5.4/kvm-nvmx-evmcs-filter-out-vm_exit_save_vmx_preemptio.patch b/queue-5.4/kvm-nvmx-evmcs-filter-out-vm_exit_save_vmx_preemptio.patch new file mode 100644 index 00000000000..22effca3a2f --- /dev/null +++ b/queue-5.4/kvm-nvmx-evmcs-filter-out-vm_exit_save_vmx_preemptio.patch @@ -0,0 +1,43 @@ +From 8eced0e1de8b0e7d1dd849ecf5159cc9b4c85e44 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 12 Jan 2022 18:01:31 +0100 +Subject: KVM: nVMX: eVMCS: Filter out VM_EXIT_SAVE_VMX_PREEMPTION_TIMER + +From: Vitaly Kuznetsov + +[ Upstream commit 7a601e2cf61558dfd534a9ecaad09f5853ad8204 ] + +Enlightened VMCS v1 doesn't have VMX_PREEMPTION_TIMER_VALUE field, +PIN_BASED_VMX_PREEMPTION_TIMER is also filtered out already so it makes +sense to filter out VM_EXIT_SAVE_VMX_PREEMPTION_TIMER too. + +Note, none of the currently existing Windows/Hyper-V versions are known +to enable 'save VMX-preemption timer value' when eVMCS is in use, the +change is aimed at making the filtering future proof. + +Signed-off-by: Vitaly Kuznetsov +Message-Id: <20220112170134.1904308-3-vkuznets@redhat.com> +Signed-off-by: Paolo Bonzini +Signed-off-by: Sasha Levin +--- + arch/x86/kvm/vmx/evmcs.h | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/arch/x86/kvm/vmx/evmcs.h b/arch/x86/kvm/vmx/evmcs.h +index 07ebf6882a458..632bed227152e 100644 +--- a/arch/x86/kvm/vmx/evmcs.h ++++ b/arch/x86/kvm/vmx/evmcs.h +@@ -58,7 +58,9 @@ DECLARE_STATIC_KEY_FALSE(enable_evmcs); + SECONDARY_EXEC_SHADOW_VMCS | \ + SECONDARY_EXEC_TSC_SCALING | \ + SECONDARY_EXEC_PAUSE_LOOP_EXITING) +-#define EVMCS1_UNSUPPORTED_VMEXIT_CTRL (VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL) ++#define EVMCS1_UNSUPPORTED_VMEXIT_CTRL \ ++ (VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL | \ ++ VM_EXIT_SAVE_VMX_PREEMPTION_TIMER) + #define EVMCS1_UNSUPPORTED_VMENTRY_CTRL (VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL) + #define EVMCS1_UNSUPPORTED_VMFUNC (VMX_VMFUNC_EPTP_SWITCHING) + +-- +2.34.1 + diff --git a/queue-5.4/net-sched-clarify-error-message-when-qdisc-kind-is-u.patch b/queue-5.4/net-sched-clarify-error-message-when-qdisc-kind-is-u.patch new file mode 100644 index 00000000000..97a11e329ea --- /dev/null +++ b/queue-5.4/net-sched-clarify-error-message-when-qdisc-kind-is-u.patch @@ -0,0 +1,41 @@ +From 19a3b624f0bd7e0527301097c2d382822de72218 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 18 Jan 2022 14:19:09 -0300 +Subject: net: sched: Clarify error message when qdisc kind is unknown + +From: Victor Nogueira + +[ Upstream commit 973bf8fdd12f0e70ea351c018e68edd377a836d1 ] + +When adding a tc rule with a qdisc kind that is not supported or not +compiled into the kernel, the kernel emits the following error: "Error: +Specified qdisc not found.". Found via tdc testing when ETS qdisc was not +compiled in and it was not obvious right away what the message meant +without looking at the kernel code. + +Change the error message to be more explicit and say the qdisc kind is +unknown. + +Signed-off-by: Victor Nogueira +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + net/sched/sch_api.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c +index e70f990334083..6f36df85d23d8 100644 +--- a/net/sched/sch_api.c ++++ b/net/sched/sch_api.c +@@ -1195,7 +1195,7 @@ static struct Qdisc *qdisc_create(struct net_device *dev, + + err = -ENOENT; + if (!ops) { +- NL_SET_ERR_MSG(extack, "Specified qdisc not found"); ++ NL_SET_ERR_MSG(extack, "Specified qdisc kind is unknown"); + goto err_out; + } + +-- +2.34.1 + diff --git a/queue-5.4/net-stmmac-dwmac-sun8i-use-return-val-of-readl_poll_.patch b/queue-5.4/net-stmmac-dwmac-sun8i-use-return-val-of-readl_poll_.patch new file mode 100644 index 00000000000..dc15e1694f4 --- /dev/null +++ b/queue-5.4/net-stmmac-dwmac-sun8i-use-return-val-of-readl_poll_.patch @@ -0,0 +1,42 @@ +From fd455308a4149625ee6bc3c6f49b41387d0d1d76 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 27 Jan 2022 00:52:15 +0800 +Subject: net: stmmac: dwmac-sun8i: use return val of readl_poll_timeout() + +From: Jisheng Zhang + +[ Upstream commit 9e0db41e7a0b6f1271cbcfb16dbf5b8641b4e440 ] + +When readl_poll_timeout() timeout, we'd better directly use its return +value. + +Before this patch: +[ 2.145528] dwmac-sun8i: probe of 4500000.ethernet failed with error -14 + +After this patch: +[ 2.138520] dwmac-sun8i: probe of 4500000.ethernet failed with error -110 + +Signed-off-by: Jisheng Zhang +Acked-by: Jernej Skrabec +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c +index 2f6258ca95155..7c73d296b940d 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c ++++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c +@@ -718,7 +718,7 @@ static int sun8i_dwmac_reset(struct stmmac_priv *priv) + + if (err) { + dev_err(priv->device, "EMAC reset timeout\n"); +- return -EFAULT; ++ return err; + } + return 0; + } +-- +2.34.1 + diff --git a/queue-5.4/nfs-nfs4clinet-check-the-return-value-of-kstrdup.patch b/queue-5.4/nfs-nfs4clinet-check-the-return-value-of-kstrdup.patch new file mode 100644 index 00000000000..eec6c453a23 --- /dev/null +++ b/queue-5.4/nfs-nfs4clinet-check-the-return-value-of-kstrdup.patch @@ -0,0 +1,40 @@ +From df19501d8edbe52298eb3bd7f9f5619e886a02e8 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 17 Dec 2021 01:01:33 +0800 +Subject: nfs: nfs4clinet: check the return value of kstrdup() + +From: Xiaoke Wang + +[ Upstream commit fbd2057e5329d3502a27491190237b6be52a1cb6 ] + +kstrdup() returns NULL when some internal memory errors happen, it is +better to check the return value of it so to catch the memory error in +time. + +Signed-off-by: Xiaoke Wang +Signed-off-by: Anna Schumaker +Signed-off-by: Sasha Levin +--- + fs/nfs/nfs4client.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c +index 8cace8350fa3d..3671a51fe5ebc 100644 +--- a/fs/nfs/nfs4client.c ++++ b/fs/nfs/nfs4client.c +@@ -1293,8 +1293,11 @@ int nfs4_update_server(struct nfs_server *server, const char *hostname, + } + nfs_put_client(clp); + +- if (server->nfs_client->cl_hostname == NULL) ++ if (server->nfs_client->cl_hostname == NULL) { + server->nfs_client->cl_hostname = kstrdup(hostname, GFP_KERNEL); ++ if (server->nfs_client->cl_hostname == NULL) ++ return -ENOMEM; ++ } + nfs_server_insert_lists(server); + + return nfs_probe_destination(server); +-- +2.34.1 + diff --git a/queue-5.4/nfsv4-expose-nfs_parse_server_name-function.patch b/queue-5.4/nfsv4-expose-nfs_parse_server_name-function.patch new file mode 100644 index 00000000000..ca1f860f1e8 --- /dev/null +++ b/queue-5.4/nfsv4-expose-nfs_parse_server_name-function.patch @@ -0,0 +1,51 @@ +From a83d61ef09a9317881d2ec4598441a9d10275552 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 9 Dec 2021 14:53:32 -0500 +Subject: NFSv4 expose nfs_parse_server_name function + +From: Olga Kornievskaia + +[ Upstream commit f5b27cc6761e27ee6387a24df1a99ca77b360fea ] + +Make nfs_parse_server_name available outside of nfs4namespace.c. + +Signed-off-by: Olga Kornievskaia +Signed-off-by: Anna Schumaker +Signed-off-by: Sasha Levin +--- + fs/nfs/nfs4_fs.h | 3 ++- + fs/nfs/nfs4namespace.c | 4 ++-- + 2 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h +index 5708b5a636f19..ebd77a301057e 100644 +--- a/fs/nfs/nfs4_fs.h ++++ b/fs/nfs/nfs4_fs.h +@@ -279,7 +279,8 @@ struct vfsmount *nfs4_submount(struct nfs_server *, struct dentry *, + struct nfs_fh *, struct nfs_fattr *); + int nfs4_replace_transport(struct nfs_server *server, + const struct nfs4_fs_locations *locations); +- ++size_t nfs_parse_server_name(char *string, size_t len, struct sockaddr *sa, ++ size_t salen, struct net *net); + /* nfs4proc.c */ + extern int nfs4_handle_exception(struct nfs_server *, int, struct nfs4_exception *); + extern int nfs4_async_handle_error(struct rpc_task *task, +diff --git a/fs/nfs/nfs4namespace.c b/fs/nfs/nfs4namespace.c +index 2e460c33ae487..768258848a684 100644 +--- a/fs/nfs/nfs4namespace.c ++++ b/fs/nfs/nfs4namespace.c +@@ -121,8 +121,8 @@ static int nfs4_validate_fspath(struct dentry *dentry, + return 0; + } + +-static size_t nfs_parse_server_name(char *string, size_t len, +- struct sockaddr *sa, size_t salen, struct net *net) ++size_t nfs_parse_server_name(char *string, size_t len, struct sockaddr *sa, ++ size_t salen, struct net *net) + { + ssize_t ret; + +-- +2.34.1 + diff --git a/queue-5.4/nfsv4-only-print-the-label-when-its-queried.patch b/queue-5.4/nfsv4-only-print-the-label-when-its-queried.patch new file mode 100644 index 00000000000..7b76982cdb7 --- /dev/null +++ b/queue-5.4/nfsv4-only-print-the-label-when-its-queried.patch @@ -0,0 +1,42 @@ +From 212d8bfd609f61ef49cd92c1ec0a0e9e2b097440 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 29 Nov 2021 15:33:56 -0500 +Subject: NFSv4 only print the label when its queried + +From: Olga Kornievskaia + +[ Upstream commit 2c52c8376db7160a1dd8a681c61c9258405ef143 ] + +When the bitmask of the attributes doesn't include the security label, +don't bother printing it. Since the label might not be null terminated, +adjust the printing format accordingly. + +Signed-off-by: Olga Kornievskaia +Signed-off-by: Anna Schumaker +Signed-off-by: Sasha Levin +--- + fs/nfs/nfs4xdr.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c +index 9a022a4fb9643..0fc08d22c9218 100644 +--- a/fs/nfs/nfs4xdr.c ++++ b/fs/nfs/nfs4xdr.c +@@ -4187,10 +4187,11 @@ static int decode_attr_security_label(struct xdr_stream *xdr, uint32_t *bitmap, + } else + printk(KERN_WARNING "%s: label too long (%u)!\n", + __func__, len); ++ if (label && label->label) ++ dprintk("%s: label=%.*s, len=%d, PI=%d, LFS=%d\n", ++ __func__, label->len, (char *)label->label, ++ label->len, label->pi, label->lfs); + } +- if (label && label->label) +- dprintk("%s: label=%s, len=%d, PI=%d, LFS=%d\n", __func__, +- (char *)label->label, label->len, label->pi, label->lfs); + return status; + } + +-- +2.34.1 + diff --git a/queue-5.4/nfsv4-remove-zero-number-of-fs_locations-entries-err.patch b/queue-5.4/nfsv4-remove-zero-number-of-fs_locations-entries-err.patch new file mode 100644 index 00000000000..05411c8098b --- /dev/null +++ b/queue-5.4/nfsv4-remove-zero-number-of-fs_locations-entries-err.patch @@ -0,0 +1,50 @@ +From 78c1175e11f2ecae1ec7f82238be0dfeb7f3cbd8 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 9 Dec 2021 14:53:29 -0500 +Subject: NFSv4 remove zero number of fs_locations entries error check + +From: Olga Kornievskaia + +[ Upstream commit 90e12a3191040bd3854d3e236c35921e4e92a044 ] + +Remove the check for the zero length fs_locations reply in the +xdr decoding, and instead check for that in the migration code. + +Signed-off-by: Olga Kornievskaia +Signed-off-by: Anna Schumaker +Signed-off-by: Sasha Levin +--- + fs/nfs/nfs4state.c | 3 +++ + fs/nfs/nfs4xdr.c | 2 -- + 2 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c +index ea680f619438b..aa2caba38a014 100644 +--- a/fs/nfs/nfs4state.c ++++ b/fs/nfs/nfs4state.c +@@ -2070,6 +2070,9 @@ static int nfs4_try_migration(struct nfs_server *server, const struct cred *cred + } + + result = -NFS4ERR_NXIO; ++ if (!locations->nlocations) ++ goto out; ++ + if (!(locations->fattr.valid & NFS_ATTR_FATTR_V4_LOCATIONS)) { + dprintk("<-- %s: No fs_locations data, migration skipped\n", + __func__); +diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c +index 0fc08d22c9218..2b7741fe42ead 100644 +--- a/fs/nfs/nfs4xdr.c ++++ b/fs/nfs/nfs4xdr.c +@@ -3683,8 +3683,6 @@ static int decode_attr_fs_locations(struct xdr_stream *xdr, uint32_t *bitmap, st + if (unlikely(!p)) + goto out_eio; + n = be32_to_cpup(p); +- if (n <= 0) +- goto out_eio; + for (res->nlocations = 0; res->nlocations < n; res->nlocations++) { + u32 m; + struct nfs4_fs_location *loc; +-- +2.34.1 + diff --git a/queue-5.4/nfsv4.1-fix-uninitialised-variable-in-devicenotify.patch b/queue-5.4/nfsv4.1-fix-uninitialised-variable-in-devicenotify.patch new file mode 100644 index 00000000000..667ff9a98e9 --- /dev/null +++ b/queue-5.4/nfsv4.1-fix-uninitialised-variable-in-devicenotify.patch @@ -0,0 +1,106 @@ +From a510d8747cfa54a6af8f4d555ba7f98468cf284a Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 3 Jan 2022 14:50:16 -0500 +Subject: NFSv4.1: Fix uninitialised variable in devicenotify + +From: Trond Myklebust + +[ Upstream commit b05bf5c63b326ce1da84ef42498d8e0e292e694c ] + +When decode_devicenotify_args() exits with no entries, we need to +ensure that the struct cb_devicenotifyargs is initialised to +{ 0, NULL } in order to avoid problems in +nfs4_callback_devicenotify(). + +Reported-by: +Signed-off-by: Trond Myklebust +Signed-off-by: Anna Schumaker +Signed-off-by: Sasha Levin +--- + fs/nfs/callback.h | 2 +- + fs/nfs/callback_proc.c | 2 +- + fs/nfs/callback_xdr.c | 18 +++++++++--------- + 3 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/fs/nfs/callback.h b/fs/nfs/callback.h +index 8f34daf85f703..5d5227ce4d91e 100644 +--- a/fs/nfs/callback.h ++++ b/fs/nfs/callback.h +@@ -168,7 +168,7 @@ struct cb_devicenotifyitem { + }; + + struct cb_devicenotifyargs { +- int ndevs; ++ uint32_t ndevs; + struct cb_devicenotifyitem *devs; + }; + +diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c +index fc775b0b5194f..b8a7b223b5b18 100644 +--- a/fs/nfs/callback_proc.c ++++ b/fs/nfs/callback_proc.c +@@ -364,7 +364,7 @@ __be32 nfs4_callback_devicenotify(void *argp, void *resp, + struct cb_process_state *cps) + { + struct cb_devicenotifyargs *args = argp; +- int i; ++ uint32_t i; + __be32 res = 0; + struct nfs_client *clp = cps->clp; + struct nfs_server *server = NULL; +diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c +index 73a5a5ea29766..90b5511c4c440 100644 +--- a/fs/nfs/callback_xdr.c ++++ b/fs/nfs/callback_xdr.c +@@ -258,11 +258,9 @@ __be32 decode_devicenotify_args(struct svc_rqst *rqstp, + void *argp) + { + struct cb_devicenotifyargs *args = argp; ++ uint32_t tmp, n, i; + __be32 *p; + __be32 status = 0; +- u32 tmp; +- int n, i; +- args->ndevs = 0; + + /* Num of device notifications */ + p = xdr_inline_decode(xdr, sizeof(uint32_t)); +@@ -271,7 +269,7 @@ __be32 decode_devicenotify_args(struct svc_rqst *rqstp, + goto out; + } + n = ntohl(*p++); +- if (n <= 0) ++ if (n == 0) + goto out; + if (n > ULONG_MAX / sizeof(*args->devs)) { + status = htonl(NFS4ERR_BADXDR); +@@ -330,19 +328,21 @@ __be32 decode_devicenotify_args(struct svc_rqst *rqstp, + dev->cbd_immediate = 0; + } + +- args->ndevs++; +- + dprintk("%s: type %d layout 0x%x immediate %d\n", + __func__, dev->cbd_notify_type, dev->cbd_layout_type, + dev->cbd_immediate); + } ++ args->ndevs = n; ++ dprintk("%s: ndevs %d\n", __func__, args->ndevs); ++ return 0; ++err: ++ kfree(args->devs); + out: ++ args->devs = NULL; ++ args->ndevs = 0; + dprintk("%s: status %d ndevs %d\n", + __func__, ntohl(status), args->ndevs); + return status; +-err: +- kfree(args->devs); +- goto out; + } + + static __be32 decode_sessionid(struct xdr_stream *xdr, +-- +2.34.1 + diff --git a/queue-5.4/pm-hibernate-remove-register_nosave_region_late.patch b/queue-5.4/pm-hibernate-remove-register_nosave_region_late.patch new file mode 100644 index 00000000000..056a8f6b153 --- /dev/null +++ b/queue-5.4/pm-hibernate-remove-register_nosave_region_late.patch @@ -0,0 +1,96 @@ +From 0d782f9de5f3d9afff59a8a2ca54a572c59850ab Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 19 Jan 2022 11:47:51 +0100 +Subject: PM: hibernate: Remove register_nosave_region_late() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Amadeusz Sławiński + +[ Upstream commit 33569ef3c754a82010f266b7b938a66a3ccf90a4 ] + +It is an unused wrapper forcing kmalloc allocation for registering +nosave regions. Also, rename __register_nosave_region() to +register_nosave_region() now that there is no need for disambiguation. + +Signed-off-by: Amadeusz Sławiński +Reviewed-by: Cezary Rojewski +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Sasha Levin +--- + include/linux/suspend.h | 11 +---------- + kernel/power/snapshot.c | 21 +++++++-------------- + 2 files changed, 8 insertions(+), 24 deletions(-) + +diff --git a/include/linux/suspend.h b/include/linux/suspend.h +index cd97d2c8840cc..44dd49cb2ea05 100644 +--- a/include/linux/suspend.h ++++ b/include/linux/suspend.h +@@ -428,15 +428,7 @@ struct platform_hibernation_ops { + + #ifdef CONFIG_HIBERNATION + /* kernel/power/snapshot.c */ +-extern void __register_nosave_region(unsigned long b, unsigned long e, int km); +-static inline void __init register_nosave_region(unsigned long b, unsigned long e) +-{ +- __register_nosave_region(b, e, 0); +-} +-static inline void __init register_nosave_region_late(unsigned long b, unsigned long e) +-{ +- __register_nosave_region(b, e, 1); +-} ++extern void register_nosave_region(unsigned long b, unsigned long e); + extern int swsusp_page_is_forbidden(struct page *); + extern void swsusp_set_page_free(struct page *); + extern void swsusp_unset_page_free(struct page *); +@@ -453,7 +445,6 @@ extern struct pbe *restore_pblist; + int pfn_is_nosave(unsigned long pfn); + #else /* CONFIG_HIBERNATION */ + static inline void register_nosave_region(unsigned long b, unsigned long e) {} +-static inline void register_nosave_region_late(unsigned long b, unsigned long e) {} + static inline int swsusp_page_is_forbidden(struct page *p) { return 0; } + static inline void swsusp_set_page_free(struct page *p) {} + static inline void swsusp_unset_page_free(struct page *p) {} +diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c +index d65f2d5ab6942..46455aa7951ec 100644 +--- a/kernel/power/snapshot.c ++++ b/kernel/power/snapshot.c +@@ -945,8 +945,7 @@ static void memory_bm_recycle(struct memory_bitmap *bm) + * Register a range of page frames the contents of which should not be saved + * during hibernation (to be used in the early initialization code). + */ +-void __init __register_nosave_region(unsigned long start_pfn, +- unsigned long end_pfn, int use_kmalloc) ++void __init register_nosave_region(unsigned long start_pfn, unsigned long end_pfn) + { + struct nosave_region *region; + +@@ -962,18 +961,12 @@ void __init __register_nosave_region(unsigned long start_pfn, + goto Report; + } + } +- if (use_kmalloc) { +- /* During init, this shouldn't fail */ +- region = kmalloc(sizeof(struct nosave_region), GFP_KERNEL); +- BUG_ON(!region); +- } else { +- /* This allocation cannot fail */ +- region = memblock_alloc(sizeof(struct nosave_region), +- SMP_CACHE_BYTES); +- if (!region) +- panic("%s: Failed to allocate %zu bytes\n", __func__, +- sizeof(struct nosave_region)); +- } ++ /* This allocation cannot fail */ ++ region = memblock_alloc(sizeof(struct nosave_region), ++ SMP_CACHE_BYTES); ++ if (!region) ++ panic("%s: Failed to allocate %zu bytes\n", __func__, ++ sizeof(struct nosave_region)); + region->start_pfn = start_pfn; + region->end_pfn = end_pfn; + list_add_tail(®ion->list, &nosave_regions); +-- +2.34.1 + diff --git a/queue-5.4/scsi-myrs-fix-crash-in-error-case.patch b/queue-5.4/scsi-myrs-fix-crash-in-error-case.patch new file mode 100644 index 00000000000..582f3ecdae7 --- /dev/null +++ b/queue-5.4/scsi-myrs-fix-crash-in-error-case.patch @@ -0,0 +1,48 @@ +From 195669d7b7616f3e58a812787cc2808388aa4720 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 23 Jan 2022 14:57:17 -0800 +Subject: scsi: myrs: Fix crash in error case + +From: Tong Zhang + +[ Upstream commit 4db09593af0b0b4d7d4805ebb3273df51d7cc30d ] + +In myrs_detect(), cs->disable_intr is NULL when privdata->hw_init() fails +with non-zero. In this case, myrs_cleanup(cs) will call a NULL ptr and +crash the kernel. + +[ 1.105606] myrs 0000:00:03.0: Unknown Initialization Error 5A +[ 1.105872] myrs 0000:00:03.0: Failed to initialize Controller +[ 1.106082] BUG: kernel NULL pointer dereference, address: 0000000000000000 +[ 1.110774] Call Trace: +[ 1.110950] myrs_cleanup+0xe4/0x150 [myrs] +[ 1.111135] myrs_probe.cold+0x91/0x56a [myrs] +[ 1.111302] ? DAC960_GEM_intr_handler+0x1f0/0x1f0 [myrs] +[ 1.111500] local_pci_probe+0x48/0x90 + +Link: https://lore.kernel.org/r/20220123225717.1069538-1-ztong0001@gmail.com +Reviewed-by: Hannes Reinecke +Signed-off-by: Tong Zhang +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + drivers/scsi/myrs.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/scsi/myrs.c b/drivers/scsi/myrs.c +index cfc3f8b4174ab..2d3d14aa46b4b 100644 +--- a/drivers/scsi/myrs.c ++++ b/drivers/scsi/myrs.c +@@ -2272,7 +2272,8 @@ static void myrs_cleanup(struct myrs_hba *cs) + myrs_unmap(cs); + + if (cs->mmio_base) { +- cs->disable_intr(cs); ++ if (cs->disable_intr) ++ cs->disable_intr(cs); + iounmap(cs->mmio_base); + cs->mmio_base = NULL; + } +-- +2.34.1 + diff --git a/queue-5.4/scsi-qedf-fix-refcount-issue-when-logo-is-received-d.patch b/queue-5.4/scsi-qedf-fix-refcount-issue-when-logo-is-received-d.patch new file mode 100644 index 00000000000..fedb1988180 --- /dev/null +++ b/queue-5.4/scsi-qedf-fix-refcount-issue-when-logo-is-received-d.patch @@ -0,0 +1,72 @@ +From 893c7571ff6e39f57a35ca6eaa9ff7e2fb5a681d Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 17 Jan 2022 05:53:10 -0800 +Subject: scsi: qedf: Fix refcount issue when LOGO is received during TMF + +From: Saurav Kashyap + +[ Upstream commit 5239ab63f17cee643bd4bf6addfedebaa7d4f41e ] + +Hung task call trace was seen during LOGO processing. + +[ 974.309060] [0000:00:00.0]:[qedf_eh_device_reset:868]: 1:0:2:0: LUN RESET Issued... +[ 974.309065] [0000:00:00.0]:[qedf_initiate_tmf:2422]: tm_flags 0x10 sc_cmd 00000000c16b930f op = 0x2a target_id = 0x2 lun=0 +[ 974.309178] [0000:00:00.0]:[qedf_initiate_tmf:2431]: portid=016900 tm_flags =LUN RESET +[ 974.309222] [0000:00:00.0]:[qedf_initiate_tmf:2438]: orig io_req = 00000000ec78df8f xid = 0x180 ref_cnt = 1. +[ 974.309625] host1: rport 016900: Received LOGO request while in state Ready +[ 974.309627] host1: rport 016900: Delete port +[ 974.309642] host1: rport 016900: work event 3 +[ 974.309644] host1: rport 016900: lld callback ev 3 +[ 974.313243] [0000:61:00.2]:[qedf_execute_tmf:2383]:1: fcport is uploading, not executing flush. +[ 974.313295] [0000:61:00.2]:[qedf_execute_tmf:2400]:1: task mgmt command success... +[ 984.031088] INFO: task jbd2/dm-15-8:7645 blocked for more than 120 seconds. +[ 984.031136] Not tainted 4.18.0-305.el8.x86_64 #1 + +[ 984.031166] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. +[ 984.031209] jbd2/dm-15-8 D 0 7645 2 0x80004080 +[ 984.031212] Call Trace: +[ 984.031222] __schedule+0x2c4/0x700 +[ 984.031230] ? unfreeze_partials.isra.83+0x16e/0x1a0 +[ 984.031233] ? bit_wait_timeout+0x90/0x90 +[ 984.031235] schedule+0x38/0xa0 +[ 984.031238] io_schedule+0x12/0x40 +[ 984.031240] bit_wait_io+0xd/0x50 +[ 984.031243] __wait_on_bit+0x6c/0x80 +[ 984.031248] ? free_buffer_head+0x21/0x50 +[ 984.031251] out_of_line_wait_on_bit+0x91/0xb0 +[ 984.031257] ? init_wait_var_entry+0x50/0x50 +[ 984.031268] jbd2_journal_commit_transaction+0x112e/0x19f0 [jbd2] +[ 984.031280] kjournald2+0xbd/0x270 [jbd2] +[ 984.031284] ? finish_wait+0x80/0x80 +[ 984.031291] ? commit_timeout+0x10/0x10 [jbd2] +[ 984.031294] kthread+0x116/0x130 +[ 984.031300] ? kthread_flush_work_fn+0x10/0x10 +[ 984.031305] ret_from_fork+0x1f/0x40 + +There was a ref count issue when LOGO is received during TMF. This leads to +one of the I/Os hanging with the driver. Fix the ref count. + +Link: https://lore.kernel.org/r/20220117135311.6256-3-njavali@marvell.com +Signed-off-by: Saurav Kashyap +Signed-off-by: Nilesh Javali +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + drivers/scsi/qedf/qedf_io.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/scsi/qedf/qedf_io.c b/drivers/scsi/qedf/qedf_io.c +index 4e8a284e606c0..d02d1ef0d0116 100644 +--- a/drivers/scsi/qedf/qedf_io.c ++++ b/drivers/scsi/qedf/qedf_io.c +@@ -2253,6 +2253,7 @@ int qedf_initiate_cleanup(struct qedf_ioreq *io_req, + io_req->tm_flags == FCP_TMF_TGT_RESET) { + clear_bit(QEDF_CMD_OUTSTANDING, &io_req->flags); + io_req->sc_cmd = NULL; ++ kref_put(&io_req->refcount, qedf_release_cmd); + complete(&io_req->tm_done); + } + +-- +2.34.1 + diff --git a/queue-5.4/scsi-target-iscsi-make-sure-the-np-under-each-tpg-is.patch b/queue-5.4/scsi-target-iscsi-make-sure-the-np-under-each-tpg-is.patch new file mode 100644 index 00000000000..3bb4bca21cb --- /dev/null +++ b/queue-5.4/scsi-target-iscsi-make-sure-the-np-under-each-tpg-is.patch @@ -0,0 +1,43 @@ +From ea0e471f5cce8371730bb5795afa69b9a8848eff Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 11 Jan 2022 13:47:42 +0800 +Subject: scsi: target: iscsi: Make sure the np under each tpg is unique + +From: ZouMingzhe + +[ Upstream commit a861790afaa8b6369eee8a88c5d5d73f5799c0c6 ] + +iscsit_tpg_check_network_portal() has nested for_each loops and is supposed +to return true when a match is found. However, the tpg loop will still +continue after existing the tpg_np loop. If this tpg_np is not the last the +match value will be changed. + +Break the outer loop after finding a match and make sure the np under each +tpg is unique. + +Link: https://lore.kernel.org/r/20220111054742.19582-1-mingzhe.zou@easystack.cn +Signed-off-by: ZouMingzhe +Reviewed-by: Mike Christie +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + drivers/target/iscsi/iscsi_target_tpg.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/drivers/target/iscsi/iscsi_target_tpg.c b/drivers/target/iscsi/iscsi_target_tpg.c +index 8075f60fd02c3..2d5cf1714ae05 100644 +--- a/drivers/target/iscsi/iscsi_target_tpg.c ++++ b/drivers/target/iscsi/iscsi_target_tpg.c +@@ -443,6 +443,9 @@ static bool iscsit_tpg_check_network_portal( + break; + } + spin_unlock(&tpg->tpg_np_lock); ++ ++ if (match) ++ break; + } + spin_unlock(&tiqn->tiqn_tpg_lock); + +-- +2.34.1 + diff --git a/queue-5.4/series b/queue-5.4/series index f2232f7de47..302257277bd 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -9,3 +9,17 @@ nfs-fix-initialisation-of-nfs_client-cl_flags-field.patch nfsd-clamp-write-offsets.patch nfsd-fix-offset-type-in-i-o-trace-points.patch nvme-fix-parsing-of-ana-log-page.patch +nfsv4-only-print-the-label-when-its-queried.patch +nfs-nfs4clinet-check-the-return-value-of-kstrdup.patch +nfsv4.1-fix-uninitialised-variable-in-devicenotify.patch +nfsv4-remove-zero-number-of-fs_locations-entries-err.patch +nfsv4-expose-nfs_parse_server_name-function.patch +drm-panel-orientation-quirks-add-quirk-for-the-1netb.patch +net-sched-clarify-error-message-when-qdisc-kind-is-u.patch +scsi-target-iscsi-make-sure-the-np-under-each-tpg-is.patch +scsi-qedf-fix-refcount-issue-when-logo-is-received-d.patch +scsi-myrs-fix-crash-in-error-case.patch +pm-hibernate-remove-register_nosave_region_late.patch +usb-dwc2-gadget-don-t-try-to-disable-ep0-in-dwc2_hso.patch +net-stmmac-dwmac-sun8i-use-return-val-of-readl_poll_.patch +kvm-nvmx-evmcs-filter-out-vm_exit_save_vmx_preemptio.patch diff --git a/queue-5.4/usb-dwc2-gadget-don-t-try-to-disable-ep0-in-dwc2_hso.patch b/queue-5.4/usb-dwc2-gadget-don-t-try-to-disable-ep0-in-dwc2_hso.patch new file mode 100644 index 00000000000..90911674aa0 --- /dev/null +++ b/queue-5.4/usb-dwc2-gadget-don-t-try-to-disable-ep0-in-dwc2_hso.patch @@ -0,0 +1,50 @@ +From e289827fd5103bf590f44ba516c737f9442d4f58 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 7 Dec 2021 14:01:01 +0100 +Subject: usb: dwc2: gadget: don't try to disable ep0 in dwc2_hsotg_suspend + +From: Amelie Delaunay + +[ Upstream commit ac55d163855924aa5af9f1560977da8f346963c8 ] + +Calling dwc2_hsotg_ep_disable on ep0 (in/out) will lead to the following +logs before returning -EINVAL: +dwc2 49000000.usb-otg: dwc2_hsotg_ep_disable: called for ep0 +dwc2 49000000.usb-otg: dwc2_hsotg_ep_disable: called for ep0 + +To avoid these two logs while suspending, start disabling the endpoint +from the index 1, as done in dwc2_hsotg_udc_stop: + + /* all endpoints should be shutdown */ + for (ep = 1; ep < hsotg->num_of_eps; ep++) { + if (hsotg->eps_in[ep]) + dwc2_hsotg_ep_disable_lock(&hsotg->eps_in[ep]->ep); + if (hsotg->eps_out[ep]) + dwc2_hsotg_ep_disable_lock(&hsotg->eps_out[ep]->ep); + } + +Acked-by: Minas Harutyunyan +Signed-off-by: Amelie Delaunay +Link: https://lore.kernel.org/r/20211207130101.270314-1-amelie.delaunay@foss.st.com +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Sasha Levin +--- + drivers/usb/dwc2/gadget.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c +index 249e8e6aa9282..379bbf27c7ce8 100644 +--- a/drivers/usb/dwc2/gadget.c ++++ b/drivers/usb/dwc2/gadget.c +@@ -4979,7 +4979,7 @@ int dwc2_hsotg_suspend(struct dwc2_hsotg *hsotg) + hsotg->gadget.speed = USB_SPEED_UNKNOWN; + spin_unlock_irqrestore(&hsotg->lock, flags); + +- for (ep = 0; ep < hsotg->num_of_eps; ep++) { ++ for (ep = 1; ep < hsotg->num_of_eps; ep++) { + if (hsotg->eps_in[ep]) + dwc2_hsotg_ep_disable_lock(&hsotg->eps_in[ep]->ep); + if (hsotg->eps_out[ep]) +-- +2.34.1 +