• Vladimir Oltean's avatar
    net: build all switchdev drivers as modules when the bridge is a module · b0e81817
    Vladimir Oltean authored
    Currently, all drivers depend on the bool CONFIG_NET_SWITCHDEV, but only
    the drivers that call some sort of function exported by the bridge, like
    br_vlan_enabled() or whatever, have an extra dependency on CONFIG_BRIDGE.
    
    Since the blamed commit, all switchdev drivers have a functional
    dependency upon switchdev_bridge_port_{,un}offload(), which is a pair of
    functions exported by the bridge module and not by the bridge-independent
    part of CONFIG_NET_SWITCHDEV.
    
    Problems appear when we have:
    
    CONFIG_BRIDGE=m
    CONFIG_NET_SWITCHDEV=y
    CONFIG_TI_CPSW_SWITCHDEV=y
    
    because cpsw, am65_cpsw and sparx5 will then be built-in but they will
    call a symbol exported by a loadable module. This is not possible and
    will result in the following build error:
    
    drivers/net/ethernet/ti/cpsw_new.o: in function `cpsw_netdevice_event':
    drivers/net/ethernet/ti/cpsw_new.c:1520: undefined reference to
    					`switchdev_bridge_port_offload'
    drivers/net/ethernet/ti/cpsw_new.c:1537: undefined reference to
    					`switchdev_bridge_port_unoffload'
    
    As mentioned, the other switchdev drivers don't suffer from this because
    switchdev_bridge_port_offload() is not the first symbol exported by the
    bridge that they are calling, so they already needed to deal with this
    in the same way.
    
    Fixes: 2f5dc00f ("net: bridge: switchdev: let drivers inform which bridge ports are offloaded")
    Reported-by: default avatarLinux Kernel Functional Testing <lkft@linaro.org>
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b0e81817
Kconfig 5.96 KB