• Julian Wiedmann's avatar
    s390/qdio: make thinint registration symmetric · 954d6235
    Julian Wiedmann authored
    tiqdio_add_device() adds the device to the tiq_list of eligible targets
    for a data IRQ, which gets walked on each QDIO Adapter Interrupt to
    inspect their DSCIs.
    
    But currently the tiqdio_add_device() / tiqdio_remove_device() calls
    are not symmetric - the device is removed within qdio_shutdown(),
    but only added by qdio_activate().
    So depending on the call sequence and encountered errors, we might
    be trying to remove a list entry in qdio_shutdown() that was never even
    added to the list. This required additional INIT_LIST_HEAD() calls to
    ensure that the list entry was always in a consistent state.
    
    All drivers now fence the IRQ delivery via qdio_start_irq() /
    qdio_stop_irq(), so we can nicely integrate this tiq_list management
    with the other steps needed for QDIO Adapter IRQ (de-)registration
    (qdio_establish_thinint() / qdio_shutdown_thinint()).
    As the naming suggests these get called during qdio_establish() and
    qdio_shutdown(), with proper symmetry and roll-back after errors.
    
    With this we longer need to worry about misplaced list removals, and
    thus can clean up the list API abuse (INIT_LIST_HEAD() should not be
    called on list entries).
    Signed-off-by: default avatarJulian Wiedmann <jwi@linux.ibm.com>
    Reviewed-by: default avatarBenjamin Block <bblock@linux.ibm.com>
    Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
    954d6235
qdio.h 11.2 KB