Re: -CURRENT freeze at boot after update

From: Søren Schmidt <sos_at_deepcore.dk>
Date: Mon, 23 Jan 2006 20:04:13 +0100
Michael Landin Hostbaek wrote:
> Nicolas Blais (nb_root) writes:
> 
>>Hi,
>>
>>I did my usual saturday -CURRENT sync (buildworld/kernel) this morning and my 
>>machine freezes at boot. The freeze occurs right after HD detection, and 
>>before (or during) mounting partitions :
>>
>>sc0: <System console> at flags 0x100 on isa0
>>sc0: VGA <16 virtual consoles, flags=0x300>
>>vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
>>ums0: Logitech USB-PS/2 Optical Mouse, rev 2.00/11.10, addr 2, iclass 3/1
>>ums0: 3 buttons and Z dir.
>>Timecounter "TSC" frequency 2493036546 Hz quality 800
>>Timecounters tick every 1.000 msec
>>ad0: 78167MB <Maxtor 6Y080L0 YAR41BW0> at ata0-master UDMA133
>>acd0: DVDR <HL-DT-ST DVDRAM GSA-4163B/A105> at ata1-master UDMA33
>>ad4: 76319MB <Seagate ST380817AS 3.42> at ata2-master SATA150
>><FREEZE HERE>
> 
> 
> Just a quick me too !
> 
> Disabling dma for my cd/dvd drive gets it rolling again.
> 
> I spoke briefly to sos_at_ about it, and he has been unable to reproduce
> this, so someone with time / knowledge should dig deeper and send him a
> mail with the findings.

The only thing that comes to mind is the below patch, please try that 
out and let me know. However that way the legacy ports (those stuck at 
irq14 & irq15) cannot share interrupt with *anything*, which I did want 
to fix as a side effect of this actually...

-Søren

Index: ata-pci.c
===================================================================
RCS file: /export/ncvs/src/sys/dev/ata/ata-pci.c,v
retrieving revision 1.112
diff -u -r1.112 ata-pci.c
--- ata-pci.c	18 Jan 2006 13:10:17 -0000	1.112
+++ ata-pci.c	23 Jan 2006 19:00:35 -0000
_at__at_ -439,8 +439,8 _at__at_
 {
     struct ata_channel *ch = device_get_softc(dev);
 
-    if (ch->dma && ((ch->flags & ATA_ALWAYS_DMASTAT) ||
-		    (ch->dma->flags & ATA_DMA_ACTIVE))) {
+    if (!ata_legacy(dev) && ch->dma && ((ch->flags & ATA_ALWAYS_DMASTAT) ||
+					(ch->dma->flags & ATA_DMA_ACTIVE))) {
 	int bmstat = ATA_IDX_INB(ch, ATA_BMSTAT_PORT) & ATA_BMSTAT_MASK;
 
 	if ((bmstat & (ATA_BMSTAT_ACTIVE | ATA_BMSTAT_INTERRUPT)) !=
Received on Mon Jan 23 2006 - 18:04:18 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:51 UTC