net: mscc: ocelot: warn when encoding an out-of-bounds watermark value
authorVladimir Oltean <vladimir.oltean@nxp.com>
Mon, 5 Oct 2020 09:09:12 +0000 (12:09 +0300)
committerDavid S. Miller <davem@davemloft.net>
Tue, 6 Oct 2020 13:05:47 +0000 (06:05 -0700)
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>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/ocelot/felix_vsc9959.c
drivers/net/dsa/ocelot/seville_vsc9953.c
drivers/net/ethernet/mscc/ocelot_vsc7514.c

index d9c9084..3a96374 100644 (file)
@@ -1171,6 +1171,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);
 
index 110070a..9e9fd19 100644 (file)
@@ -911,6 +911,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);
 
index dfb1535..8a69176 100644 (file)
@@ -745,6 +745,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);