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

Re: "BUG: soft lockup" on A1200; was: Re: Updated installation images for Debian Ports 2019-04-20



Hi Szymon,

On 23/06/19 10:26 PM, Szymon Bieganski wrote:
Michael,

On 6/21/19 10:49 PM, Michael Schmitz wrote:
Looks like the probe for hdb does not time out (that would have taken
either of the 'return 1' paths). So it's either return code 0 or 2. 0
would have called do_identify() which we should have seen, or 2 (drive
aborted probe).

See below with slightly more informative debugging capture:

-----------------------

calling  amiga_gayle_ide_driver_init+0x0/0x18 @ 1
ide: Gayle IDE controller (A1200 style)
ide_probe_port:722 irqd = 2
ide_probe_port:725 disabled 2
Probing IDE interface ide0...
probe_for_drive:502 do probe.
ide_dev_read_id:266 disable device IRQ.
hda: probing with STATUS(0x50) instead of ALTSTATUS(0xff)
ide_dev_read_id:298: ask drive for ID.
ide_dev_read_id:313: ide busy sleep.
ide_dev_read_id:321: read status.
ide_dev_read_id:327: do identify.
ide_dev_read_id:332: read status.
ide_dev_read_id:339 ide_dev_read_id returns 0.
probe_for_drive:504 probe returned 0.
probe_for_drive:535 ide classify ata dev.
hda: SAMSUNG MP0402H, ATA DISK drive
probe_for_drive:553 ide disk init chs.
probe_for_drive:555 ide disk init mult count.
probe_for_drive:558 device was found; returning 1.
probe_for_drive:502 do probe.
probe_for_drive:504 probe returned 3.
probe_for_drive:508 do probe for ATAPI device.
ide_dev_read_id:266 disable device IRQ.
hdb: probing with STATUS(0x00) instead of ALTSTATUS(0xff)
ide_dev_read_id:293 disable DMA & overlap.
ide_dev_read_id:298: ask drive for ID.
ide_dev_read_id:313: ide busy sleep.
ide_dev_read_id:321: read status.
ide_dev_read_id:336: drive refused ID.
ide_dev_read_id:339 ide_dev_read_id returns 2.

Thanks, that confirms my reading of the earlier trace.

ide_dev_read_id:266 disable device IRQ.
hdb: probing with STATUS(0x00) instead of ALTSTATUS(0xff)
ide_dev_read_id:293 disable DMA & overlap.
ide_dev_read_id:298: ask drive for ID.
ide_dev_read_id:313: ide busy sleep.
ide_dev_read_id:321: read status.
ide_dev_read_id:336: drive refused ID.
ide_dev_read_id:339 ide_dev_read_id returns 2.
probe_for_drive:510 probe (ATAPI) returned 2
probe_for_drive:513 no device found.
ide_probe_port:745
ide_probe_port:747 enabling IRQ 2.
random: crng init done
------------------------------------------------

Looks to me as though the master drive present causes a probe for a
slave drive to abort. That could have ramifications for interrupt
handling later on.

Geert - are the CIA interrupts level or edge triggered? Is there any
way to skip probing for a second drive once the first has been found?
For clarity during the stall condition the _IDE_IRQ is kept low, both


The screenshot you sent by separate mail does show _IDE_IRQ high (inactive)? Suggests it's not the hda drive flooding the system with interrupts (which we pretty much knew already, because the heartbeat LED still flashes and udevd eventually times out).


_IDE_CS are high, _ODD_CIA goes low for 880ns every 22us, _EVEN_CIA has
short bursts of low every 10ms, same for _INT2, while _INT6 remains low


Probably the system timer interrupt.


all the time. If necessary I can provide detailed captures of these
signals in other conditions too.


Not sure what the _IDE_CS are used for. If you could trigger when the identify command is sent to drive hdb, that would be great, but I can't see how that would work without tapping into all the data and address lines on the IDE interface ...

I think we should pursue possible errors in the interrupt enable code path instead.

Cheers,

    Michael




Kind regards,

Szymon




Reply to: