From 4cc36d8a8b6a9af7a5dcb8a618ddeecbb8a81007 Mon Sep 17 00:00:00 2001 From: Bruce M Simpson Date: Tue, 26 Oct 2004 19:49:45 +0000 Subject: [PATCH] Workaround for a recursive acquisition of the driver mutex during device detach; triggered by ether_ifdetach() -> if_delmulti() -> vr_ioctl(). MFC candidate. PR: kern/62889 MFC after: 3 days --- sys/dev/vr/if_vr.c | 2 ++ sys/pci/if_vr.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/sys/dev/vr/if_vr.c b/sys/dev/vr/if_vr.c index eb986eedc901..d509b136df72 100644 --- a/sys/dev/vr/if_vr.c +++ b/sys/dev/vr/if_vr.c @@ -798,7 +798,9 @@ vr_detach(device_t dev) /* These should only be active if attach succeeded */ if (device_is_attached(dev)) { vr_stop(sc); + VR_UNLOCK(sc); /* XXX: Avoid recursive acquire. */ ether_ifdetach(ifp); + VR_LOCK(sc); } if (sc->vr_miibus) device_delete_child(dev, sc->vr_miibus); diff --git a/sys/pci/if_vr.c b/sys/pci/if_vr.c index eb986eedc901..d509b136df72 100644 --- a/sys/pci/if_vr.c +++ b/sys/pci/if_vr.c @@ -798,7 +798,9 @@ vr_detach(device_t dev) /* These should only be active if attach succeeded */ if (device_is_attached(dev)) { vr_stop(sc); + VR_UNLOCK(sc); /* XXX: Avoid recursive acquire. */ ether_ifdetach(ifp); + VR_LOCK(sc); } if (sc->vr_miibus) device_delete_child(dev, sc->vr_miibus);