net: dsa: mv88e6xxx: replace VTU violation prints with trace points

commit 9e3d9ae52b upstream.

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>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Cc: Fabio Estevam <festevam@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Vladimir Oltean 2022-12-09 19:28:17 +02:00 committed by Greg Kroah-Hartman
parent be831b5c69
commit 0f9e728e1a
2 changed files with 33 additions and 4 deletions

View file

@ -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++;
}

View file

@ -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 */