• Petr Machata's avatar
    mlxsw: spectrum: Split headroom autoresize out of buffer configuration · 2d9f703f
    Petr Machata authored
    Split mlxsw_sp_port_headroom_set() to three functions.
    mlxsw_sp_hdroom_bufs_reset_sizes() changes the sizes of the individual PG
    buffers, and mlxsw_sp_hdroom_configure_buffers() will actually apply the
    configuration. A third function, mlxsw_sp_hdroom_bufs_fit(), verifies that
    the requested buffer configuration matches total headroom size
    requirements.
    
    Add wrappers, mlxsw_sp_hdroom_configure() and __..., that will eventually
    perform full headroom configuration, but for now, only have them verify the
    configured headroom size, and invoke mlxsw_sp_hdroom_configure_buffers().
    Have them take the `force` argument to prepare for a later patch, even
    though it is currently unused.
    
    Note that the loop in mlxsw_sp_hdroom_configure_buffers() only goes through
    DCBX_MAX_BUFFERS. Since there is no logic to configure the control buffer,
    it needs to keep the values queried from the FW. Eventually this function
    should configure all the PGs.
    
    Note that conversion of __mlxsw_sp_dcbnl_ieee_setets() is not trivial. That
    function performs the headroom configuration in three steps: first it
    resizes the buffers and adds any new ones. Then it redirects priorities to
    the new buffers. And finally it sets the size of the now-unused buffers to
    zero. This way no packet drops are introduced.
    
    So after invoking mlxsw_sp_hdroom_bufs_reset_sizes(), tweak the
    configuration to keep the old sizes of PG buffers for those buffers whose
    size was set to zero.
    Signed-off-by: default avatarPetr Machata <petrm@nvidia.com>
    Reviewed-by: default avatarJiri Pirko <jiri@nvidia.com>
    Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    2d9f703f
spectrum.h 43.9 KB