This patchset pushes the switchdev prepare phase for the FDB add and del
operations down to the DSA drivers. Currently only mv88e6xxx is affected.
Since the dump requires a bit of refactoring in the driver, it'll come in a
future patchset.
The first 3 patches removes the dsa.h include from linux/netdevice.h, which
broke the inclusion of switchdev.h in dsa.h.
The last 3 patches add port_fdb_prepare and change port_fdb_add and
port_fdb_del to use the switchdev FDB object structure.
To be more specific about the include dependency issue, here's a snippet of
what happens currently if you include switchdev.h in dsa.h:
[...]
include/net/switchdev.h:52:30: error: field ‘ppid’ has incomplete type
struct netdev_phys_item_id ppid; /* PORT_PARENT_ID */
^
include/net/switchdev.h:185:14: warning: ‘struct nlmsghdr’ declared inside
parameter list [enabled by default]
struct nlmsghdr *nlh, u16 flags);
^
include/net/switchdev.h:195:7: warning: ‘struct ndmsg’ declared inside
parameter list [enabled by default]
include/net/switchdev.h:198:7: warning: ‘struct nlattr’ declared inside
parameter list [enabled by default]
u16 vid);
^
include/net/switchdev.h:201:15: warning: ‘struct netlink_callback’ declared
inside parameter list [enabled by default]
struct net_device *filter_dev, int idx);
^
[...]
Removing the dsa.h include from linux/netdevice.h gets rid of these errors but
then the DSA code complains if you don't include it in dsa_priv.h:
[...]
net/dsa/slave.c: In function ‘dsa_slave_set_mac_address’:
net/dsa/slave.c:178:39: error: dereferencing pointer to incomplete type
struct net_device *master = p->parent->dst->master_netdev;
^
In file included from include/linux/list.h:8:0,
from net/dsa/slave.c:11:
net/dsa/slave.c: In function ‘dsa_bridge_check_vlan_range’:
net/dsa/slave.c:209:26: error: ‘DSA_MAX_PORTS’ undeclared (first use in this
function)
DECLARE_BITMAP(members, DSA_MAX_PORTS);
^
net/dsa/slave.c:209:26: note: each undeclared identifier is reported only once
for each function it appears in
DECLARE_BITMAP(members, DSA_MAX_PORTS);
^
include/linux/kernel.h:67:30: note: in definition of macro ‘DIV_ROUND_UP’
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
^
include/linux/types.h:10:21: note: in expansion of macro ‘BITS_TO_LONGS’
unsigned long name[BITS_TO_LONGS(bits)]
^
net/dsa/slave.c:209:2: note: in expansion of macro ‘DECLARE_BITMAP’
DECLARE_BITMAP(members, DSA_MAX_PORTS);
^
net/dsa/slave.c:1190:7: error: ‘DSA_TAG_PROTO_EDSA’ undeclared (first use in
this function)
case DSA_TAG_PROTO_EDSA:
^
net/dsa/slave.c: In function ‘dsa_slave_get_iflink’:
net/dsa/slave.c:64:1: warning: control reaches end of non-void function
[-Wreturn-type]
}
^
[...]
Thanks,
-v
Vivien Didelot (6):
net: dsa: add uses_hw_tag
net: dsa: include dsa.h in dsa_priv.h
net: remove dsa.h include from linux/netdevice.h
net: dsa: add port_fdb_prepare
net: dsa: push prepare phase in port_fdb_add
net: dsa: use switchdev obj in port_fdb_del
drivers/net/dsa/mv88e6171.c | 1 +
drivers/net/dsa/mv88e6352.c | 1 +
drivers/net/dsa/mv88e6xxx.c | 23 +++++++++++++++++------
drivers/net/dsa/mv88e6xxx.h | 8 ++++++--
include/linux/netdevice.h | 9 ++++++---
include/net/dsa.h | 14 +++++++-------
net/dsa/dsa.c | 1 +
net/dsa/dsa_priv.h | 1 +
net/dsa/slave.c | 11 +++++++----
9 files changed, 47 insertions(+), 22 deletions(-)
--
2.6.0
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html