RE: lock order reversal? current with tl ethernet

2003-03-13 Thread Tod McQuillin
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 -  1.74
 +++ if_tl.c 12 Mar 2003 15:20:47 -
 @@ -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 -  1.74
 +++ if_tl.c 12 Mar 2003 15:20:47 -
 @@ -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 -  1.74
+++ if_tl.c 13 Mar 2003 00:26:20 -
@@ -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


RE: lock order reversal? current with tl ethernet

2003-03-12 Thread John Baldwin

On 12-Mar-2003 Tod McQuillin wrote:
 
 Running -current from March 11 on a dual cpu compaq 5100, there are some
 warnings in the dmesg about the tl ethernet interface.
 
 Here are the warnings:
 
 malloc() of 128 with the following non-sleepablelocks held:
 exclusive sleep mutex tl0 (network driver) r = 0 (0xc4017aa8) locked @
 /usr/src/5-current/src/sys/pci/if_tl.c:1146

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 -  1.74
+++ if_tl.c 12 Mar 2003 15:20:47 -
@@ -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 -  1.74
+++ if_tl.c 12 Mar 2003 15:20:47 -
@@ -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.
 */

-- 

John Baldwin [EMAIL PROTECTED]http://www.FreeBSD.org/~jhb/
Power Users Use the Power to Serve!  -  http://www.FreeBSD.org/

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