• Jan Glauber's avatar
    [S390] qdio: prevent race for shared indicators · 4f325184
    Jan Glauber authored
    If the shared indicator is used the following race leads to
    an inbound stall:
    
    Device                  CPU0                    CPU1
    ========================================================
    
    non-shared DSCI =>1
    ALSI => 1
                            Thin INT
                            ALSI => 0
    
                            non-shared DSCI
                            tasklets scheduled
    
    shared DSCI => 1
    ALSI => 1
    
                            shared DSCI => 0
                            ALSI ? -> set
                                                    Thin INT
                                                    ALSI => 0
                            ALSI was set,
                            shared DSCI => 1
    
    After that no more interrupts occur because the DSCI is still set.
    Fix that race by only resetting the shared DSCI if it was actually
    set so the tasklets for all shared devices are scheduled and will
    run after the interrupt.
    Signed-off-by: default avatarJan Glauber <jang@linux.vnet.ibm.com>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    4f325184
qdio_thinint.c 6.42 KB