scsi: lpfc: Initialize cpu_map for not present cpus
Currently, cpu_map[cpu#]->hdwq is left to equal LPFC_VECTOR_MAP_EMPTY for
not present CPUs. If a CPU is dynamically hot-added, it is possible we may
crash due to not assigning an allocated hdwq.
Correct by assigning a hdwq at initialization for all not-present CPUs.
Fixes: dcaa213679
("scsi: lpfc: Change default IRQ model on AMD architectures")
Link: https://lore.kernel.org/r/20191111230401.12958-5-jsmart2021@gmail.com
Reviewed-by: Ewan D. Milne <emilne@redhat.com>
Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <jsmart2021@gmail.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
d480e57809
commit
bc227dde0d
|
@ -11004,7 +11004,7 @@ found_any:
|
|||
cpu, cpup->phys_id, cpup->core_id,
|
||||
cpup->hdwq, cpup->eq, cpup->flag);
|
||||
}
|
||||
/* Finally we need to associate a hdwq with each cpu_map entry
|
||||
/* Associate a hdwq with each cpu_map entry
|
||||
* This will be 1 to 1 - hdwq to cpu, unless there are less
|
||||
* hardware queues then CPUs. For that case we will just round-robin
|
||||
* the available hardware queues as they get assigned to CPUs.
|
||||
|
@ -11083,6 +11083,23 @@ found_any:
|
|||
cpup->hdwq, cpup->eq, cpup->flag);
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize the cpu_map slots for not-present cpus in case
|
||||
* a cpu is hot-added. Perform a simple hdwq round robin assignment.
|
||||
*/
|
||||
idx = 0;
|
||||
for_each_possible_cpu(cpu) {
|
||||
cpup = &phba->sli4_hba.cpu_map[cpu];
|
||||
if (cpup->hdwq != LPFC_VECTOR_MAP_EMPTY)
|
||||
continue;
|
||||
|
||||
cpup->hdwq = idx++ % phba->cfg_hdw_queue;
|
||||
lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
|
||||
"3340 Set Affinity: not present "
|
||||
"CPU %d hdwq %d\n",
|
||||
cpu, cpup->hdwq);
|
||||
}
|
||||
|
||||
/* The cpu_map array will be used later during initialization
|
||||
* when EQ / CQ / WQs are allocated and configured.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue