megaraid: fix irq setup process regression
This fixes a regression caused by commit
d3557fc8be
megaraid_sas : Add separate function
for setting up IRQs This makes boot end with 'root does not exist' message on
certain adapters.
The bug is that the driver does not setup ints for cards without msi-x
support. This patch fixes it, in addition to that it moves tasklet
initialisation before enable_intr, otherwise a kernel panic may occur, when an
interrupt arrives before the tasklet is ready.
Signed-off-by: Tomas Henzl <thenzl@redhat.com>
Signed-off-by: Sumit Saxena <sumit.saxena@avagotech.com>
Signed-off-by: James Bottomley <JBottomley@Odin.com>
This commit is contained in:
parent
f0284ca63e
commit
258c3af2b9
|
@ -4619,19 +4619,19 @@ static int megasas_init_fw(struct megasas_instance *instance)
|
|||
instance->msix_vectors = i;
|
||||
else
|
||||
instance->msix_vectors = 0;
|
||||
|
||||
dev_info(&instance->pdev->dev,
|
||||
"firmware supports msix\t: (%d)", fw_msix_count);
|
||||
dev_info(&instance->pdev->dev,
|
||||
"current msix/online cpus\t: (%d/%d)\n",
|
||||
instance->msix_vectors, (unsigned int)num_online_cpus());
|
||||
|
||||
if (instance->msix_vectors ?
|
||||
megasas_setup_irqs_msix(instance, 1) :
|
||||
megasas_setup_irqs_ioapic(instance))
|
||||
goto fail_setup_irqs;
|
||||
}
|
||||
|
||||
dev_info(&instance->pdev->dev,
|
||||
"firmware supports msix\t: (%d)", fw_msix_count);
|
||||
dev_info(&instance->pdev->dev,
|
||||
"current msix/online cpus\t: (%d/%d)\n",
|
||||
instance->msix_vectors, (unsigned int)num_online_cpus());
|
||||
|
||||
if (instance->msix_vectors ?
|
||||
megasas_setup_irqs_msix(instance, 1) :
|
||||
megasas_setup_irqs_ioapic(instance))
|
||||
goto fail_setup_irqs;
|
||||
|
||||
instance->ctrl_info = kzalloc(sizeof(struct megasas_ctrl_info),
|
||||
GFP_KERNEL);
|
||||
if (instance->ctrl_info == NULL)
|
||||
|
@ -4646,6 +4646,10 @@ static int megasas_init_fw(struct megasas_instance *instance)
|
|||
/* Get operational params, sge flags, send init cmd to controller */
|
||||
if (instance->instancet->init_adapter(instance))
|
||||
goto fail_init_adapter;
|
||||
|
||||
tasklet_init(&instance->isr_tasklet, instance->instancet->tasklet,
|
||||
(unsigned long)instance);
|
||||
|
||||
instance->instancet->enable_intr(instance);
|
||||
|
||||
printk(KERN_ERR "megasas: INIT adapter done\n");
|
||||
|
@ -4762,12 +4766,6 @@ static int megasas_init_fw(struct megasas_instance *instance)
|
|||
instance->throttlequeuedepth =
|
||||
MEGASAS_THROTTLE_QUEUE_DEPTH;
|
||||
|
||||
/*
|
||||
* Setup tasklet for cmd completion
|
||||
*/
|
||||
|
||||
tasklet_init(&instance->isr_tasklet, instance->instancet->tasklet,
|
||||
(unsigned long)instance);
|
||||
|
||||
/* Launch SR-IOV heartbeat timer */
|
||||
if (instance->requestorId) {
|
||||
|
|
Loading…
Reference in a new issue