From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
patches@lists.linux.dev,
Tobias Waldekranz <tobias@waldekranz.com>,
Maxime Chevallier <maxime.chevallier@bootlin.com>,
Jakub Kicinski <kuba@kernel.org>, Sasha Levin <sashal@kernel.org>
Subject: [PATCH 6.1 158/204] net: mvpp2: Prevent parser TCAM memory corruption
Date: Tue, 8 Apr 2025 12:51:28 +0200 [thread overview]
Message-ID: <20250408104824.949648357@linuxfoundation.org> (raw)
In-Reply-To: <20250408104820.266892317@linuxfoundation.org>
6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tobias Waldekranz <tobias@waldekranz.com>
[ Upstream commit 96844075226b49af25a69a1d084b648ec2d9b08d ]
Protect the parser TCAM/SRAM memory, and the cached (shadow) SRAM
information, from concurrent modifications.
Both the TCAM and SRAM tables are indirectly accessed by configuring
an index register that selects the row to read or write to. This means
that operations must be atomic in order to, e.g., avoid spreading
writes across multiple rows. Since the shadow SRAM array is used to
find free rows in the hardware table, it must also be protected in
order to avoid TOCTOU errors where multiple cores allocate the same
row.
This issue was detected in a situation where `mvpp2_set_rx_mode()` ran
concurrently on two CPUs. In this particular case the
MVPP2_PE_MAC_UC_PROMISCUOUS entry was corrupted, causing the
classifier unit to drop all incoming unicast - indicated by the
`rx_classifier_drops` counter.
Fixes: 3f518509dedc ("ethernet: Add new driver for Marvell Armada 375 network unit")
Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Tested-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Link: https://patch.msgid.link/20250401065855.3113635-1-tobias@waldekranz.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/marvell/mvpp2/mvpp2.h | 3 +
.../net/ethernet/marvell/mvpp2/mvpp2_main.c | 3 +-
.../net/ethernet/marvell/mvpp2/mvpp2_prs.c | 201 ++++++++++++------
3 files changed, 140 insertions(+), 67 deletions(-)
diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2.h b/drivers/net/ethernet/marvell/mvpp2/mvpp2.h
index 522d65acfc47e..50dc2fcb8f7b1 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2.h
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2.h
@@ -1108,6 +1108,9 @@ struct mvpp2 {
/* Spinlocks for CM3 shared memory configuration */
spinlock_t mss_spinlock;
+
+ /* Spinlock for shared PRS parser memory and shadow table */
+ spinlock_t prs_spinlock;
};
struct mvpp2_pcpu_stats {
diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
index bbcdab562513f..ec69bb90f5740 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
@@ -7583,8 +7583,9 @@ static int mvpp2_probe(struct platform_device *pdev)
if (mvpp2_read(priv, MVPP2_VER_ID_REG) == MVPP2_VER_PP23)
priv->hw_version = MVPP23;
- /* Init mss lock */
+ /* Init locks for shared packet processor resources */
spin_lock_init(&priv->mss_spinlock);
+ spin_lock_init(&priv->prs_spinlock);
/* Initialize network controller */
err = mvpp2_init(pdev, priv);
diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.c
index 9af22f497a40f..93e978bdf303c 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.c
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.c
@@ -23,6 +23,8 @@ static int mvpp2_prs_hw_write(struct mvpp2 *priv, struct mvpp2_prs_entry *pe)
{
int i;
+ lockdep_assert_held(&priv->prs_spinlock);
+
if (pe->index > MVPP2_PRS_TCAM_SRAM_SIZE - 1)
return -EINVAL;
@@ -43,11 +45,13 @@ static int mvpp2_prs_hw_write(struct mvpp2 *priv, struct mvpp2_prs_entry *pe)
}
/* Initialize tcam entry from hw */
-int mvpp2_prs_init_from_hw(struct mvpp2 *priv, struct mvpp2_prs_entry *pe,
- int tid)
+static int __mvpp2_prs_init_from_hw(struct mvpp2 *priv,
+ struct mvpp2_prs_entry *pe, int tid)
{
int i;
+ lockdep_assert_held(&priv->prs_spinlock);
+
if (tid > MVPP2_PRS_TCAM_SRAM_SIZE - 1)
return -EINVAL;
@@ -73,6 +77,18 @@ int mvpp2_prs_init_from_hw(struct mvpp2 *priv, struct mvpp2_prs_entry *pe,
return 0;
}
+int mvpp2_prs_init_from_hw(struct mvpp2 *priv, struct mvpp2_prs_entry *pe,
+ int tid)
+{
+ int err;
+
+ spin_lock_bh(&priv->prs_spinlock);
+ err = __mvpp2_prs_init_from_hw(priv, pe, tid);
+ spin_unlock_bh(&priv->prs_spinlock);
+
+ return err;
+}
+
/* Invalidate tcam hw entry */
static void mvpp2_prs_hw_inv(struct mvpp2 *priv, int index)
{
@@ -374,7 +390,7 @@ static int mvpp2_prs_flow_find(struct mvpp2 *priv, int flow)
priv->prs_shadow[tid].lu != MVPP2_PRS_LU_FLOWS)
continue;
- mvpp2_prs_init_from_hw(priv, &pe, tid);
+ __mvpp2_prs_init_from_hw(priv, &pe, tid);
bits = mvpp2_prs_sram_ai_get(&pe);
/* Sram store classification lookup ID in AI bits [5:0] */
@@ -441,7 +457,7 @@ static void mvpp2_prs_mac_drop_all_set(struct mvpp2 *priv, int port, bool add)
if (priv->prs_shadow[MVPP2_PE_DROP_ALL].valid) {
/* Entry exist - update port only */
- mvpp2_prs_init_from_hw(priv, &pe, MVPP2_PE_DROP_ALL);
+ __mvpp2_prs_init_from_hw(priv, &pe, MVPP2_PE_DROP_ALL);
} else {
/* Entry doesn't exist - create new */
memset(&pe, 0, sizeof(pe));
@@ -469,14 +485,17 @@ static void mvpp2_prs_mac_drop_all_set(struct mvpp2 *priv, int port, bool add)
}
/* Set port to unicast or multicast promiscuous mode */
-void mvpp2_prs_mac_promisc_set(struct mvpp2 *priv, int port,
- enum mvpp2_prs_l2_cast l2_cast, bool add)
+static void __mvpp2_prs_mac_promisc_set(struct mvpp2 *priv, int port,
+ enum mvpp2_prs_l2_cast l2_cast,
+ bool add)
{
struct mvpp2_prs_entry pe;
unsigned char cast_match;
unsigned int ri;
int tid;
+ lockdep_assert_held(&priv->prs_spinlock);
+
if (l2_cast == MVPP2_PRS_L2_UNI_CAST) {
cast_match = MVPP2_PRS_UCAST_VAL;
tid = MVPP2_PE_MAC_UC_PROMISCUOUS;
@@ -489,7 +508,7 @@ void mvpp2_prs_mac_promisc_set(struct mvpp2 *priv, int port,
/* promiscuous mode - Accept unknown unicast or multicast packets */
if (priv->prs_shadow[tid].valid) {
- mvpp2_prs_init_from_hw(priv, &pe, tid);
+ __mvpp2_prs_init_from_hw(priv, &pe, tid);
} else {
memset(&pe, 0, sizeof(pe));
mvpp2_prs_tcam_lu_set(&pe, MVPP2_PRS_LU_MAC);
@@ -522,6 +541,14 @@ void mvpp2_prs_mac_promisc_set(struct mvpp2 *priv, int port,
mvpp2_prs_hw_write(priv, &pe);
}
+void mvpp2_prs_mac_promisc_set(struct mvpp2 *priv, int port,
+ enum mvpp2_prs_l2_cast l2_cast, bool add)
+{
+ spin_lock_bh(&priv->prs_spinlock);
+ __mvpp2_prs_mac_promisc_set(priv, port, l2_cast, add);
+ spin_unlock_bh(&priv->prs_spinlock);
+}
+
/* Set entry for dsa packets */
static void mvpp2_prs_dsa_tag_set(struct mvpp2 *priv, int port, bool add,
bool tagged, bool extend)
@@ -539,7 +566,7 @@ static void mvpp2_prs_dsa_tag_set(struct mvpp2 *priv, int port, bool add,
if (priv->prs_shadow[tid].valid) {
/* Entry exist - update port only */
- mvpp2_prs_init_from_hw(priv, &pe, tid);
+ __mvpp2_prs_init_from_hw(priv, &pe, tid);
} else {
/* Entry doesn't exist - create new */
memset(&pe, 0, sizeof(pe));
@@ -610,7 +637,7 @@ static void mvpp2_prs_dsa_tag_ethertype_set(struct mvpp2 *priv, int port,
if (priv->prs_shadow[tid].valid) {
/* Entry exist - update port only */
- mvpp2_prs_init_from_hw(priv, &pe, tid);
+ __mvpp2_prs_init_from_hw(priv, &pe, tid);
} else {
/* Entry doesn't exist - create new */
memset(&pe, 0, sizeof(pe));
@@ -673,7 +700,7 @@ static int mvpp2_prs_vlan_find(struct mvpp2 *priv, unsigned short tpid, int ai)
priv->prs_shadow[tid].lu != MVPP2_PRS_LU_VLAN)
continue;
- mvpp2_prs_init_from_hw(priv, &pe, tid);
+ __mvpp2_prs_init_from_hw(priv, &pe, tid);
match = mvpp2_prs_tcam_data_cmp(&pe, 0, tpid);
if (!match)
continue;
@@ -726,7 +753,7 @@ static int mvpp2_prs_vlan_add(struct mvpp2 *priv, unsigned short tpid, int ai,
priv->prs_shadow[tid_aux].lu != MVPP2_PRS_LU_VLAN)
continue;
- mvpp2_prs_init_from_hw(priv, &pe, tid_aux);
+ __mvpp2_prs_init_from_hw(priv, &pe, tid_aux);
ri_bits = mvpp2_prs_sram_ri_get(&pe);
if ((ri_bits & MVPP2_PRS_RI_VLAN_MASK) ==
MVPP2_PRS_RI_VLAN_DOUBLE)
@@ -760,7 +787,7 @@ static int mvpp2_prs_vlan_add(struct mvpp2 *priv, unsigned short tpid, int ai,
mvpp2_prs_shadow_set(priv, pe.index, MVPP2_PRS_LU_VLAN);
} else {
- mvpp2_prs_init_from_hw(priv, &pe, tid);
+ __mvpp2_prs_init_from_hw(priv, &pe, tid);
}
/* Update ports' mask */
mvpp2_prs_tcam_port_map_set(&pe, port_map);
@@ -800,7 +827,7 @@ static int mvpp2_prs_double_vlan_find(struct mvpp2 *priv, unsigned short tpid1,
priv->prs_shadow[tid].lu != MVPP2_PRS_LU_VLAN)
continue;
- mvpp2_prs_init_from_hw(priv, &pe, tid);
+ __mvpp2_prs_init_from_hw(priv, &pe, tid);
match = mvpp2_prs_tcam_data_cmp(&pe, 0, tpid1) &&
mvpp2_prs_tcam_data_cmp(&pe, 4, tpid2);
@@ -849,7 +876,7 @@ static int mvpp2_prs_double_vlan_add(struct mvpp2 *priv, unsigned short tpid1,
priv->prs_shadow[tid_aux].lu != MVPP2_PRS_LU_VLAN)
continue;
- mvpp2_prs_init_from_hw(priv, &pe, tid_aux);
+ __mvpp2_prs_init_from_hw(priv, &pe, tid_aux);
ri_bits = mvpp2_prs_sram_ri_get(&pe);
ri_bits &= MVPP2_PRS_RI_VLAN_MASK;
if (ri_bits == MVPP2_PRS_RI_VLAN_SINGLE ||
@@ -880,7 +907,7 @@ static int mvpp2_prs_double_vlan_add(struct mvpp2 *priv, unsigned short tpid1,
mvpp2_prs_shadow_set(priv, pe.index, MVPP2_PRS_LU_VLAN);
} else {
- mvpp2_prs_init_from_hw(priv, &pe, tid);
+ __mvpp2_prs_init_from_hw(priv, &pe, tid);
}
/* Update ports' mask */
@@ -1213,8 +1240,8 @@ static void mvpp2_prs_mac_init(struct mvpp2 *priv)
/* Create dummy entries for drop all and promiscuous modes */
mvpp2_prs_drop_fc(priv);
mvpp2_prs_mac_drop_all_set(priv, 0, false);
- mvpp2_prs_mac_promisc_set(priv, 0, MVPP2_PRS_L2_UNI_CAST, false);
- mvpp2_prs_mac_promisc_set(priv, 0, MVPP2_PRS_L2_MULTI_CAST, false);
+ __mvpp2_prs_mac_promisc_set(priv, 0, MVPP2_PRS_L2_UNI_CAST, false);
+ __mvpp2_prs_mac_promisc_set(priv, 0, MVPP2_PRS_L2_MULTI_CAST, false);
}
/* Set default entries for various types of dsa packets */
@@ -1533,12 +1560,6 @@ static int mvpp2_prs_vlan_init(struct platform_device *pdev, struct mvpp2 *priv)
struct mvpp2_prs_entry pe;
int err;
- priv->prs_double_vlans = devm_kcalloc(&pdev->dev, sizeof(bool),
- MVPP2_PRS_DBL_VLANS_MAX,
- GFP_KERNEL);
- if (!priv->prs_double_vlans)
- return -ENOMEM;
-
/* Double VLAN: 0x88A8, 0x8100 */
err = mvpp2_prs_double_vlan_add(priv, ETH_P_8021AD, ETH_P_8021Q,
MVPP2_PRS_PORT_MASK);
@@ -1941,7 +1962,7 @@ static int mvpp2_prs_vid_range_find(struct mvpp2_port *port, u16 vid, u16 mask)
port->priv->prs_shadow[tid].lu != MVPP2_PRS_LU_VID)
continue;
- mvpp2_prs_init_from_hw(port->priv, &pe, tid);
+ __mvpp2_prs_init_from_hw(port->priv, &pe, tid);
mvpp2_prs_tcam_data_byte_get(&pe, 2, &byte[0], &enable[0]);
mvpp2_prs_tcam_data_byte_get(&pe, 3, &byte[1], &enable[1]);
@@ -1970,6 +1991,8 @@ int mvpp2_prs_vid_entry_add(struct mvpp2_port *port, u16 vid)
memset(&pe, 0, sizeof(pe));
+ spin_lock_bh(&priv->prs_spinlock);
+
/* Scan TCAM and see if entry with this <vid,port> already exist */
tid = mvpp2_prs_vid_range_find(port, vid, mask);
@@ -1988,8 +2011,10 @@ int mvpp2_prs_vid_entry_add(struct mvpp2_port *port, u16 vid)
MVPP2_PRS_VLAN_FILT_MAX_ENTRY);
/* There isn't room for a new VID filter */
- if (tid < 0)
+ if (tid < 0) {
+ spin_unlock_bh(&priv->prs_spinlock);
return tid;
+ }
mvpp2_prs_tcam_lu_set(&pe, MVPP2_PRS_LU_VID);
pe.index = tid;
@@ -1997,7 +2022,7 @@ int mvpp2_prs_vid_entry_add(struct mvpp2_port *port, u16 vid)
/* Mask all ports */
mvpp2_prs_tcam_port_map_set(&pe, 0);
} else {
- mvpp2_prs_init_from_hw(priv, &pe, tid);
+ __mvpp2_prs_init_from_hw(priv, &pe, tid);
}
/* Enable the current port */
@@ -2019,6 +2044,7 @@ int mvpp2_prs_vid_entry_add(struct mvpp2_port *port, u16 vid)
mvpp2_prs_shadow_set(priv, pe.index, MVPP2_PRS_LU_VID);
mvpp2_prs_hw_write(priv, &pe);
+ spin_unlock_bh(&priv->prs_spinlock);
return 0;
}
@@ -2028,15 +2054,16 @@ void mvpp2_prs_vid_entry_remove(struct mvpp2_port *port, u16 vid)
struct mvpp2 *priv = port->priv;
int tid;
- /* Scan TCAM and see if entry with this <vid,port> already exist */
- tid = mvpp2_prs_vid_range_find(port, vid, 0xfff);
+ spin_lock_bh(&priv->prs_spinlock);
- /* No such entry */
- if (tid < 0)
- return;
+ /* Invalidate TCAM entry with this <vid,port>, if it exists */
+ tid = mvpp2_prs_vid_range_find(port, vid, 0xfff);
+ if (tid >= 0) {
+ mvpp2_prs_hw_inv(priv, tid);
+ priv->prs_shadow[tid].valid = false;
+ }
- mvpp2_prs_hw_inv(priv, tid);
- priv->prs_shadow[tid].valid = false;
+ spin_unlock_bh(&priv->prs_spinlock);
}
/* Remove all existing VID filters on this port */
@@ -2045,6 +2072,8 @@ void mvpp2_prs_vid_remove_all(struct mvpp2_port *port)
struct mvpp2 *priv = port->priv;
int tid;
+ spin_lock_bh(&priv->prs_spinlock);
+
for (tid = MVPP2_PRS_VID_PORT_FIRST(port->id);
tid <= MVPP2_PRS_VID_PORT_LAST(port->id); tid++) {
if (priv->prs_shadow[tid].valid) {
@@ -2052,6 +2081,8 @@ void mvpp2_prs_vid_remove_all(struct mvpp2_port *port)
priv->prs_shadow[tid].valid = false;
}
}
+
+ spin_unlock_bh(&priv->prs_spinlock);
}
/* Remove VID filering entry for this port */
@@ -2060,10 +2091,14 @@ void mvpp2_prs_vid_disable_filtering(struct mvpp2_port *port)
unsigned int tid = MVPP2_PRS_VID_PORT_DFLT(port->id);
struct mvpp2 *priv = port->priv;
+ spin_lock_bh(&priv->prs_spinlock);
+
/* Invalidate the guard entry */
mvpp2_prs_hw_inv(priv, tid);
priv->prs_shadow[tid].valid = false;
+
+ spin_unlock_bh(&priv->prs_spinlock);
}
/* Add guard entry that drops packets when no VID is matched on this port */
@@ -2079,6 +2114,8 @@ void mvpp2_prs_vid_enable_filtering(struct mvpp2_port *port)
memset(&pe, 0, sizeof(pe));
+ spin_lock_bh(&priv->prs_spinlock);
+
pe.index = tid;
reg_val = mvpp2_read(priv, MVPP2_MH_REG(port->id));
@@ -2111,6 +2148,8 @@ void mvpp2_prs_vid_enable_filtering(struct mvpp2_port *port)
/* Update shadow table */
mvpp2_prs_shadow_set(priv, pe.index, MVPP2_PRS_LU_VID);
mvpp2_prs_hw_write(priv, &pe);
+
+ spin_unlock_bh(&priv->prs_spinlock);
}
/* Parser default initialization */
@@ -2118,6 +2157,20 @@ int mvpp2_prs_default_init(struct platform_device *pdev, struct mvpp2 *priv)
{
int err, index, i;
+ priv->prs_shadow = devm_kcalloc(&pdev->dev, MVPP2_PRS_TCAM_SRAM_SIZE,
+ sizeof(*priv->prs_shadow),
+ GFP_KERNEL);
+ if (!priv->prs_shadow)
+ return -ENOMEM;
+
+ priv->prs_double_vlans = devm_kcalloc(&pdev->dev, sizeof(bool),
+ MVPP2_PRS_DBL_VLANS_MAX,
+ GFP_KERNEL);
+ if (!priv->prs_double_vlans)
+ return -ENOMEM;
+
+ spin_lock_bh(&priv->prs_spinlock);
+
/* Enable tcam table */
mvpp2_write(priv, MVPP2_PRS_TCAM_CTRL_REG, MVPP2_PRS_TCAM_EN_MASK);
@@ -2136,12 +2189,6 @@ int mvpp2_prs_default_init(struct platform_device *pdev, struct mvpp2 *priv)
for (index = 0; index < MVPP2_PRS_TCAM_SRAM_SIZE; index++)
mvpp2_prs_hw_inv(priv, index);
- priv->prs_shadow = devm_kcalloc(&pdev->dev, MVPP2_PRS_TCAM_SRAM_SIZE,
- sizeof(*priv->prs_shadow),
- GFP_KERNEL);
- if (!priv->prs_shadow)
- return -ENOMEM;
-
/* Always start from lookup = 0 */
for (index = 0; index < MVPP2_MAX_PORTS; index++)
mvpp2_prs_hw_port_init(priv, index, MVPP2_PRS_LU_MH,
@@ -2158,26 +2205,13 @@ int mvpp2_prs_default_init(struct platform_device *pdev, struct mvpp2 *priv)
mvpp2_prs_vid_init(priv);
err = mvpp2_prs_etype_init(priv);
- if (err)
- return err;
-
- err = mvpp2_prs_vlan_init(pdev, priv);
- if (err)
- return err;
-
- err = mvpp2_prs_pppoe_init(priv);
- if (err)
- return err;
-
- err = mvpp2_prs_ip6_init(priv);
- if (err)
- return err;
-
- err = mvpp2_prs_ip4_init(priv);
- if (err)
- return err;
+ err = err ? : mvpp2_prs_vlan_init(pdev, priv);
+ err = err ? : mvpp2_prs_pppoe_init(priv);
+ err = err ? : mvpp2_prs_ip6_init(priv);
+ err = err ? : mvpp2_prs_ip4_init(priv);
- return 0;
+ spin_unlock_bh(&priv->prs_spinlock);
+ return err;
}
/* Compare MAC DA with tcam entry data */
@@ -2217,7 +2251,7 @@ mvpp2_prs_mac_da_range_find(struct mvpp2 *priv, int pmap, const u8 *da,
(priv->prs_shadow[tid].udf != udf_type))
continue;
- mvpp2_prs_init_from_hw(priv, &pe, tid);
+ __mvpp2_prs_init_from_hw(priv, &pe, tid);
entry_pmap = mvpp2_prs_tcam_port_map_get(&pe);
if (mvpp2_prs_mac_range_equals(&pe, da, mask) &&
@@ -2229,7 +2263,8 @@ mvpp2_prs_mac_da_range_find(struct mvpp2 *priv, int pmap, const u8 *da,
}
/* Update parser's mac da entry */
-int mvpp2_prs_mac_da_accept(struct mvpp2_port *port, const u8 *da, bool add)
+static int __mvpp2_prs_mac_da_accept(struct mvpp2_port *port,
+ const u8 *da, bool add)
{
unsigned char mask[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
struct mvpp2 *priv = port->priv;
@@ -2261,7 +2296,7 @@ int mvpp2_prs_mac_da_accept(struct mvpp2_port *port, const u8 *da, bool add)
/* Mask all ports */
mvpp2_prs_tcam_port_map_set(&pe, 0);
} else {
- mvpp2_prs_init_from_hw(priv, &pe, tid);
+ __mvpp2_prs_init_from_hw(priv, &pe, tid);
}
mvpp2_prs_tcam_lu_set(&pe, MVPP2_PRS_LU_MAC);
@@ -2317,6 +2352,17 @@ int mvpp2_prs_mac_da_accept(struct mvpp2_port *port, const u8 *da, bool add)
return 0;
}
+int mvpp2_prs_mac_da_accept(struct mvpp2_port *port, const u8 *da, bool add)
+{
+ int err;
+
+ spin_lock_bh(&port->priv->prs_spinlock);
+ err = __mvpp2_prs_mac_da_accept(port, da, add);
+ spin_unlock_bh(&port->priv->prs_spinlock);
+
+ return err;
+}
+
int mvpp2_prs_update_mac_da(struct net_device *dev, const u8 *da)
{
struct mvpp2_port *port = netdev_priv(dev);
@@ -2345,6 +2391,8 @@ void mvpp2_prs_mac_del_all(struct mvpp2_port *port)
unsigned long pmap;
int index, tid;
+ spin_lock_bh(&priv->prs_spinlock);
+
for (tid = MVPP2_PE_MAC_RANGE_START;
tid <= MVPP2_PE_MAC_RANGE_END; tid++) {
unsigned char da[ETH_ALEN], da_mask[ETH_ALEN];
@@ -2354,7 +2402,7 @@ void mvpp2_prs_mac_del_all(struct mvpp2_port *port)
(priv->prs_shadow[tid].udf != MVPP2_PRS_UDF_MAC_DEF))
continue;
- mvpp2_prs_init_from_hw(priv, &pe, tid);
+ __mvpp2_prs_init_from_hw(priv, &pe, tid);
pmap = mvpp2_prs_tcam_port_map_get(&pe);
@@ -2375,14 +2423,17 @@ void mvpp2_prs_mac_del_all(struct mvpp2_port *port)
continue;
/* Remove entry from TCAM */
- mvpp2_prs_mac_da_accept(port, da, false);
+ __mvpp2_prs_mac_da_accept(port, da, false);
}
+
+ spin_unlock_bh(&priv->prs_spinlock);
}
int mvpp2_prs_tag_mode_set(struct mvpp2 *priv, int port, int type)
{
switch (type) {
case MVPP2_TAG_TYPE_EDSA:
+ spin_lock_bh(&priv->prs_spinlock);
/* Add port to EDSA entries */
mvpp2_prs_dsa_tag_set(priv, port, true,
MVPP2_PRS_TAGGED, MVPP2_PRS_EDSA);
@@ -2393,9 +2444,11 @@ int mvpp2_prs_tag_mode_set(struct mvpp2 *priv, int port, int type)
MVPP2_PRS_TAGGED, MVPP2_PRS_DSA);
mvpp2_prs_dsa_tag_set(priv, port, false,
MVPP2_PRS_UNTAGGED, MVPP2_PRS_DSA);
+ spin_unlock_bh(&priv->prs_spinlock);
break;
case MVPP2_TAG_TYPE_DSA:
+ spin_lock_bh(&priv->prs_spinlock);
/* Add port to DSA entries */
mvpp2_prs_dsa_tag_set(priv, port, true,
MVPP2_PRS_TAGGED, MVPP2_PRS_DSA);
@@ -2406,10 +2459,12 @@ int mvpp2_prs_tag_mode_set(struct mvpp2 *priv, int port, int type)
MVPP2_PRS_TAGGED, MVPP2_PRS_EDSA);
mvpp2_prs_dsa_tag_set(priv, port, false,
MVPP2_PRS_UNTAGGED, MVPP2_PRS_EDSA);
+ spin_unlock_bh(&priv->prs_spinlock);
break;
case MVPP2_TAG_TYPE_MH:
case MVPP2_TAG_TYPE_NONE:
+ spin_lock_bh(&priv->prs_spinlock);
/* Remove port form EDSA and DSA entries */
mvpp2_prs_dsa_tag_set(priv, port, false,
MVPP2_PRS_TAGGED, MVPP2_PRS_DSA);
@@ -2419,6 +2474,7 @@ int mvpp2_prs_tag_mode_set(struct mvpp2 *priv, int port, int type)
MVPP2_PRS_TAGGED, MVPP2_PRS_EDSA);
mvpp2_prs_dsa_tag_set(priv, port, false,
MVPP2_PRS_UNTAGGED, MVPP2_PRS_EDSA);
+ spin_unlock_bh(&priv->prs_spinlock);
break;
default:
@@ -2437,11 +2493,15 @@ int mvpp2_prs_add_flow(struct mvpp2 *priv, int flow, u32 ri, u32 ri_mask)
memset(&pe, 0, sizeof(pe));
+ spin_lock_bh(&priv->prs_spinlock);
+
tid = mvpp2_prs_tcam_first_free(priv,
MVPP2_PE_LAST_FREE_TID,
MVPP2_PE_FIRST_FREE_TID);
- if (tid < 0)
+ if (tid < 0) {
+ spin_unlock_bh(&priv->prs_spinlock);
return tid;
+ }
pe.index = tid;
@@ -2461,6 +2521,7 @@ int mvpp2_prs_add_flow(struct mvpp2 *priv, int flow, u32 ri, u32 ri_mask)
mvpp2_prs_tcam_port_map_set(&pe, MVPP2_PRS_PORT_MASK);
mvpp2_prs_hw_write(priv, &pe);
+ spin_unlock_bh(&priv->prs_spinlock);
return 0;
}
@@ -2472,6 +2533,8 @@ int mvpp2_prs_def_flow(struct mvpp2_port *port)
memset(&pe, 0, sizeof(pe));
+ spin_lock_bh(&port->priv->prs_spinlock);
+
tid = mvpp2_prs_flow_find(port->priv, port->id);
/* Such entry not exist */
@@ -2480,8 +2543,10 @@ int mvpp2_prs_def_flow(struct mvpp2_port *port)
tid = mvpp2_prs_tcam_first_free(port->priv,
MVPP2_PE_LAST_FREE_TID,
MVPP2_PE_FIRST_FREE_TID);
- if (tid < 0)
+ if (tid < 0) {
+ spin_unlock_bh(&port->priv->prs_spinlock);
return tid;
+ }
pe.index = tid;
@@ -2492,13 +2557,14 @@ int mvpp2_prs_def_flow(struct mvpp2_port *port)
/* Update shadow table */
mvpp2_prs_shadow_set(port->priv, pe.index, MVPP2_PRS_LU_FLOWS);
} else {
- mvpp2_prs_init_from_hw(port->priv, &pe, tid);
+ __mvpp2_prs_init_from_hw(port->priv, &pe, tid);
}
mvpp2_prs_tcam_lu_set(&pe, MVPP2_PRS_LU_FLOWS);
mvpp2_prs_tcam_port_map_set(&pe, (1 << port->id));
mvpp2_prs_hw_write(port->priv, &pe);
+ spin_unlock_bh(&port->priv->prs_spinlock);
return 0;
}
@@ -2509,11 +2575,14 @@ int mvpp2_prs_hits(struct mvpp2 *priv, int index)
if (index > MVPP2_PRS_TCAM_SRAM_SIZE)
return -EINVAL;
+ spin_lock_bh(&priv->prs_spinlock);
+
mvpp2_write(priv, MVPP2_PRS_TCAM_HIT_IDX_REG, index);
val = mvpp2_read(priv, MVPP2_PRS_TCAM_HIT_CNT_REG);
val &= MVPP2_PRS_TCAM_HIT_CNT_MASK;
+ spin_unlock_bh(&priv->prs_spinlock);
return val;
}
--
2.39.5
next prev parent reply other threads:[~2025-04-08 12:39 UTC|newest]
Thread overview: 213+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-08 10:48 [PATCH 6.1 000/204] 6.1.134-rc1 review Greg Kroah-Hartman
2025-04-08 10:48 ` [PATCH 6.1 001/204] watch_queue: fix pipe accounting mismatch Greg Kroah-Hartman
2025-04-08 10:48 ` [PATCH 6.1 002/204] x86/mm/pat: cpa-test: fix length for CPA_ARRAY test Greg Kroah-Hartman
2025-04-08 10:48 ` [PATCH 6.1 003/204] cpufreq: scpi: compare kHz instead of Hz Greg Kroah-Hartman
2025-04-08 10:48 ` [PATCH 6.1 004/204] smack: dont compile ipv6 code unless ipv6 is configured Greg Kroah-Hartman
2025-04-08 10:48 ` [PATCH 6.1 005/204] cpufreq: governor: Fix negative idle_time handling in dbs_update() Greg Kroah-Hartman
2025-04-08 10:48 ` [PATCH 6.1 006/204] x86/fpu: Fix guest FPU state buffer allocation size Greg Kroah-Hartman
2025-04-08 10:48 ` [PATCH 6.1 007/204] x86/fpu: Avoid copying dynamic FP state from init_task in arch_dup_task_struct() Greg Kroah-Hartman
2025-04-08 10:48 ` [PATCH 6.1 008/204] x86/platform: Only allow CONFIG_EISA for 32-bit Greg Kroah-Hartman
2025-04-08 10:48 ` [PATCH 6.1 009/204] x86/sev: Add missing RIP_REL_REF() invocations during sme_enable() Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 010/204] lockdep/mm: Fix might_fault() lockdep check of current->mm->mmap_lock Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 011/204] PM: sleep: Adjust check before setting power.must_resume Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 012/204] selinux: Chain up tool resolving errors in install_policy.sh Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 013/204] EDAC/ie31200: Fix the size of EDAC_MC_LAYER_CHIP_SELECT layer Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 014/204] EDAC/ie31200: Fix the DIMM size mask for several SoCs Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 015/204] EDAC/ie31200: Fix the error path order of ie31200_init() Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 016/204] thermal: int340x: Add NULL check for adev Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 017/204] PM: sleep: Fix handling devices with direct_complete set on errors Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 018/204] lockdep: Dont disable interrupts on RT in disable_irq_nosync_lockdep.*() Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 019/204] perf/ring_buffer: Allow the EPOLLRDNORM flag for poll Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 020/204] x86/fpu/xstate: Fix inconsistencies in guest FPU xfeatures Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 021/204] media: verisilicon: HEVC: Initialize start_bit field Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 022/204] media: platform: allgro-dvt: unregister v4l2_device on the error path Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 023/204] ASoC: cs35l41: check the return value from spi_setup() Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 024/204] HID: remove superfluous (and wrong) Makefile entry for CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 025/204] ALSA: hda/realtek: Always honor no_shutup_pins Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 026/204] ASoC: ti: j721e-evm: Fix clock configuration for ti,j7200-cpb-audio compatible Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 027/204] drm/bridge: ti-sn65dsi86: Fix multiple instances Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 028/204] drm/dp_mst: Fix drm RAD print Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 029/204] drm/bridge: it6505: fix HDCP V match check is not performed correctly Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 030/204] drm: xlnx: zynqmp: Fix max dma segment size Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 031/204] drm/vkms: Fix use after free and double free on init error Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 032/204] PCI: Use downstream bridges for distributing resources Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 033/204] drm/mediatek: mtk_hdmi: Unregister audio platform device on failure Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 034/204] drm/mediatek: mtk_hdmi: Fix typo for aud_sampe_size member Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 035/204] PCI/ASPM: Fix link state exit during switch upstream function removal Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 036/204] drm/msm/dsi: Set PHY usescase (and mode) before registering DSI host Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 037/204] PCI: cadence-ep: Fix the driver to send MSG TLP for INTx without data payload Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 038/204] PCI: brcmstb: Use internal register to change link capability Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 039/204] PCI: brcmstb: Fix error path after a call to regulator_bulk_get() Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 040/204] PCI: brcmstb: Fix potential premature regulator disabling Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 041/204] PCI/portdrv: Only disable pciehp interrupts early when needed Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 042/204] PCI: Avoid reset when disabled via sysfs Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 043/204] drm/amd/display: fix type mismatch in CalculateDynamicMetadataParameters() Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 044/204] PCI: Remove stray put_device() in pci_register_host_bridge() Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 045/204] PCI: xilinx-cpm: Fix IRQ domain leak in error path of probe Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 046/204] drm/mediatek: dsi: fix error codes in mtk_dsi_host_transfer() Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 047/204] drm/amd/display: avoid NPD when ASIC does not support DMUB Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 048/204] PCI: pciehp: Dont enable HPIE when resuming in poll mode Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 049/204] fbdev: au1100fb: Move a variable assignment behind a null pointer check Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 050/204] mdacon: rework dependency list Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 051/204] fbdev: sm501fb: Add some geometry checks Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 052/204] clk: amlogic: gxbb: drop incorrect flag on 32k clock Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 053/204] crypto: hisilicon/sec2 - fix for aead authsize alignment Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 054/204] remoteproc: core: Clear table_sz when rproc_shutdown Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 055/204] of: property: Increase NR_FWNODE_REFERENCE_ARGS Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 056/204] remoteproc: qcom_q6v5_pas: Make single-PD handling more robust Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 057/204] libbpf: Fix hypothetical STT_SECTION extern NULL deref case Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 058/204] selftests/bpf: Fix string read in strncmp benchmark Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 059/204] clk: samsung: Fix UBSAN panic in samsung_clk_init() Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 060/204] clk: qcom: gcc-msm8953: fix stuck venus0_core0 clock Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 061/204] bpf: Use preempt_count() directly in bpf_send_signal_common() Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 062/204] lib: 842: Improve error handling in sw842_compress() Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 063/204] pinctrl: renesas: rza2: Fix missing of_node_put() call Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 064/204] pinctrl: renesas: rzg2l: " Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 065/204] clk: rockchip: rk3328: fix wrong clk_ref_usb3otg parent Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 066/204] RDMA/core: Dont expose hw_counters outside of init net namespace Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 067/204] RDMA/mlx5: Fix calculation of total invalidated pages Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 068/204] RDMA/erdma: Prevent use-after-free in erdma_accept_newconn() Greg Kroah-Hartman
2025-04-08 10:49 ` [PATCH 6.1 069/204] remoteproc: qcom_q6v5_mss: Handle platforms with one power domain Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 070/204] IB/mad: Check available slots before posting receive WRs Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 071/204] pinctrl: tegra: Set SFIO mode to Mux Register Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 072/204] clk: amlogic: g12b: fix cluster A parent data Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 073/204] clk: amlogic: gxbb: drop non existing 32k clock parent Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 074/204] selftests/bpf: Select NUMA_NO_NODE to create map Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 075/204] rust: fix signature of rust_fmt_argument Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 076/204] clk: amlogic: g12a: fix mmc A peripheral clock Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 077/204] x86/entry: Fix ORC unwinder for PUSH_REGS with save_ret=1 Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 078/204] power: supply: max77693: Fix wrong conversion of charge input threshold value Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 079/204] crypto: nx - Fix uninitialised hv_nxc on error Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 080/204] RDMA/mlx5: Fix mlx5_poll_one() cur_qp update flow Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 081/204] pinctrl: renesas: rzv2m: Fix missing of_node_put() call Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 082/204] mfd: sm501: Switch to BIT() to mitigate integer overflows Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 083/204] x86/dumpstack: Fix inaccurate unwinding from exception stacks due to misplaced assignment Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 084/204] crypto: hisilicon/sec2 - fix for aead auth key length Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 085/204] clk: qcom: mmcc-sdm660: fix stuck video_subcore0 clock Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 086/204] isofs: fix KMSAN uninit-value bug in do_isofs_readdir() Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 087/204] soundwire: slave: fix an OF node reference leak in soundwire slave device Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 088/204] coresight: catu: Fix number of pages while using 64k pages Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 089/204] coresight-etm4x: add isb() before reading the TRCSTATR Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 090/204] iio: accel: mma8452: Ensure error return on failure to matching oversampling ratio Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 091/204] iio: accel: msa311: Fix failure to release runtime pm if direct mode claim fails Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 092/204] usb: xhci: correct debug message page size calculation Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 093/204] fs/ntfs3: Fix a couple integer overflows on 32bit systems Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 094/204] iio: adc: ad7124: Fix comparison of channel configs Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 095/204] perf evlist: Add success path to evlist__create_syswide_maps Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 096/204] perf units: Fix insufficient array space Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 097/204] kexec: initialize ELF lowest address to ULONG_MAX Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 098/204] ocfs2: validate l_tree_depth to avoid out-of-bounds access Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 099/204] arch/powerpc: drop GENERIC_PTDUMP from mpc885_ads_defconfig Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 100/204] NFSv4: Dont trigger uneccessary scans for return-on-close delegations Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 101/204] fuse: fix dax truncate/punch_hole fault path Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 102/204] um: remove copy_from_kernel_nofault_allowed Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 103/204] i3c: master: svc: Fix missing the IBI rules Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 104/204] perf python: Fixup description of sample.id event member Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 105/204] perf python: Decrement the refcount of just created event on failure Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 106/204] perf python: Dont keep a raw_data pointer to consumed ring buffer space Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 107/204] perf python: Check if there is space to copy all the event Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 108/204] staging: rtl8723bs: select CONFIG_CRYPTO_LIB_AES Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 109/204] fs/procfs: fix the comment above proc_pid_wchan() Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 110/204] perf tools: annotate asm_pure_loop.S Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 111/204] objtool, media: dib8000: Prevent divide-by-zero in dib8000_set_dds() Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 112/204] exfat: fix the infinite loop in exfat_find_last_cluster() Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 113/204] rtnetlink: Allocate vfinfo size for VF GUIDs when supported Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 114/204] rndis_host: Flag RNDIS modems as WWAN devices Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 115/204] ksmbd: use aead_request_free to match aead_request_alloc Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 116/204] ksmbd: fix multichannel connection failure Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 117/204] net/mlx5e: SHAMPO, Make reserved size independent of page size Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 118/204] ring-buffer: Fix bytes_dropped calculation issue Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 119/204] LoongArch: Fix help text of CMDLINE_EXTEND in Kconfig Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 120/204] ACPI: processor: idle: Return an error if both P_LVL{2,3} idle states are invalid Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 121/204] octeontx2-af: Fix mbox INTR handler when num VFs > 64 Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 122/204] octeontx2-af: Free NIX_AF_INT_VEC_GEN irq Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 123/204] sched/smt: Always inline sched_smt_active() Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 124/204] context_tracking: Always inline ct_{nmi,irq}_{enter,exit}() Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 125/204] rcu-tasks: Always inline rcu_irq_work_resched() Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 126/204] wifi: iwlwifi: fw: allocate chained SG tables for dump Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 127/204] wifi: iwlwifi: mvm: use the right version of the rate API Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 128/204] nvme-tcp: fix possible UAF in nvme_tcp_poll Greg Kroah-Hartman
2025-04-08 10:50 ` [PATCH 6.1 129/204] nvme-pci: clean up CMBMSC when registering CMB fails Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 130/204] nvme-pci: skip CMB blocks incompatible with PCI P2P DMA Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 131/204] wifi: brcmfmac: keep power during suspend if board requires it Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 132/204] affs: generate OFS sequence numbers starting at 1 Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 133/204] affs: dont write overlarge OFS data block size fields Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 134/204] ALSA: hda/realtek: Fix Asus Z13 2025 audio Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 135/204] ALSA: hda: Fix speakers on ASUS EXPERTBOOK P5405CSA 1.0 Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 136/204] platform/x86: intel-hid: fix volume buttons on Microsoft Surface Go 4 tablet Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 137/204] HID: i2c-hid: improve i2c_hid_get_report error message Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 138/204] ALSA: hda/realtek: Add support for ASUS ROG Strix G614 Laptops using CS35L41 HDA Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 139/204] ALSA: hda/realtek: Add support for ASUS Zenbook UM3406KA " Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 140/204] sched/deadline: Use online cpus for validating runtime Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 141/204] locking/semaphore: Use wake_q to wake up processes outside lock critical section Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 142/204] x86/sgx: Warn explicitly if X86_FEATURE_SGX_LC is not enabled Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 143/204] drm/amd: Keep display off while going into S4 Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 144/204] ALSA: hda/realtek: Add mute LED quirk for HP Pavilion x360 14-dy1xxx Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 145/204] can: statistics: use atomic access in hot path Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 146/204] memory: omap-gpmc: drop no compatible check Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 147/204] hwmon: (nct6775-core) Fix out of bounds access for NCT679{8,9} Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 148/204] spufs: fix a leak on spufs_new_file() failure Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 149/204] spufs: fix gang directory lifetimes Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 150/204] spufs: fix a leak in spufs_create_context() Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 151/204] riscv: ftrace: Add parentheses in macro definitions of make_call_t0 and make_call_ra Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 152/204] ntb_hw_switchtec: Fix shift-out-of-bounds in switchtec_ntb_mw_set_trans Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 153/204] ntb: intel: Fix using link status DBs Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 154/204] ASoC: imx-card: Add NULL check in imx_card_probe() Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 155/204] netfilter: nft_set_hash: GC reaps elements with conncount for dynamic sets only Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 156/204] netlabel: Fix NULL pointer exception caused by CALIPSO on IPv4 sockets Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 157/204] net_sched: skbprio: Remove overly strict queue assertions Greg Kroah-Hartman
2025-04-08 10:51 ` Greg Kroah-Hartman [this message]
2025-04-08 10:51 ` [PATCH 6.1 159/204] udp: Fix memory accounting leak Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 160/204] vsock: avoid timeout during connect() if the socket is closing Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 161/204] tunnels: Accept PACKET_HOST in skb_tunnel_check_pmtu() Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 162/204] netfilter: nft_tunnel: fix geneve_opt type confusion addition Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 163/204] ipv6: fix omitted netlink attributes when using RTEXT_FILTER_SKIP_STATS Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 164/204] net: dsa: mv88e6xxx: propperly shutdown PPU re-enable timer on destroy Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 165/204] net: fix geneve_opt length integer overflow Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 166/204] ipv6: Start path selection from the first nexthop Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 167/204] ipv6: Do not consider link down nexthops in path selection Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 168/204] arcnet: Add NULL check in com20020pci_probe() Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 169/204] io_uring/filetable: ensure node switch is always done, if needed Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 170/204] drm/amdgpu/gfx11: fix num_mec Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 171/204] tty: serial: fsl_lpuart: use UARTMODIR register bits for lpuart32 platform Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 172/204] tty: serial: fsl_lpuart: disable transmitter before changing RS485 related registers Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 173/204] usbnet:fix NPE during rx_complete Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 174/204] LoongArch: Increase ARCH_DMA_MINALIGN up to 16 Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 175/204] LoongArch: BPF: Fix off-by-one error in build_prologue() Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 176/204] LoongArch: BPF: Use move_addr() for BPF_PSEUDO_FUNC Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 177/204] platform/x86: ISST: Correct command storage data length Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 178/204] ntb_perf: Delete duplicate dmaengine_unmap_put() call in perf_copy_chunk() Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 179/204] perf/x86/intel: Apply static call for drain_pebs Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 180/204] perf/x86/intel: Avoid disable PMU if !cpuc->enabled in sample read Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 181/204] kunit/overflow: Fix UB in overflow_allocation_test Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 182/204] btrfs: handle errors from btrfs_dec_ref() properly Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 183/204] x86/tsc: Always save/restore TSC sched_clock() on suspend/resume Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 184/204] x86/mm: Fix flush_tlb_range() when used for zapping normal PMDs Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 185/204] acpi: nfit: fix narrowing conversion in acpi_nfit_ctl Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 186/204] ACPI: resource: Skip IRQ override on ASUS Vivobook 14 X1404VAP Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 187/204] mmc: sdhci-pxav3: set NEED_RSP_BUSY capability Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 188/204] mmc: sdhci-omap: Disable MMC_CAP_AGGRESSIVE_PM for eMMC/SD Greg Kroah-Hartman
2025-04-08 10:51 ` [PATCH 6.1 189/204] ksmbd: add bounds check for create lease context Greg Kroah-Hartman
2025-04-08 10:52 ` [PATCH 6.1 190/204] ksmbd: fix use-after-free in ksmbd_sessions_deregister() Greg Kroah-Hartman
2025-04-08 10:52 ` [PATCH 6.1 191/204] ksmbd: fix session use-after-free in multichannel connection Greg Kroah-Hartman
2025-04-08 10:52 ` [PATCH 6.1 192/204] ksmbd: validate zero num_subauth before sub_auth is accessed Greg Kroah-Hartman
2025-04-08 10:52 ` [PATCH 6.1 193/204] tracing: Fix use-after-free in print_graph_function_flags during tracer switching Greg Kroah-Hartman
2025-04-08 10:52 ` [PATCH 6.1 194/204] tracing: Ensure module defining synth event cannot be unloaded while tracing Greg Kroah-Hartman
2025-04-08 10:52 ` [PATCH 6.1 195/204] tracing: Fix synth event printk format for str fields Greg Kroah-Hartman
2025-04-08 10:52 ` [PATCH 6.1 196/204] tracing/osnoise: Fix possible recursive locking for cpus_read_lock() Greg Kroah-Hartman
2025-04-08 10:52 ` [PATCH 6.1 197/204] arm64: Dont call NULL in do_compat_alignment_fixup() Greg Kroah-Hartman
2025-04-08 10:52 ` [PATCH 6.1 198/204] ext4: dont over-report free space or inodes in statvfs Greg Kroah-Hartman
2025-04-08 10:52 ` [PATCH 6.1 199/204] ext4: fix OOB read when checking dotdot dir Greg Kroah-Hartman
2025-04-08 10:52 ` [PATCH 6.1 200/204] jfs: fix slab-out-of-bounds read in ea_get() Greg Kroah-Hartman
2025-04-08 10:52 ` [PATCH 6.1 201/204] jfs: add index corruption check to DT_GETPAGE() Greg Kroah-Hartman
2025-04-08 10:52 ` [PATCH 6.1 202/204] media: streamzap: fix race between device disconnection and urb callback Greg Kroah-Hartman
2025-04-08 10:52 ` [PATCH 6.1 203/204] nfsd: put dl_stid if fail to queue dl_recall Greg Kroah-Hartman
2025-04-08 10:52 ` [PATCH 6.1 204/204] NFSD: Skip sending CB_RECALL_ANY when the backchannel isnt up Greg Kroah-Hartman
2025-04-08 15:07 ` [PATCH 6.1 000/204] 6.1.134-rc1 review Mark Brown
2025-04-08 20:27 ` Pavel Machek
2025-04-08 22:05 ` Florian Fainelli
2025-04-08 22:14 ` Peter Schneider
2025-04-09 2:35 ` SeongJae Park
2025-04-09 6:54 ` Ron Economos
2025-04-09 8:00 ` Jon Hunter
2025-04-09 8:44 ` Naresh Kamboju
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250408104824.949648357@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=kuba@kernel.org \
--cc=maxime.chevallier@bootlin.com \
--cc=patches@lists.linux.dev \
--cc=sashal@kernel.org \
--cc=stable@vger.kernel.org \
--cc=tobias@waldekranz.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).