DragonFly BSD
DragonFly kernel List (threaded) for 2004-11
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: serial ATA status?

From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxx>
Date: Fri, 5 Nov 2004 16:34:25 -0800 (PST)

:I've looked at the scsi/sata_sil.c driver but I learned more C than I
:understood what was actually happening.
:My main concern is 15 byte write quirk that seems to only affect certain
:combinations of drives and the 3112 (Addonics) controller.
:My drive in particular, was subject to serious corruption until about
:linux-2.6.7-bk8 when it was fixed. However, my drive got added to the
:black list which means ~20Mb/sec vs ~50Mb/sec. It doesn't belong in the
:blacklist, when I remove it, I get the performance with no corruption
:issues. I've tested a lot of gigs on that 160G drive and made it my
:primary disk about the time came out with the following mod:
:struct sil_drivelist {
:        const char * product;
:        unsigned int quirk;
:} sil_blacklist [] = {
:        { "ST320012AS",         SIL_QUIRK_MOD15WRITE },
:        { "ST330013AS",         SIL_QUIRK_MOD15WRITE },
:I've not tried sata on 2.6.9, but I don't expect any
:Of course I'm only saying all this because it is a
:nasty bug that I hope doesn't show up in DragonFly.
:// George
:George Georgalis, systems architect, administrator Linux BSD IXOYE
:http://galis.org/george/ cell:646-331-2027 mailto:george@xxxxxxxxx

    The SIL_QUIRK_MOD15WRITE flag forces linux to limit I/O requests to
    no more then 15 sectors (around ~7K) per request), but it is a 
    brute-force solution to the real problem which appears to be related
    to DMA programming of the device by the driver.

    e.g. I came upon this reference (this is an old patch but the 
    description is relevant):


    So the question is whether our code uses the correct registers.
    The answer is: I don't know.  Our code is so different that it
    would take some sleuthing to figure out where the equivalent
    code is and what register offsets are actually used.

					Matthew Dillon 

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