• Vladimir Oltean's avatar
    net: dpaa2: publish MAC stringset to ethtool -S even if MAC is missing · 29811d6e
    Vladimir Oltean authored
    DPNIs and DPSW objects can connect and disconnect at runtime from DPMAC
    objects on the same fsl-mc bus. The DPMAC object also holds "ethtool -S"
    unstructured counters. Those counters are only shown for the entity
    owning the netdev (DPNI, DPSW) if it's connected to a DPMAC.
    
    The ethtool stringset code path is split into multiple callbacks, but
    currently, connecting and disconnecting the DPMAC takes the rtnl_lock().
    This blocks the entire ethtool code path from running, see
    ethnl_default_doit() -> rtnl_lock() -> ops->prepare_data() ->
    strset_prepare_data().
    
    This is going to be a problem if we are going to no longer require
    rtnl_lock() when connecting/disconnecting the DPMAC, because the DPMAC
    could appear between ops->get_sset_count() and ops->get_strings().
    If it appears out of the blue, we will provide a stringset into an array
    that was dimensioned thinking the DPMAC wouldn't be there => array
    accessed out of bounds.
    
    There isn't really a good way to work around that, and I don't want to
    put too much pressure on the ethtool framework by playing locking games.
    Just make the DPMAC counters be always available. They'll be zeroes if
    the DPNI or DPSW isn't connected to a DPMAC.
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
    Reviewed-by: default avatarIoana Ciornei <ioana.ciornei@nxp.com>
    Tested-by: default avatarIoana Ciornei <ioana.ciornei@nxp.com>
    Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    29811d6e
dpaa2-switch-ethtool.c 5.72 KB