On Wed, 12 Mar 2003, John Baldwin wrote:

> It's holding the lock across bus_setup_intr().  You can try the
> following patch:
>
> Index: if_tl.c
> ===================================================================
> RCS file: /usr/cvs/src/sys/pci/if_tl.c,v
> retrieving revision 1.74
> diff -u -r1.74 if_tl.c
> --- if_tl.c     19 Feb 2003 05:47:41 -0000      1.74
> +++ if_tl.c     12 Mar 2003 15:20:47 -0000
> @@ -1138,12 +1138,11 @@
>
>         if (t->tl_name == NULL) {
>                 device_printf(dev, "unknown device!?\n");
> -               goto fail;
>                 device_printf(dev, "unknown device!?\n");
> -               goto fail;
> RCS file: /usr/cvs/src/sys/pci/if_tl.c,v
> retrieving revision 1.74
> diff -u -r1.74 if_tl.c
> --- if_tl.c     19 Feb 2003 05:47:41 -0000      1.74
> +++ if_tl.c     12 Mar 2003 15:20:47 -0000
> @@ -1138,12 +1138,11 @@
>
>         if (t->tl_name == NULL) {
>                 device_printf(dev, "unknown device!?\n");
> -               goto fail;
> +               return (ENXIO);
>         }
>
>         mtx_init(&sc->tl_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK,
>             MTX_DEF | MTX_RECURSE);
> -       TL_LOCK(sc);
>
>         /*
>          * Map control/status registers.
> @@ -1348,12 +1347,12 @@
>         /*
>          * Call MI attach routine.
>          */

Thanks John --

This patch looks a little bit mangled to me.  It has two sections talking
about line 1138 of if_tl.c (with two different changes) and a section
talking about line 1348 (with no changes).

I assumed cut and paste error and proceeded along the same lines with this
patch instead:

Index: if_tl.c
===================================================================
RCS file: /usr/src/cvs-repo/src/sys/pci/if_tl.c,v
retrieving revision 1.74
diff -u -r1.74 if_tl.c
--- if_tl.c     19 Feb 2003 05:47:41 -0000      1.74
+++ if_tl.c     13 Mar 2003 00:26:20 -0000
@@ -1138,12 +1138,11 @@

        if (t->tl_name == NULL) {
                device_printf(dev, "unknown device!?\n");
-               goto fail;
+               return (ENXIO);
        }

        mtx_init(&sc->tl_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK,
            MTX_DEF | MTX_RECURSE);
-       TL_LOCK(sc);

        /*
         * Map control/status registers.
@@ -1349,11 +1348,9 @@
         * Call MI attach routine.
         */
        ether_ifattach(ifp, sc->arpcom.ac_enaddr);
-       TL_UNLOCK(sc);
        return(0);

 fail:
-       TL_UNLOCK(sc);
        mtx_destroy(&sc->tl_mtx);
        return(error);
 }


This has made the messages go away -- thanks for that!  If this is a
correct fix, should I submit a PR to have it committed?
-- 
Tod McQuillin


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to