2016-03-29 17:25:45

by Tadeusz Struk

[permalink] [raw]
Subject: [PATCH] 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 <[email protected]>
---
drivers/crypto/qat/qat_common/adf_ctl_drv.c | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/drivers/crypto/qat/qat_common/adf_ctl_drv.c b/drivers/crypto/qat/qat_common/adf_ctl_drv.c
index 5c897e6..7403356 100644
--- a/drivers/crypto/qat/qat_common/adf_ctl_drv.c
+++ b/drivers/crypto/qat/qat_common/adf_ctl_drv.c
@@ -275,7 +275,26 @@ static int adf_ctl_stop_devices(uint32_t id)
struct adf_accel_dev *accel_dev;
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 (!adf_dev_started(accel_dev))
continue;


2016-04-05 12:51:02

by Herbert Xu

[permalink] [raw]
Subject: Re: [PATCH] crypto: qat - explicitly stop all VFs first

On Tue, Mar 29, 2016 at 10:20:52AM -0700, Tadeusz Struk wrote:
> When stopping devices it is not enought to loop backwards.
> We need to explicitly stop all VFs first.
>
> Signed-off-by: Tadeusz Struk <[email protected]>

Applied.
--
Email: Herbert Xu <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt