• Sebastian Andrzej Siewior's avatar
    net: neterion: s2io: Replace in_interrupt() for context detection · 5ce7f3f4
    Sebastian Andrzej Siewior authored
    wait_for_cmd_complete() uses in_interrupt() to detect whether it is safe to
    sleep or not.
    
    The usage of in_interrupt() in drivers is phased out and Linus clearly
    requested that code which changes behaviour depending on context should
    either be seperated or the context be conveyed in an argument passed by the
    caller, which usually knows the context.
    
    in_interrupt() also is only partially correct because it fails to chose the
    correct code path when just preemption or interrupts are disabled.
    
    Add an argument 'may_block' to both functions and adjust the callers to
    pass the context information.
    
    The following call chains which end up invoking wait_for_cmd_complete()
    were analyzed to be safe to sleep:
    
     s2io_card_up()
       s2io_set_multicast()
    
     init_nic()
       init_tti()
    
     s2io_close()
       do_s2io_delete_unicast_mc()
         do_s2io_add_mac()
    
     s2io_set_mac_addr()
       do_s2io_prog_unicast()
         do_s2io_add_mac()
    
     s2io_reset()
       do_s2io_restore_unicast_mc()
         do_s2io_add_mc()
           do_s2io_add_mac()
    
     s2io_open()
       do_s2io_prog_unicast()
         do_s2io_add_mac()
    
    The following call chains which end up invoking wait_for_cmd_complete()
    were analyzed to be safe to sleep:
    
     __dev_set_rx_mode()
        s2io_set_multicast()
    
     s2io_txpic_intr_handle()
       s2io_link()
         init_tti()
    
    Add a may_sleep argument to wait_for_cmd_complete(), s2io_set_multicast()
    and init_tti() and hand the context information in from the call sites.
    Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: Jon Mason <jdmason@kudzu.us>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    5ce7f3f4
s2io.c 238 KB