• Dave Jiang's avatar
    ioatdma: fix race between updating ioat->head and IOAT_COMPLETION_PENDING · 4dec23d7
    Dave Jiang authored
    There is a race that can hit during __cleanup() when the ioat->head pointer is
    incremented during descriptor submission. The __cleanup() can clear the
    PENDING flag when it does not see any active descriptors. This causes new
    submitted descriptors to be ignored because the COMPLETION_PENDING flag is
    cleared. This was introduced when code was adapted from ioatdma v1 to ioatdma
    v2. For v2 and v3, IOAT_COMPLETION_PENDING flag will be abandoned and a new
    flag IOAT_CHAN_ACTIVE will be utilized. This flag will also be protected under
    the prep_lock when being modified in order to avoid the race.
    Signed-off-by: default avatarDave Jiang <dave.jiang@intel.com>
    Reviewed-by: default avatarDan Williams <djbw@fb.com>
    Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
    4dec23d7
dma.h 9.78 KB