When the PSLVERR_RESP_EN parameter is set to 1, the device generates
an error response if an attempt is made to read an empty RBR (Receive
Buffer Register) while the FIFO is enabled.
In serial8250_do_startup(), calling serial_port_out(port, UART_LCR,
UART_LCR_WLEN8) triggers dw8250_check_lcr(), which invokes
dw8250_force_idle() and serial8250_clear_and_reinit_fifos(). The latter
function enables the FIFO via serial_out(p, UART_FCR, p->fcr).
Execution proceeds to the serial_port_in(port, UART_RX).
This satisfies the PSLVERR trigger condition.
When another CPU (e.g., using printk()) is accessing the UART (UART
is busy), the current CPU fails the check (value & ~UART_LCR_SPAR) ==
(lcr & ~UART_LCR_SPAR) in dw8250_check_lcr(), causing it to enter
dw8250_force_idle().
Put serial_port_out(port, UART_LCR, UART_LCR_WLEN8) under the port->lock
to fix this issue.
Panic backtrace:
[ 0.442336] Oops - unknown exception [#1]
[ 0.442343] epc : dw8250_serial_in32+0x1e/0x4a
[ 0.442351] ra : serial8250_do_startup+0x2c8/0x88e
...
[ 0.442416] console_on_rootfs+0x26/0x70
Fixes: c49436b657d0 ("serial: 8250_dw: Improve unwritable LCR workaround")
Link: https://lore.kernel.org/all/84cydt5peu.fsf@jogness.linutronix.de/T/
Signed-off-by: Yunhui Cui <cuiyunhui(a)bytedance.com>
Reviewed-by: John Ogness <john.ogness(a)linutronix.de>
Cc: stable(a)vger.kernel.org
---
drivers/tty/serial/8250/8250_port.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
index 7eddcab318b4b..2da9db960d09f 100644
--- a/drivers/tty/serial/8250/8250_port.c
+++ b/drivers/tty/serial/8250/8250_port.c
@@ -2269,9 +2269,9 @@ static void serial8250_initialize(struct uart_port *port)
{
unsigned long flags;
+ uart_port_lock_irqsave(port, &flags);
serial_port_out(port, UART_LCR, UART_LCR_WLEN8);
- uart_port_lock_irqsave(port, &flags);
serial8250_init_mctrl(port);
serial8250_iir_txen_test(port);
uart_port_unlock_irqrestore(port, flags);
--
2.39.5
The patch below does not apply to the 6.1-stable tree.
If someone wants it applied there, or to any other stable or longterm
tree, then please email the backport, including the original git commit
id to <stable(a)vger.kernel.org>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y
git checkout FETCH_HEAD
git cherry-pick -x d66e1e90b16055d2f0ee76e5384e3f119c3c2773
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<stable(a)vger.kernel.org>' --in-reply-to '2025071200-bath-copartner-6a91@gregkh' --subject-prefix 'PATCH 6.1.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From d66e1e90b16055d2f0ee76e5384e3f119c3c2773 Mon Sep 17 00:00:00 2001
From: Yazen Ghannam <yazen.ghannam(a)amd.com>
Date: Tue, 24 Jun 2025 14:15:58 +0000
Subject: [PATCH] x86/mce/amd: Add default names for MCA banks and blocks
Ensure that sysfs init doesn't fail for new/unrecognized bank types or if
a bank has additional blocks available.
Most MCA banks have a single thresholding block, so the block takes the same
name as the bank.
Unified Memory Controllers (UMCs) are a special case where there are two
blocks and each has a unique name.
However, the microarchitecture allows for five blocks. Any new MCA bank types
with more than one block will be missing names for the extra blocks. The MCE
sysfs will fail to initialize in this case.
Fixes: 87a6d4091bd7 ("x86/mce/AMD: Update sysfs bank names for SMCA systems")
Signed-off-by: Yazen Ghannam <yazen.ghannam(a)amd.com>
Signed-off-by: Borislav Petkov (AMD) <bp(a)alien8.de>
Cc: stable(a)vger.kernel.org
Link: https://lore.kernel.org/20250624-wip-mca-updates-v4-3-236dd74f645f@amd.com
diff --git a/arch/x86/kernel/cpu/mce/amd.c b/arch/x86/kernel/cpu/mce/amd.c
index 9d852c3b2cb5..6820ebce5d46 100644
--- a/arch/x86/kernel/cpu/mce/amd.c
+++ b/arch/x86/kernel/cpu/mce/amd.c
@@ -1113,13 +1113,20 @@ static const char *get_name(unsigned int cpu, unsigned int bank, struct threshol
}
bank_type = smca_get_bank_type(cpu, bank);
- if (bank_type >= N_SMCA_BANK_TYPES)
- return NULL;
if (b && (bank_type == SMCA_UMC || bank_type == SMCA_UMC_V2)) {
if (b->block < ARRAY_SIZE(smca_umc_block_names))
return smca_umc_block_names[b->block];
- return NULL;
+ }
+
+ if (b && b->block) {
+ snprintf(buf_mcatype, MAX_MCATYPE_NAME_LEN, "th_block_%u", b->block);
+ return buf_mcatype;
+ }
+
+ if (bank_type >= N_SMCA_BANK_TYPES) {
+ snprintf(buf_mcatype, MAX_MCATYPE_NAME_LEN, "th_bank_%u", bank);
+ return buf_mcatype;
}
if (per_cpu(smca_bank_counts, cpu)[bank_type] == 1)
From: Arnd Bergmann <arnd(a)arndb.de>
[ Upstream commit 24171a5a4a952c26568ff0d2a0bc8c4708a95e1d ]
With large values of CONFIG_NR_CPUS, three Intel ethernet drivers fail to
compile like:
In function ‘i40e_free_q_vector’,
inlined from ‘i40e_vsi_alloc_q_vectors’ at drivers/net/ethernet/intel/i40e/i40e_main.c:12112:3:
571 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
include/linux/rcupdate.h:1084:17: note: in expansion of macro ‘BUILD_BUG_ON’
1084 | BUILD_BUG_ON(offsetof(typeof(*(ptr)), rhf) >= 4096); \
drivers/net/ethernet/intel/i40e/i40e_main.c:5113:9: note: in expansion of macro ‘kfree_rcu’
5113 | kfree_rcu(q_vector, rcu);
| ^~~~~~~~~
The problem is that the 'rcu' member in 'q_vector' is too far from the start
of the structure. Move this member before the CPU mask instead, in all three
drivers.
Signed-off-by: Arnd Bergmann <arnd(a)arndb.de>
Acked-by: David S. Miller <davem(a)davemloft.net>
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov(a)intel.com>
Reviewed-by: Alexander Lobakin <aleksander.lobakin(a)intel.com>
Tested-by: Sunitha Mekala <sunithax.d.mekala(a)intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen(a)intel.com>
Signed-off-by: Sasha Levin <sashal(a)kernel.org>
---
LLM Generated explanations, may be completely bogus:
**YES**
This commit should be backported to stable kernel trees for the
following reasons:
1. **Compilation Failure Fix**: This fixes a build-time compilation
failure that occurs with large values of CONFIG_NR_CPUS. The error
prevents the kernel from building successfully, which is a
significant issue for systems configured with high CPU counts.
2. **Root Cause**: The issue stems from the `kfree_rcu()` macro in
`include/linux/rcupdate.h:1084` which includes a
`BUILD_BUG_ON(offsetof(typeof(*(ptr)), rhf) >= 4096)` check. This
compile-time assertion ensures that the RCU head field is within the
first 4096 bytes of the structure.
3. **Simple and Safe Fix**: The fix is straightforward - it moves the
`struct rcu_head rcu` member earlier in the structure, placing it
before the `cpumask_t affinity_mask` member. This is a safe change
because:
- It only reorders structure members
- The RCU head doesn't need to be at any specific location
functionally
- Moving it earlier reduces the offset from the structure start
- No functional code changes are required
4. **Affects Multiple Drivers**: The issue affects three Intel ethernet
drivers (i40e, ixgbe, fm10k), all of which are fixed identically by
moving the rcu member earlier in their respective q_vector
structures.
5. **Configuration-Dependent Bug**: This bug only manifests with large
CONFIG_NR_CPUS values (likely >= 512 or higher), where the
`cpumask_t` type becomes large enough to push the rcu member beyond
the 4096-byte offset limit. Systems with high core counts are
becoming more common in production environments.
6. **No Risk of Regression**: The change is minimal and doesn't alter
any functionality. It's purely a structural reordering that maintains
all existing behavior while fixing the compilation issue.
7. **Meets Stable Criteria**: This fix clearly meets the stable kernel
criteria as it:
- Fixes a real bug (compilation failure)
- Is minimal and contained
- Has no risk of introducing new issues
- Affects users with legitimate configurations
The commit is an excellent candidate for stable backporting as it fixes
a real compilation issue that prevents kernel builds on systems with
large CPU counts, and the fix is trivial with no risk of regression.
drivers/net/ethernet/intel/fm10k/fm10k.h | 3 ++-
drivers/net/ethernet/intel/i40e/i40e.h | 2 +-
drivers/net/ethernet/intel/ixgbe/ixgbe.h | 3 ++-
3 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/intel/fm10k/fm10k.h b/drivers/net/ethernet/intel/fm10k/fm10k.h
index b14441944b4b2..db72e5e4acd36 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k.h
+++ b/drivers/net/ethernet/intel/fm10k/fm10k.h
@@ -189,13 +189,14 @@ struct fm10k_q_vector {
struct fm10k_ring_container rx, tx;
struct napi_struct napi;
+ struct rcu_head rcu; /* to avoid race with update stats on free */
+
cpumask_t affinity_mask;
char name[IFNAMSIZ + 9];
#ifdef CONFIG_DEBUG_FS
struct dentry *dbg_q_vector;
#endif /* CONFIG_DEBUG_FS */
- struct rcu_head rcu; /* to avoid race with update stats on free */
/* for dynamic allocation of rings associated with this q_vector */
struct fm10k_ring ring[0] ____cacheline_internodealigned_in_smp;
diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h
index 4c8c31692e9e0..edb5e408c980f 100644
--- a/drivers/net/ethernet/intel/i40e/i40e.h
+++ b/drivers/net/ethernet/intel/i40e/i40e.h
@@ -864,6 +864,7 @@ struct i40e_q_vector {
u16 reg_idx; /* register index of the interrupt */
struct napi_struct napi;
+ struct rcu_head rcu; /* to avoid race with update stats on free */
struct i40e_ring_container rx;
struct i40e_ring_container tx;
@@ -874,7 +875,6 @@ struct i40e_q_vector {
cpumask_t affinity_mask;
struct irq_affinity_notify affinity_notify;
- struct rcu_head rcu; /* to avoid race with update stats on free */
char name[I40E_INT_NAME_STR_LEN];
bool arm_wb_state;
} ____cacheline_internodealigned_in_smp;
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
index 0142ca226bf50..0f9a1fce0dee9 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
@@ -458,9 +458,10 @@ struct ixgbe_q_vector {
struct ixgbe_ring_container rx, tx;
struct napi_struct napi;
+ struct rcu_head rcu; /* to avoid race with update stats on free */
+
cpumask_t affinity_mask;
int numa_node;
- struct rcu_head rcu; /* to avoid race with update stats on free */
char name[IFNAMSIZ + 9];
/* for dynamic allocation of rings associated with this q_vector */
--
2.39.5
From: Arnd Bergmann <arnd(a)arndb.de>
[ Upstream commit 24171a5a4a952c26568ff0d2a0bc8c4708a95e1d ]
With large values of CONFIG_NR_CPUS, three Intel ethernet drivers fail to
compile like:
In function ‘i40e_free_q_vector’,
inlined from ‘i40e_vsi_alloc_q_vectors’ at drivers/net/ethernet/intel/i40e/i40e_main.c:12112:3:
571 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
include/linux/rcupdate.h:1084:17: note: in expansion of macro ‘BUILD_BUG_ON’
1084 | BUILD_BUG_ON(offsetof(typeof(*(ptr)), rhf) >= 4096); \
drivers/net/ethernet/intel/i40e/i40e_main.c:5113:9: note: in expansion of macro ‘kfree_rcu’
5113 | kfree_rcu(q_vector, rcu);
| ^~~~~~~~~
The problem is that the 'rcu' member in 'q_vector' is too far from the start
of the structure. Move this member before the CPU mask instead, in all three
drivers.
Signed-off-by: Arnd Bergmann <arnd(a)arndb.de>
Acked-by: David S. Miller <davem(a)davemloft.net>
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov(a)intel.com>
Reviewed-by: Alexander Lobakin <aleksander.lobakin(a)intel.com>
Tested-by: Sunitha Mekala <sunithax.d.mekala(a)intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen(a)intel.com>
Signed-off-by: Sasha Levin <sashal(a)kernel.org>
---
LLM Generated explanations, may be completely bogus:
**YES**
This commit should be backported to stable kernel trees for the
following reasons:
1. **Compilation Failure Fix**: This fixes a build-time compilation
failure that occurs with large values of CONFIG_NR_CPUS. The error
prevents the kernel from building successfully, which is a
significant issue for systems configured with high CPU counts.
2. **Root Cause**: The issue stems from the `kfree_rcu()` macro in
`include/linux/rcupdate.h:1084` which includes a
`BUILD_BUG_ON(offsetof(typeof(*(ptr)), rhf) >= 4096)` check. This
compile-time assertion ensures that the RCU head field is within the
first 4096 bytes of the structure.
3. **Simple and Safe Fix**: The fix is straightforward - it moves the
`struct rcu_head rcu` member earlier in the structure, placing it
before the `cpumask_t affinity_mask` member. This is a safe change
because:
- It only reorders structure members
- The RCU head doesn't need to be at any specific location
functionally
- Moving it earlier reduces the offset from the structure start
- No functional code changes are required
4. **Affects Multiple Drivers**: The issue affects three Intel ethernet
drivers (i40e, ixgbe, fm10k), all of which are fixed identically by
moving the rcu member earlier in their respective q_vector
structures.
5. **Configuration-Dependent Bug**: This bug only manifests with large
CONFIG_NR_CPUS values (likely >= 512 or higher), where the
`cpumask_t` type becomes large enough to push the rcu member beyond
the 4096-byte offset limit. Systems with high core counts are
becoming more common in production environments.
6. **No Risk of Regression**: The change is minimal and doesn't alter
any functionality. It's purely a structural reordering that maintains
all existing behavior while fixing the compilation issue.
7. **Meets Stable Criteria**: This fix clearly meets the stable kernel
criteria as it:
- Fixes a real bug (compilation failure)
- Is minimal and contained
- Has no risk of introducing new issues
- Affects users with legitimate configurations
The commit is an excellent candidate for stable backporting as it fixes
a real compilation issue that prevents kernel builds on systems with
large CPU counts, and the fix is trivial with no risk of regression.
drivers/net/ethernet/intel/fm10k/fm10k.h | 3 ++-
drivers/net/ethernet/intel/i40e/i40e.h | 2 +-
drivers/net/ethernet/intel/ixgbe/ixgbe.h | 3 ++-
3 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/intel/fm10k/fm10k.h b/drivers/net/ethernet/intel/fm10k/fm10k.h
index 6119a41088381..65a2816142d96 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k.h
+++ b/drivers/net/ethernet/intel/fm10k/fm10k.h
@@ -189,13 +189,14 @@ struct fm10k_q_vector {
struct fm10k_ring_container rx, tx;
struct napi_struct napi;
+ struct rcu_head rcu; /* to avoid race with update stats on free */
+
cpumask_t affinity_mask;
char name[IFNAMSIZ + 9];
#ifdef CONFIG_DEBUG_FS
struct dentry *dbg_q_vector;
#endif /* CONFIG_DEBUG_FS */
- struct rcu_head rcu; /* to avoid race with update stats on free */
/* for dynamic allocation of rings associated with this q_vector */
struct fm10k_ring ring[] ____cacheline_internodealigned_in_smp;
diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h
index dd630b6bc74bd..add9a3107d9a0 100644
--- a/drivers/net/ethernet/intel/i40e/i40e.h
+++ b/drivers/net/ethernet/intel/i40e/i40e.h
@@ -863,6 +863,7 @@ struct i40e_q_vector {
u16 reg_idx; /* register index of the interrupt */
struct napi_struct napi;
+ struct rcu_head rcu; /* to avoid race with update stats on free */
struct i40e_ring_container rx;
struct i40e_ring_container tx;
@@ -873,7 +874,6 @@ struct i40e_q_vector {
cpumask_t affinity_mask;
struct irq_affinity_notify affinity_notify;
- struct rcu_head rcu; /* to avoid race with update stats on free */
char name[I40E_INT_NAME_STR_LEN];
bool arm_wb_state;
} ____cacheline_internodealigned_in_smp;
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
index 18251edbfabfb..3ea7095fc04f5 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
@@ -457,9 +457,10 @@ struct ixgbe_q_vector {
struct ixgbe_ring_container rx, tx;
struct napi_struct napi;
+ struct rcu_head rcu; /* to avoid race with update stats on free */
+
cpumask_t affinity_mask;
int numa_node;
- struct rcu_head rcu; /* to avoid race with update stats on free */
char name[IFNAMSIZ + 9];
/* for dynamic allocation of rings associated with this q_vector */
--
2.39.5
From: Arnd Bergmann <arnd(a)arndb.de>
[ Upstream commit 24171a5a4a952c26568ff0d2a0bc8c4708a95e1d ]
With large values of CONFIG_NR_CPUS, three Intel ethernet drivers fail to
compile like:
In function ‘i40e_free_q_vector’,
inlined from ‘i40e_vsi_alloc_q_vectors’ at drivers/net/ethernet/intel/i40e/i40e_main.c:12112:3:
571 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
include/linux/rcupdate.h:1084:17: note: in expansion of macro ‘BUILD_BUG_ON’
1084 | BUILD_BUG_ON(offsetof(typeof(*(ptr)), rhf) >= 4096); \
drivers/net/ethernet/intel/i40e/i40e_main.c:5113:9: note: in expansion of macro ‘kfree_rcu’
5113 | kfree_rcu(q_vector, rcu);
| ^~~~~~~~~
The problem is that the 'rcu' member in 'q_vector' is too far from the start
of the structure. Move this member before the CPU mask instead, in all three
drivers.
Signed-off-by: Arnd Bergmann <arnd(a)arndb.de>
Acked-by: David S. Miller <davem(a)davemloft.net>
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov(a)intel.com>
Reviewed-by: Alexander Lobakin <aleksander.lobakin(a)intel.com>
Tested-by: Sunitha Mekala <sunithax.d.mekala(a)intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen(a)intel.com>
Signed-off-by: Sasha Levin <sashal(a)kernel.org>
---
LLM Generated explanations, may be completely bogus:
**YES**
This commit should be backported to stable kernel trees for the
following reasons:
1. **Compilation Failure Fix**: This fixes a build-time compilation
failure that occurs with large values of CONFIG_NR_CPUS. The error
prevents the kernel from building successfully, which is a
significant issue for systems configured with high CPU counts.
2. **Root Cause**: The issue stems from the `kfree_rcu()` macro in
`include/linux/rcupdate.h:1084` which includes a
`BUILD_BUG_ON(offsetof(typeof(*(ptr)), rhf) >= 4096)` check. This
compile-time assertion ensures that the RCU head field is within the
first 4096 bytes of the structure.
3. **Simple and Safe Fix**: The fix is straightforward - it moves the
`struct rcu_head rcu` member earlier in the structure, placing it
before the `cpumask_t affinity_mask` member. This is a safe change
because:
- It only reorders structure members
- The RCU head doesn't need to be at any specific location
functionally
- Moving it earlier reduces the offset from the structure start
- No functional code changes are required
4. **Affects Multiple Drivers**: The issue affects three Intel ethernet
drivers (i40e, ixgbe, fm10k), all of which are fixed identically by
moving the rcu member earlier in their respective q_vector
structures.
5. **Configuration-Dependent Bug**: This bug only manifests with large
CONFIG_NR_CPUS values (likely >= 512 or higher), where the
`cpumask_t` type becomes large enough to push the rcu member beyond
the 4096-byte offset limit. Systems with high core counts are
becoming more common in production environments.
6. **No Risk of Regression**: The change is minimal and doesn't alter
any functionality. It's purely a structural reordering that maintains
all existing behavior while fixing the compilation issue.
7. **Meets Stable Criteria**: This fix clearly meets the stable kernel
criteria as it:
- Fixes a real bug (compilation failure)
- Is minimal and contained
- Has no risk of introducing new issues
- Affects users with legitimate configurations
The commit is an excellent candidate for stable backporting as it fixes
a real compilation issue that prevents kernel builds on systems with
large CPU counts, and the fix is trivial with no risk of regression.
drivers/net/ethernet/intel/fm10k/fm10k.h | 3 ++-
drivers/net/ethernet/intel/i40e/i40e.h | 2 +-
drivers/net/ethernet/intel/ixgbe/ixgbe.h | 3 ++-
3 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/intel/fm10k/fm10k.h b/drivers/net/ethernet/intel/fm10k/fm10k.h
index 6119a41088381..65a2816142d96 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k.h
+++ b/drivers/net/ethernet/intel/fm10k/fm10k.h
@@ -189,13 +189,14 @@ struct fm10k_q_vector {
struct fm10k_ring_container rx, tx;
struct napi_struct napi;
+ struct rcu_head rcu; /* to avoid race with update stats on free */
+
cpumask_t affinity_mask;
char name[IFNAMSIZ + 9];
#ifdef CONFIG_DEBUG_FS
struct dentry *dbg_q_vector;
#endif /* CONFIG_DEBUG_FS */
- struct rcu_head rcu; /* to avoid race with update stats on free */
/* for dynamic allocation of rings associated with this q_vector */
struct fm10k_ring ring[] ____cacheline_internodealigned_in_smp;
diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h
index a143440f3db62..223d5831a5bbe 100644
--- a/drivers/net/ethernet/intel/i40e/i40e.h
+++ b/drivers/net/ethernet/intel/i40e/i40e.h
@@ -961,6 +961,7 @@ struct i40e_q_vector {
u16 reg_idx; /* register index of the interrupt */
struct napi_struct napi;
+ struct rcu_head rcu; /* to avoid race with update stats on free */
struct i40e_ring_container rx;
struct i40e_ring_container tx;
@@ -971,7 +972,6 @@ struct i40e_q_vector {
cpumask_t affinity_mask;
struct irq_affinity_notify affinity_notify;
- struct rcu_head rcu; /* to avoid race with update stats on free */
char name[I40E_INT_NAME_STR_LEN];
bool arm_wb_state;
bool in_busy_poll;
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
index 737590a0d849e..09f7a3787f272 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
@@ -458,9 +458,10 @@ struct ixgbe_q_vector {
struct ixgbe_ring_container rx, tx;
struct napi_struct napi;
+ struct rcu_head rcu; /* to avoid race with update stats on free */
+
cpumask_t affinity_mask;
int numa_node;
- struct rcu_head rcu; /* to avoid race with update stats on free */
char name[IFNAMSIZ + 9];
/* for dynamic allocation of rings associated with this q_vector */
--
2.39.5
From: Arnd Bergmann <arnd(a)arndb.de>
[ Upstream commit 24171a5a4a952c26568ff0d2a0bc8c4708a95e1d ]
With large values of CONFIG_NR_CPUS, three Intel ethernet drivers fail to
compile like:
In function ‘i40e_free_q_vector’,
inlined from ‘i40e_vsi_alloc_q_vectors’ at drivers/net/ethernet/intel/i40e/i40e_main.c:12112:3:
571 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
include/linux/rcupdate.h:1084:17: note: in expansion of macro ‘BUILD_BUG_ON’
1084 | BUILD_BUG_ON(offsetof(typeof(*(ptr)), rhf) >= 4096); \
drivers/net/ethernet/intel/i40e/i40e_main.c:5113:9: note: in expansion of macro ‘kfree_rcu’
5113 | kfree_rcu(q_vector, rcu);
| ^~~~~~~~~
The problem is that the 'rcu' member in 'q_vector' is too far from the start
of the structure. Move this member before the CPU mask instead, in all three
drivers.
Signed-off-by: Arnd Bergmann <arnd(a)arndb.de>
Acked-by: David S. Miller <davem(a)davemloft.net>
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov(a)intel.com>
Reviewed-by: Alexander Lobakin <aleksander.lobakin(a)intel.com>
Tested-by: Sunitha Mekala <sunithax.d.mekala(a)intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen(a)intel.com>
Signed-off-by: Sasha Levin <sashal(a)kernel.org>
---
LLM Generated explanations, may be completely bogus:
**YES**
This commit should be backported to stable kernel trees for the
following reasons:
1. **Compilation Failure Fix**: This fixes a build-time compilation
failure that occurs with large values of CONFIG_NR_CPUS. The error
prevents the kernel from building successfully, which is a
significant issue for systems configured with high CPU counts.
2. **Root Cause**: The issue stems from the `kfree_rcu()` macro in
`include/linux/rcupdate.h:1084` which includes a
`BUILD_BUG_ON(offsetof(typeof(*(ptr)), rhf) >= 4096)` check. This
compile-time assertion ensures that the RCU head field is within the
first 4096 bytes of the structure.
3. **Simple and Safe Fix**: The fix is straightforward - it moves the
`struct rcu_head rcu` member earlier in the structure, placing it
before the `cpumask_t affinity_mask` member. This is a safe change
because:
- It only reorders structure members
- The RCU head doesn't need to be at any specific location
functionally
- Moving it earlier reduces the offset from the structure start
- No functional code changes are required
4. **Affects Multiple Drivers**: The issue affects three Intel ethernet
drivers (i40e, ixgbe, fm10k), all of which are fixed identically by
moving the rcu member earlier in their respective q_vector
structures.
5. **Configuration-Dependent Bug**: This bug only manifests with large
CONFIG_NR_CPUS values (likely >= 512 or higher), where the
`cpumask_t` type becomes large enough to push the rcu member beyond
the 4096-byte offset limit. Systems with high core counts are
becoming more common in production environments.
6. **No Risk of Regression**: The change is minimal and doesn't alter
any functionality. It's purely a structural reordering that maintains
all existing behavior while fixing the compilation issue.
7. **Meets Stable Criteria**: This fix clearly meets the stable kernel
criteria as it:
- Fixes a real bug (compilation failure)
- Is minimal and contained
- Has no risk of introducing new issues
- Affects users with legitimate configurations
The commit is an excellent candidate for stable backporting as it fixes
a real compilation issue that prevents kernel builds on systems with
large CPU counts, and the fix is trivial with no risk of regression.
drivers/net/ethernet/intel/fm10k/fm10k.h | 3 ++-
drivers/net/ethernet/intel/i40e/i40e.h | 2 +-
drivers/net/ethernet/intel/ixgbe/ixgbe.h | 3 ++-
3 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/intel/fm10k/fm10k.h b/drivers/net/ethernet/intel/fm10k/fm10k.h
index 6119a41088381..65a2816142d96 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k.h
+++ b/drivers/net/ethernet/intel/fm10k/fm10k.h
@@ -189,13 +189,14 @@ struct fm10k_q_vector {
struct fm10k_ring_container rx, tx;
struct napi_struct napi;
+ struct rcu_head rcu; /* to avoid race with update stats on free */
+
cpumask_t affinity_mask;
char name[IFNAMSIZ + 9];
#ifdef CONFIG_DEBUG_FS
struct dentry *dbg_q_vector;
#endif /* CONFIG_DEBUG_FS */
- struct rcu_head rcu; /* to avoid race with update stats on free */
/* for dynamic allocation of rings associated with this q_vector */
struct fm10k_ring ring[] ____cacheline_internodealigned_in_smp;
diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h
index 22ac8c48ca340..61590e92f3abc 100644
--- a/drivers/net/ethernet/intel/i40e/i40e.h
+++ b/drivers/net/ethernet/intel/i40e/i40e.h
@@ -980,6 +980,7 @@ struct i40e_q_vector {
u16 reg_idx; /* register index of the interrupt */
struct napi_struct napi;
+ struct rcu_head rcu; /* to avoid race with update stats on free */
struct i40e_ring_container rx;
struct i40e_ring_container tx;
@@ -990,7 +991,6 @@ struct i40e_q_vector {
cpumask_t affinity_mask;
struct irq_affinity_notify affinity_notify;
- struct rcu_head rcu; /* to avoid race with update stats on free */
char name[I40E_INT_NAME_STR_LEN];
bool arm_wb_state;
bool in_busy_poll;
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
index 2bf387e52e202..f49b99b175ef4 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
@@ -498,9 +498,10 @@ struct ixgbe_q_vector {
struct ixgbe_ring_container rx, tx;
struct napi_struct napi;
+ struct rcu_head rcu; /* to avoid race with update stats on free */
+
cpumask_t affinity_mask;
int numa_node;
- struct rcu_head rcu; /* to avoid race with update stats on free */
char name[IFNAMSIZ + 9];
/* for dynamic allocation of rings associated with this q_vector */
--
2.39.5
From: Lane Odenbach <laodenbach(a)gmail.com>
[ Upstream commit 7bab1bd9fdf15b9fa7e6a4b0151deab93df3c80d ]
This fixes the internal microphone in the stated device
Signed-off-by: Lane Odenbach <laodenbach(a)gmail.com>
Link: https://patch.msgid.link/20250715182038.10048-1-laodenbach@gmail.com
Signed-off-by: Mark Brown <broonie(a)kernel.org>
Signed-off-by: Sasha Levin <sashal(a)kernel.org>
---
LLM Generated explanations, may be completely bogus:
**YES**
This commit should be backported to stable kernel trees for the
following reasons:
1. **Bug Fix for Hardware Functionality**: The commit fixes a non-
functional internal microphone on the HP Laptop 17 cp-2033dx. This is
a hardware enablement bug fix that prevents users from using a core
functionality of their laptop.
2. **Minimal and Contained Change**: The change is extremely minimal -
it only adds 7 lines to the DMI quirk table:
```c
+ {
+ .driver_data = &acp6x_card,
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
+ DMI_MATCH(DMI_BOARD_NAME, "8A81"),
+ }
+ },
```
This is a simple DMI match addition with no algorithmic changes or
side effects.
3. **Low Risk of Regression**: DMI quirk additions are inherently safe
as they only affect the specific hardware model being added. The
change cannot impact any other system that doesn't match the exact
DMI strings.
4. **Follows Established Pattern**: All five similar commits provided as
reference (for HP models with board names 8BD6, 8A3E, 8A22, 8A27, and
other manufacturers) were marked as "Backport Status: YES". This type
of commit has a well-established history of being backported.
5. **User-Impacting Issue**: Without this quirk, users of the HP Laptop
17 cp-2033dx cannot use their internal microphone, which is essential
functionality for video calls, recording, and voice commands. This
significantly degrades the user experience.
6. **Consistent with Stable Tree Rules**: The commit meets the stable
kernel criteria:
- It fixes a real bug that bothers users (non-functional microphone)
- It's obviously correct and tested (standard DMI quirk pattern)
- It's small (7 lines)
- It doesn't add new features, only fixes existing functionality
The AMD Yellow Carp (YC) audio driver uses DMI quirks to enable the
internal microphone on specific laptop models. Without these quirks, the
DMIC (Digital Microphone) won't be properly initialized on affected
systems. This is a common pattern in the Linux kernel for handling
hardware-specific configurations.
sound/soc/amd/yc/acp6x-mach.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/sound/soc/amd/yc/acp6x-mach.c b/sound/soc/amd/yc/acp6x-mach.c
index 66ef8f4fd02cd..74f8e12aa7107 100644
--- a/sound/soc/amd/yc/acp6x-mach.c
+++ b/sound/soc/amd/yc/acp6x-mach.c
@@ -577,6 +577,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = {
DMI_MATCH(DMI_BOARD_NAME, "8A7F"),
}
},
+ {
+ .driver_data = &acp6x_card,
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
+ DMI_MATCH(DMI_BOARD_NAME, "8A81"),
+ }
+ },
{
.driver_data = &acp6x_card,
.matches = {
--
2.39.5
From: Lane Odenbach <laodenbach(a)gmail.com>
[ Upstream commit 7bab1bd9fdf15b9fa7e6a4b0151deab93df3c80d ]
This fixes the internal microphone in the stated device
Signed-off-by: Lane Odenbach <laodenbach(a)gmail.com>
Link: https://patch.msgid.link/20250715182038.10048-1-laodenbach@gmail.com
Signed-off-by: Mark Brown <broonie(a)kernel.org>
Signed-off-by: Sasha Levin <sashal(a)kernel.org>
---
LLM Generated explanations, may be completely bogus:
**YES**
This commit should be backported to stable kernel trees for the
following reasons:
1. **Bug Fix for Hardware Functionality**: The commit fixes a non-
functional internal microphone on the HP Laptop 17 cp-2033dx. This is
a hardware enablement bug fix that prevents users from using a core
functionality of their laptop.
2. **Minimal and Contained Change**: The change is extremely minimal -
it only adds 7 lines to the DMI quirk table:
```c
+ {
+ .driver_data = &acp6x_card,
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
+ DMI_MATCH(DMI_BOARD_NAME, "8A81"),
+ }
+ },
```
This is a simple DMI match addition with no algorithmic changes or
side effects.
3. **Low Risk of Regression**: DMI quirk additions are inherently safe
as they only affect the specific hardware model being added. The
change cannot impact any other system that doesn't match the exact
DMI strings.
4. **Follows Established Pattern**: All five similar commits provided as
reference (for HP models with board names 8BD6, 8A3E, 8A22, 8A27, and
other manufacturers) were marked as "Backport Status: YES". This type
of commit has a well-established history of being backported.
5. **User-Impacting Issue**: Without this quirk, users of the HP Laptop
17 cp-2033dx cannot use their internal microphone, which is essential
functionality for video calls, recording, and voice commands. This
significantly degrades the user experience.
6. **Consistent with Stable Tree Rules**: The commit meets the stable
kernel criteria:
- It fixes a real bug that bothers users (non-functional microphone)
- It's obviously correct and tested (standard DMI quirk pattern)
- It's small (7 lines)
- It doesn't add new features, only fixes existing functionality
The AMD Yellow Carp (YC) audio driver uses DMI quirks to enable the
internal microphone on specific laptop models. Without these quirks, the
DMIC (Digital Microphone) won't be properly initialized on affected
systems. This is a common pattern in the Linux kernel for handling
hardware-specific configurations.
sound/soc/amd/yc/acp6x-mach.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/sound/soc/amd/yc/acp6x-mach.c b/sound/soc/amd/yc/acp6x-mach.c
index 1689b6b22598e..42d123cb8b4c6 100644
--- a/sound/soc/amd/yc/acp6x-mach.c
+++ b/sound/soc/amd/yc/acp6x-mach.c
@@ -577,6 +577,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = {
DMI_MATCH(DMI_BOARD_NAME, "8A7F"),
}
},
+ {
+ .driver_data = &acp6x_card,
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
+ DMI_MATCH(DMI_BOARD_NAME, "8A81"),
+ }
+ },
{
.driver_data = &acp6x_card,
.matches = {
--
2.39.5
From: Thomas Zimmermann <tzimmermann(a)suse.de>
[ Upstream commit 5dd0b96118e09a3725e3f83543e133b1fd02c18c ]
The radeon driver holds the console lock while suspending in-kernel
DRM clients. This creates a circular dependency with the client-list
mutex, which is supposed to be acquired first. Reported when combining
radeon with another DRM driver.
Therefore, do not take the console lock in radeon, but let the fbdev
DRM client acquire the lock when needed. This is what all other DRM
drivers so.
Signed-off-by: Thomas Zimmermann <tzimmermann(a)suse.de>
Reported-by: Jeff Johnson <jeff.johnson(a)oss.qualcomm.com>
Closes: https://lore.kernel.org/dri-devel/0a087cfd-bd4c-48f1-aa2f-4a3b12593935@oss.…
Suggested-by: Ville Syrjälä <ville.syrjala(a)linux.intel.com>
Signed-off-by: Alex Deucher <alexander.deucher(a)amd.com>
(cherry picked from commit 612ec7c69d04cb58beb1332c2806da9f2f47a3ae)
Signed-off-by: Sasha Levin <sashal(a)kernel.org>
---
LLM Generated explanations, may be completely bogus:
Based on my analysis of the commit and the code changes, here is my
assessment:
**Answer: YES**
This commit should be backported to stable kernel trees. Here's my
extensive explanation:
## 1. **The commit fixes a real circular locking dependency bug**
The commit message clearly states this fixes a "circular dependency with
the client-list mutex" that was "Reported when combining radeon with
another DRM driver." This is a real bug that can lead to deadlocks in
production systems.
## 2. **The fix is minimal and focused**
The code changes are very small and targeted:
- In `radeon_suspend_kms()`: Changed from calling
`drm_client_dev_suspend(dev, true)` with console_lock held to
`drm_client_dev_suspend(dev, false)` without holding the lock
- In `radeon_resume_kms()`: Removed the console_lock/unlock calls around
`drm_client_dev_resume()`
The second parameter to `drm_client_dev_suspend()` indicates whether the
caller holds the console lock. By changing it from `true` to `false`,
radeon now follows the same pattern as other DRM drivers.
## 3. **This aligns radeon with other DRM drivers**
The commit message explicitly states: "This is what all other DRM
drivers so." Looking at the similar commits provided:
- Similar Commit #1 shows radeon being updated to use the new client
suspend/resume infrastructure
- Similar Commit #4 shows amdgpu (the successor to radeon) already using
`drm_client_dev_suspend(dev, false)` without holding the console lock
## 4. **The bug has real-world impact**
The issue was reported by a real user (Jeff Johnson) and occurs "when
combining radeon with another DRM driver." Multi-GPU systems are
increasingly common, especially with integrated + discrete GPU
configurations.
## 5. **Low regression risk**
The change removes lock acquisition rather than adding it, which
generally has lower risk. The fbdev DRM client will acquire the console
lock when needed (as mentioned in the commit message), so the necessary
locking still occurs - just at the correct layer to avoid the circular
dependency.
## 6. **Similar to historical fixes**
Looking at Similar Commit #5 (amdgpu console lock restructuring), we can
see there's a history of console lock ordering issues in AMD GPU drivers
that have been fixed in the past. This suggests these types of fixes are
considered important enough for the maintainers.
## 7. **The fix is already cherry-picked**
The commit message shows "(cherry picked from commit
612ec7c69d04cb58beb1332c2806da9f2f47a3ae)" indicating this was already
selected for backporting by maintainers.
The only potential concern would be ensuring that the DRM client
infrastructure this depends on is present in the stable kernels being
targeted, but given that this is fixing a bug in existing code paths,
the infrastructure must already be there.
drivers/gpu/drm/radeon/radeon_device.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
index bbd39348a7aba..6f50cfdfe5a2e 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -1635,11 +1635,9 @@ int radeon_suspend_kms(struct drm_device *dev, bool suspend,
pci_set_power_state(pdev, PCI_D3hot);
}
- if (notify_clients) {
- console_lock();
- drm_client_dev_suspend(dev, true);
- console_unlock();
- }
+ if (notify_clients)
+ drm_client_dev_suspend(dev, false);
+
return 0;
}
--
2.39.5
Hi,
I wanted to check with you if you had time to go through my previous email.
Let me know your thoughts about acquiring this email list.
Regards,
*Clint*
*____________________________________________________________________________*
Hi,
We have successfully built a verified file of *Healthcare Industry *contacts
with accurate emails. Would you be interested in acquiring* Healthcare
Industry Professionals List* across North America, UK, Europe and Global?
*Few Lists**:* Physicians and Surgeons Lists, Nurses Lists, Hospitals
Lists, Ambulatory Surgery Centers List, Hospitals Executives Decision
Makers list, Home Healthcare Lists, Pharmacy Lists, Clinical
Director/Managers Email List, Facility Manager Lists, Hospital
Administrator Lists, Nurse Manager Lists, Clinical Director Email List,
Laboratory Managers & Directors Email List, General Medical & Surgical
Hospitals Executives Email List, Pharmacy Decision Makers List, NP’s & PA’s
Email list many more.
*Few Physician Specialties**:* Anesthesiologist, Cardiologist,
Dermatologist, Dentist, Emergency Medicine, Family Practitioners,
Gastroenterologist, General Practitioners, Gynecologist, Hospitalist,
Hematologist, Internal Medicine, Nephrologists, Neurologist, Oncologist,
Ophthalmologist, Optometrist, Pathologist, Pediatrician, Psychiatrist,
Psychologist, Plastic Surgeon, Podiatrist, Pulmonologist, Radiologist,
Rheumatologist, Urologist, Physician Assistants, Nurse Practitioners,
Registered Nurses, etc.
*Our list comes with*: Company/Organization, Website, Contacts, Title,
Address, Direct Number and Email Address, Revenue Size, Employee Size,
Industry segment.
Please send me your *target audience and geographical area*, so that I can
give you more information, *Counts and Pricing *for your review.
Looking forward to hearing from you.
Regards,
*Clint Carnell| Customer Success Manager*
*B2B Marketing & Tradeshow Specialist*Clint(a)b2bleadsonline.us
P *We have a responsibility to the environment*
*Before printing this e-mail or any other document, let's ask ourselves
whether we need a hard copy*