• Matan Barak's avatar
    net/mlx4_core: Use tasklet for user-space CQ completion events · 3dca0f42
    Matan Barak authored
    Previously, we've fired all our completion callbacks straight from our ISR.
    
    Some of those callbacks were lightweight (for example, mlx4_en's and
    IPoIB napi callbacks), but some of them did more work (for example,
    the user-space RDMA stack uverbs' completion handler). Besides that,
    doing more than the minimal work in ISR is generally considered wrong,
    it could even lead to a hard lockup of the system. Since when a lot
    of completion events are generated by the hardware, the loop over those
    events could be so long, that we'll get into a hard lockup by the system
    watchdog.
    
    In order to avoid that, add a new way of invoking completion events
    callbacks. In the interrupt itself, we add the CQs which receive completion
    event to a per-EQ list and schedule a tasklet. In the tasklet context
    we loop over all the CQs in the list and invoke the user callback.
    Signed-off-by: default avatarMatan Barak <matanb@mellanox.com>
    Signed-off-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    3dca0f42
cq.c 23.2 KB