• Ido Yariv's avatar
    wlcore: Prevent processing of work items during op_stop · c24ec83b
    Ido Yariv authored
    The interrupt line is disabled in op_stop using disable_irq. Since
    pending interrupts are synchronized, the mutex has to be released before
    disabling the interrupt to avoid a deadlock with the interrupt handler.
    
    In addition, the internal state of the driver is only set to 'off'
    after the interrupt is disabled. Otherwise, if an interrupt fires after
    the state is set but before the interrupt line is disabled, the
    interrupt handler will not be able to acknowledge the interrupt
    resulting in an interrupt storm.
    
    The driver's operations might be called during recovery. If these
    acquire the mutex after it was released by op_stop, but before the
    driver's state is changed, they may queue new work items instead of just
    failing. This is especially problematic in the case of scans, in which a
    new scan may be scheduled after all scan requests were cancelled.
    Signed-off-by: default avatarIdo Yariv <ido@wizery.com>
    Signed-off-by: default avatarArik Nemtsov <arik@wizery.com>
    c24ec83b
io.c 5.9 KB