Commit a7368b34 authored by Weili Qian's avatar Weili Qian Committed by JiangShui Yang
Browse files

crypto: hisilicon/qm - add functions for releasing resources

mainline inclusion
from mainline-v6.0-rc1
commit bf081d6f
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I6DRLU
CVE: NA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=bf081d6fa8e9



----------------------------------------------------------------------

The resources allocated by hisi_qm_memory_init() are released by
hisi_qm_uninit(). Add hisi_qm_memory_uninit() to release resources,
no functional change.

conficts:
	drivers/crypto/hisilicon/qm.c

Signed-off-by: default avatarWeili Qian <qianweili@huawei.com>
Signed-off-by: default avatarJiangShui Yang <yangjiangshui@h-partners.com>
Reviewed-by: default avatarXiu Jianfeng <xiujianfeng@huawei.com>
parent b982dab6
Loading
Loading
Loading
Loading
+17 −13
Original line number Diff line number Diff line
@@ -3480,6 +3480,21 @@ static void hisi_qm_pci_uninit(struct hisi_qm *qm)
	pci_disable_device(pdev);
}

static void hisi_qm_memory_uninit(struct hisi_qm *qm)
{
	struct device *dev = &qm->pdev->dev;

	hisi_qp_memory_uninit(qm, qm->qp_num);
	if (qm->qdma.va) {
		hisi_qm_cache_wb(qm);
		dma_free_coherent(dev, qm->qdma.size,
				  qm->qdma.va, qm->qdma.dma);
	}

	idr_destroy(&qm->qp_idr);
	kfree(qm->factor);
}

/**
 * hisi_qm_uninit() - Uninitialize qm.
 * @qm: The qm needed uninit.
@@ -3488,26 +3503,15 @@ static void hisi_qm_pci_uninit(struct hisi_qm *qm)
 */
void hisi_qm_uninit(struct hisi_qm *qm)
{
	struct pci_dev *pdev = qm->pdev;
	struct device *dev = &pdev->dev;

	qm_cmd_uninit(qm);
	kfree(qm->factor);
	down_write(&qm->qps_lock);

	down_write(&qm->qps_lock);
	if (!qm_avail_state(qm, QM_CLOSE)) {
		up_write(&qm->qps_lock);
		return;
	}

	hisi_qp_memory_uninit(qm, qm->qp_num);
	idr_destroy(&qm->qp_idr);

	if (qm->qdma.va) {
		hisi_qm_cache_wb(qm);
		dma_free_coherent(dev, qm->qdma.size,
				  qm->qdma.va, qm->qdma.dma);
	}
	hisi_qm_memory_uninit(qm);
	up_write(&qm->qps_lock);

	hisi_qm_set_state(qm, VF_NOT_READY);