crypto: qat - explicitly stop all VFs first

When stopping devices it is not enought to loop backwards.
We need to explicitly stop all VFs first.

Signed-off-by: Tadeusz Struk <tadeusz.struk@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
Tadeusz Struk 2016-03-29 10:20:52 -07:00 committed by Herbert Xu
parent 4218ebe8ca
commit cb00bca42f

View File

@ -275,7 +275,26 @@ static int adf_ctl_stop_devices(uint32_t id)
struct adf_accel_dev *accel_dev; struct adf_accel_dev *accel_dev;
int ret = 0; int ret = 0;
list_for_each_entry_reverse(accel_dev, adf_devmgr_get_head(), list) { list_for_each_entry(accel_dev, adf_devmgr_get_head(), list) {
if (id == accel_dev->accel_id || id == ADF_CFG_ALL_DEVICES) {
if (!adf_dev_started(accel_dev))
continue;
/* First stop all VFs */
if (!accel_dev->is_vf)
continue;
if (adf_dev_stop(accel_dev)) {
dev_err(&GET_DEV(accel_dev),
"Failed to stop qat_dev%d\n", id);
ret = -EFAULT;
} else {
adf_dev_shutdown(accel_dev);
}
}
}
list_for_each_entry(accel_dev, adf_devmgr_get_head(), list) {
if (id == accel_dev->accel_id || id == ADF_CFG_ALL_DEVICES) { if (id == accel_dev->accel_id || id == ADF_CFG_ALL_DEVICES) {
if (!adf_dev_started(accel_dev)) if (!adf_dev_started(accel_dev))
continue; continue;