• Shashank Gupta's avatar
    crypto: qat - fix concurrency issue when device state changes · 1bdc8555
    Shashank Gupta authored
    The sysfs `state` attribute is not protected against race conditions.
    If multiple processes perform a device state transition on the same
    device in parallel, unexpected behaviors might occur.
    
    For transitioning the device state, adf_sysfs.c calls the functions
    adf_dev_init(), adf_dev_start(), adf_dev_stop() and adf_dev_shutdown()
    which are unprotected and interdependent on each other. To perform a
    state transition, these functions needs to be called in a specific
    order:
      * device up:   adf_dev_init() -> adf_dev_start()
      * device down: adf_dev_stop() -> adf_dev_shutdown()
    
    This change introduces the functions adf_dev_up() and adf_dev_down()
    which wrap the state machine functions and protect them with a
    per-device lock. These are then used in adf_sysfs.c instead of the
    individual state transition functions.
    
    Fixes: 5ee52118 ("crypto: qat - expose device state through sysfs for 4xxx")
    Signed-off-by: default avatarShashank Gupta <shashank.gupta@intel.com>
    Reviewed-by: default avatarGiovanni Cabiddu <giovanni.cabiddu@intel.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    1bdc8555
adf_init.c 11.9 KB