mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 13:53:33 +00:00
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:
parent
be831b5c69
commit
0f9e728e1a
2 changed files with 33 additions and 4 deletions
|
@ -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++;
|
||||
}
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in a new issue