Module Name: src
Committed By: dyoung
Date: Fri Apr 3 00:14:42 UTC 2009
Modified Files:
src/sys/dev/pci: if_bnx.c
Log Message:
Fix SIOCSIFFLAGS. Mark as safe to detach at shutdown.
To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 src/sys/dev/pci/if_bnx.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/pci/if_bnx.c
diff -u src/sys/dev/pci/if_bnx.c:1.23 src/sys/dev/pci/if_bnx.c:1.24
--- src/sys/dev/pci/if_bnx.c:1.23 Wed Mar 18 16:00:19 2009
+++ src/sys/dev/pci/if_bnx.c Fri Apr 3 00:14:42 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: if_bnx.c,v 1.23 2009/03/18 16:00:19 cegger Exp $ */
+/* $NetBSD: if_bnx.c,v 1.24 2009/04/03 00:14:42 dyoung Exp $ */
/* $OpenBSD: if_bnx.c,v 1.43 2007/01/30 03:21:10 krw Exp $ */
/*-
@@ -35,7 +35,7 @@
#if 0
__FBSDID("$FreeBSD: src/sys/dev/bce/if_bce.c,v 1.3 2006/04/13 14:12:26 ru Exp $");
#endif
-__KERNEL_RCSID(0, "$NetBSD: if_bnx.c,v 1.23 2009/03/18 16:00:19 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_bnx.c,v 1.24 2009/04/03 00:14:42 dyoung Exp $");
/*
* The following controllers are supported by this driver:
@@ -348,8 +348,8 @@
/****************************************************************************/
/* OpenBSD device dispatch table. */
/****************************************************************************/
-CFATTACH_DECL_NEW(bnx, sizeof(struct bnx_softc),
- bnx_probe, bnx_attach, bnx_detach, NULL);
+CFATTACH_DECL3_NEW(bnx, sizeof(struct bnx_softc),
+ bnx_probe, bnx_attach, bnx_detach, NULL, NULL, NULL, DVF_DETACH_SHUTDOWN);
/****************************************************************************/
/* Device probe function. */
@@ -4332,16 +4332,26 @@
switch (command) {
case SIOCSIFFLAGS:
- if (ifp->if_flags & IFF_UP) {
- if ((ifp->if_flags & IFF_RUNNING) &&
- ((ifp->if_flags ^ sc->bnx_if_flags) &
- (IFF_ALLMULTI | IFF_PROMISC)) != 0) {
+ if ((error = ifioctl_common(ifp, command, data)) != 0)
+ break;
+ /* XXX set an ifflags callback and let ether_ioctl
+ * handle all of this.
+ */
+ switch (ifp->if_flags & (IFF_UP|IFF_RUNNING)) {
+ case IFF_UP|IFF_RUNNING:
+ if (((ifp->if_flags ^ sc->bnx_if_flags) &
+ (IFF_ALLMULTI | IFF_PROMISC)) != 0)
bnx_set_rx_mode(sc);
- } else if (!(ifp->if_flags & IFF_RUNNING))
- bnx_init(ifp);
-
- } else if (ifp->if_flags & IFF_RUNNING)
+ break;
+ case IFF_UP:
+ bnx_init(ifp);
+ break;
+ case IFF_RUNNING:
bnx_stop(ifp, 1);
+ break;
+ case 0:
+ break;
+ }
sc->bnx_if_flags = ifp->if_flags;
break;