• Giovanni Cabiddu's avatar
    crypto: qat - fix state machines cleanup paths · c9ca9756
    Giovanni Cabiddu authored
    Commit 1bdc8555 ("crypto: qat - fix concurrency issue when device
    state changes") introduced the function adf_dev_down() which wraps the
    functions adf_dev_stop() and adf_dev_shutdown().
    In a subsequent change, the sequence adf_dev_stop() followed by
    adf_dev_shutdown() was then replaced across the driver with just a call
    to the function adf_dev_down().
    
    The functions adf_dev_stop() and adf_dev_shutdown() are called in error
    paths to stop the accelerator and free up resources and can be called
    even if the counterparts adf_dev_init() and adf_dev_start() did not
    complete successfully.
    However, the implementation of adf_dev_down() prevents the stop/shutdown
    sequence if the device is found already down.
    For example, if adf_dev_init() fails, the device status is not set as
    started and therefore a call to adf_dev_down() won't be calling
    adf_dev_shutdown() to undo what adf_dev_init() did.
    
    Do not check if a device is started in adf_dev_down() but do the
    equivalent check in adf_sysfs.c when handling a DEV_DOWN command from
    the user.
    
    Fixes: 2b60f79c ("crypto: qat - replace state machine calls")
    Signed-off-by: default avatarGiovanni Cabiddu <giovanni.cabiddu@intel.com>
    Reviewed-by: default avatarAdam Guerin <adam.guerin@intel.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    c9ca9756
adf_sysfs.c 5.5 KB