crypto: hisilicon/qm - fix the qos value initialization
The default qos value is not initialized when sriov is repeatedly enabled and disabled. So add the vf qos value initialized in the sriov enable process. Signed-off-by: Kai Ye <yekai13@huawei.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
Родитель
b21dc63122
Коммит
f5b657e5db
|
@ -4801,6 +4801,14 @@ void hisi_qm_debug_regs_clear(struct hisi_qm *qm)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(hisi_qm_debug_regs_clear);
|
||||
|
||||
static void hisi_qm_init_vf_qos(struct hisi_qm *qm, int total_func)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 1; i <= total_func; i++)
|
||||
qm->factor[i].func_qos = QM_QOS_MAX_VAL;
|
||||
}
|
||||
|
||||
/**
|
||||
* hisi_qm_sriov_enable() - enable virtual functions
|
||||
* @pdev: the PCIe device
|
||||
|
@ -4834,6 +4842,10 @@ int hisi_qm_sriov_enable(struct pci_dev *pdev, int max_vfs)
|
|||
}
|
||||
|
||||
num_vfs = max_vfs;
|
||||
|
||||
if (test_bit(QM_SUPPORT_FUNC_QOS, &qm->caps))
|
||||
hisi_qm_init_vf_qos(qm, num_vfs);
|
||||
|
||||
ret = qm_vf_q_assign(qm, num_vfs);
|
||||
if (ret) {
|
||||
pci_err(pdev, "Can't assign queues for VF!\n");
|
||||
|
@ -4869,7 +4881,6 @@ EXPORT_SYMBOL_GPL(hisi_qm_sriov_enable);
|
|||
int hisi_qm_sriov_disable(struct pci_dev *pdev, bool is_frozen)
|
||||
{
|
||||
struct hisi_qm *qm = pci_get_drvdata(pdev);
|
||||
int total_vfs = pci_sriov_get_totalvfs(qm->pdev);
|
||||
int ret;
|
||||
|
||||
if (pci_vfs_assigned(pdev)) {
|
||||
|
@ -4884,9 +4895,6 @@ int hisi_qm_sriov_disable(struct pci_dev *pdev, bool is_frozen)
|
|||
}
|
||||
|
||||
pci_disable_sriov(pdev);
|
||||
/* clear vf function shaper configure array */
|
||||
if (test_bit(QM_SUPPORT_FUNC_QOS, &qm->caps))
|
||||
memset(qm->factor + 1, 0, sizeof(struct qm_shaper_factor) * total_vfs);
|
||||
|
||||
ret = qm_clear_vft_config(qm);
|
||||
if (ret)
|
||||
|
@ -6297,7 +6305,7 @@ err_init_qp_mem:
|
|||
static int hisi_qm_memory_init(struct hisi_qm *qm)
|
||||
{
|
||||
struct device *dev = &qm->pdev->dev;
|
||||
int ret, total_func, i;
|
||||
int ret, total_func;
|
||||
size_t off = 0;
|
||||
|
||||
if (test_bit(QM_SUPPORT_FUNC_QOS, &qm->caps)) {
|
||||
|
@ -6306,8 +6314,8 @@ static int hisi_qm_memory_init(struct hisi_qm *qm)
|
|||
if (!qm->factor)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < total_func; i++)
|
||||
qm->factor[i].func_qos = QM_QOS_MAX_VAL;
|
||||
/* Only the PF value needs to be initialized */
|
||||
qm->factor[0].func_qos = QM_QOS_MAX_VAL;
|
||||
}
|
||||
|
||||
#define QM_INIT_BUF(qm, type, num) do { \
|
||||
|
|
Загрузка…
Ссылка в новой задаче