Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 22 Mar 2002 09:14:24 +0000
From:      Ian Dowse <iedowse@maths.tcd.ie>
To:        Jon Larssen <jonlarssen@hotmail.com>
Cc:        freebsd-stable@freebsd.org, sos@freebsd.org
Subject:   Re: Is ATA partially broken in -STABLE? 
Message-ID:   <200203220914.aa83048@salmon.maths.tcd.ie>
In-Reply-To: Your message of "Fri, 22 Mar 2002 03:36:22 GMT." <F67M19VMczi9yzu23Li00008fa7@hotmail.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
In message <F67M19VMczi9yzu23Li00008fa7@hotmail.com>, Jon Larssen writes:
>I have just cvsup'd my -STABLE system running under VMware 3
>Workstation under Windows 2000.  After making world and a
>GENERIC kernel I can't boot into my system.  These are the
>messages I get:
>
>ata0-master: timeout waiting for interrupt
>ata0-master: ATA identify failed
>ata1-master: timeout waiting for interrupt
>ata1-master: ATAPI identify failed

I get something similar with VMware2. The following patch seems to work
for me, but I haven't really investigated the problem. It is the change
in ata_boot_attach() below that actually makes the difference; I think
the ata_attach bit won't affect boot-time probes.

Ian

Index: ata-all.c
===================================================================
RCS file: /dump/FreeBSD-CVS/src/sys/dev/ata/ata-all.c,v
retrieving revision 1.50.2.30
diff -u -r1.50.2.30 ata-all.c
--- ata-all.c	18 Mar 2002 08:37:33 -0000	1.50.2.30
+++ ata-all.c	22 Mar 2002 09:06:30 -0000
@@ -162,7 +162,7 @@
 ata_attach(device_t dev)
 {
     struct ata_channel *ch;
-    int error, rid;
+    int error, rid, s;
 
     if (!dev || !(ch = device_get_softc(dev)))
 	return ENXIO;
@@ -186,6 +186,7 @@
      * otherwise attach what the probe has found in ch->devices.
      */
     if (!ata_delayed_attach) {
+	s = splbio();
 	if (ch->devices & ATA_ATA_SLAVE)
 	    if (ata_getparam(&ch->device[SLAVE], ATA_C_ATA_IDENTIFY))
 		ch->devices &= ~ATA_ATA_SLAVE;
@@ -210,6 +211,7 @@
 	if (ch->devices & ATA_ATAPI_SLAVE)
 	    atapi_attach(&ch->device[SLAVE]);
 #endif
+	splx(s);
     }
     return 0;
 }
@@ -469,13 +471,14 @@
 ata_boot_attach(void)
 {
     struct ata_channel *ch;
-    int ctlr;
+    int ctlr, s;
 
     if (ata_delayed_attach) {
 	config_intrhook_disestablish(ata_delayed_attach);
 	free(ata_delayed_attach, M_TEMP);
 	ata_delayed_attach = NULL;
     }
+    s = splbio();
 
     /*
      * run through all ata devices and look for real ATA & ATAPI devices
@@ -522,6 +525,7 @@
 	    atapi_attach(&ch->device[SLAVE]);
     }
 #endif
+    splx(s);
 }
 
 static void

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi? <200203220914.aa83048>