• Ira Snyder's avatar
    fsldma: fix controller lockups · f04cd407
    Ira Snyder authored
    Enabling poisoning in the dmapool API quickly showed that the DMA
    controller was fetching descriptors that should not have been in use.
    This has caused intermittent controller lockups during testing.
    
    I have been unable to figure out the exact set of conditions which cause
    this to happen. However, I believe it is related to the driver using the
    hardware registers to track whether the controller is busy or not. The
    code can incorrectly decide that the hardware is idle due to lag between
    register writes and the hardware actually becoming busy.
    
    To fix this, the driver has been reworked to explicitly track the state
    of the hardware, rather than try to guess what it is doing based on the
    register values.
    
    This has passed dmatest with 10 threads per channel, 100000 iterations
    per thread several times without error. Previously, this would fail
    within a few seconds.
    Signed-off-by: default avatarIra W. Snyder <iws@ovro.caltech.edu>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    f04cd407
fsldma.c 35.4 KB