Commit 107dfcba authored by John Soni Jose's avatar John Soni Jose Committed by James Bottomley

[SCSI] be2iscsi: Fix max supported EQ count to 8.

The maximum EQ that can be created for a function is 8. Check the
CPU online count and create only 8 EQ if CPU_Count >= 8
Signed-off-by: default avatarJohn Soni Jose <sony.john-n@emulex.com>
Signed-off-by: default avatarJayamohan Kallickal <jayamohan.kallickal@emulex.com>
Reviewed-by: default avatarMike Christie <michaelc@cs.wisc.edu>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent d629c471
...@@ -2890,7 +2890,7 @@ static int beiscsi_create_eqs(struct beiscsi_hba *phba, ...@@ -2890,7 +2890,7 @@ static int beiscsi_create_eqs(struct beiscsi_hba *phba,
} }
return 0; return 0;
create_eq_error: create_eq_error:
for (i = 0; i < (phba->num_cpus + 1); i++) { for (i = 0; i < (phba->num_cpus + eq_for_mcc); i++) {
eq = &phwi_context->be_eq[i].q; eq = &phwi_context->be_eq[i].q;
mem = &eq->dma_mem; mem = &eq->dma_mem;
if (mem->va) if (mem->va)
...@@ -3315,15 +3315,20 @@ static int be_mcc_queues_create(struct beiscsi_hba *phba, ...@@ -3315,15 +3315,20 @@ static int be_mcc_queues_create(struct beiscsi_hba *phba,
return -ENOMEM; return -ENOMEM;
} }
static int find_num_cpus(void) /**
* find_num_cpus()- Get the CPU online count
* @phba: ptr to priv structure
*
* CPU count is used for creating EQ.
**/
static void find_num_cpus(struct beiscsi_hba *phba)
{ {
int num_cpus = 0; int num_cpus = 0;
num_cpus = num_online_cpus(); num_cpus = num_online_cpus();
if (num_cpus >= MAX_CPUS)
num_cpus = MAX_CPUS - 1;
return num_cpus; phba->num_cpus = (num_cpus >= BEISCSI_MAX_NUM_CPU) ?
(BEISCSI_MAX_NUM_CPU - 1) : num_cpus;
} }
static int hwi_init_port(struct beiscsi_hba *phba) static int hwi_init_port(struct beiscsi_hba *phba)
...@@ -4542,7 +4547,7 @@ static int __devinit beiscsi_dev_probe(struct pci_dev *pcidev, ...@@ -4542,7 +4547,7 @@ static int __devinit beiscsi_dev_probe(struct pci_dev *pcidev,
struct hwi_controller *phwi_ctrlr; struct hwi_controller *phwi_ctrlr;
struct hwi_context_memory *phwi_context; struct hwi_context_memory *phwi_context;
struct be_eq_obj *pbe_eq; struct be_eq_obj *pbe_eq;
int ret, num_cpus, i; int ret, i;
u8 *real_offset = 0; u8 *real_offset = 0;
u32 value = 0; u32 value = 0;
...@@ -4578,10 +4583,10 @@ static int __devinit beiscsi_dev_probe(struct pci_dev *pcidev, ...@@ -4578,10 +4583,10 @@ static int __devinit beiscsi_dev_probe(struct pci_dev *pcidev,
} }
if (enable_msix) if (enable_msix)
num_cpus = find_num_cpus(); find_num_cpus(phba);
else else
num_cpus = 1; phba->num_cpus = 1;
phba->num_cpus = num_cpus;
beiscsi_log(phba, KERN_INFO, BEISCSI_LOG_INIT, beiscsi_log(phba, KERN_INFO, BEISCSI_LOG_INIT,
"BM_%d : num_cpus = %d\n", "BM_%d : num_cpus = %d\n",
phba->num_cpus); phba->num_cpus);
......
...@@ -61,6 +61,7 @@ ...@@ -61,6 +61,7 @@
#define BE2_DEFPDU_DATA_SZ 8192 #define BE2_DEFPDU_DATA_SZ 8192
#define MAX_CPUS 31 #define MAX_CPUS 31
#define BEISCSI_MAX_NUM_CPU 8
#define BEISCSI_SGLIST_ELEMENTS 30 #define BEISCSI_SGLIST_ELEMENTS 30
#define BEISCSI_CMD_PER_LUN 128 /* scsi_host->cmd_per_lun */ #define BEISCSI_CMD_PER_LUN 128 /* scsi_host->cmd_per_lun */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment