Unverified Commit 77566d2b authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!918 Misc fixes for Kunpeng accelerator drivers!

Merge Pull Request from: @xiao_jiang_shui 
 
* crypto: hisilicon/qm - remove unnecessary aer.h include
* crypto: hisilicon/qm - prevent soft lockup in qm_poll_req_cb()'s loop
* crypto: hisilicon/hpre - ensure private key less than n
* crypto: hisilicon/qm - stop function and write data to memory

issue: https://gitee.com/openeuler/kernel/issues/I7AUVE 
 
Link:https://gitee.com/openeuler/kernel/pulls/918

 

Reviewed-by: default avatarYang Shen <shenyang39@huawei.com>
Signed-off-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
parents b83bcc7b c23d3855
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -1382,9 +1382,9 @@ static int hpre_ecdh_set_secret(struct crypto_kpp *tfm, const void *buf,
				unsigned int len)
{
	struct hpre_ctx *ctx = kpp_tfm_ctx(tfm);
	unsigned int sz, sz_shift, curve_sz;
	struct device *dev = ctx->dev;
	char key[HPRE_ECC_MAX_KSZ];
	unsigned int sz, sz_shift;
	struct ecdh params;
	int ret;

@@ -1396,7 +1396,13 @@ static int hpre_ecdh_set_secret(struct crypto_kpp *tfm, const void *buf,
	/* Use stdrng to generate private key */
	if (!params.key || !params.key_size) {
		params.key = key;
		params.key_size = hpre_ecdh_get_curvesz(ctx->curve_id);
		curve_sz = hpre_ecdh_get_curvesz(ctx->curve_id);
		if (!curve_sz) {
			dev_err(dev, "Invalid curve size!\n");
			return -EINVAL;
		}

		params.key_size = curve_sz - 1;
		ret = ecdh_gen_privkey(ctx, &params);
		if (ret)
			return ret;
+9 −7
Original line number Diff line number Diff line
@@ -2,7 +2,6 @@
/* Copyright (c) 2019 HiSilicon Limited. */
#include <asm/page.h>
#include <linux/acpi.h>
#include <linux/aer.h>
#include <linux/bitmap.h>
#include <linux/dma-mapping.h>
#include <linux/idr.h>
@@ -869,6 +868,8 @@ static void qm_poll_req_cb(struct hisi_qp *qp)
		qm_db(qm, qp->qp_id, QM_DOORBELL_CMD_CQ,
		      qp->qp_status.cq_head, 0);
		atomic_dec(&qp->qp_status.used);

		cond_resched();
	}

	/* set c_flag */
@@ -1019,7 +1020,7 @@ static void qm_reset_function(struct hisi_qm *qm)
		return;
	}

	ret = hisi_qm_stop(qm, QM_FLR);
	ret = hisi_qm_stop(qm, QM_DOWN);
	if (ret) {
		dev_err(dev, "failed to stop qm when reset function\n");
		goto clear_bit;
@@ -3395,7 +3396,7 @@ int hisi_qm_stop(struct hisi_qm *qm, enum qm_stop_reason r)
	}

	if (qm->status.stop_reason == QM_SOFT_RESET ||
	    qm->status.stop_reason == QM_FLR) {
	    qm->status.stop_reason == QM_DOWN) {
		hisi_qm_set_hw_reset(qm, QM_RESET_STOP_TX_OFFSET);
		ret = qm_stop_started_qp(qm);
		if (ret < 0) {
@@ -4691,11 +4692,11 @@ void hisi_qm_reset_prepare(struct pci_dev *pdev)
	if (qm->fun_type == QM_HW_PF)
		qm_cmd_uninit(qm);

	ret = qm_try_stop_vfs(qm, QM_PF_FLR_PREPARE, QM_FLR);
	ret = qm_try_stop_vfs(qm, QM_PF_FLR_PREPARE, QM_DOWN);
	if (ret)
		pci_err(pdev, "failed to stop vfs by pf in FLR.\n");

	ret = hisi_qm_stop(qm, QM_FLR);
	ret = hisi_qm_stop(qm, QM_DOWN);
	if (ret) {
		pci_err(pdev, "Failed to stop QM, ret = %d.\n", ret);
		hisi_qm_set_hw_reset(qm, QM_RESET_STOP_TX_OFFSET);
@@ -4793,10 +4794,11 @@ void hisi_qm_dev_shutdown(struct pci_dev *pdev)
	struct hisi_qm *qm = pci_get_drvdata(pdev);
	int ret;

	ret = hisi_qm_stop(qm, QM_NORMAL);
	ret = hisi_qm_stop(qm, QM_DOWN);
	if (ret)
		dev_err(&pdev->dev, "Fail to stop qm in shutdown!\n");

	hisi_qm_cache_wb(qm);
	qm_remove_uacce(qm);
}
EXPORT_SYMBOL_GPL(hisi_qm_dev_shutdown);
@@ -4961,7 +4963,7 @@ static void qm_handle_cmd_msg(struct hisi_qm *qm, u32 fun_num)
	cmd = msg & QM_MB_CMD_DATA_MASK;
	switch (cmd) {
	case QM_PF_FLR_PREPARE:
		qm_pf_reset_vf_process(qm, QM_FLR);
		qm_pf_reset_vf_process(qm, QM_DOWN);
		break;
	case QM_PF_SRST_PREPARE:
		qm_pf_reset_vf_process(qm, QM_SOFT_RESET);
+1 −1
Original line number Diff line number Diff line
@@ -105,7 +105,7 @@
enum qm_stop_reason {
	QM_NORMAL,
	QM_SOFT_RESET,
	QM_FLR,
	QM_DOWN,
};

enum qm_state {