]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.16-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 22 Aug 2025 15:48:39 +0000 (17:48 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 22 Aug 2025 15:48:39 +0000 (17:48 +0200)
added patches:
compiler-remove-__addressable_asm-_str-again.patch
platform-x86-intel-uncore-freq-check-write-blocked-for-elc.patch
rdma-rxe-flush-delayed-skbs-while-releasing-rxe-resources.patch
s390-sclp-fix-sccb-present-check.patch

queue-6.16/compiler-remove-__addressable_asm-_str-again.patch [new file with mode: 0644]
queue-6.16/platform-x86-intel-uncore-freq-check-write-blocked-for-elc.patch [new file with mode: 0644]
queue-6.16/rdma-rxe-flush-delayed-skbs-while-releasing-rxe-resources.patch [new file with mode: 0644]
queue-6.16/s390-sclp-fix-sccb-present-check.patch [new file with mode: 0644]
queue-6.16/series

diff --git a/queue-6.16/compiler-remove-__addressable_asm-_str-again.patch b/queue-6.16/compiler-remove-__addressable_asm-_str-again.patch
new file mode 100644 (file)
index 0000000..961c30e
--- /dev/null
@@ -0,0 +1,68 @@
+From 8ea815399c3fcce1889bd951fec25b5b9a3979c1 Mon Sep 17 00:00:00 2001
+From: Jan Beulich <jbeulich@suse.com>
+Date: Mon, 14 Apr 2025 16:41:07 +0200
+Subject: compiler: remove __ADDRESSABLE_ASM{_STR,}() again
+
+From: Jan Beulich <jbeulich@suse.com>
+
+commit 8ea815399c3fcce1889bd951fec25b5b9a3979c1 upstream.
+
+__ADDRESSABLE_ASM_STR() is where the necessary stringification happens.
+As long as "sym" doesn't contain any odd characters, no quoting is
+required for its use with .quad / .long. In fact the quotation gets in
+the way with gas 2.25; it's only from 2.26 onwards that quoted symbols
+are half-way properly supported.
+
+However, assembly being different from C anyway, drop
+__ADDRESSABLE_ASM_STR() and its helper macro altogether. A simple
+.global directive will suffice to get the symbol "declared", i.e. into
+the symbol table. While there also stop open-coding STATIC_CALL_TRAMP()
+and STATIC_CALL_KEY().
+
+Fixes: 0ef8047b737d ("x86/static-call: provide a way to do very early static-call updates")
+Signed-off-by: Jan Beulich <jbeulich@suse.com>
+Acked-by: Josh Poimboeuf <jpoimboe@kernel.org>
+Cc: stable@vger.kernel.org
+Signed-off-by: Juergen Gross <jgross@suse.com>
+Message-ID: <609d2c74-de13-4fae-ab1a-1ec44afb948d@suse.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/x86/include/asm/xen/hypercall.h |    5 +++--
+ include/linux/compiler.h             |    8 --------
+ 2 files changed, 3 insertions(+), 10 deletions(-)
+
+--- a/arch/x86/include/asm/xen/hypercall.h
++++ b/arch/x86/include/asm/xen/hypercall.h
+@@ -94,12 +94,13 @@ DECLARE_STATIC_CALL(xen_hypercall, xen_h
+ #ifdef MODULE
+ #define __ADDRESSABLE_xen_hypercall
+ #else
+-#define __ADDRESSABLE_xen_hypercall __ADDRESSABLE_ASM_STR(__SCK__xen_hypercall)
++#define __ADDRESSABLE_xen_hypercall \
++      __stringify(.global STATIC_CALL_KEY(xen_hypercall);)
+ #endif
+ #define __HYPERCALL                                   \
+       __ADDRESSABLE_xen_hypercall                     \
+-      "call __SCT__xen_hypercall"
++      __stringify(call STATIC_CALL_TRAMP(xen_hypercall))
+ #define __HYPERCALL_ENTRY(x)  "a" (x)
+--- a/include/linux/compiler.h
++++ b/include/linux/compiler.h
+@@ -288,14 +288,6 @@ static inline void *offset_to_ptr(const
+ #define __ADDRESSABLE(sym) \
+       ___ADDRESSABLE(sym, __section(".discard.addressable"))
+-#define __ADDRESSABLE_ASM(sym)                                                \
+-      .pushsection .discard.addressable,"aw";                         \
+-      .align ARCH_SEL(8,4);                                           \
+-      ARCH_SEL(.quad, .long) __stringify(sym);                        \
+-      .popsection;
+-
+-#define __ADDRESSABLE_ASM_STR(sym) __stringify(__ADDRESSABLE_ASM(sym))
+-
+ /*
+  * This returns a constant expression while determining if an argument is
+  * a constant expression, most importantly without evaluating the argument.
diff --git a/queue-6.16/platform-x86-intel-uncore-freq-check-write-blocked-for-elc.patch b/queue-6.16/platform-x86-intel-uncore-freq-check-write-blocked-for-elc.patch
new file mode 100644 (file)
index 0000000..1581a29
--- /dev/null
@@ -0,0 +1,44 @@
+From dff6f36878799a5ffabd15336ce993dc737374dc Mon Sep 17 00:00:00 2001
+From: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
+Date: Sun, 27 Jul 2025 14:05:13 -0700
+Subject: platform/x86/intel-uncore-freq: Check write blocked for ELC
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
+
+commit dff6f36878799a5ffabd15336ce993dc737374dc upstream.
+
+Add the missing write_blocked check for updating sysfs related to uncore
+efficiency latency control (ELC). If write operation is blocked return
+error.
+
+Fixes: bb516dc79c4a ("platform/x86/intel-uncore-freq: Add support for efficiency latency control")
+Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
+Cc: stable@vger.kernel.org
+Link: https://lore.kernel.org/r/20250727210513.2898630-1-srinivas.pandruvada@linux.intel.com
+Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
+Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/platform/x86/intel/uncore-frequency/uncore-frequency-tpmi.c |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/drivers/platform/x86/intel/uncore-frequency/uncore-frequency-tpmi.c
++++ b/drivers/platform/x86/intel/uncore-frequency/uncore-frequency-tpmi.c
+@@ -191,9 +191,14 @@ static int uncore_read_control_freq(stru
+ static int write_eff_lat_ctrl(struct uncore_data *data, unsigned int val, enum uncore_index index)
+ {
+       struct tpmi_uncore_cluster_info *cluster_info;
++      struct tpmi_uncore_struct *uncore_root;
+       u64 control;
+       cluster_info = container_of(data, struct tpmi_uncore_cluster_info, uncore_data);
++      uncore_root = cluster_info->uncore_root;
++
++      if (uncore_root->write_blocked)
++              return -EPERM;
+       if (cluster_info->root_domain)
+               return -ENODATA;
diff --git a/queue-6.16/rdma-rxe-flush-delayed-skbs-while-releasing-rxe-resources.patch b/queue-6.16/rdma-rxe-flush-delayed-skbs-while-releasing-rxe-resources.patch
new file mode 100644 (file)
index 0000000..17500ce
--- /dev/null
@@ -0,0 +1,110 @@
+From 3c3e9a9f2972b364e8c2cfbfdeb23c6d6be4f87f Mon Sep 17 00:00:00 2001
+From: Zhu Yanjun <yanjun.zhu@linux.dev>
+Date: Fri, 25 Jul 2025 18:31:04 -0700
+Subject: RDMA/rxe: Flush delayed SKBs while releasing RXE resources
+
+From: Zhu Yanjun <yanjun.zhu@linux.dev>
+
+commit 3c3e9a9f2972b364e8c2cfbfdeb23c6d6be4f87f upstream.
+
+When skb packets are sent out, these skb packets still depends on
+the rxe resources, for example, QP, sk, when these packets are
+destroyed.
+
+If these rxe resources are released when the skb packets are destroyed,
+the call traces will appear.
+
+To avoid skb packets hang too long time in some network devices,
+a timestamp is added when these skb packets are created. If these
+skb packets hang too long time in network devices, these network
+devices can free these skb packets to release rxe resources.
+
+Reported-by: syzbot+8425ccfb599521edb153@syzkaller.appspotmail.com
+Closes: https://syzkaller.appspot.com/bug?extid=8425ccfb599521edb153
+Tested-by: syzbot+8425ccfb599521edb153@syzkaller.appspotmail.com
+Fixes: 1a633bdc8fd9 ("RDMA/rxe: Let destroy qp succeed with stuck packet")
+Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
+Link: https://patch.msgid.link/20250726013104.463570-1-yanjun.zhu@linux.dev
+Signed-off-by: Leon Romanovsky <leon@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/infiniband/sw/rxe/rxe_net.c |   29 ++++++++---------------------
+ drivers/infiniband/sw/rxe/rxe_qp.c  |    2 +-
+ 2 files changed, 9 insertions(+), 22 deletions(-)
+
+--- a/drivers/infiniband/sw/rxe/rxe_net.c
++++ b/drivers/infiniband/sw/rxe/rxe_net.c
+@@ -345,33 +345,15 @@ int rxe_prepare(struct rxe_av *av, struc
+ static void rxe_skb_tx_dtor(struct sk_buff *skb)
+ {
+-      struct net_device *ndev = skb->dev;
+-      struct rxe_dev *rxe;
+-      unsigned int qp_index;
+-      struct rxe_qp *qp;
++      struct rxe_qp *qp = skb->sk->sk_user_data;
+       int skb_out;
+-      rxe = rxe_get_dev_from_net(ndev);
+-      if (!rxe && is_vlan_dev(ndev))
+-              rxe = rxe_get_dev_from_net(vlan_dev_real_dev(ndev));
+-      if (WARN_ON(!rxe))
+-              return;
+-
+-      qp_index = (int)(uintptr_t)skb->sk->sk_user_data;
+-      if (!qp_index)
+-              return;
+-
+-      qp = rxe_pool_get_index(&rxe->qp_pool, qp_index);
+-      if (!qp)
+-              goto put_dev;
+-
+       skb_out = atomic_dec_return(&qp->skb_out);
+-      if (qp->need_req_skb && skb_out < RXE_INFLIGHT_SKBS_PER_QP_LOW)
++      if (unlikely(qp->need_req_skb &&
++              skb_out < RXE_INFLIGHT_SKBS_PER_QP_LOW))
+               rxe_sched_task(&qp->send_task);
+       rxe_put(qp);
+-put_dev:
+-      ib_device_put(&rxe->ib_dev);
+       sock_put(skb->sk);
+ }
+@@ -383,6 +365,7 @@ static int rxe_send(struct sk_buff *skb,
+       sock_hold(sk);
+       skb->sk = sk;
+       skb->destructor = rxe_skb_tx_dtor;
++      rxe_get(pkt->qp);
+       atomic_inc(&pkt->qp->skb_out);
+       if (skb->protocol == htons(ETH_P_IP))
+@@ -405,6 +388,7 @@ static int rxe_loopback(struct sk_buff *
+       sock_hold(sk);
+       skb->sk = sk;
+       skb->destructor = rxe_skb_tx_dtor;
++      rxe_get(pkt->qp);
+       atomic_inc(&pkt->qp->skb_out);
+       if (skb->protocol == htons(ETH_P_IP))
+@@ -497,6 +481,9 @@ struct sk_buff *rxe_init_packet(struct r
+               goto out;
+       }
++      /* Add time stamp to skb. */
++      skb->tstamp = ktime_get();
++
+       skb_reserve(skb, hdr_len + LL_RESERVED_SPACE(ndev));
+       /* FIXME: hold reference to this netdev until life of this skb. */
+--- a/drivers/infiniband/sw/rxe/rxe_qp.c
++++ b/drivers/infiniband/sw/rxe/rxe_qp.c
+@@ -244,7 +244,7 @@ static int rxe_qp_init_req(struct rxe_de
+       err = sock_create_kern(&init_net, AF_INET, SOCK_DGRAM, 0, &qp->sk);
+       if (err < 0)
+               return err;
+-      qp->sk->sk->sk_user_data = (void *)(uintptr_t)qp->elem.index;
++      qp->sk->sk->sk_user_data = qp;
+       /* pick a source UDP port number for this QP based on
+        * the source QPN. this spreads traffic for different QPs
diff --git a/queue-6.16/s390-sclp-fix-sccb-present-check.patch b/queue-6.16/s390-sclp-fix-sccb-present-check.patch
new file mode 100644 (file)
index 0000000..697b05c
--- /dev/null
@@ -0,0 +1,65 @@
+From 430fa71027b6ac9bb0ce5532b8d0676777d4219a Mon Sep 17 00:00:00 2001
+From: Peter Oberparleiter <oberpar@linux.ibm.com>
+Date: Mon, 18 Aug 2025 12:21:52 +0200
+Subject: s390/sclp: Fix SCCB present check
+
+From: Peter Oberparleiter <oberpar@linux.ibm.com>
+
+commit 430fa71027b6ac9bb0ce5532b8d0676777d4219a upstream.
+
+Tracing code called by the SCLP interrupt handler contains early exits
+if the SCCB address associated with an interrupt is NULL. This check is
+performed after physical to virtual address translation.
+
+If the kernel identity mapping does not start at address zero, the
+resulting virtual address is never zero, so that the NULL checks won't
+work. Subsequently this may result in incorrect accesses to the first
+page of the identity mapping.
+
+Fix this by introducing a function that handles the NULL case before
+address translation.
+
+Fixes: ada1da31ce34 ("s390/sclp: sort out physical vs virtual pointers usage")
+Cc: stable@vger.kernel.org
+Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com>
+Signed-off-by: Peter Oberparleiter <oberpar@linux.ibm.com>
+Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/s390/char/sclp.c |   11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+--- a/drivers/s390/char/sclp.c
++++ b/drivers/s390/char/sclp.c
+@@ -76,6 +76,13 @@ unsigned long sclp_console_full;
+ /* The currently active SCLP command word. */
+ static sclp_cmdw_t active_cmd;
++static inline struct sccb_header *sclpint_to_sccb(u32 sccb_int)
++{
++      if (sccb_int)
++              return __va(sccb_int);
++      return NULL;
++}
++
+ static inline void sclp_trace(int prio, char *id, u32 a, u64 b, bool err)
+ {
+       struct sclp_trace_entry e;
+@@ -619,7 +626,7 @@ __sclp_find_req(u32 sccb)
+ static bool ok_response(u32 sccb_int, sclp_cmdw_t cmd)
+ {
+-      struct sccb_header *sccb = (struct sccb_header *)__va(sccb_int);
++      struct sccb_header *sccb = sclpint_to_sccb(sccb_int);
+       struct evbuf_header *evbuf;
+       u16 response;
+@@ -658,7 +665,7 @@ static void sclp_interrupt_handler(struc
+       /* INT: Interrupt received (a=intparm, b=cmd) */
+       sclp_trace_sccb(0, "INT", param32, active_cmd, active_cmd,
+-                      (struct sccb_header *)__va(finished_sccb),
++                      sclpint_to_sccb(finished_sccb),
+                       !ok_response(finished_sccb, active_cmd));
+       if (finished_sccb) {
index c42a110f01e7ef6b735b8f9d2d8db8aaecea0d42..4ca7d62c83ada8aded50ac68869a6b712227e801 100644 (file)
@@ -249,3 +249,7 @@ mm-memory-failure-fix-infinite-uce-for-vm_pfnmap-pfn.patch
 mm-mremap-fix-warn-with-uffd-that-has-remap-events-disabled.patch
 alsa-hda-tas2781-fix-wrong-reference-of-tasdevice_priv.patch
 alsa-hda-realtek-add-support-for-hp-elitebook-x360-830-g6-and-elitebook-830-g6.patch
+rdma-rxe-flush-delayed-skbs-while-releasing-rxe-resources.patch
+s390-sclp-fix-sccb-present-check.patch
+platform-x86-intel-uncore-freq-check-write-blocked-for-elc.patch
+compiler-remove-__addressable_asm-_str-again.patch