Re: panic on dell laptop

From: Alexander Motin <mav_at_FreeBSD.org>
Date: Sun, 11 Jul 2010 13:28:34 +0300
Doug Barton wrote:
> Try backing up to svn r209633 and see if you can boot. What you're
> describing is identical to a panic I had starting with the next
> revision, also on a Dell laptop.

Please try attached patch against HEAD.

-- 
Alexander Motin

diff -ruNp isa.prev/atrtc.c isa/atrtc.c
--- isa.prev/atrtc.c	2010-07-11 11:43:18.000000000 +0300
+++ isa/atrtc.c	2010-07-11 12:33:49.000000000 +0300
_at__at_ -244,6 +244,7 _at__at_ static int
 atrtc_attach(device_t dev)
 {
 	struct atrtc_softc *sc;
+	u_long s;
 	int i, diag;
 
 	sc = device_get_softc(dev);
_at__at_ -260,7 +261,9 _at__at_ atrtc_attach(device_t dev)
 	    (resource_int_value(device_get_name(dev), device_get_unit(dev),
 	     "clock", &i) != 0 || i != 0)) {
 		sc->intr_rid = 0;
-		bus_delete_resource(dev, SYS_RES_IRQ, sc->intr_rid);
+		while (bus_get_resource(dev, SYS_RES_IRQ, sc->intr_rid,
+		    &s, NULL) == 0 && s != 8)
+			sc->intr_rid++;
 		if (!(sc->intr_res = bus_alloc_resource(dev, SYS_RES_IRQ,
 		    &sc->intr_rid, 8, 8, 1, RF_ACTIVE))) {
 			device_printf(dev,"Can't map interrupt.\n");
diff -ruNp isa.prev/clock.c isa/clock.c
--- isa.prev/clock.c	2010-07-11 11:43:24.000000000 +0300
+++ isa/clock.c	2010-07-11 13:25:45.000000000 +0300
_at__at_ -94,7 +94,8 _at__at_ static	int	i8254_ticked;
 
 struct attimer_softc {
 	int intr_en;
-	int intr_rid;
+	int port_rid, intr_rid;
+	struct resource *port_res;
 	struct resource *intr_res;
 	void *intr_handler;
 	struct timecounter tc;
_at__at_ -523,10 +524,14 _at__at_ static int
 attimer_attach(device_t dev)
 {
 	struct attimer_softc *sc;
+	u_long s;
 	int i;
 
 	attimer_sc = sc = device_get_softc(dev);
 	bzero(sc, sizeof(struct attimer_softc));
+	if (!(sc->port_res = bus_alloc_resource(dev, SYS_RES_IOPORT,
+	    &sc->port_rid, IO_TIMER1, IO_TIMER1 + 3, 4, RF_ACTIVE)))
+		device_printf(dev,"Warning: Couldn't map I/O.\n");
 	i8254_intsrc = intr_lookup_source(0);
 	if (i8254_intsrc != NULL)
 		i8254_pending = i8254_intsrc->is_pic->pic_source_pending;
_at__at_ -541,7 +546,9 _at__at_ attimer_attach(device_t dev)
 	if (resource_int_value(device_get_name(dev), device_get_unit(dev),
 	    "clock", &i) != 0 || i != 0) {
 	    	sc->intr_rid = 0;
-		bus_delete_resource(dev, SYS_RES_IRQ, sc->intr_rid);
+		while (bus_get_resource(dev, SYS_RES_IRQ, sc->intr_rid,
+		    &s, NULL) == 0 && s != 0)
+			sc->intr_rid++;
 		if (!(sc->intr_res = bus_alloc_resource(dev, SYS_RES_IRQ,
 		    &sc->intr_rid, 0, 0, 1, RF_ACTIVE))) {
 			device_printf(dev,"Can't map interrupt.\n");
Received on Sun Jul 11 2010 - 08:29:31 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:05 UTC