All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net 0/2] Fix tail dropping watermarks for Ocelot switches
@ 2020-10-05  9:09 Vladimir Oltean
  2020-10-05  9:09 ` [PATCH net 1/2] net: mscc: ocelot: divide watermark value by 60 when writing to SYS_ATOP Vladimir Oltean
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Vladimir Oltean @ 2020-10-05  9:09 UTC (permalink / raw)
  To: davem
  Cc: alexandre.belloni, andrew, f.fainelli, vivien.didelot,
	alexandru.marginean, claudiu.manoil, xiaoliang.yang_1,
	hongbo.wang, netdev, UNGLinuxDriver

This series adds a missing division by 60, and a warning to prevent that
in the future.

Vladimir Oltean (2):
  net: mscc: ocelot: divide watermark value by 60 when writing to
    SYS_ATOP
  net: mscc: ocelot: warn when encoding an out-of-bounds watermark value

 drivers/net/dsa/ocelot/felix_vsc9959.c     |  2 ++
 drivers/net/dsa/ocelot/seville_vsc9953.c   |  2 ++
 drivers/net/ethernet/mscc/ocelot.c         | 12 ++++++------
 drivers/net/ethernet/mscc/ocelot_vsc7514.c |  2 ++
 4 files changed, 12 insertions(+), 6 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH net 1/2] net: mscc: ocelot: divide watermark value by 60 when writing to SYS_ATOP
  2020-10-05  9:09 [PATCH net 0/2] Fix tail dropping watermarks for Ocelot switches Vladimir Oltean
@ 2020-10-05  9:09 ` Vladimir Oltean
  2020-10-05  9:09 ` [PATCH net 2/2] net: mscc: ocelot: warn when encoding an out-of-bounds watermark value Vladimir Oltean
  2020-10-06 13:06 ` [PATCH net 0/2] Fix tail dropping watermarks for Ocelot switches David Miller
  2 siblings, 0 replies; 4+ messages in thread
From: Vladimir Oltean @ 2020-10-05  9:09 UTC (permalink / raw)
  To: davem
  Cc: alexandre.belloni, andrew, f.fainelli, vivien.didelot,
	alexandru.marginean, claudiu.manoil, xiaoliang.yang_1,
	hongbo.wang, netdev, UNGLinuxDriver

Tail dropping is enabled for a port when:

1. A source port consumes more packet buffers than the watermark encoded
   in SYS:PORT:ATOP_CFG.ATOP.

AND

2. Total memory use exceeds the consumption watermark encoded in
   SYS:PAUSE_CFG:ATOP_TOT_CFG.

The unit of these watermarks is a 60 byte memory cell. That unit is
programmed properly into ATOP_TOT_CFG, but not into ATOP. Actually when
written into ATOP, it would get truncated and wrap around.

Fixes: a556c76adc05 ("net: mscc: Add initial Ocelot switch support")
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
---
 drivers/net/ethernet/mscc/ocelot.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/mscc/ocelot.c b/drivers/net/ethernet/mscc/ocelot.c
index e026617d6133..f435dc4d5573 100644
--- a/drivers/net/ethernet/mscc/ocelot.c
+++ b/drivers/net/ethernet/mscc/ocelot.c
@@ -1253,7 +1253,7 @@ void ocelot_port_set_maxlen(struct ocelot *ocelot, int port, size_t sdu)
 	struct ocelot_port *ocelot_port = ocelot->ports[port];
 	int maxlen = sdu + ETH_HLEN + ETH_FCS_LEN;
 	int pause_start, pause_stop;
-	int atop_wm;
+	int atop, atop_tot;
 
 	if (port == ocelot->npi) {
 		maxlen += OCELOT_TAG_LEN;
@@ -1274,12 +1274,12 @@ void ocelot_port_set_maxlen(struct ocelot *ocelot, int port, size_t sdu)
 	ocelot_fields_write(ocelot, port, SYS_PAUSE_CFG_PAUSE_STOP,
 			    pause_stop);
 
-	/* Tail dropping watermark */
-	atop_wm = (ocelot->shared_queue_sz - 9 * maxlen) /
+	/* Tail dropping watermarks */
+	atop_tot = (ocelot->shared_queue_sz - 9 * maxlen) /
 		   OCELOT_BUFFER_CELL_SZ;
-	ocelot_write_rix(ocelot, ocelot->ops->wm_enc(9 * maxlen),
-			 SYS_ATOP, port);
-	ocelot_write(ocelot, ocelot->ops->wm_enc(atop_wm), SYS_ATOP_TOT_CFG);
+	atop = (9 * maxlen) / OCELOT_BUFFER_CELL_SZ;
+	ocelot_write_rix(ocelot, ocelot->ops->wm_enc(atop), SYS_ATOP, port);
+	ocelot_write(ocelot, ocelot->ops->wm_enc(atop_tot), SYS_ATOP_TOT_CFG);
 }
 EXPORT_SYMBOL(ocelot_port_set_maxlen);
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH net 2/2] net: mscc: ocelot: warn when encoding an out-of-bounds watermark value
  2020-10-05  9:09 [PATCH net 0/2] Fix tail dropping watermarks for Ocelot switches Vladimir Oltean
  2020-10-05  9:09 ` [PATCH net 1/2] net: mscc: ocelot: divide watermark value by 60 when writing to SYS_ATOP Vladimir Oltean
@ 2020-10-05  9:09 ` Vladimir Oltean
  2020-10-06 13:06 ` [PATCH net 0/2] Fix tail dropping watermarks for Ocelot switches David Miller
  2 siblings, 0 replies; 4+ messages in thread
From: Vladimir Oltean @ 2020-10-05  9:09 UTC (permalink / raw)
  To: davem
  Cc: alexandre.belloni, andrew, f.fainelli, vivien.didelot,
	alexandru.marginean, claudiu.manoil, xiaoliang.yang_1,
	hongbo.wang, netdev, UNGLinuxDriver

There is an upper bound to the value that a watermark may hold. That
upper bound is not immediately obvious during configuration, and it
might be possible to have accidental truncation.

Actually this has happened already, add a warning to prevent it from
happening again.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
---
 drivers/net/dsa/ocelot/felix_vsc9959.c     | 2 ++
 drivers/net/dsa/ocelot/seville_vsc9953.c   | 2 ++
 drivers/net/ethernet/mscc/ocelot_vsc7514.c | 2 ++
 3 files changed, 6 insertions(+)

diff --git a/drivers/net/dsa/ocelot/felix_vsc9959.c b/drivers/net/dsa/ocelot/felix_vsc9959.c
index 4fc67ff212de..cb0f3d28ecac 100644
--- a/drivers/net/dsa/ocelot/felix_vsc9959.c
+++ b/drivers/net/dsa/ocelot/felix_vsc9959.c
@@ -998,6 +998,8 @@ static int vsc9959_prevalidate_phy_mode(struct ocelot *ocelot, int port,
  */
 static u16 vsc9959_wm_enc(u16 value)
 {
+	WARN_ON(value >= 16 * BIT(8));
+
 	if (value >= BIT(8))
 		return BIT(8) | (value / 16);
 
diff --git a/drivers/net/dsa/ocelot/seville_vsc9953.c b/drivers/net/dsa/ocelot/seville_vsc9953.c
index e993f3eac3eb..76576cf0ba8a 100644
--- a/drivers/net/dsa/ocelot/seville_vsc9953.c
+++ b/drivers/net/dsa/ocelot/seville_vsc9953.c
@@ -1049,6 +1049,8 @@ static int vsc9953_prevalidate_phy_mode(struct ocelot *ocelot, int port,
  */
 static u16 vsc9953_wm_enc(u16 value)
 {
+	WARN_ON(value >= 16 * BIT(9));
+
 	if (value >= BIT(9))
 		return BIT(9) | (value / 16);
 
diff --git a/drivers/net/ethernet/mscc/ocelot_vsc7514.c b/drivers/net/ethernet/mscc/ocelot_vsc7514.c
index f3e54589e6d6..79b88bc69c75 100644
--- a/drivers/net/ethernet/mscc/ocelot_vsc7514.c
+++ b/drivers/net/ethernet/mscc/ocelot_vsc7514.c
@@ -754,6 +754,8 @@ static int ocelot_reset(struct ocelot *ocelot)
  */
 static u16 ocelot_wm_enc(u16 value)
 {
+	WARN_ON(value >= 16 * BIT(8));
+
 	if (value >= BIT(8))
 		return BIT(8) | (value / 16);
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH net 0/2] Fix tail dropping watermarks for Ocelot switches
  2020-10-05  9:09 [PATCH net 0/2] Fix tail dropping watermarks for Ocelot switches Vladimir Oltean
  2020-10-05  9:09 ` [PATCH net 1/2] net: mscc: ocelot: divide watermark value by 60 when writing to SYS_ATOP Vladimir Oltean
  2020-10-05  9:09 ` [PATCH net 2/2] net: mscc: ocelot: warn when encoding an out-of-bounds watermark value Vladimir Oltean
@ 2020-10-06 13:06 ` David Miller
  2 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2020-10-06 13:06 UTC (permalink / raw)
  To: vladimir.oltean
  Cc: alexandre.belloni, andrew, f.fainelli, vivien.didelot,
	alexandru.marginean, claudiu.manoil, xiaoliang.yang_1,
	hongbo.wang, netdev, UNGLinuxDriver

From: Vladimir Oltean <vladimir.oltean@nxp.com>
Date: Mon,  5 Oct 2020 12:09:10 +0300

> This series adds a missing division by 60, and a warning to prevent that
> in the future.

Series applied, thank you.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-10-06 13:06 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-05  9:09 [PATCH net 0/2] Fix tail dropping watermarks for Ocelot switches Vladimir Oltean
2020-10-05  9:09 ` [PATCH net 1/2] net: mscc: ocelot: divide watermark value by 60 when writing to SYS_ATOP Vladimir Oltean
2020-10-05  9:09 ` [PATCH net 2/2] net: mscc: ocelot: warn when encoding an out-of-bounds watermark value Vladimir Oltean
2020-10-06 13:06 ` [PATCH net 0/2] Fix tail dropping watermarks for Ocelot switches David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.