• Sebastian Andrzej Siewior's avatar
    net: ionic: Replace in_interrupt() usage. · 1800eee1
    Sebastian Andrzej Siewior authored
    The in_interrupt() usage in this driver tries to figure out which context
    may sleep and which context may not sleep. in_interrupt() is not really
    suitable as it misses both preemption disabled and interrupt disabled
    invocations from task context.
    
    Conditionals like that in driver code are frowned upon in general because
    invocations of functions from invalid contexts might not be detected
    as the conditional papers over it.
    
    ionic_lif_addr() and _ionoc_lif_rx_mode() can be called from:
    
     1) ->ndo_set_rx_mode() which is under netif_addr_lock_bh()) so it must not
        sleep.
    
     2) Init and setup functions which are in fully preemptible task context.
    
    ionic_link_status_check_request() has two call paths:
    
     1) NAPI which obviously cannot sleep
    
     2) Setup which is again fully preemptible task context
    
    Add arguments which convey the execution context to the affected functions
    and let the callers provide the context instead of letting the functions
    deduce it.
    Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    1800eee1
ionic_lif.c 82.7 KB