From 3e8210349a321632bcd49fa15760da867b6762b7 Mon Sep 17 00:00:00 2001 From: Vlastimil Babka Date: May 24 2023 20:12:42 +0000 Subject: Merge branch 'users/mfranc/SLE15-SP4/for-next' into SLE15-SP4 Pull s390 git-fixes from Miroslav Franc. --- diff --git a/patches.suse/s390-ctcm-Fix-return-type-of-ctc-mp-m_tx.patch b/patches.suse/s390-ctcm-Fix-return-type-of-ctc-mp-m_tx.patch new file mode 100644 index 0000000..1299493 --- /dev/null +++ b/patches.suse/s390-ctcm-Fix-return-type-of-ctc-mp-m_tx.patch @@ -0,0 +1,72 @@ +From: Nathan Chancellor +Date: Thu, 3 Nov 2022 10:01:28 -0700 +Subject: s390/ctcm: Fix return type of ctc{mp,}m_tx() +Git-commit: aa5bf80c3c067b82b4362cd6e8e2194623bcaca6 +Patch-mainline: v6.2-rc1 +References: git-fixes bsc#1211686 + +With clang's kernel control flow integrity (kCFI, CONFIG_CFI_CLANG), +indirect call targets are validated against the expected function +pointer prototype to make sure the call target is valid to help mitigate +ROP attacks. If they are not identical, there is a failure at run time, +which manifests as either a kernel panic or thread getting killed. A +proposed warning in clang aims to catch these at compile time, which +reveals: + + drivers/s390/net/ctcm_main.c:1064:21: error: incompatible function pointer types initializing 'netdev_tx_t (*)(struct sk_buff *, struct net_device *)' (aka 'enum netdev_tx (*)(struct sk_buff *, struct net_device *)') with an expression of type 'int (struct sk_buff *, struct net_device *)' [-Werror,-Wincompatible-function-pointer-types-strict] + .ndo_start_xmit = ctcm_tx, + ^~~~~~~ + drivers/s390/net/ctcm_main.c:1072:21: error: incompatible function pointer types initializing 'netdev_tx_t (*)(struct sk_buff *, struct net_device *)' (aka 'enum netdev_tx (*)(struct sk_buff *, struct net_device *)') with an expression of type 'int (struct sk_buff *, struct net_device *)' [-Werror,-Wincompatible-function-pointer-types-strict] + .ndo_start_xmit = ctcmpc_tx, + ^~~~~~~~~ + +->ndo_start_xmit() in 'struct net_device_ops' expects a return type of +'netdev_tx_t', not 'int'. Adjust the return type of ctc{mp,}m_tx() to +match the prototype's to resolve the warning and potential CFI failure, +should s390 select ARCH_SUPPORTS_CFI_CLANG in the future. + +Additionally, while in the area, remove a comment block that is no +longer relevant. + +Link: https://github.com/ClangBuiltLinux/linux/issues/1750 +Reviewed-by: Alexandra Winter +Reviewed-by: Kees Cook +Signed-off-by: Nathan Chancellor +Signed-off-by: David S. Miller +Acked-by: Miroslav Franc +--- + drivers/s390/net/ctcm_main.c | 11 ++--------- + 1 file changed, 2 insertions(+), 9 deletions(-) + +diff --git a/drivers/s390/net/ctcm_main.c b/drivers/s390/net/ctcm_main.c +index 37b551bd43bf..bdfab9ea0046 100644 +--- a/drivers/s390/net/ctcm_main.c ++++ b/drivers/s390/net/ctcm_main.c +@@ -825,16 +825,9 @@ static int ctcmpc_transmit_skb(struct channel *ch, struct sk_buff *skb) + /** + * Start transmission of a packet. + * Called from generic network device layer. +- * +- * skb Pointer to buffer containing the packet. +- * dev Pointer to interface struct. +- * +- * returns 0 if packet consumed, !0 if packet rejected. +- * Note: If we return !0, then the packet is free'd by +- * the generic network layer. + */ + /* first merge version - leaving both functions separated */ +-static int ctcm_tx(struct sk_buff *skb, struct net_device *dev) ++static netdev_tx_t ctcm_tx(struct sk_buff *skb, struct net_device *dev) + { + struct ctcm_priv *priv = dev->ml_priv; + +@@ -877,7 +870,7 @@ static int ctcm_tx(struct sk_buff *skb, struct net_device *dev) + } + + /* unmerged MPC variant of ctcm_tx */ +-static int ctcmpc_tx(struct sk_buff *skb, struct net_device *dev) ++static netdev_tx_t ctcmpc_tx(struct sk_buff *skb, struct net_device *dev) + { + int len = 0; + struct ctcm_priv *priv = dev->ml_priv; + diff --git a/patches.suse/s390-dasd-fix-hanging-blockdevice-after-request-requeue.patch b/patches.suse/s390-dasd-fix-hanging-blockdevice-after-request-requeue.patch new file mode 100644 index 0000000..f7e8087 --- /dev/null +++ b/patches.suse/s390-dasd-fix-hanging-blockdevice-after-request-requeue.patch @@ -0,0 +1,40 @@ +From: Stefan Haberland +Date: Wed, 5 Apr 2023 16:20:17 +0200 +Subject: s390/dasd: fix hanging blockdevice after request requeue +Git-commit: d8898ee50edecacdf0141f26fd90acf43d7e9cd7 +Patch-mainline: v6.4-rc1 +References: git-fixes bsc#1211687 + +The DASD driver does not kick the requeue list when requeuing IO requests +to the blocklayer. This might lead to hanging blockdevice when there is +no other trigger for this. + +Fix by automatically kick the requeue list when requeuing DASD requests +to the blocklayer. + +Fixes: e443343e509a ("s390/dasd: blk-mq conversion") +CC: stable@vger.kernel.org # 4.14+ +Signed-off-by: Stefan Haberland +Reviewed-by: Jan Hoeppner +Reviewed-by: Halil Pasic +Link: https://lore.kernel.org/r/20230405142017.2446986-8-sth@linux.ibm.com +Signed-off-by: Jens Axboe +Acked-by: Miroslav Franc +--- + drivers/s390/block/dasd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c +index 3696931f8015..9fbfce735d56 100644 +--- a/drivers/s390/block/dasd.c ++++ b/drivers/s390/block/dasd.c +@@ -2953,7 +2953,7 @@ static int _dasd_requeue_request(struct dasd_ccw_req *cqr) + return 0; + spin_lock_irq(&cqr->dq->lock); + req = (struct request *) cqr->callback_data; +- blk_mq_requeue_request(req, false); ++ blk_mq_requeue_request(req, true); + spin_unlock_irq(&cqr->dq->lock); + + return 0; + diff --git a/patches.suse/s390-kprobes-fix-current_kprobe-never-cleared-after-kprobes-reenter.patch b/patches.suse/s390-kprobes-fix-current_kprobe-never-cleared-after-kprobes-reenter.patch new file mode 100644 index 0000000..014d35a --- /dev/null +++ b/patches.suse/s390-kprobes-fix-current_kprobe-never-cleared-after-kprobes-reenter.patch @@ -0,0 +1,54 @@ +From: Vasily Gorbik +Date: Wed, 1 Mar 2023 17:58:06 +0100 +Subject: s390/kprobes: fix current_kprobe never cleared after kprobes reenter +Git-commit: cd57953936f2213dfaccce10d20f396956222c7d +Patch-mainline: v6.3-rc1 +References: git-fixes bsc#1211688 + +Recent test_kprobe_missed kprobes kunit test uncovers the following +problem. Once kprobe is triggered from another kprobe (kprobe reenter), +all future kprobes on this cpu are considered as kprobe reenter, thus +pre_handler and post_handler are not being called and kprobes are counted +as "missed". + +Commit b9599798f953 ("[S390] kprobes: activation and deactivation") +introduced a simpler scheme for kprobes (de)activation and status +tracking by using push_kprobe/pop_kprobe, which supposed to work for +both initial kprobe entry as well as kprobe reentry and helps to avoid +handling those two cases differently. The problem is that a sequence of +calls in case of kprobes reenter: +push_kprobe() <- NULL (current_kprobe) +push_kprobe() <- kprobe1 (current_kprobe) +pop_kprobe() -> kprobe1 (current_kprobe) +pop_kprobe() -> kprobe1 (current_kprobe) +leaves "kprobe1" as "current_kprobe" on this cpu, instead of setting it +to NULL. In fact push_kprobe/pop_kprobe can only store a single state +(there is just one prev_kprobe in kprobe_ctlblk). Which is a hack but +sufficient, there is no need to have another prev_kprobe just to store +NULL. To make a simple and backportable fix simply reset "prev_kprobe" +when kprobe is poped from this "stack". No need to worry about +"kprobe_status" in this case, because its value is only checked when +current_kprobe != NULL. + +Cc: stable@vger.kernel.org +Fixes: b9599798f953 ("[S390] kprobes: activation and deactivation") +Reviewed-by: Heiko Carstens +Signed-off-by: Vasily Gorbik +Signed-off-by: Heiko Carstens +Acked-by: Miroslav Franc +--- + arch/s390/kernel/kprobes.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/arch/s390/kernel/kprobes.c b/arch/s390/kernel/kprobes.c +index c505c0ee5f47..e53192a5d593 100644 +--- a/arch/s390/kernel/kprobes.c ++++ b/arch/s390/kernel/kprobes.c +@@ -233,6 +233,7 @@ static void pop_kprobe(struct kprobe_ctlblk *kcb) + { + __this_cpu_write(current_kprobe, kcb->prev_kprobe.kp); + kcb->kprobe_status = kcb->prev_kprobe.status; ++ kcb->prev_kprobe.kp = NULL; + } + NOKPROBE_SYMBOL(pop_kprobe); + diff --git a/patches.suse/s390-kprobes-fix-irq-mask-clobbering-on-kprobe-reenter-from-post_handler.patch b/patches.suse/s390-kprobes-fix-irq-mask-clobbering-on-kprobe-reenter-from-post_handler.patch new file mode 100644 index 0000000..b2f5232 --- /dev/null +++ b/patches.suse/s390-kprobes-fix-irq-mask-clobbering-on-kprobe-reenter-from-post_handler.patch @@ -0,0 +1,82 @@ +From: Vasily Gorbik +Date: Wed, 1 Mar 2023 02:23:08 +0100 +Subject: s390/kprobes: fix irq mask clobbering on kprobe reenter from + post_handler +Git-commit: 42e19e6f04984088b6f9f0507c4c89a8152d9730 +Patch-mainline: v6.3-rc1 +References: git-fixes bsc#1211689 + +Recent test_kprobe_missed kprobes kunit test uncovers the following error +(reported when CONFIG_DEBUG_ATOMIC_SLEEP is enabled): + +BUG: sleeping function called from invalid context at kernel/locking/mutex.c:580 +in_atomic(): 0, irqs_disabled(): 1, non_block: 0, pid: 662, name: kunit_try_catch +preempt_count: 0, expected: 0 +RCU nest depth: 0, expected: 0 +no locks held by kunit_try_catch/662. +irq event stamp: 280 +hardirqs last enabled at (279): [<00000003e60a3d42>] __do_pgm_check+0x17a/0x1c0 +hardirqs last disabled at (280): [<00000003e3bd774a>] kprobe_exceptions_notify+0x27a/0x318 +softirqs last enabled at (0): [<00000003e3c5c890>] copy_process+0x14a8/0x4c80 +softirqs last disabled at (0): [<0000000000000000>] 0x0 +CPU: 46 PID: 662 Comm: kunit_try_catch Tainted: G N 6.2.0-173644-g44c18d77f0c0 #2 +Hardware name: IBM 3931 A01 704 (LPAR) +Call Trace: + [<00000003e60a3a00>] dump_stack_lvl+0x120/0x198 + [<00000003e3d02e82>] __might_resched+0x60a/0x668 + [<00000003e60b9908>] __mutex_lock+0xc0/0x14e0 + [<00000003e60bad5a>] mutex_lock_nested+0x32/0x40 + [<00000003e3f7b460>] unregister_kprobe+0x30/0xd8 + [<00000003e51b2602>] test_kprobe_missed+0xf2/0x268 + [<00000003e51b5406>] kunit_try_run_case+0x10e/0x290 + [<00000003e51b7dfa>] kunit_generic_run_threadfn_adapter+0x62/0xb8 + [<00000003e3ce30f8>] kthread+0x2d0/0x398 + [<00000003e3b96afa>] __ret_from_fork+0x8a/0xe8 + [<00000003e60ccada>] ret_from_fork+0xa/0x40 + +The reason for this error report is that kprobes handling code failed +to restore irqs. + +The problem is that when kprobe is triggered from another kprobe +post_handler current sequence of enable_singlestep / disable_singlestep +is the following: +enable_singlestep <- original kprobe (saves kprobe_saved_imask) +enable_singlestep <- kprobe triggered from post_handler (clobbers kprobe_saved_imask) +disable_singlestep <- kprobe triggered from post_handler (restores kprobe_saved_imask) +disable_singlestep <- original kprobe (restores wrong clobbered kprobe_saved_imask) + +There is just one kprobe_ctlblk per cpu and both calls saves and +loads irq mask to kprobe_saved_imask. To fix the problem simply move +resume_execution (which calls disable_singlestep) before calling +post_handler. This also fixes the problem that post_handler is called +with pt_regs which were not yet adjusted after single-stepping. + +Cc: stable@vger.kernel.org +Fixes: 4ba069b802c2 ("[S390] add kprobes support.") +Reviewed-by: Heiko Carstens +Signed-off-by: Vasily Gorbik +Signed-off-by: Heiko Carstens +Acked-by: Miroslav Franc +--- + arch/s390/kernel/kprobes.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/arch/s390/kernel/kprobes.c b/arch/s390/kernel/kprobes.c +index 5e713f318de3..698fce57a2c8 100644 +--- a/arch/s390/kernel/kprobes.c ++++ b/arch/s390/kernel/kprobes.c +@@ -402,12 +402,11 @@ static int post_kprobe_handler(struct pt_regs *regs) + if (!p) + return 0; + ++ resume_execution(p, regs); + if (kcb->kprobe_status != KPROBE_REENTER && p->post_handler) { + kcb->kprobe_status = KPROBE_HIT_SSDONE; + p->post_handler(p, regs, 0); + } +- +- resume_execution(p, regs); + pop_kprobe(kcb); + preempt_enable_no_resched(); + + diff --git a/patches.suse/s390-lcs-Fix-return-type-of-lcs_start_xmit.patch b/patches.suse/s390-lcs-Fix-return-type-of-lcs_start_xmit.patch new file mode 100644 index 0000000..9446227 --- /dev/null +++ b/patches.suse/s390-lcs-Fix-return-type-of-lcs_start_xmit.patch @@ -0,0 +1,64 @@ +From: Nathan Chancellor +Date: Thu, 3 Nov 2022 10:01:30 -0700 +Subject: s390/lcs: Fix return type of lcs_start_xmit() +Git-commit: bb16db8393658e0978c3f0d30ae069e878264fa3 +Patch-mainline: v6.2-rc1 +References: git-fixes bsc#1211690 + +With clang's kernel control flow integrity (kCFI, CONFIG_CFI_CLANG), +indirect call targets are validated against the expected function +pointer prototype to make sure the call target is valid to help mitigate +ROP attacks. If they are not identical, there is a failure at run time, +which manifests as either a kernel panic or thread getting killed. A +proposed warning in clang aims to catch these at compile time, which +reveals: + + drivers/s390/net/lcs.c:2090:21: error: incompatible function pointer types initializing 'netdev_tx_t (*)(struct sk_buff *, struct net_device *)' (aka 'enum netdev_tx (*)(struct sk_buff *, struct net_device *)') with an expression of type 'int (struct sk_buff *, struct net_device *)' [-Werror,-Wincompatible-function-pointer-types-strict] + .ndo_start_xmit = lcs_start_xmit, + ^~~~~~~~~~~~~~ + drivers/s390/net/lcs.c:2097:21: error: incompatible function pointer types initializing 'netdev_tx_t (*)(struct sk_buff *, struct net_device *)' (aka 'enum netdev_tx (*)(struct sk_buff *, struct net_device *)') with an expression of type 'int (struct sk_buff *, struct net_device *)' [-Werror,-Wincompatible-function-pointer-types-strict] + .ndo_start_xmit = lcs_start_xmit, + ^~~~~~~~~~~~~~ + +->ndo_start_xmit() in 'struct net_device_ops' expects a return type of +'netdev_tx_t', not 'int'. Adjust the return type of lcs_start_xmit() to +match the prototype's to resolve the warning and potential CFI failure, +should s390 select ARCH_SUPPORTS_CFI_CLANG in the future. + +Link: https://github.com/ClangBuiltLinux/linux/issues/1750 +Reviewed-by: Alexandra Winter +Reviewed-by: Kees Cook +Signed-off-by: Nathan Chancellor +Signed-off-by: David S. Miller +Acked-by: Miroslav Franc +--- + drivers/s390/net/lcs.c | 8 +++----- + 1 file changed, 3 insertions(+), 5 deletions(-) + +diff --git a/drivers/s390/net/lcs.c b/drivers/s390/net/lcs.c +index 84c8981317b4..38f312664ce7 100644 +--- a/drivers/s390/net/lcs.c ++++ b/drivers/s390/net/lcs.c +@@ -1519,9 +1519,8 @@ lcs_txbuffer_cb(struct lcs_channel *channel, struct lcs_buffer *buffer) + /** + * Packet transmit function called by network stack + */ +-static int +-__lcs_start_xmit(struct lcs_card *card, struct sk_buff *skb, +- struct net_device *dev) ++static netdev_tx_t __lcs_start_xmit(struct lcs_card *card, struct sk_buff *skb, ++ struct net_device *dev) + { + struct lcs_header *header; + int rc = NETDEV_TX_OK; +@@ -1582,8 +1581,7 @@ __lcs_start_xmit(struct lcs_card *card, struct sk_buff *skb, + return rc; + } + +-static int +-lcs_start_xmit(struct sk_buff *skb, struct net_device *dev) ++static netdev_tx_t lcs_start_xmit(struct sk_buff *skb, struct net_device *dev) + { + struct lcs_card *card; + int rc; + diff --git a/patches.suse/s390-mem_detect-fix-detect_memory-error-handling.patch b/patches.suse/s390-mem_detect-fix-detect_memory-error-handling.patch new file mode 100644 index 0000000..7b879f3 --- /dev/null +++ b/patches.suse/s390-mem_detect-fix-detect_memory-error-handling.patch @@ -0,0 +1,37 @@ +From: Vasily Gorbik +Date: Fri, 27 Jan 2023 14:03:07 +0100 +Subject: s390/mem_detect: fix detect_memory() error handling +Git-commit: 3400c35a4090704e6c465449616ab7e67a9209e7 +Patch-mainline: v6.3-rc1 +References: git-fixes bsc#1211691 + +Currently if for some reason sclp_early_read_info() fails, +sclp_early_get_memsize() will not set max_physmem_end and it +will stay uninitialized. Any garbage value other than 0 will lead +to detect_memory() taking wrong path or returning a garbage value +as max_physmem_end. To avoid that simply initialize max_physmem_end. + +Fixes: 73045a08cf55 ("s390: unify identity mapping limits handling") +Reported-by: Alexander Gordeev +Reviewed-by: Alexander Gordeev +Signed-off-by: Vasily Gorbik +Signed-off-by: Heiko Carstens +Acked-by: Miroslav Franc +--- + arch/s390/boot/mem_detect.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/s390/boot/mem_detect.c b/arch/s390/boot/mem_detect.c +index 7fa1a32ea0f3..0a5821ef4f1f 100644 +--- a/arch/s390/boot/mem_detect.c ++++ b/arch/s390/boot/mem_detect.c +@@ -165,7 +165,7 @@ static void search_mem_end(void) + + unsigned long detect_memory(void) + { +- unsigned long max_physmem_end; ++ unsigned long max_physmem_end = 0; + + sclp_early_get_memsize(&max_physmem_end); + + diff --git a/patches.suse/s390-netiucv-Fix-return-type-of-netiucv_tx.patch b/patches.suse/s390-netiucv-Fix-return-type-of-netiucv_tx.patch new file mode 100644 index 0000000..bdbec5f --- /dev/null +++ b/patches.suse/s390-netiucv-Fix-return-type-of-netiucv_tx.patch @@ -0,0 +1,59 @@ +From: Nathan Chancellor +Date: Thu, 3 Nov 2022 10:01:29 -0700 +Subject: s390/netiucv: Fix return type of netiucv_tx() +Git-commit: 88d86d18d7cf7e9137c95f9d212bb9fff8a1b4be +Patch-mainline: v6.2-rc1 +References: git-fixes bsc#1211692 + +With clang's kernel control flow integrity (kCFI, CONFIG_CFI_CLANG), +indirect call targets are validated against the expected function +pointer prototype to make sure the call target is valid to help mitigate +ROP attacks. If they are not identical, there is a failure at run time, +which manifests as either a kernel panic or thread getting killed. A +proposed warning in clang aims to catch these at compile time, which +reveals: + + drivers/s390/net/netiucv.c:1854:21: error: incompatible function pointer types initializing 'netdev_tx_t (*)(struct sk_buff *, struct net_device *)' (aka 'enum netdev_tx (*)(struct sk_buff *, struct net_device *)') with an expression of type 'int (struct sk_buff *, struct net_device *)' [-Werror,-Wincompatible-function-pointer-types-strict] + .ndo_start_xmit = netiucv_tx, + ^~~~~~~~~~ + +->ndo_start_xmit() in 'struct net_device_ops' expects a return type of +'netdev_tx_t', not 'int'. Adjust the return type of netiucv_tx() to +match the prototype's to resolve the warning and potential CFI failure, +should s390 select ARCH_SUPPORTS_CFI_CLANG in the future. + +Additionally, while in the area, remove a comment block that is no +longer relevant. + +Link: https://github.com/ClangBuiltLinux/linux/issues/1750 +Reviewed-by: Alexandra Winter +Reviewed-by: Kees Cook +Signed-off-by: Nathan Chancellor +Signed-off-by: David S. Miller +Acked-by: Miroslav Franc +--- + drivers/s390/net/netiucv.c | 9 +-------- + 1 file changed, 1 insertion(+), 8 deletions(-) + +diff --git a/drivers/s390/net/netiucv.c b/drivers/s390/net/netiucv.c +index 65aa0a96c21d..66076cada8ae 100644 +--- a/drivers/s390/net/netiucv.c ++++ b/drivers/s390/net/netiucv.c +@@ -1248,15 +1248,8 @@ static int netiucv_close(struct net_device *dev) + /** + * Start transmission of a packet. + * Called from generic network device layer. +- * +- * @param skb Pointer to buffer containing the packet. +- * @param dev Pointer to interface struct. +- * +- * @return 0 if packet consumed, !0 if packet rejected. +- * Note: If we return !0, then the packet is free'd by +- * the generic network layer. + */ +-static int netiucv_tx(struct sk_buff *skb, struct net_device *dev) ++static netdev_tx_t netiucv_tx(struct sk_buff *skb, struct net_device *dev) + { + struct netiucv_priv *privptr = netdev_priv(dev); + int rc; + diff --git a/patches.suse/s390-qdio-fix-do_sqbs-inline-assembly-constraint.patch b/patches.suse/s390-qdio-fix-do_sqbs-inline-assembly-constraint.patch new file mode 100644 index 0000000..5ad8cbf --- /dev/null +++ b/patches.suse/s390-qdio-fix-do_sqbs-inline-assembly-constraint.patch @@ -0,0 +1,62 @@ +From: Heiko Carstens +Date: Thu, 11 May 2023 17:04:41 +0200 +Subject: s390/qdio: fix do_sqbs() inline assembly constraint +Git-commit: 2862a2fdfae875888e3c1c3634e3422e01d98147 +Patch-mainline: v6.4-rc3 +References: git-fixes bsc#1211693 + +Use "a" constraint instead of "d" constraint to pass the state parameter to +the do_sqbs() inline assembly. This prevents that general purpose register +zero is used for the state parameter. + +If the compiler would select general purpose register zero this would be +problematic for the used instruction in rsy format: the register used for +the state parameter is a base register. If the base register is general +purpose register zero the contents of the register are unexpectedly ignored +when the instruction is executed. + +This only applies to z/VM guests using QIOASSIST with dedicated (pass through) +QDIO-based devices such as FCP [zfcp driver] as well as real OSA or +HiperSockets [qeth driver]. + +A possible symptom for this case using zfcp is the following repeating kernel +message pattern: + +zfcp : A QDIO problem occurred +zfcp : A QDIO problem occurred +zfcp : qdio: ZFCP on SC using AI:1 QEBSM:1 PRI:1 TDD:1 SIGA: W +zfcp : A QDIO problem occurred +zfcp : A QDIO problem occurred + +Each of the qdio problem message can be accompanied by the following entries +for the affected subchannel in +/sys/kernel/debug/s390dbf/qdio_error/hex_ascii for zfcp or qeth: + + ccq: 69.... + SQBS ERROR. + +Reviewed-by: Benjamin Block +Cc: Steffen Maier +Fixes: 8129ee164267 ("[PATCH] s390: qdio V=V pass-through") +Cc: +Signed-off-by: Heiko Carstens +Signed-off-by: Alexander Gordeev +Acked-by: Miroslav Franc +--- + drivers/s390/cio/qdio.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/s390/cio/qdio.h b/drivers/s390/cio/qdio.h +index 5ea6249d8180..641f0dbb65a9 100644 +--- a/drivers/s390/cio/qdio.h ++++ b/drivers/s390/cio/qdio.h +@@ -95,7 +95,7 @@ static inline int do_sqbs(u64 token, unsigned char state, int queue, + " lgr 1,%[token]\n" + " .insn rsy,0xeb000000008a,%[qs],%[ccq],0(%[state])" + : [ccq] "+&d" (_ccq), [qs] "+&d" (_queuestart) +- : [state] "d" ((unsigned long)state), [token] "d" (token) ++ : [state] "a" ((unsigned long)state), [token] "d" (token) + : "memory", "cc", "1"); + *count = _ccq & 0xff; + *start = _queuestart & 0xff; + diff --git a/series.conf b/series.conf index 1c97539..64d4955 100644 --- a/series.conf +++ b/series.conf @@ -17960,6 +17960,9 @@ patches.suse/octeontx2-af-Allow-mkex-profile-without-DMAC-and-add.patch patches.suse/net-mana-Assign-interrupts-to-CPUs-based-on-NUMA-nod.patch patches.suse/hamradio-baycom_epp-Fix-return-type-of-baycom_send_p.patch + patches.suse/s390-ctcm-Fix-return-type-of-ctc-mp-m_tx.patch + patches.suse/s390-netiucv-Fix-return-type-of-netiucv_tx.patch + patches.suse/s390-lcs-Fix-return-type-of-lcs_start_xmit.patch patches.suse/gve-Fix-error-return-code-in-gve_prefill_rx_pages.patch patches.suse/net-mana-Add-support-for-auxiliary-device.patch patches.suse/net-mana-Record-the-physical-address-for-doorbell-pa.patch @@ -18895,6 +18898,7 @@ patches.suse/thermal-intel-intel_pch-Add-support-for-Wellsburg-PC.patch patches.suse/thermal-intel-powerclamp-Fix-cur_state-for-multi-pac.patch patches.suse/thermal-drivers-hisi-Drop-second-sensor-hi3660.patch + patches.suse/s390-mem_detect-fix-detect_memory-error-handling.patch patches.suse/arm64-cpufeature-Fix-field-sign-for-DIT-hwcap-detection.patch patches.suse/arm64-Avoid-repeated-AA64MMFR1_EL1-register-read-on-.patch patches.suse/ACPI-Don-t-build-ACPICA-with-Os.patch @@ -19360,6 +19364,8 @@ patches.suse/rtc-pm8xxx-fix-set-alarm-race.patch patches.suse/rtc-allow-rtc_read_alarm-without-read_alarm-callback.patch patches.suse/s390-extmem-return-correct-segment-type-in-__segment_load.patch + patches.suse/s390-kprobes-fix-irq-mask-clobbering-on-kprobe-reenter-from-post_handler.patch + patches.suse/s390-kprobes-fix-current_kprobe-never-cleared-after-kprobes-reenter.patch patches.suse/nvme-auth-fix-an-error-code-in-nvme_auth_process_dhc.patch patches.suse/nvme-fabrics-show-well-known-discovery-name.patch patches.suse/ACPI-x86-utils-Add-Cezanne-to-the-list-for-forcing-S.patch @@ -19860,6 +19866,7 @@ patches.suse/crypto-caam-Clear-some-memory-in-instantiate_rng.patch patches.suse/crypto-sa2ul-Select-CRYPTO_DES.patch patches.suse/crypto-drbg-Only-fail-when-jent-is-unavailable-in-FI.patch + patches.suse/s390-dasd-fix-hanging-blockdevice-after-request-requeue.patch patches.suse/nvmet-fix-Identify-Namespace-handling.patch patches.suse/nvmet-fix-Identify-Controller-handling.patch patches.suse/nvmet-fix-Identify-Active-Namespace-ID-list-handling.patch @@ -20099,6 +20106,7 @@ patches.suse/ALSA-hda-Fix-Oops-by-9.1-surround-channel-names.patch patches.suse/ALSA-cs46xx-mark-snd_cs46xx_download_image-as-static.patch patches.suse/ALSA-hda-Add-NVIDIA-codec-IDs-a3-through-a7-to-patch.patch + patches.suse/s390-qdio-fix-do_sqbs-inline-assembly-constraint.patch patches.suse/Documentation-filesystems-sharedsubtree-add-section-.patch patches.suse/Documentation-filesystems-ramfs-rootfs-initramfs-use.patch patches.suse/drm-exynos-fix-g2d_open-close-helper-function-defini.patch