Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 28 Sep 2004 13:09:26 -0400
From:      John Baldwin <jhb@FreeBSD.org>
To:        freebsd-current@FreeBSD.org
Cc:        Christian Laursen <xi@borderworlds.dk>
Subject:   Re: 5.3-BETA5 panic on first boot - floppy related
Message-ID:  <200409281309.26841.jhb@FreeBSD.org>
In-Reply-To: <867jqhwhav.fsf@borg.borderworlds.dk>
References:  <867jqhwhav.fsf@borg.borderworlds.dk>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sunday 26 September 2004 04:44 am, Christian Laursen wrote:
> I upgraded my laptop to 5.3-BETA4 a couple of days ago and have started
> to experience it panic ont the first boot if ACPI is enabled.
>
> Without ACPI it boots fine and after the panic and subsequently typing
> 'reset' in the kernel debugger it boots fine with ACPI enabled.
>
> The dmesg output including a stack trace is here:
> http://borderworlds.dk/~xi/vulcan/dmesg.txt
>
> My kernel configuration is here:
> http://borderworlds.dk/~xi/vulcan/VULCAN
>
> I just tried to boot with the floppy drive attached, but that doesn't
> make any difference.

There is a bug in the fdc_acpi driver in that it attaches drives via hints 
even if the controller fails to attach which leads to this panic.  A possible 
fix for RELENG_5 is below:

Index: fdc_acpi.c
===================================================================
RCS file: /usr/cvs/src/sys/dev/fdc/fdc_acpi.c,v
retrieving revision 1.2.2.2
diff -u -r1.2.2.2 fdc_acpi.c
--- fdc_acpi.c	18 Sep 2004 04:57:55 -0000	1.2.2.2
+++ fdc_acpi.c	28 Sep 2004 17:07:52 -0000
@@ -130,7 +130,7 @@
 	bus = device_get_parent(dev);
 	if (ACPI_FAILURE(ACPI_EVALUATE_OBJECT(bus, dev, "_FDE", NULL, &buf))) {
 		error = ENXIO;
-		goto out;
+		goto out_hintsprobe;
 	}
 
 	/* Parse the output of _FDE in various ways. */
@@ -154,7 +154,7 @@
 			device_printf(dev, "_FDE wrong length: %d\n",
 			    obj->Buffer.Length);
 			error = ENXIO;
-			goto out;
+			goto out_hintsprobe;
 		}
 		break;
 	case ACPI_TYPE_PACKAGE:
@@ -173,17 +173,21 @@
 	default:
 		device_printf(dev, "invalid _FDE type %d\n", obj->Type);
 		error = ENXIO;
-		goto out;
+		goto out_hintsprobe;
 	}
 
 	/* Add fd child devices as specified. */
 	error = fdc_acpi_probe_children(bus, dev, fde);
 
-out:
-	/* If there was a problem, fall back to the hints-based probe. */
+out_hintsprobe:
+	/*
+	 * If there was a problem with the _FDE drive enumeration, fall
+	 * back to the hints-based probe.
+	 */
 	if (error)
 		error = fdc_hints_probe(dev);
 
+out:
 	if (buf.Pointer)
 		free(buf.Pointer, M_TEMP);
 	if (error != 0)


-- 
John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org



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