-CURRENT freeze at boot after update

Søren Schmidt sos at deepcore.dk
Mon Jan 23 11:04:19 PST 2006


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@ 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
-------------- next part --------------
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
@@ -439,8 +439,8 @@
 {
     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)) !=


More information about the freebsd-current mailing list