* [PATCH v2] regression, megaraid - fix irq setup process
@ 2015-06-02 10:39 Sumit.Saxena
2015-06-02 14:29 ` Tomas Henzl
0 siblings, 1 reply; 2+ messages in thread
From: Sumit.Saxena @ 2015-06-02 10:39 UTC (permalink / raw)
To: linux-scsi; +Cc: thenzl
From:Tomas Henzl<thenzl@redhat.com>
This fixes a regression caused by commit
d3557fc8be11d25f316884581f487684f8e7dad3
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>
---
diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
index a022c39..da26ac4 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -4619,18 +4619,18 @@ 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());
+ 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;
- }
+ 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);
@@ -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) {
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v2] regression, megaraid - fix irq setup process
2015-06-02 10:39 [PATCH v2] regression, megaraid - fix irq setup process Sumit.Saxena
@ 2015-06-02 14:29 ` Tomas Henzl
0 siblings, 0 replies; 2+ messages in thread
From: Tomas Henzl @ 2015-06-02 14:29 UTC (permalink / raw)
To: Sumit.Saxena, linux-scsi
On 06/02/2015 12:39 PM, Sumit.Saxena@avagotech.com wrote:
> From:Tomas Henzl<thenzl@redhat.com>
>
> This fixes a regression caused by commit
> d3557fc8be11d25f316884581f487684f8e7dad3
> 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>
This modified version fixes the issue too.
Thanks, Tomas
> ---
> diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
> index a022c39..da26ac4 100644
> --- a/drivers/scsi/megaraid/megaraid_sas_base.c
> +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
> @@ -4619,18 +4619,18 @@ 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());
> + 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;
> - }
> + 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);
> @@ -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) {
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2015-06-02 14:29 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-06-02 10:39 [PATCH v2] regression, megaraid - fix irq setup process Sumit.Saxena
2015-06-02 14:29 ` Tomas Henzl
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).