It seems Brian Fundakowski Feldman wrote:
> I just noticed a problem with the ATA driver with my (not quite, but to me)
> new CD-R drive. The behavior is that underruns and overruns are handled
> incorrectly, due to a mixup between variables. The end result is that
> too much data is sent to the drive and it chokes, borking my entire 2nd ATA
> bus and thereforeo my box.
> Enclosed is my fix in the form of a patch to atapi-all.c. The changes
> are:
> * general cleanups
> * the bugfixes
> * make the {over,under}run messages easier to understand/more helpful
> * more use of ATA_16BIT_ONLY and *l functions to maintain consistency
> I'm pretty certain that the bugfixes are correct, since it fixed the problem
> for me, but I don't know about the ATA_16BIT_ONLY usage. My uncertainty
> there lies in wondering if packets have to be a certain modulus. From the
> code, I'd assume that all packets would have a modulus of 4 bytes. Is this
> correct?
Either the patch is very short, or you forgot to include it :)
The ATA_16BIT_ONLY thing is to only do 16bit wide inb/outb instructions
as old ISA HW don't allow 32bit wide access. This option is now deprecated
as it is switched on automagically for ISA cards.
> Anyone else experiencing lockups when an underrun/overrun occurs, try
> this patch; it has fixed the problem for me, and now I'm on my way to
> writing music CDs :) The current way to hack around that bug must be
> to use the "obs" operand to dd(1), since that's what came naturally to
> me :)
You _should_ _always_ have dd (or whatever you use) pad the output to the
given blocksize, or you will run into problems.
-Søren
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message