Re: sata_sil boot problems with kernel 2.6.35 and current git

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Sep 09, 2010 at 05:00:46PM +0200, Tejun Heo wrote:
> (cc's added)
> Hello,
> 
> On 09/08/2010 08:26 PM, gianluca wrote:
> > Today I tried  the kernel 2.6.35 in one of my boxes but I realized that the
> > box doesn't detect my SATA HD anymore. The logs show that the driver sata_sil
> > is correctly loaded. With 2.6.34 it worked fine.
> > 
> > So I tried to test the latest git to see if the issue was fixed, but that
> > kernel exhibits the same behaviour. Then I looked at the linux-ide mailing list
> > archives at http://marc.info/?t=128232284600001&r=1&w=2 and I found out that 
> > the issue is known but not solved and since I could reliably reproduce the
> > problen I started to bisect.
> > 
> > The logs of the bisection are attached. It pointed to the commit
> > 978c066691a49a205673672a55685305663a2554 (  libata: Remove excess delay in the
> > tf_load path ).
> > 
> > So I reverted that commit and got a bootable kernel again. I think this commit
> > exposed a timing bug in the sata_sil driver.
> 
> I love you.  Thank you so much for bisecting it.  :-)
> 
> Can you please test whether the patch at the end of this message is
> enough to fix the problem?

I just tested the patch you attached on a vanilla 2.6.35.4 kernel and it works
for me: the disk is there again.

Thank you!

gianluca


> 
> Alan, the above commit seems a bit dangerous as writes can be merged.
> Also, ISTR delay requirements for PATA while loading registers.  Mark,
> Sergei, what do you guys think?
> 
> diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
> index 030b1c4..6a43129 100644
> --- a/drivers/ata/libata-sff.c
> +++ b/drivers/ata/libata-sff.c
> @@ -418,6 +418,7 @@ void ata_sff_tf_load(struct ata_port *ap, const struct ata_taskfile *tf)
>  		if (ioaddr->ctl_addr)
>  			iowrite8(tf->ctl, ioaddr->ctl_addr);
>  		ap->last_ctl = tf->ctl;
> +		ap->ops->sff_check_status(ap);
>  	}
> 
>  	if (is_addr && (tf->flags & ATA_TFLAG_LBA48)) {
> @@ -453,6 +454,7 @@ void ata_sff_tf_load(struct ata_port *ap, const struct ata_taskfile *tf)
>  		iowrite8(tf->device, ioaddr->device_addr);
>  		VPRINTK("device 0x%X\n", tf->device);
>  	}
> +	ap->ops->sff_check_status(ap);
>  }
>  EXPORT_SYMBOL_GPL(ata_sff_tf_load);
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux