Re: [ PATCH ] mptsas: Fix oops for insmod during kexec

2007-03-10 Thread Christoph Hellwig
On Fri, Mar 09, 2007 at 03:22:13PM -0700, Moore, Eric wrote:
> On Friday, March 09, 2007 2:23 PM, Christoph Hellwig wrote: 
> 
> 
> > This needs a much better explanation.  Please show the codepath
> > leading to this.
> > 
> >
> 
> I was working with Judith on this patch earlier this week, so this is
> approved by LSI,,, ACK.
> 
> This fix's an oops during driver load time.   mptsas_probe calls
> mpt_attach(over in mptbase.c).  Inside that call, we read some
> manufacturing config pages to setup some defaults.  While reading the
> config pages, the firmware doesn't complete the reply in time, and we
> have a timeout. The timeout results in hardreset handler being called.
> The hardreset handler calls all the fusion upper layer driver reset
> callback handlers.  The mptsas_ioc_reset function is the callback
> handler in mptsas.c.   So where I'm getting to, is mptsas_ioc_reset is
> getting called before scsi_host_alloc is called, and the pointer ioc->sh
> is NULL.,,, as well as the hostdata. 

Ok.  Please put a reformulated version of the above statement as a comment
above the checks, so that people don't rip it out again.

-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [ PATCH ] mptsas: Fix oops for insmod during kexec

2007-03-09 Thread Moore, Eric
On Friday, March 09, 2007 2:23 PM, Christoph Hellwig wrote: 


> This needs a much better explanation.  Please show the codepath
> leading to this.
> 
>

I was working with Judith on this patch earlier this week, so this is
approved by LSI,,, ACK.

This fix's an oops during driver load time.   mptsas_probe calls
mpt_attach(over in mptbase.c).  Inside that call, we read some
manufacturing config pages to setup some defaults.  While reading the
config pages, the firmware doesn't complete the reply in time, and we
have a timeout. The timeout results in hardreset handler being called.
The hardreset handler calls all the fusion upper layer driver reset
callback handlers.  The mptsas_ioc_reset function is the callback
handler in mptsas.c.   So where I'm getting to, is mptsas_ioc_reset is
getting called before scsi_host_alloc is called, and the pointer ioc->sh
is NULL.,,, as well as the hostdata. 
 
-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [ PATCH ] mptsas: Fix oops for insmod during kexec

2007-03-09 Thread Christoph Hellwig
On Fri, Mar 09, 2007 at 01:07:44PM -0800, Judith Lebzelter wrote:
> Hello,
> 
> This patch is to fix an oops on insmod for mptsas during kexec.
> This applies to 2.6.21-rc3.
> 
> Signed-off-by:  Judith Lebzelter <[EMAIL PROTECTED]
> 
> ---
> 
> 
> Index: linux-2.6.21-rc3/drivers/message/fusion/mptsas.c
> ===
> --- linux-2.6.21-rc3.orig/drivers/message/fusion/mptsas.c
> +++ linux-2.6.21-rc3/drivers/message/fusion/mptsas.c
> @@ -815,7 +815,7 @@ mptsas_taskmgmt_complete(MPT_ADAPTER *io
>  static int
>  mptsas_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
>  {
> - MPT_SCSI_HOST   *hd = (MPT_SCSI_HOST *)ioc->sh->hostdata;
> + MPT_SCSI_HOST   *hd;
>   struct mptsas_target_reset_event *target_reset_list, *n;
>   int rc;
>  
> @@ -827,7 +827,10 @@ mptsas_ioc_reset(MPT_ADAPTER *ioc, int r
>   if (reset_phase != MPT_IOC_POST_RESET)
>   goto out;
>  
> - if (!hd || !hd->ioc)
> + if (!ioc->sh || !ioc->sh->hostdata)
> + goto out;
> + hd = (MPT_SCSI_HOST *)ioc->sh->hostdata;
> + if (!hd->ioc)

This needs a much better explanation.  Please show the codepath
leading to this.

-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[ PATCH ] mptsas: Fix oops for insmod during kexec

2007-03-09 Thread Judith Lebzelter
Hello,

This patch is to fix an oops on insmod for mptsas during kexec.
This applies to 2.6.21-rc3.

Signed-off-by:  Judith Lebzelter <[EMAIL PROTECTED]

---


Index: linux-2.6.21-rc3/drivers/message/fusion/mptsas.c
===
--- linux-2.6.21-rc3.orig/drivers/message/fusion/mptsas.c
+++ linux-2.6.21-rc3/drivers/message/fusion/mptsas.c
@@ -815,7 +815,7 @@ mptsas_taskmgmt_complete(MPT_ADAPTER *io
 static int
 mptsas_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
 {
-   MPT_SCSI_HOST   *hd = (MPT_SCSI_HOST *)ioc->sh->hostdata;
+   MPT_SCSI_HOST   *hd;
struct mptsas_target_reset_event *target_reset_list, *n;
int rc;
 
@@ -827,7 +827,10 @@ mptsas_ioc_reset(MPT_ADAPTER *ioc, int r
if (reset_phase != MPT_IOC_POST_RESET)
goto out;
 
-   if (!hd || !hd->ioc)
+   if (!ioc->sh || !ioc->sh->hostdata)
+   goto out;
+   hd = (MPT_SCSI_HOST *)ioc->sh->hostdata;
+   if (!hd->ioc)
goto out;
 
if (list_empty(&hd->target_reset_list))

-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html