Re: ATA Patch #7 (Re: ATA Patch #6)

看板DFBSD_kernel作者時間21年前 (2004/12/02 21:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/6 (看更多)
--QKdGvSO+nmPlgiQ/ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Tue, Nov 30, 2004 at 10:45:43AM -0800, Matthew Dillon wrote: > :Here's another patch to be applied on top of ATA Patch #7(attached). > :I added ata_clear_interlock() in ata_dmastart() because it needs > :device interrupt enabled anyway. Here I'm assuming that the critical > :section can be nested(looking at thread2.h it can). > :Command-start delay can be changed via hw.ata.command_delay(default: 10). > :Negative value is ignored and silently reset to 0 (can we let sysctl(8) > :to reject bogus values?). > > You can use SYSCTL_PROC to control allowed values, but it may be > easier just to leave it SYSCTL_INT and check at DELAY time, e.g.: > > delay = blahdelay; > if (delay < 1) > delay = 1; > if (delay > 1000) > delay = 1000; > DELAY(delay); I took this way, but allowing the blahdelay to be zero(in which case DELAY() isn't called). I also made selection delay tunable, and made two delays tunable int's so that I can put it in the /boot/loader.conf hw.ata.command_delay=0 hw.ata.selection_delay=0 (it works on all of my DragonFly machines, but not sure on other machines) They both default to 10 for safety, but these DELAY()'s seem to have bigger impact on performance on slower machines. Does command-start delay really need to be 10us(=10000ns) which is far too larger than the required 400ns and taking into account the number of instructions between ATA_OUTB() and ATA_INB()? > We are going to have to clean up the ata_clear_interlock() calls... > we do not want to reenable the interlock in situations where no > interrupt is required to complete the command because otherwise > if an interrupt does occur the system can livelock because we no > longer unconditionally read the status register if we dont think the > interrupt is valid. > > e.g. there are a bunch of places where you added ata_clear_interlock() > where you shouldn't have. Most of those need to be backed out. We > *ONLY* clear the interlock and enable the interrupt if the operation > is one which requires an interrupt to complete. Yes, it turned out that ata_clear_interlock() I added in the previous patch were unnecessary, and only ones following ata_dmastart() should have been moved. > Here is a posit... if writing to ALTSTATUS (which controls IDS and > other bits) is illegal during DMAC, is reading STATUS or ALTSTATUS > also illegal during DMAC? The spec seems to indicate that it is > not illegal but I'm beginning to think that it may be. > If it is then we need to add more code to the interrupt handler, though > I'm not sure exactly what we would be able to do.. I guess we could > check the DMA controller to see if it indicates that DMA has completed, > but that doesn't help us with the ATA_S_ERROR case. I don't know about that.. Alternate Status register and Device Control register are just two separate registers sharing the same address, so I don't think the same access restriction as Device Control register applies to Alternate Status register. But it may depend on controllers. > I've synchronized with your patch-7-take-2 so lets form a new basis > relative to that. Could you take another pass at the interlock calls > you added and remove the ones for situations where no completion > interrupt is expected? Thanks, attached(a diff against CVS-HEAD). Unfortunately, none of ATA Patch #7, #7 + patch-7-take2, or the patch attached to this message worked on a desktop in my office. It's has a PentiumIV 1.7GHz running SMP kernel(but HTT is unavailable). No timer problem, and not using TIMER_USE_1. It frequently timed out trying to identify the media in the CD-ROM drive, or when writing to the harddrive. Reading from the harddrive also timed out, but only once or so at the beginning. Inserting DELAY()'s after the call to ata_clear_interlock() seemed to reduce the number of timeouts, but it wasn't quite reproducible. Increasing or decreaing command_delay or selection_delay seemed to have little to do with the timeout. Sigh. I'll try a UP kernel later to see if running an SMP kernel has something to do with this. --QKdGvSO+nmPlgiQ/ Content-Type: application/x-gunzip Content-Disposition: attachment; filename="ata-9.patch.gz" Content-Transfer-Encoding: base64 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 nUhkcwAA --QKdGvSO+nmPlgiQ/--
文章代碼(AID): #11hn8Q00 (DFBSD_kernel)
文章代碼(AID): #11hn8Q00 (DFBSD_kernel)