Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 13 Mar 2003 17:16:27 +0900 (JST)
From:      Tod McQuillin <devin@spamcop.net>
To:        John Baldwin <jhb@FreeBSD.org>
Cc:        freebsd-current@freebsd.org
Subject:   RE: lock order reversal?  current with tl ethernet
Message-ID:  <20030313092358.Y61843@glass.pun-pun.prv>
In-Reply-To: <XFMail.20030312104914.jhb@FreeBSD.org>
References:  <XFMail.20030312104914.jhb@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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 majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




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