• Sebastian Andrzej Siewior's avatar
    net: dev: Makes sure netif_rx() can be invoked in any context. · baebdf48
    Sebastian Andrzej Siewior authored
    Dave suggested a while ago (eleven years by now) "Let's make netif_rx()
    work in all contexts and get rid of netif_rx_ni()". Eric agreed and
    pointed out that modern devices should use netif_receive_skb() to avoid
    the overhead.
    In the meantime someone added another variant, netif_rx_any_context(),
    which behaves as suggested.
    
    netif_rx() must be invoked with disabled bottom halves to ensure that
    pending softirqs, which were raised within the function, are handled.
    netif_rx_ni() can be invoked only from process context (bottom halves
    must be enabled) because the function handles pending softirqs without
    checking if bottom halves were disabled or not.
    netif_rx_any_context() invokes on the former functions by checking
    in_interrupts().
    
    netif_rx() could be taught to handle both cases (disabled and enabled
    bottom halves) by simply disabling bottom halves while invoking
    netif_rx_internal(). The local_bh_enable() invocation will then invoke
    pending soft...
    baebdf48
vxlan.c 121 KB