More info: ATA hang on resume

Soren Schmidt sos at spider.deepcore.dk
Wed Dec 24 03:28:26 PST 2003


It seems Nate Lawson wrote:
> After putting in some debugging prints, I found that the hang is
> happening in this call stack:
> 
> ata_controlcmd(ATA_SF_SETXFER)	ata-chipset.c:874
> ata_intel_new_setmode()		ata-chipset.c:851
> ch->device[MASTER].setmode(..., ATA_PIO_MAX)  ata-all.c:681
> ata_identify_devices()		ata-all.c:276
> ata_reinit()			ata-all.c:231
> 
> I don't know what in ata_controlcmd() is hanging.  If I remove the call to
> setting ATA_PIO_MAX so I just do the call to set ATA_DMA_MAX, it still
> hangs in that call in the same place.  Are you sure it's legal to call
> ATA_SF_SETXFER with a mode of ATA_PIO_MAX (0x0f) or ATA_DMA_MAX (0x4f)?
> I tried changing these calls to set PIO4 and UDMA5 just in case, but no
> luck.

It hangs because the command newer finishes, it there is no interrupt
getting through (this is the first time interrupts are getting used
after the resume). 

> What information can I find to help you track down this regression?  You
> fixed suspend/resume early October (I think) although it broke again
> sometime in November.

I haven't changed anything in this regard since, so the problem is probably
a side effect of other changes in the system (APIC, interrupt code, ???)

-Søren
                     Yes I know it works under windows!!


More information about the freebsd-current mailing list