• Petr Machata's avatar
    switchdev: Add helpers to aid traversal through lower devices · f30f0601
    Petr Machata authored
    After the transition from switchdev operations to notifier chain (which
    will take place in following patches), the onus is on the driver to find
    its own devices below possible layer of LAG or other uppers.
    
    The logic to do so is fairly repetitive: each driver is looking for its
    own devices among the lowers of the notified device. For those that it
    finds, it calls a handler. To indicate that the event was handled,
    struct switchdev_notifier_port_obj_info.handled is set. The differences
    lie only in what constitutes an "own" device and what handler to call.
    
    Therefore abstract this logic into two helpers,
    switchdev_handle_port_obj_add() and switchdev_handle_port_obj_del(). If
    a driver only supports physical ports under a bridge device, it will
    simply avoid this layer of indirection.
    
    One area where this helper diverges from the current switchdev behavior
    is the case of mixed lowers, some of which are switchdev ports and some
    of which are not. Previously, such scenario would fail with -EOPNOTSUPP.
    The helper could do that for lowers for which the passed-in predicate
    doesn't hold. That would however break the case that switchdev ports
    from several different drivers are stashed under one master, a scenario
    that switchdev currently happily supports. Therefore tolerate any and
    all unknown netdevices, whether they are backed by a switchdev driver
    or not.
    Signed-off-by: default avatarPetr Machata <petrm@mellanox.com>
    Reviewed-by: default avatarIdo Schimmel <idosch@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f30f0601
switchdev.c 19.4 KB