diff mbox series

[net] net: mvpp2: prs: Don't override the sign bit in SRAM parser shift

Message ID 20190619145413.21852-1-maxime.chevallier@bootlin.com
State Superseded
Delegated to: David Miller
Headers show
Series [net] net: mvpp2: prs: Don't override the sign bit in SRAM parser shift | expand

Commit Message

Maxime Chevallier June 19, 2019, 2:54 p.m. UTC
The Header Parser allows identifying various fields in the packet
headers, used for for various kind of filtering and classification
steps.

This is a re-entrant process, where the offset in the packet header
depends on the previous lookup results. This offset is represented in
the SRAM results of the TCAM, as a shift to be operated.

This shift can be negative in some cases, such as in IPv6 parsing.

This commit prevents overriding the sign bit when setting the shift
value, which could cause instabilities when parsing IPv6 flows.

Fixes: 3f518509dedc ("ethernet: Add new driver for Marvell Armada 375 network unit")
Suggested-by: Alan Winkowski <walan@marvell.com>
Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
---
 drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Sergei Shtylyov June 20, 2019, 8:58 a.m. UTC | #1
On 19.06.2019 17:54, Maxime Chevallier wrote:

> The Header Parser allows identifying various fields in the packet
> headers, used for for various kind of filtering and classification

    One "for" is enough. :-)

> steps.
> 
> This is a re-entrant process, where the offset in the packet header
> depends on the previous lookup results. This offset is represented in
> the SRAM results of the TCAM, as a shift to be operated.
> 
> This shift can be negative in some cases, such as in IPv6 parsing.
> 
> This commit prevents overriding the sign bit when setting the shift
> value, which could cause instabilities when parsing IPv6 flows.
> 
> Fixes: 3f518509dedc ("ethernet: Add new driver for Marvell Armada 375 network unit")
> Suggested-by: Alan Winkowski <walan@marvell.com>
> Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
[...]

MBR, Sergei
diff mbox series

Patch

diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.c
index ae2240074d8e..5692c6087bbb 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.c
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.c
@@ -312,7 +312,8 @@  static void mvpp2_prs_sram_shift_set(struct mvpp2_prs_entry *pe, int shift,
 	}
 
 	/* Set value */
-	pe->sram[MVPP2_BIT_TO_WORD(MVPP2_PRS_SRAM_SHIFT_OFFS)] = shift & MVPP2_PRS_SRAM_SHIFT_MASK;
+	pe->sram[MVPP2_BIT_TO_WORD(MVPP2_PRS_SRAM_SHIFT_OFFS)] |=
+		shift & MVPP2_PRS_SRAM_SHIFT_MASK;
 
 	/* Reset and set operation */
 	mvpp2_prs_sram_bits_clear(pe, MVPP2_PRS_SRAM_OP_SEL_SHIFT_OFFS,