crypto: hisilicon/qm - fix the process of VF's list adding
authorKai Ye <yekai13@huawei.com>
Fri, 21 May 2021 10:02:44 +0000 (18:02 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 28 May 2021 07:11:46 +0000 (15:11 +0800)
If Kunpeng 920 enabled the sva mode, the "qm alg register" process will
return directly. So the list of VF wasn't added to QM list.

Signed-off-by: Kai Ye <yekai13@huawei.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/hisilicon/qm.c

index deb104e..c671f94 100644 (file)
@@ -4256,17 +4256,17 @@ int hisi_qm_alg_register(struct hisi_qm *qm, struct hisi_qm_list *qm_list)
        int flag = 0;
        int ret = 0;
 
-       if (qm->ver <= QM_HW_V2 && qm->use_sva) {
-               dev_info(dev, "HW V2 not both use uacce sva mode and hardware crypto algs.\n");
-               return 0;
-       }
-
        mutex_lock(&qm_list->lock);
        if (list_empty(&qm_list->list))
                flag = 1;
        list_add_tail(&qm->list, &qm_list->list);
        mutex_unlock(&qm_list->lock);
 
+       if (qm->ver <= QM_HW_V2 && qm->use_sva) {
+               dev_info(dev, "HW V2 not both use uacce sva mode and hardware crypto algs.\n");
+               return 0;
+       }
+
        if (flag) {
                ret = qm_list->register_to_crypto(qm);
                if (ret) {
@@ -4291,13 +4291,13 @@ EXPORT_SYMBOL_GPL(hisi_qm_alg_register);
  */
 void hisi_qm_alg_unregister(struct hisi_qm *qm, struct hisi_qm_list *qm_list)
 {
-       if (qm->ver <= QM_HW_V2 && qm->use_sva)
-               return;
-
        mutex_lock(&qm_list->lock);
        list_del(&qm->list);
        mutex_unlock(&qm_list->lock);
 
+       if (qm->ver <= QM_HW_V2 && qm->use_sva)
+               return;
+
        if (list_empty(&qm_list->list))
                qm_list->unregister_from_crypto(qm);
 }