* [PATCH v2 net-next 1/4] net: dsa: mv88e6xxx: remove ATU age out violation print
2022-12-09 17:28 [PATCH v2 net-next 0/4] Trace points for mv88e6xxx Vladimir Oltean
@ 2022-12-09 17:28 ` Vladimir Oltean
2022-12-10 0:05 ` Florian Fainelli
2022-12-09 17:28 ` [PATCH v2 net-next 2/4] net: dsa: mv88e6xxx: read FID when handling ATU violations Vladimir Oltean
` (3 subsequent siblings)
4 siblings, 1 reply; 13+ messages in thread
From: Vladimir Oltean @ 2022-12-09 17:28 UTC (permalink / raw)
To: netdev
Cc: Andrew Lunn, Florian Fainelli, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Hans J. Schultz, Saeed Mahameed
Currently, the MV88E6XXX_PORT_ASSOC_VECTOR_INT_AGE_OUT bit (interrupt on
age out) is not enabled by the driver, and as a result, the print for
age out violations is dead code.
Remove it until there is some way for this to be triggered.
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
---
v1->v2: patch is new
drivers/net/dsa/mv88e6xxx/global1_atu.c | 6 ------
1 file changed, 6 deletions(-)
diff --git a/drivers/net/dsa/mv88e6xxx/global1_atu.c b/drivers/net/dsa/mv88e6xxx/global1_atu.c
index 40bd67a5c8e9..7a1c4b917339 100644
--- a/drivers/net/dsa/mv88e6xxx/global1_atu.c
+++ b/drivers/net/dsa/mv88e6xxx/global1_atu.c
@@ -378,12 +378,6 @@ static irqreturn_t mv88e6xxx_g1_atu_prob_irq_thread_fn(int irq, void *dev_id)
spid = entry.state;
- if (val & MV88E6XXX_G1_ATU_OP_AGE_OUT_VIOLATION) {
- dev_err_ratelimited(chip->dev,
- "ATU age out violation for %pM\n",
- entry.mac);
- }
-
if (val & MV88E6XXX_G1_ATU_OP_MEMBER_VIOLATION) {
dev_err_ratelimited(chip->dev,
"ATU member violation for %pM portvec %x spid %d\n",
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH v2 net-next 1/4] net: dsa: mv88e6xxx: remove ATU age out violation print
2022-12-09 17:28 ` [PATCH v2 net-next 1/4] net: dsa: mv88e6xxx: remove ATU age out violation print Vladimir Oltean
@ 2022-12-10 0:05 ` Florian Fainelli
0 siblings, 0 replies; 13+ messages in thread
From: Florian Fainelli @ 2022-12-10 0:05 UTC (permalink / raw)
To: Vladimir Oltean, netdev
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Hans J. Schultz, Saeed Mahameed
On 12/9/22 09:28, Vladimir Oltean wrote:
> Currently, the MV88E6XXX_PORT_ASSOC_VECTOR_INT_AGE_OUT bit (interrupt on
> age out) is not enabled by the driver, and as a result, the print for
> age out violations is dead code.
>
> Remove it until there is some way for this to be triggered.
>
> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
--
Florian
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 net-next 2/4] net: dsa: mv88e6xxx: read FID when handling ATU violations
2022-12-09 17:28 [PATCH v2 net-next 0/4] Trace points for mv88e6xxx Vladimir Oltean
2022-12-09 17:28 ` [PATCH v2 net-next 1/4] net: dsa: mv88e6xxx: remove ATU age out violation print Vladimir Oltean
@ 2022-12-09 17:28 ` Vladimir Oltean
2022-12-10 0:05 ` Florian Fainelli
2022-12-09 17:28 ` [PATCH v2 net-next 3/4] net: dsa: mv88e6xxx: replace ATU violation prints with trace points Vladimir Oltean
` (2 subsequent siblings)
4 siblings, 1 reply; 13+ messages in thread
From: Vladimir Oltean @ 2022-12-09 17:28 UTC (permalink / raw)
To: netdev
Cc: Andrew Lunn, Florian Fainelli, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Hans J. Schultz, Saeed Mahameed
From: "Hans J. Schultz" <netdev@kapio-technology.com>
When an ATU violation occurs, the switch uses the ATU FID register to
report the FID of the MAC address that incurred the violation. It would
be good for the driver to know the FID value for purposes such as
logging and CPU-based authentication.
Up until now, the driver has been calling the mv88e6xxx_g1_atu_op()
function to read ATU violations, but that doesn't do exactly what we
want, namely it calls mv88e6xxx_g1_atu_fid_write() with FID 0.
(side note, the documentation for the ATU Get/Clear Violation command
says that writes to the ATU FID register have no effect before the
operation starts, it's only that we disregard the value that this
register provides once the operation completes)
So mv88e6xxx_g1_atu_fid_write() is not what we want, but rather
mv88e6xxx_g1_atu_fid_read(). However, the latter doesn't exist, we need
to write it.
The remainder of mv88e6xxx_g1_atu_op() except for
mv88e6xxx_g1_atu_fid_write() is still needed, namely to send a
GET_CLR_VIOLATION command to the ATU. In principle we could have still
kept calling mv88e6xxx_g1_atu_op(), but the MDIO writes to the ATU FID
register are pointless, but in the interest of doing less CPU work per
interrupt, write a new function called mv88e6xxx_g1_read_atu_violation()
and call it.
The FID will be the port default FID as set by mv88e6xxx_port_set_fid()
if the VID from the packet cannot be found in the VTU. Otherwise it is
the FID derived from the VTU entry associated with that VID.
Signed-off-by: Hans J. Schultz <netdev@kapio-technology.com>
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
---
v1->v2:
- remove FID printing in ATU age out violation
- add last paragraph in commit message
drivers/net/dsa/mv88e6xxx/global1_atu.c | 72 +++++++++++++++++++++----
1 file changed, 61 insertions(+), 11 deletions(-)
diff --git a/drivers/net/dsa/mv88e6xxx/global1_atu.c b/drivers/net/dsa/mv88e6xxx/global1_atu.c
index 7a1c4b917339..b7e62ff4b599 100644
--- a/drivers/net/dsa/mv88e6xxx/global1_atu.c
+++ b/drivers/net/dsa/mv88e6xxx/global1_atu.c
@@ -114,6 +114,19 @@ static int mv88e6xxx_g1_atu_op_wait(struct mv88e6xxx_chip *chip)
return mv88e6xxx_g1_wait_bit(chip, MV88E6XXX_G1_ATU_OP, bit, 0);
}
+static int mv88e6xxx_g1_read_atu_violation(struct mv88e6xxx_chip *chip)
+{
+ int err;
+
+ err = mv88e6xxx_g1_write(chip, MV88E6XXX_G1_ATU_OP,
+ MV88E6XXX_G1_ATU_OP_BUSY |
+ MV88E6XXX_G1_ATU_OP_GET_CLR_VIOLATION);
+ if (err)
+ return err;
+
+ return mv88e6xxx_g1_atu_op_wait(chip);
+}
+
static int mv88e6xxx_g1_atu_op(struct mv88e6xxx_chip *chip, u16 fid, u16 op)
{
u16 val;
@@ -159,6 +172,41 @@ int mv88e6xxx_g1_atu_get_next(struct mv88e6xxx_chip *chip, u16 fid)
return mv88e6xxx_g1_atu_op(chip, fid, MV88E6XXX_G1_ATU_OP_GET_NEXT_DB);
}
+static int mv88e6xxx_g1_atu_fid_read(struct mv88e6xxx_chip *chip, u16 *fid)
+{
+ u16 val = 0, upper = 0, op = 0;
+ int err = -EOPNOTSUPP;
+
+ if (mv88e6xxx_num_databases(chip) > 256) {
+ err = mv88e6xxx_g1_read(chip, MV88E6352_G1_ATU_FID, &val);
+ val &= 0xfff;
+ if (err)
+ return err;
+ } else {
+ err = mv88e6xxx_g1_read(chip, MV88E6XXX_G1_ATU_OP, &op);
+ if (err)
+ return err;
+ if (mv88e6xxx_num_databases(chip) > 64) {
+ /* ATU DBNum[7:4] are located in ATU Control 15:12 */
+ err = mv88e6xxx_g1_read(chip, MV88E6XXX_G1_ATU_CTL,
+ &upper);
+ if (err)
+ return err;
+
+ upper = (upper >> 8) & 0x00f0;
+ } else if (mv88e6xxx_num_databases(chip) > 16) {
+ /* ATU DBNum[5:4] are located in ATU Operation 9:8 */
+ upper = (op >> 4) & 0x30;
+ }
+
+ /* ATU DBNum[3:0] are located in ATU Operation 3:0 */
+ val = (op & 0xf) | upper;
+ }
+ *fid = val;
+
+ return err;
+}
+
/* Offset 0x0C: ATU Data Register */
static int mv88e6xxx_g1_atu_data_read(struct mv88e6xxx_chip *chip,
@@ -353,14 +401,12 @@ static irqreturn_t mv88e6xxx_g1_atu_prob_irq_thread_fn(int irq, void *dev_id)
{
struct mv88e6xxx_chip *chip = dev_id;
struct mv88e6xxx_atu_entry entry;
- int spid;
- int err;
- u16 val;
+ int err, spid;
+ u16 val, fid;
mv88e6xxx_reg_lock(chip);
- err = mv88e6xxx_g1_atu_op(chip, 0,
- MV88E6XXX_G1_ATU_OP_GET_CLR_VIOLATION);
+ err = mv88e6xxx_g1_read_atu_violation(chip);
if (err)
goto out;
@@ -368,6 +414,10 @@ static irqreturn_t mv88e6xxx_g1_atu_prob_irq_thread_fn(int irq, void *dev_id)
if (err)
goto out;
+ err = mv88e6xxx_g1_atu_fid_read(chip, &fid);
+ if (err)
+ goto out;
+
err = mv88e6xxx_g1_atu_data_read(chip, &entry);
if (err)
goto out;
@@ -380,22 +430,22 @@ static irqreturn_t mv88e6xxx_g1_atu_prob_irq_thread_fn(int irq, void *dev_id)
if (val & MV88E6XXX_G1_ATU_OP_MEMBER_VIOLATION) {
dev_err_ratelimited(chip->dev,
- "ATU member violation for %pM portvec %x spid %d\n",
- entry.mac, entry.portvec, spid);
+ "ATU member violation for %pM fid %u portvec %x spid %d\n",
+ entry.mac, fid, entry.portvec, spid);
chip->ports[spid].atu_member_violation++;
}
if (val & MV88E6XXX_G1_ATU_OP_MISS_VIOLATION) {
dev_err_ratelimited(chip->dev,
- "ATU miss violation for %pM portvec %x spid %d\n",
- entry.mac, entry.portvec, spid);
+ "ATU miss violation for %pM fid %u portvec %x spid %d\n",
+ entry.mac, fid, entry.portvec, spid);
chip->ports[spid].atu_miss_violation++;
}
if (val & MV88E6XXX_G1_ATU_OP_FULL_VIOLATION) {
dev_err_ratelimited(chip->dev,
- "ATU full violation for %pM portvec %x spid %d\n",
- entry.mac, entry.portvec, spid);
+ "ATU full violation for %pM fid %u portvec %x spid %d\n",
+ entry.mac, fid, entry.portvec, spid);
chip->ports[spid].atu_full_violation++;
}
mv88e6xxx_reg_unlock(chip);
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH v2 net-next 2/4] net: dsa: mv88e6xxx: read FID when handling ATU violations
2022-12-09 17:28 ` [PATCH v2 net-next 2/4] net: dsa: mv88e6xxx: read FID when handling ATU violations Vladimir Oltean
@ 2022-12-10 0:05 ` Florian Fainelli
0 siblings, 0 replies; 13+ messages in thread
From: Florian Fainelli @ 2022-12-10 0:05 UTC (permalink / raw)
To: Vladimir Oltean, netdev
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Hans J. Schultz, Saeed Mahameed
On 12/9/22 09:28, Vladimir Oltean wrote:
> From: "Hans J. Schultz" <netdev@kapio-technology.com>
>
> When an ATU violation occurs, the switch uses the ATU FID register to
> report the FID of the MAC address that incurred the violation. It would
> be good for the driver to know the FID value for purposes such as
> logging and CPU-based authentication.
>
> Up until now, the driver has been calling the mv88e6xxx_g1_atu_op()
> function to read ATU violations, but that doesn't do exactly what we
> want, namely it calls mv88e6xxx_g1_atu_fid_write() with FID 0.
> (side note, the documentation for the ATU Get/Clear Violation command
> says that writes to the ATU FID register have no effect before the
> operation starts, it's only that we disregard the value that this
> register provides once the operation completes)
>
> So mv88e6xxx_g1_atu_fid_write() is not what we want, but rather
> mv88e6xxx_g1_atu_fid_read(). However, the latter doesn't exist, we need
> to write it.
>
> The remainder of mv88e6xxx_g1_atu_op() except for
> mv88e6xxx_g1_atu_fid_write() is still needed, namely to send a
> GET_CLR_VIOLATION command to the ATU. In principle we could have still
> kept calling mv88e6xxx_g1_atu_op(), but the MDIO writes to the ATU FID
> register are pointless, but in the interest of doing less CPU work per
> interrupt, write a new function called mv88e6xxx_g1_read_atu_violation()
> and call it.
>
> The FID will be the port default FID as set by mv88e6xxx_port_set_fid()
> if the VID from the packet cannot be found in the VTU. Otherwise it is
> the FID derived from the VTU entry associated with that VID.
>
> Signed-off-by: Hans J. Schultz <netdev@kapio-technology.com>
> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
--
Florian
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 net-next 3/4] net: dsa: mv88e6xxx: replace ATU violation prints with trace points
2022-12-09 17:28 [PATCH v2 net-next 0/4] Trace points for mv88e6xxx Vladimir Oltean
2022-12-09 17:28 ` [PATCH v2 net-next 1/4] net: dsa: mv88e6xxx: remove ATU age out violation print Vladimir Oltean
2022-12-09 17:28 ` [PATCH v2 net-next 2/4] net: dsa: mv88e6xxx: read FID when handling ATU violations Vladimir Oltean
@ 2022-12-09 17:28 ` Vladimir Oltean
2022-12-09 19:38 ` Saeed Mahameed
2022-12-10 0:07 ` Florian Fainelli
2022-12-09 17:28 ` [PATCH v2 net-next 4/4] net: dsa: mv88e6xxx: replace VTU " Vladimir Oltean
2022-12-12 23:10 ` [PATCH v2 net-next 0/4] Trace points for mv88e6xxx patchwork-bot+netdevbpf
4 siblings, 2 replies; 13+ messages in thread
From: Vladimir Oltean @ 2022-12-09 17:28 UTC (permalink / raw)
To: netdev
Cc: Andrew Lunn, Florian Fainelli, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Hans J. Schultz, Saeed Mahameed
In applications where the switch ports must perform 802.1X based
authentication and are therefore locked, ATU violation interrupts are
quite to be expected as part of normal operation. The problem is that
they currently spam the kernel log, even if rate limited.
Create a series of trace points, all derived from the same event class,
which log these violations to the kernel's trace buffer, which is both
much faster and much easier to ignore than printing to a serial console.
New usage model:
$ trace-cmd list | grep mv88e6xxx
mv88e6xxx
mv88e6xxx:mv88e6xxx_atu_full_violation
mv88e6xxx:mv88e6xxx_atu_miss_violation
mv88e6xxx:mv88e6xxx_atu_member_violation
$ trace-cmd record -e mv88e6xxx sleep 10
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
---
v1->v2:
- keep reporting portvec and spid, rather than port
- remove ATU age out tracepoint
drivers/net/dsa/mv88e6xxx/Makefile | 4 ++
drivers/net/dsa/mv88e6xxx/global1_atu.c | 19 +++----
drivers/net/dsa/mv88e6xxx/trace.c | 6 +++
drivers/net/dsa/mv88e6xxx/trace.h | 66 +++++++++++++++++++++++++
4 files changed, 86 insertions(+), 9 deletions(-)
create mode 100644 drivers/net/dsa/mv88e6xxx/trace.c
create mode 100644 drivers/net/dsa/mv88e6xxx/trace.h
diff --git a/drivers/net/dsa/mv88e6xxx/Makefile b/drivers/net/dsa/mv88e6xxx/Makefile
index c8eca2b6f959..49bf358b9c4f 100644
--- a/drivers/net/dsa/mv88e6xxx/Makefile
+++ b/drivers/net/dsa/mv88e6xxx/Makefile
@@ -15,3 +15,7 @@ mv88e6xxx-objs += port_hidden.o
mv88e6xxx-$(CONFIG_NET_DSA_MV88E6XXX_PTP) += ptp.o
mv88e6xxx-objs += serdes.o
mv88e6xxx-objs += smi.o
+mv88e6xxx-objs += trace.o
+
+# for tracing framework to find trace.h
+CFLAGS_trace.o := -I$(src)
diff --git a/drivers/net/dsa/mv88e6xxx/global1_atu.c b/drivers/net/dsa/mv88e6xxx/global1_atu.c
index b7e62ff4b599..61ae2d61e25c 100644
--- a/drivers/net/dsa/mv88e6xxx/global1_atu.c
+++ b/drivers/net/dsa/mv88e6xxx/global1_atu.c
@@ -12,6 +12,7 @@
#include "chip.h"
#include "global1.h"
+#include "trace.h"
/* Offset 0x01: ATU FID Register */
@@ -429,23 +430,23 @@ static irqreturn_t mv88e6xxx_g1_atu_prob_irq_thread_fn(int irq, void *dev_id)
spid = entry.state;
if (val & MV88E6XXX_G1_ATU_OP_MEMBER_VIOLATION) {
- dev_err_ratelimited(chip->dev,
- "ATU member violation for %pM fid %u portvec %x spid %d\n",
- entry.mac, fid, entry.portvec, spid);
+ trace_mv88e6xxx_atu_member_violation(chip->dev, spid,
+ entry.portvec, entry.mac,
+ fid);
chip->ports[spid].atu_member_violation++;
}
if (val & MV88E6XXX_G1_ATU_OP_MISS_VIOLATION) {
- dev_err_ratelimited(chip->dev,
- "ATU miss violation for %pM fid %u portvec %x spid %d\n",
- entry.mac, fid, entry.portvec, spid);
+ trace_mv88e6xxx_atu_miss_violation(chip->dev, spid,
+ entry.portvec, entry.mac,
+ fid);
chip->ports[spid].atu_miss_violation++;
}
if (val & MV88E6XXX_G1_ATU_OP_FULL_VIOLATION) {
- dev_err_ratelimited(chip->dev,
- "ATU full violation for %pM fid %u portvec %x spid %d\n",
- entry.mac, fid, entry.portvec, spid);
+ trace_mv88e6xxx_atu_full_violation(chip->dev, spid,
+ entry.portvec, entry.mac,
+ fid);
chip->ports[spid].atu_full_violation++;
}
mv88e6xxx_reg_unlock(chip);
diff --git a/drivers/net/dsa/mv88e6xxx/trace.c b/drivers/net/dsa/mv88e6xxx/trace.c
new file mode 100644
index 000000000000..7833cb50ca5d
--- /dev/null
+++ b/drivers/net/dsa/mv88e6xxx/trace.c
@@ -0,0 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/* Copyright 2022 NXP
+ */
+
+#define CREATE_TRACE_POINTS
+#include "trace.h"
diff --git a/drivers/net/dsa/mv88e6xxx/trace.h b/drivers/net/dsa/mv88e6xxx/trace.h
new file mode 100644
index 000000000000..d9ab5c8dee55
--- /dev/null
+++ b/drivers/net/dsa/mv88e6xxx/trace.h
@@ -0,0 +1,66 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/* Copyright 2022 NXP
+ */
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM mv88e6xxx
+
+#if !defined(_MV88E6XXX_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _MV88E6XXX_TRACE_H
+
+#include <linux/device.h>
+#include <linux/if_ether.h>
+#include <linux/tracepoint.h>
+
+DECLARE_EVENT_CLASS(mv88e6xxx_atu_violation,
+
+ TP_PROTO(const struct device *dev, int spid, u16 portvec,
+ const unsigned char *addr, u16 fid),
+
+ TP_ARGS(dev, spid, portvec, addr, fid),
+
+ TP_STRUCT__entry(
+ __string(name, dev_name(dev))
+ __field(int, spid)
+ __field(u16, portvec)
+ __array(unsigned char, addr, ETH_ALEN)
+ __field(u16, fid)
+ ),
+
+ TP_fast_assign(
+ __assign_str(name, dev_name(dev));
+ __entry->spid = spid;
+ __entry->portvec = portvec;
+ memcpy(__entry->addr, addr, ETH_ALEN);
+ __entry->fid = fid;
+ ),
+
+ TP_printk("dev %s spid %d portvec 0x%x addr %pM fid %u",
+ __get_str(name), __entry->spid, __entry->portvec,
+ __entry->addr, __entry->fid)
+);
+
+DEFINE_EVENT(mv88e6xxx_atu_violation, mv88e6xxx_atu_member_violation,
+ TP_PROTO(const struct device *dev, int spid, u16 portvec,
+ const unsigned char *addr, u16 fid),
+ TP_ARGS(dev, spid, portvec, addr, fid));
+
+DEFINE_EVENT(mv88e6xxx_atu_violation, mv88e6xxx_atu_miss_violation,
+ TP_PROTO(const struct device *dev, int spid, u16 portvec,
+ const unsigned char *addr, u16 fid),
+ TP_ARGS(dev, spid, portvec, addr, fid));
+
+DEFINE_EVENT(mv88e6xxx_atu_violation, mv88e6xxx_atu_full_violation,
+ TP_PROTO(const struct device *dev, int spid, u16 portvec,
+ const unsigned char *addr, u16 fid),
+ TP_ARGS(dev, spid, portvec, addr, fid));
+
+#endif /* _MV88E6XXX_TRACE_H */
+
+/* We don't want to use include/trace/events */
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH .
+#undef TRACE_INCLUDE_FILE
+#define TRACE_INCLUDE_FILE trace
+/* This part must be outside protection */
+#include <trace/define_trace.h>
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH v2 net-next 3/4] net: dsa: mv88e6xxx: replace ATU violation prints with trace points
2022-12-09 17:28 ` [PATCH v2 net-next 3/4] net: dsa: mv88e6xxx: replace ATU violation prints with trace points Vladimir Oltean
@ 2022-12-09 19:38 ` Saeed Mahameed
2022-12-09 19:40 ` Vladimir Oltean
2022-12-10 0:07 ` Florian Fainelli
1 sibling, 1 reply; 13+ messages in thread
From: Saeed Mahameed @ 2022-12-09 19:38 UTC (permalink / raw)
To: Vladimir Oltean
Cc: netdev, Andrew Lunn, Florian Fainelli, David S. Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni, Hans J. Schultz
On 09 Dec 19:28, Vladimir Oltean wrote:
>In applications where the switch ports must perform 802.1X based
>authentication and are therefore locked, ATU violation interrupts are
>quite to be expected as part of normal operation. The problem is that
>they currently spam the kernel log, even if rate limited.
>
>Create a series of trace points, all derived from the same event class,
>which log these violations to the kernel's trace buffer, which is both
>much faster and much easier to ignore than printing to a serial console.
>
>New usage model:
>
>$ trace-cmd list | grep mv88e6xxx
>mv88e6xxx
>mv88e6xxx:mv88e6xxx_atu_full_violation
>mv88e6xxx:mv88e6xxx_atu_miss_violation
>mv88e6xxx:mv88e6xxx_atu_member_violation
>$ trace-cmd record -e mv88e6xxx sleep 10
>
>Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
My knowledge on dsa is very limited but for the tracepoints logic:
Reviewed-by: Saeed Mahameed <saeed@kernel.org>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 net-next 3/4] net: dsa: mv88e6xxx: replace ATU violation prints with trace points
2022-12-09 19:38 ` Saeed Mahameed
@ 2022-12-09 19:40 ` Vladimir Oltean
0 siblings, 0 replies; 13+ messages in thread
From: Vladimir Oltean @ 2022-12-09 19:40 UTC (permalink / raw)
To: Saeed Mahameed
Cc: netdev, Andrew Lunn, Florian Fainelli, David S. Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni, Hans J. Schultz
On Fri, Dec 09, 2022 at 11:38:41AM -0800, Saeed Mahameed wrote:
> On 09 Dec 19:28, Vladimir Oltean wrote:
> > In applications where the switch ports must perform 802.1X based
> > authentication and are therefore locked, ATU violation interrupts are
> > quite to be expected as part of normal operation. The problem is that
> > they currently spam the kernel log, even if rate limited.
> >
> > Create a series of trace points, all derived from the same event class,
> > which log these violations to the kernel's trace buffer, which is both
> > much faster and much easier to ignore than printing to a serial console.
> >
> > New usage model:
> >
> > $ trace-cmd list | grep mv88e6xxx
> > mv88e6xxx
> > mv88e6xxx:mv88e6xxx_atu_full_violation
> > mv88e6xxx:mv88e6xxx_atu_miss_violation
> > mv88e6xxx:mv88e6xxx_atu_member_violation
> > $ trace-cmd record -e mv88e6xxx sleep 10
> >
> > Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
>
> My knowledge on dsa is very limited but for the tracepoints logic:
There's nothing to know about DSA here, really.
> Reviewed-by: Saeed Mahameed <saeed@kernel.org>
Thanks for the review.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 net-next 3/4] net: dsa: mv88e6xxx: replace ATU violation prints with trace points
2022-12-09 17:28 ` [PATCH v2 net-next 3/4] net: dsa: mv88e6xxx: replace ATU violation prints with trace points Vladimir Oltean
2022-12-09 19:38 ` Saeed Mahameed
@ 2022-12-10 0:07 ` Florian Fainelli
1 sibling, 0 replies; 13+ messages in thread
From: Florian Fainelli @ 2022-12-10 0:07 UTC (permalink / raw)
To: Vladimir Oltean, netdev
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Hans J. Schultz, Saeed Mahameed
On 12/9/22 09:28, Vladimir Oltean wrote:
> In applications where the switch ports must perform 802.1X based
> authentication and are therefore locked, ATU violation interrupts are
> quite to be expected as part of normal operation. The problem is that
> they currently spam the kernel log, even if rate limited.
>
> Create a series of trace points, all derived from the same event class,
> which log these violations to the kernel's trace buffer, which is both
> much faster and much easier to ignore than printing to a serial console.
>
> New usage model:
>
> $ trace-cmd list | grep mv88e6xxx
> mv88e6xxx
> mv88e6xxx:mv88e6xxx_atu_full_violation
> mv88e6xxx:mv88e6xxx_atu_miss_violation
> mv88e6xxx:mv88e6xxx_atu_member_violation
> $ trace-cmd record -e mv88e6xxx sleep 10
>
> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
--
Florian
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 net-next 4/4] net: dsa: mv88e6xxx: replace VTU violation prints with trace points
2022-12-09 17:28 [PATCH v2 net-next 0/4] Trace points for mv88e6xxx Vladimir Oltean
` (2 preceding siblings ...)
2022-12-09 17:28 ` [PATCH v2 net-next 3/4] net: dsa: mv88e6xxx: replace ATU violation prints with trace points Vladimir Oltean
@ 2022-12-09 17:28 ` Vladimir Oltean
2022-12-09 19:39 ` Saeed Mahameed
2022-12-10 0:07 ` Florian Fainelli
2022-12-12 23:10 ` [PATCH v2 net-next 0/4] Trace points for mv88e6xxx patchwork-bot+netdevbpf
4 siblings, 2 replies; 13+ messages in thread
From: Vladimir Oltean @ 2022-12-09 17:28 UTC (permalink / raw)
To: netdev
Cc: Andrew Lunn, Florian Fainelli, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Hans J. Schultz, Saeed Mahameed
It is possible to trigger these VTU violation messages very easily,
it's only necessary to send packets with an unknown VLAN ID to a port
that belongs to a VLAN-aware bridge.
Do a similar thing as for ATU violation messages, and hide them in the
kernel's trace buffer.
New usage model:
$ trace-cmd list | grep mv88e6xxx
mv88e6xxx
mv88e6xxx:mv88e6xxx_vtu_miss_violation
mv88e6xxx:mv88e6xxx_vtu_member_violation
$ trace-cmd report
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
---
v1->v2: rename port to spid
drivers/net/dsa/mv88e6xxx/global1_vtu.c | 7 +++---
drivers/net/dsa/mv88e6xxx/trace.h | 30 +++++++++++++++++++++++++
2 files changed, 33 insertions(+), 4 deletions(-)
diff --git a/drivers/net/dsa/mv88e6xxx/global1_vtu.c b/drivers/net/dsa/mv88e6xxx/global1_vtu.c
index 38e18f5811bf..bcfb4a812055 100644
--- a/drivers/net/dsa/mv88e6xxx/global1_vtu.c
+++ b/drivers/net/dsa/mv88e6xxx/global1_vtu.c
@@ -13,6 +13,7 @@
#include "chip.h"
#include "global1.h"
+#include "trace.h"
/* Offset 0x02: VTU FID Register */
@@ -628,14 +629,12 @@ static irqreturn_t mv88e6xxx_g1_vtu_prob_irq_thread_fn(int irq, void *dev_id)
spid = val & MV88E6XXX_G1_VTU_OP_SPID_MASK;
if (val & MV88E6XXX_G1_VTU_OP_MEMBER_VIOLATION) {
- dev_err_ratelimited(chip->dev, "VTU member violation for vid %d, source port %d\n",
- vid, spid);
+ trace_mv88e6xxx_vtu_member_violation(chip->dev, spid, vid);
chip->ports[spid].vtu_member_violation++;
}
if (val & MV88E6XXX_G1_VTU_OP_MISS_VIOLATION) {
- dev_dbg_ratelimited(chip->dev, "VTU miss violation for vid %d, source port %d\n",
- vid, spid);
+ trace_mv88e6xxx_vtu_miss_violation(chip->dev, spid, vid);
chip->ports[spid].vtu_miss_violation++;
}
diff --git a/drivers/net/dsa/mv88e6xxx/trace.h b/drivers/net/dsa/mv88e6xxx/trace.h
index d9ab5c8dee55..f59ca04768e7 100644
--- a/drivers/net/dsa/mv88e6xxx/trace.h
+++ b/drivers/net/dsa/mv88e6xxx/trace.h
@@ -55,6 +55,36 @@ DEFINE_EVENT(mv88e6xxx_atu_violation, mv88e6xxx_atu_full_violation,
const unsigned char *addr, u16 fid),
TP_ARGS(dev, spid, portvec, addr, fid));
+DECLARE_EVENT_CLASS(mv88e6xxx_vtu_violation,
+
+ TP_PROTO(const struct device *dev, int spid, u16 vid),
+
+ TP_ARGS(dev, spid, vid),
+
+ TP_STRUCT__entry(
+ __string(name, dev_name(dev))
+ __field(int, spid)
+ __field(u16, vid)
+ ),
+
+ TP_fast_assign(
+ __assign_str(name, dev_name(dev));
+ __entry->spid = spid;
+ __entry->vid = vid;
+ ),
+
+ TP_printk("dev %s spid %d vid %u",
+ __get_str(name), __entry->spid, __entry->vid)
+);
+
+DEFINE_EVENT(mv88e6xxx_vtu_violation, mv88e6xxx_vtu_member_violation,
+ TP_PROTO(const struct device *dev, int spid, u16 vid),
+ TP_ARGS(dev, spid, vid));
+
+DEFINE_EVENT(mv88e6xxx_vtu_violation, mv88e6xxx_vtu_miss_violation,
+ TP_PROTO(const struct device *dev, int spid, u16 vid),
+ TP_ARGS(dev, spid, vid));
+
#endif /* _MV88E6XXX_TRACE_H */
/* We don't want to use include/trace/events */
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH v2 net-next 4/4] net: dsa: mv88e6xxx: replace VTU violation prints with trace points
2022-12-09 17:28 ` [PATCH v2 net-next 4/4] net: dsa: mv88e6xxx: replace VTU " Vladimir Oltean
@ 2022-12-09 19:39 ` Saeed Mahameed
2022-12-10 0:07 ` Florian Fainelli
1 sibling, 0 replies; 13+ messages in thread
From: Saeed Mahameed @ 2022-12-09 19:39 UTC (permalink / raw)
To: Vladimir Oltean
Cc: netdev, Andrew Lunn, Florian Fainelli, David S. Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni, Hans J. Schultz
On 09 Dec 19:28, Vladimir Oltean wrote:
>It is possible to trigger these VTU violation messages very easily,
>it's only necessary to send packets with an unknown VLAN ID to a port
>that belongs to a VLAN-aware bridge.
>
>Do a similar thing as for ATU violation messages, and hide them in the
>kernel's trace buffer.
>
>New usage model:
>
>$ trace-cmd list | grep mv88e6xxx
>mv88e6xxx
>mv88e6xxx:mv88e6xxx_vtu_miss_violation
>mv88e6xxx:mv88e6xxx_vtu_member_violation
>$ trace-cmd report
>
>Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Saeed Mahameed <saeed@kernel.org>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 net-next 4/4] net: dsa: mv88e6xxx: replace VTU violation prints with trace points
2022-12-09 17:28 ` [PATCH v2 net-next 4/4] net: dsa: mv88e6xxx: replace VTU " Vladimir Oltean
2022-12-09 19:39 ` Saeed Mahameed
@ 2022-12-10 0:07 ` Florian Fainelli
1 sibling, 0 replies; 13+ messages in thread
From: Florian Fainelli @ 2022-12-10 0:07 UTC (permalink / raw)
To: Vladimir Oltean, netdev
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Hans J. Schultz, Saeed Mahameed
On 12/9/22 09:28, Vladimir Oltean wrote:
> It is possible to trigger these VTU violation messages very easily,
> it's only necessary to send packets with an unknown VLAN ID to a port
> that belongs to a VLAN-aware bridge.
>
> Do a similar thing as for ATU violation messages, and hide them in the
> kernel's trace buffer.
>
> New usage model:
>
> $ trace-cmd list | grep mv88e6xxx
> mv88e6xxx
> mv88e6xxx:mv88e6xxx_vtu_miss_violation
> mv88e6xxx:mv88e6xxx_vtu_member_violation
> $ trace-cmd report
>
> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
--
Florian
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 net-next 0/4] Trace points for mv88e6xxx
2022-12-09 17:28 [PATCH v2 net-next 0/4] Trace points for mv88e6xxx Vladimir Oltean
` (3 preceding siblings ...)
2022-12-09 17:28 ` [PATCH v2 net-next 4/4] net: dsa: mv88e6xxx: replace VTU " Vladimir Oltean
@ 2022-12-12 23:10 ` patchwork-bot+netdevbpf
4 siblings, 0 replies; 13+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-12-12 23:10 UTC (permalink / raw)
To: Vladimir Oltean
Cc: netdev, andrew, f.fainelli, davem, edumazet, kuba, pabeni, netdev,
saeed
Hello:
This series was applied to netdev/net-next.git (master)
by Jakub Kicinski <kuba@kernel.org>:
On Fri, 9 Dec 2022 19:28:13 +0200 you wrote:
> While testing Hans Schultz' attempt at offloading MAB on mv88e6xxx:
> https://patchwork.kernel.org/project/netdevbpf/cover/20221205185908.217520-1-netdev@kapio-technology.com/
> I noticed that he still didn't get rid of the huge log spam caused by
> ATU and VTU violations, even if we discussed about this:
> https://patchwork.kernel.org/project/netdevbpf/cover/20221112203748.68995-1-netdev@kapio-technology.com/#25091076
>
> It seems unlikely he's going to ever do this, so here is my own stab at
> converting those messages to trace points. This is IMO an improvement
> regardless of whether Hans' work with MAB lands or not, especially the
> VTU violations which were quite annoying to me as well.
>
> [...]
Here is the summary with links:
- [v2,net-next,1/4] net: dsa: mv88e6xxx: remove ATU age out violation print
https://git.kernel.org/netdev/net-next/c/8a1786b7d441
- [v2,net-next,2/4] net: dsa: mv88e6xxx: read FID when handling ATU violations
https://git.kernel.org/netdev/net-next/c/4bf24ad09bc0
- [v2,net-next,3/4] net: dsa: mv88e6xxx: replace ATU violation prints with trace points
https://git.kernel.org/netdev/net-next/c/8646384d80f3
- [v2,net-next,4/4] net: dsa: mv88e6xxx: replace VTU violation prints with trace points
https://git.kernel.org/netdev/net-next/c/9e3d9ae52b56
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 13+ messages in thread