• Dan Williams's avatar
    async_tx: remove walk of tx->parent chain in dma_wait_for_async_tx · 95475e57
    Dan Williams authored
    We currently walk the parent chain when waiting for a given tx to
    complete however this walk may race with the driver cleanup routine.
    The routines in async_raid6_recov.c may fall back to the synchronous
    path at any point so we need to be prepared to call async_tx_quiesce()
    (which calls  dma_wait_for_async_tx).  To remove the ->parent walk we
    guarantee that every time a dependency is attached ->issue_pending() is
    invoked, then we can simply poll the initial descriptor until
    completion.
    
    This also allows for a lighter weight 'issue pending' implementation as
    there is no longer a requirement to iterate through all the channels'
    ->issue_pending() routines as long as operations have been submitted in
    an ordered chain.  async_tx_issue_pending() is added for this case.
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    95475e57
async_tx.c 7.74 KB