DragonFly bugs List (threaded) for 2009-01
DragonFly BSD
DragonFly bugs List (threaded) for 2009-01
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: [issue1240] sata dvdrom leads to interrupt livelock


From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxx>
Date: Sun, 25 Jan 2009 00:39:47 -0800 (PST)

:Simon 'corecode' Schubert <corecode@fs.ei.tum.de> added the comment:
:
:I've tracked this down somewhat - if I access the video data (not just the
:directory structure), it seems that the drive wants to report an error:  th=
:e ERR
:bit (0) is set in the status register.  However, in the busmaster status
:register, the interrupt AND the active bit are set.
:
:As a result, ata-pci.c/ata_pci_status():475 will return 0, leading to an
:unserviced interrupt.  repeat.  I believe we always need to pass through th=
:e
:interrupt routine if the ERR bit is set, no matter whether the busmaster ac=
:tive
:bit is still set or not.

    Were you able to to test your fix?  I don't have anything that livelocks
    that I can test with.

    Those BMSTAT bits aren't part of the standard at all (that I know of),
    but they are the only way to be able to tell if an ATA device is
    actually the source of an interrupt when multiple devices share the
    same interrupt.

    On the face of it it does seem as though we should be able to return
    1 if ATA_BMSTAT_INTERRUPT is set and either ATA_BMSTAT_ERROR is
    set or ATA_BMSTAT_ACTIVE is clear.  It is unclear to me whether
    we can safely clear the ACTIVE bit, though, which is what that
    next ATA_IDX_OUTB() will do if we allow the ERROR + INTERRUPT case
    through.  Then again, maybe we have to.  I just don't know.

					-Matt
					Matthew Dillon 
					<dillon@backplane.com>



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