Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 06 Aug 2004 16:35:36 -0700
From:      Nate Lawson <nate@root.org>
To:        =?ISO-8859-1?Q?S=F8ren_Schmidt?= <sos@DeepCore.dk>
Cc:        Radek Kozlowski <radek@raadradd.com>
Subject:   Re: Panic on boot with today's CURRENT, ata related
Message-ID:  <411415C8.4070600@root.org>
In-Reply-To: <41140722.10807@DeepCore.dk>
References:  <4113EB2A.7060401@root.org> <41140722.10807@DeepCore.dk>

next in thread | previous in thread | raw e-mail | index | archive | help
Søren Schmidt wrote:
> Nate Lawson wrote:
> 
>> I took a quick look at this ATA panic.  The exact same one occurs for 
>> Ceri.  A quick dissassemble shows that the testb is the check for the 
>> DMA flag at the very end of ata_generic_transaction().  The bug 
>> appears to be that this may be a PIO request (since the DMA check is 
>> outside the switch() statement).  The fix is to make sure it's a DMA 
>> request before dereferencing an element of the DMA struct.  Try the 
>> attached patch.
> 
> No, the fix is to make sure there is a valid ch->dma pointer, the below 
> is the correct fix.
> 
> --- ata-lowlevel.c      5 Aug 2004 21:13:41 -0000       1.41
> +++ ata-lowlevel.c      6 Aug 2004 22:31:16 -0000
> @@ -295,7 +295,7 @@
>      }
> 
>      /* request finish here */
> -    if (ch->dma->flags & ATA_DMA_LOADED)
> +    if (ch->dma && ch->dma->flags & ATA_DMA_LOADED)
>         ch->dma->unload(ch);
>      return ATA_OP_FINISHED;
>  }

Thanks.  Under what circumstances is a request generated with ATA_R_DMA 
set in the flags but where the channel's dma struct has not been allocated?

-Nate



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?411415C8.4070600>