From e3b9140ea7067ccc2c0541d56323dd6f7f8d1133 Mon Sep 17 00:00:00 2001 From: Yupeng Zhou Date: Fri, 23 Aug 2019 14:07:05 +0800 Subject: [PATCH] hisi_sas: Fix the issue of disk in fail when only 1 cpu online. driver inclusion category: feature bugzilla: NA CVE: NA This patch fix the issue of disk in fail when only 1 cpu online. alloc the DQ number according to the interrupt allocated. Signed-off-by: Yupeng Zhou Reviewed-by: Jian Luo Reviewed-by: Chuan Gao Reviewed-by: Yang Yingliang Signed-off-by: Yang Yingliang --- drivers/scsi/hisi_sas/hisi_sas_main.c | 1 - drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 10 ++++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c index df1a4558da16..20c5de79b48d 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_main.c +++ b/drivers/scsi/hisi_sas/hisi_sas_main.c @@ -2335,7 +2335,6 @@ int hisi_sas_alloc(struct hisi_hba *hisi_hba) sema_init(&hisi_hba->sem, 1); spin_lock_init(&hisi_hba->lock); - hisi_hba->dq_num_per_node = hisi_hba->queue_count/num_online_nodes(); for (i = 0; i < NR_CPUS; i++) hisi_hba->dq_idx[i] = 0; diff --git a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c index 180733df9879..c90f66f5eb45 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c +++ b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c @@ -2586,6 +2586,7 @@ static int interrupt_init_v3_hw(struct hisi_hba *hisi_hba) int vectors, rc; int i, k; int max_msi = HISI_SAS_MSI_COUNT_V3_HW; + int max_dq_num, online_numa_num; struct irq_affinity desc = { .pre_vectors = HISI_SAS_CQ_INT_BASE_VECTORS_V3_HW, }; @@ -2608,6 +2609,15 @@ static int interrupt_init_v3_hw(struct hisi_hba *hisi_hba) } hisi_hba->nvecs = vectors - HISI_SAS_CQ_INT_BASE_VECTORS_V3_HW; + max_dq_num = (hisi_hba->nvecs < hisi_hba->queue_count) ? + hisi_hba->nvecs : hisi_hba->queue_count; + online_numa_num = num_online_nodes(); + dev_info(dev, "vectors nvecs:%d, online_numa:%d\n", + hisi_hba->nvecs, online_numa_num); + if (max_dq_num > online_numa_num) + hisi_hba->dq_num_per_node = max_dq_num / online_numa_num; + else + hisi_hba->dq_num_per_node = 1; rc = devm_request_irq(dev, pci_irq_vector(pdev, PCI_IRQ_PHY), int_phy_up_down_bcast_v3_hw, 0, DRV_NAME " phy", hisi_hba); -- GitLab