lpfc 8.3.40: Fix lpfc_used_cpu to be more dynamic
Subsystems (2)
PATCH 1/17 lpfc 8.3.40: Fix lpfc_used_cpu to be more dynamic
Fix lpfc_used_cpu to be more dynamic
Signed-off-by James Smart <[email protected]>
---
lpfc_init.c | 30 +++++++++++++++++++++++------- lpfc_sli4.h | 1 - 2 files changed, 23 insertions(+), 8 deletions(-)
drivers/scsi/lpfc/lpfc_init.c +23 -7
@@ -60,7 +60,8 @@ unsigned long _dump_buf_dif_order;spinlock_t _dump_buf_lock;/* Used when mapping IRQ vectors in a driver centric manner */ -uint16_t lpfc_used_cpu[LPFC_MAX_CPU ]; +uint16_t *lpfc_used_cpu; +uint32_t lpfc_present_cpu;static void lpfc_get_hba_model_desc (struct lpfc_hba *,uint8_t *,uint8_t *);static int lpfc_post_rcv_buf (struct lpfc_hba *);
@@ -5213,6 +5214,21 @@ lpfc_sli4_driver_resource_setup(struct l rc = -ENOMEM ; goto out_free_msix; } +if (lpfc_used_cpu ==NULL ) { + lpfc_used_cpu =kzalloc ((sizeof (uint16_t ) * lpfc_present_cpu), +GFP_KERNEL ); +if (!lpfc_used_cpu) { +lpfc_printf_log (phba,KERN_ERR ,LOG_INIT , +"3335 Failed allocate memory for msi-x " +"interrupt vector mapping\n" ); +kfree (phba->sli4_hba.cpu_map); + rc = -ENOMEM ; + goto out_free_msix; + } +for (i =0 ; i < lpfc_present_cpu; i++) + lpfc_used_cpu[i] =LPFC_VECTOR_MAP_EMPTY ; + } +/* Initialize io channels for round robin */ cpup = phba->sli4_hba.cpu_map; rc =0 ;
@@ -6824,8 +6840,6 @@ lpfc_sli4_queue_verify(struct lpfc_hba *int cfg_fcp_io_channel;uint32_t cpu;uint32_t i =0 ; -uint32_t j =0 ; -/* * Sanity check for configured queue parameters against the run-time
@@ -6839,10 +6853,9 @@ lpfc_sli4_queue_verify(struct lpfc_hba *for_each_present_cpu (cpu) {if (cpu_online (cpu)) i++; - j++; } phba->sli4_hba.num_online_cpu = i; - phba->sli4_hba.num_present_cpu = j; + phba->sli4_hba.num_present_cpu = lpfc_present_cpu;if (i < cfg_fcp_io_channel) { lpfc_printf_log(phba,
@@ -10967,8 +10980,10 @@ lpfc_init(void) }/* Initialize in case vector mapping is needed */ -for (cpu =0 ; cpu <LPFC_MAX_CPU ; cpu++) - lpfc_used_cpu[cpu] =LPFC_VECTOR_MAP_EMPTY ; + lpfc_used_cpu =NULL ; + lpfc_present_cpu =0 ; +for_each_present_cpu (cpu) + lpfc_present_cpu++; error =pci_register_driver (&lpfc_driver);if (error) {
@@ -11008,6 +11023,7 @@ lpfc_exit(void) (1L << _dump_buf_dif_order), _dump_buf_dif);free_pages ((unsigned long )_dump_buf_dif, _dump_buf_dif_order); } +kfree (lpfc_used_cpu); }module_init (lpfc_init);
drivers/scsi/lpfc/lpfc_sli4.h +0 -1
@@ -444,7 +444,6 @@ struct lpfc_vector_map_info {struct cpumask maskbits; };#define LPFC_VECTOR_MAP_EMPTY 0xffff -#define LPFC_MAX_CPU 256/* SLI4 HBA data structure entries */ struct lpfc_sli4_hba {