On Mon, 2003-11-10 at 13:50, Bjoern Fischer wrote:
> Hello,
> 
> there is a problem in ali_agp.c (both, -CURRENT and -STABLE): If I
> boot the generic kernel, it panics in agp_ali.c, when it tries to
> allocate memory for the gatt. Some simlpe tests showed, that the
> initial aperture size is reported as zero by the device:
> 
>   static int
>   agp_ali_attach(device_t dev)
>   {
>         struct agp_ali_softc *sc = device_get_softc(dev);
>         struct agp_gatt *gatt;
>         int error;
>   
>         error = agp_generic_attach(dev);
>         if (error)
>                 return error;
>   
>         sc->initial_aperture = AGP_GET_APERTURE(dev);
> 
> This is zero---------------------^^^^^^
>   
>         for (;;) {
>                 gatt = agp_alloc_gatt(dev);
>                 if (gatt)
>                         break;
>   
>                 /*
>                  * Probably contigmalloc failure. Try reducing the
>                  * aperture so that the gatt size reduces.
>                  */
>                 if (AGP_SET_APERTURE(dev, AGP_GET_APERTURE(dev) / 2)) {
>                         agp_generic_detach(dev);
>                         return ENOMEM;
>                 }
>         }
>         sc->gatt = gatt;
>   
>         /* Install the gatt. */
> 
> Since I don't have a machine ready running -CURRENT, I can't really
> debug this. How can I disable agp0 on boot time?

Would this be appropriate to commit to AGP, to disable the ali agp in
case it reports 0 size (perhaps something in the BIOS has disabled it?)
and to have agp_alloc_gatt() just fail instead of panicing in
contigmalloc if the aperture size is 0?

-- 
Eric Anholt                                [EMAIL PROTECTED]          
http://people.freebsd.org/~anholt/         [EMAIL PROTECTED]

Index: agp.c
===================================================================
RCS file: /home/ncvs/src/sys/pci/agp.c,v
retrieving revision 1.33
diff -u -r1.33 agp.c
--- agp.c	23 Oct 2003 18:08:56 -0000	1.33
+++ agp.c	11 Nov 2003 20:21:08 -0000
@@ -175,6 +175,11 @@
 			      "allocating GATT for aperture of size %dM\n",
 			      apsize / (1024*1024));
 
+	if (entries == 0) {
+		device_printf(dev, "bad aperture size\n");
+		return NULL;
+	}
+
 	gatt = malloc(sizeof(struct agp_gatt), M_AGP, M_NOWAIT);
 	if (!gatt)
 		return 0;
Index: agp_ali.c
===================================================================
RCS file: /home/ncvs/src/sys/pci/agp_ali.c,v
retrieving revision 1.8
diff -u -r1.8 agp_ali.c
--- agp_ali.c	22 Aug 2003 07:13:20 -0000	1.8
+++ agp_ali.c	11 Nov 2003 20:21:10 -0000
@@ -102,6 +102,10 @@
 		return error;
 
 	sc->initial_aperture = AGP_GET_APERTURE(dev);
+	if (sc->initial_aperture == 0) {
+		device_printf(dev, "bad initial aperture size, disabling\n");
+		return ENXIO;
+	}
 
 	for (;;) {
 		gatt = agp_alloc_gatt(dev);
_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to