diff mbox

megaraid_sas: init tasklet earlier

Message ID 1440509507-3337-1-git-send-email-thenzl@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Tomas Henzl Aug. 25, 2015, 1:31 p.m. UTC
It may happen (kdump), that an interrupt is invoked just
after the setup_irqs function was called but before
the tasklet was initialised.
At this phase the hw ints should have been disabled, but for
unknown reason this mechanism seems to not work properly.

Signed-off-by: Tomas Henzl <thenzl@redhat.com>
---
 drivers/scsi/megaraid/megaraid_sas_base.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Sumit Saxena Aug. 26, 2015, 1:15 p.m. UTC | #1
> -----Original Message-----
> From: Tomas Henzl [mailto:thenzl@redhat.com]
> Sent: Tuesday, August 25, 2015 7:02 PM
> To: linux-scsi@vger.kernel.org
> Cc: kashyap.desai@avagotech.com; kiran-kumar.kasturi@avagotech.com;
> Sumit.Saxena@avagotech.com
> Subject: [PATCH] megaraid_sas: init tasklet earlier
>
> It may happen (kdump), that an interrupt is invoked just after the
setup_irqs
> function was called but before the tasklet was initialised.
> At this phase the hw ints should have been disabled, but for unknown
reason this
> mechanism seems to not work properly.
>
> Signed-off-by: Tomas Henzl <thenzl@redhat.com>
> ---
>  drivers/scsi/megaraid/megaraid_sas_base.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c
> b/drivers/scsi/megaraid/megaraid_sas_base.c
> index 71b884dae2..c8e0c6de80 100644
> --- a/drivers/scsi/megaraid/megaraid_sas_base.c
> +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
> @@ -4627,6 +4627,9 @@ static int megasas_init_fw(struct megasas_instance
> *instance)
>  		"current msix/online cpus\t: (%d/%d)\n",
>  		instance->msix_vectors, (unsigned int)num_online_cpus());
>
> +	tasklet_init(&instance->isr_tasklet, instance->instancet->tasklet,
> +		(unsigned long)instance);
> +
>  	if (instance->msix_vectors ?
>  		megasas_setup_irqs_msix(instance, 1) :
>  		megasas_setup_irqs_ioapic(instance))
> @@ -4647,9 +4650,6 @@ static int megasas_init_fw(struct megasas_instance
> *instance)
>  	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");


Patch looks harmless and it fixes your problem then it's fine. But we need
to know the reason why interrupts are coming even if they are not enabled
by that time. Can you provide controller's FW version ? I would like to
try this locally.

> --
> 2.4.3
--
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
Tomas Henzl Aug. 26, 2015, 2:14 p.m. UTC | #2
On 26.8.2015 15:15, Sumit Saxena wrote:
>> -----Original Message-----
>> From: Tomas Henzl [mailto:thenzl@redhat.com]
>> Sent: Tuesday, August 25, 2015 7:02 PM
>> To: linux-scsi@vger.kernel.org
>> Cc: kashyap.desai@avagotech.com; kiran-kumar.kasturi@avagotech.com;
>> Sumit.Saxena@avagotech.com
>> Subject: [PATCH] megaraid_sas: init tasklet earlier
>>
>> It may happen (kdump), that an interrupt is invoked just after the
> setup_irqs
>> function was called but before the tasklet was initialised.
>> At this phase the hw ints should have been disabled, but for unknown
> reason this
>> mechanism seems to not work properly.
>>
>> Signed-off-by: Tomas Henzl <thenzl@redhat.com>
>> ---
>>  drivers/scsi/megaraid/megaraid_sas_base.c | 6 +++---
>>  1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c
>> b/drivers/scsi/megaraid/megaraid_sas_base.c
>> index 71b884dae2..c8e0c6de80 100644
>> --- a/drivers/scsi/megaraid/megaraid_sas_base.c
>> +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
>> @@ -4627,6 +4627,9 @@ static int megasas_init_fw(struct megasas_instance
>> *instance)
>>  		"current msix/online cpus\t: (%d/%d)\n",
>>  		instance->msix_vectors, (unsigned int)num_online_cpus());
>>
>> +	tasklet_init(&instance->isr_tasklet, instance->instancet->tasklet,
>> +		(unsigned long)instance);
>> +
>>  	if (instance->msix_vectors ?
>>  		megasas_setup_irqs_msix(instance, 1) :
>>  		megasas_setup_irqs_ioapic(instance))
>> @@ -4647,9 +4650,6 @@ static int megasas_init_fw(struct megasas_instance
>> *instance)
>>  	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");
>
> Patch looks harmless and it fixes your problem then it's fine. But we need
> to know the reason why interrupts are coming even if they are not enabled
> by that time. Can you provide controller's FW version ? I would like to
> try this locally.

It is a "PERC 6/i Integrated" with
FW Version         : 1.22.02-0612
BIOS Version       : 2.04.00
------------------

Even when you'll be able to fix it by another means, we can take
my patch too, just because it calls the init functions in proper order and so it
is safe(r). 

>
>> --
>> 2.4.3
> --
> 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

--
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
Sumit Saxena Aug. 28, 2015, 10:22 a.m. UTC | #3
> -----Original Message-----
> From: Tomas Henzl [mailto:thenzl@redhat.com]
> Sent: Wednesday, August 26, 2015 7:45 PM
> To: Sumit Saxena; linux-scsi@vger.kernel.org
> Cc: Kashyap Desai; Kiran Kumar Kasturi
> Subject: Re: [PATCH] megaraid_sas: init tasklet earlier
>
> On 26.8.2015 15:15, Sumit Saxena wrote:
> >> -----Original Message-----
> >> From: Tomas Henzl [mailto:thenzl@redhat.com]
> >> Sent: Tuesday, August 25, 2015 7:02 PM
> >> To: linux-scsi@vger.kernel.org
> >> Cc: kashyap.desai@avagotech.com; kiran-kumar.kasturi@avagotech.com;
> >> Sumit.Saxena@avagotech.com
> >> Subject: [PATCH] megaraid_sas: init tasklet earlier
> >>
> >> It may happen (kdump), that an interrupt is invoked just after the
> > setup_irqs
> >> function was called but before the tasklet was initialised.
> >> At this phase the hw ints should have been disabled, but for unknown
> > reason this
> >> mechanism seems to not work properly.
> >>
> >> Signed-off-by: Tomas Henzl <thenzl@redhat.com>
> >> ---
> >>  drivers/scsi/megaraid/megaraid_sas_base.c | 6 +++---
> >>  1 file changed, 3 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c
> >> b/drivers/scsi/megaraid/megaraid_sas_base.c
> >> index 71b884dae2..c8e0c6de80 100644
> >> --- a/drivers/scsi/megaraid/megaraid_sas_base.c
> >> +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
> >> @@ -4627,6 +4627,9 @@ static int megasas_init_fw(struct
> >> megasas_instance
> >> *instance)
> >>  		"current msix/online cpus\t: (%d/%d)\n",
> >>  		instance->msix_vectors, (unsigned int)num_online_cpus());
> >>
> >> +	tasklet_init(&instance->isr_tasklet, instance->instancet->tasklet,
> >> +		(unsigned long)instance);
> >> +
> >>  	if (instance->msix_vectors ?
> >>  		megasas_setup_irqs_msix(instance, 1) :
> >>  		megasas_setup_irqs_ioapic(instance))
> >> @@ -4647,9 +4650,6 @@ static int megasas_init_fw(struct
> >> megasas_instance
> >> *instance)
> >>  	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");
> >
> > Patch looks harmless and it fixes your problem then it's fine. But we
> > need to know the reason why interrupts are coming even if they are not
> > enabled by that time. Can you provide controller's FW version ? I
> > would like to try this locally.
>
> It is a "PERC 6/i Integrated" with
> FW Version         : 1.22.02-0612
> BIOS Version       : 2.04.00
> ------------------
>
> Even when you'll be able to fix it by another means, we can take my patch
> too,
> just because it calls the init functions in proper order and so it is
> safe(r).
Looks good.
Acked-by: Sumit Saxena <sumit.saxena@avagotech.com>

>
> >
> >> --
> >> 2.4.3
> > --
> > 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
--
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
Sumit Saxena Oct. 15, 2015, 9:46 a.m. UTC | #4
> -----Original Message-----
> From: Sumit Saxena [mailto:sumit.saxena@avagotech.com]
> Sent: Friday, August 28, 2015 3:52 PM
> To: 'Tomas Henzl'; 'linux-scsi@vger.kernel.org'
> Cc: Kashyap Desai; Kiran Kumar Kasturi
> Subject: RE: [PATCH] megaraid_sas: init tasklet earlier
>
>
>
> > -----Original Message-----
> > From: Tomas Henzl [mailto:thenzl@redhat.com]
> > Sent: Wednesday, August 26, 2015 7:45 PM
> > To: Sumit Saxena; linux-scsi@vger.kernel.org
> > Cc: Kashyap Desai; Kiran Kumar Kasturi
> > Subject: Re: [PATCH] megaraid_sas: init tasklet earlier
> >
> > On 26.8.2015 15:15, Sumit Saxena wrote:
> > >> -----Original Message-----
> > >> From: Tomas Henzl [mailto:thenzl@redhat.com]
> > >> Sent: Tuesday, August 25, 2015 7:02 PM
> > >> To: linux-scsi@vger.kernel.org
> > >> Cc: kashyap.desai@avagotech.com; kiran-kumar.kasturi@avagotech.com;
> > >> Sumit.Saxena@avagotech.com
> > >> Subject: [PATCH] megaraid_sas: init tasklet earlier
> > >>
> > >> It may happen (kdump), that an interrupt is invoked just after the
> > > setup_irqs
> > >> function was called but before the tasklet was initialised.
> > >> At this phase the hw ints should have been disabled, but for
> > >> unknown
> > > reason this
> > >> mechanism seems to not work properly.
> > >>
> > >> Signed-off-by: Tomas Henzl <thenzl@redhat.com>
> > >> ---
> > >>  drivers/scsi/megaraid/megaraid_sas_base.c | 6 +++---
> > >>  1 file changed, 3 insertions(+), 3 deletions(-)
> > >>
> > >> diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c
> > >> b/drivers/scsi/megaraid/megaraid_sas_base.c
> > >> index 71b884dae2..c8e0c6de80 100644
> > >> --- a/drivers/scsi/megaraid/megaraid_sas_base.c
> > >> +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
> > >> @@ -4627,6 +4627,9 @@ static int megasas_init_fw(struct
> > >> megasas_instance
> > >> *instance)
> > >>  		"current msix/online cpus\t: (%d/%d)\n",
> > >>  		instance->msix_vectors, (unsigned int)num_online_cpus());
> > >>
> > >> +	tasklet_init(&instance->isr_tasklet, instance->instancet->tasklet,
> > >> +		(unsigned long)instance);
> > >> +
> > >>  	if (instance->msix_vectors ?
> > >>  		megasas_setup_irqs_msix(instance, 1) :
> > >>  		megasas_setup_irqs_ioapic(instance))
> > >> @@ -4647,9 +4650,6 @@ static int megasas_init_fw(struct
> > >> megasas_instance
> > >> *instance)
> > >>  	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");
> > >
> > > Patch looks harmless and it fixes your problem then it's fine. But
> > > we need to know the reason why interrupts are coming even if they
> > > are not enabled by that time. Can you provide controller's FW
> > > version ? I would like to try this locally.
> >
> > It is a "PERC 6/i Integrated" with
> > FW Version         : 1.22.02-0612
> > BIOS Version       : 2.04.00
> > ------------------
> >
> > Even when you'll be able to fix it by another means, we can take my
> > patch too, just because it calls the init functions in proper order and
> > so it is
> safe(r).
> Looks good.
> Acked-by: Sumit Saxena <sumit.saxena@avagotech.com>

I have posted same patch with subject- [PATCH 08/12] megaraid_sas :
Initialize tasklet before setting up IRQs.
Please ignore this patch to avoid confusion.

Thanks,
Sumit
>
> >
> > >
> > >> --
> > >> 2.4.3
> > > --
> > > 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
--
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
diff mbox

Patch

diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
index 71b884dae2..c8e0c6de80 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -4627,6 +4627,9 @@  static int megasas_init_fw(struct megasas_instance *instance)
 		"current msix/online cpus\t: (%d/%d)\n",
 		instance->msix_vectors, (unsigned int)num_online_cpus());
 
+	tasklet_init(&instance->isr_tasklet, instance->instancet->tasklet,
+		(unsigned long)instance);
+
 	if (instance->msix_vectors ?
 		megasas_setup_irqs_msix(instance, 1) :
 		megasas_setup_irqs_ioapic(instance))
@@ -4647,9 +4650,6 @@  static int megasas_init_fw(struct megasas_instance *instance)
 	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");