• Ido Schimmel's avatar
    mlxsw: spectrum: Add support for PAUSE frames · 9f7ec052
    Ido Schimmel authored
    When a packet ingress the switch it's placed in its assigned priority
    group (PG) buffer in the port's headroom buffer while it goes through
    the switch's pipeline. After going through the pipeline - which
    determines its egress port(s) and traffic class - it's moved to the
    switch's shared buffer awaiting transmission.
    
    However, some packets are not eligible to enter the shared buffer due to
    exceeded quotas or insufficient space. Marking their associated PGs as
    lossless will cause the packets to accumulate in the PG buffer. Another
    reason for packets accumulation are complicated pipelines (e.g.
    involving a lot of ACLs).
    
    To prevent packets from being dropped a user can enable PAUSE frames on
    the port. This will mark all the active PGs as lossless and set their
    size according to the maximum delay, as it's not configured by user.
    
                             +----------------+   +
                             |                |   |
                             |                |   |
                             |                |   |
                             |                |   |
                             |                |   |
                             |                |   | Delay
                             |                |   |
                             |                |   |
                             |                |   |
                             |                |   |
                             |                |   |
        Xon/Xoff threshold   +----------------+   +
                             |                |   |
                             |                |   | 2 * MTU
                             |                |   |
                             +----------------+   +
    
    The delay (612 [Cells]) was calculated according to worst-case scenario
    involving maximum MTU and 100m cables.
    
    After marking the PGs as lossless the device is configured to respect
    incoming PAUSE frames (Rx PAUSE) and generate PAUSE frames (Tx PAUSE)
    according to user's settings.
    
    Whenever the port's headroom configuration changes we take into account
    the PAUSE configuration, so that we correctly set the PG's type (lossy /
    lossless), size and threshold. This can happen when:
    
    a) The port's MTU changes, as it directly affects the PG's size.
    
    b) A PG is created following user configuration, by binding a priority
    to it.
    
    Note that the relevant SUPPORTED flags were already mistakenly set by
    the driver before this commit.
    Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
    Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    9f7ec052
spectrum_dcb.c 9.92 KB