• Matteo Croce's avatar
    mvpp2: percpu buffers · 7d04b0b1
    Matteo Croce authored
    Every mvpp2 unit can use up to 8 buffers mapped by the BM (the HW buffer
    manager). The HW will place the frames in the buffer pool depending on the
    frame size: short (< 128 bytes), long (< 1664) or jumbo (up to 9856).
    
    As any unit can have up to 4 ports, the driver allocates only 2 pools,
    one for small and one long frames, and share them between ports.
    When the first port MTU is set higher than 1664 bytes, a third pool is
    allocated for jumbo frames.
    
    This shared allocation makes impossible to use percpu allocators,
    and creates contention between HW queues.
    
    If possible, i.e. if the number of possible CPU are less than 8 and jumbo
    frames are not used, switch to a new scheme: allocate 8 per-cpu pools for
    short and long frames and bind every pool to an RXQ.
    
    When the first port MTU is set higher than 1664 bytes, the allocation
    scheme is reverted to the old behaviour (3 shared pools), and when all
    ports MTU are lowered, the per-cpu buffers are allocated again.
    Signed-off-by: default avatarMatteo Croce <mcroce@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    7d04b0b1
mvpp2_main.c 161 KB