Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F115741395
D39510.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
D39510.diff
View Options
diff --git a/sys/compat/linux/linux_netlink.c b/sys/compat/linux/linux_netlink.c
--- a/sys/compat/linux/linux_netlink.c
+++ b/sys/compat/linux/linux_netlink.c
@@ -312,7 +312,7 @@
case IFF_ALLMULTI:
result |= flag;
break;
- case IFF_KNOWSEPOCH:
+ case IFF_NEEDSEPOCH:
case IFF_DRV_OACTIVE:
case IFF_SIMPLEX:
case IFF_LINK0:
diff --git a/sys/dev/ena/ena.c b/sys/dev/ena/ena.c
--- a/sys/dev/ena/ena.c
+++ b/sys/dev/ena/ena.c
@@ -2393,8 +2393,7 @@
if_setdev(ifp, pdev);
if_setsoftc(ifp, adapter);
- if_setflags(ifp,
- IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST | IFF_KNOWSEPOCH);
+ if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST);
if_setinitfn(ifp, ena_init);
if_settransmitfn(ifp, ena_mq_start);
if_setqflushfn(ifp, ena_qflush);
diff --git a/sys/dev/mlx5/mlx5_en/mlx5_en_main.c b/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
--- a/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
+++ b/sys/dev/mlx5/mlx5_en/mlx5_en_main.c
@@ -4526,8 +4526,7 @@
if_initname(ifp, "mce", device_get_unit(mdev->pdev->dev.bsddev));
if_setmtu(ifp, ETHERMTU);
if_setinitfn(ifp, mlx5e_open);
- if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST |
- IFF_KNOWSEPOCH);
+ if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST);
if_setioctlfn(ifp, mlx5e_ioctl);
if_settransmitfn(ifp, mlx5e_xmit);
if_setqflushfn(ifp, if_qflush);
diff --git a/sys/dev/oce/oce_if.c b/sys/dev/oce/oce_if.c
--- a/sys/dev/oce/oce_if.c
+++ b/sys/dev/oce/oce_if.c
@@ -2111,7 +2111,7 @@
ifmedia_add(&sc->media, IFM_ETHER | IFM_AUTO, 0, NULL);
ifmedia_set(&sc->media, IFM_ETHER | IFM_AUTO);
- if_setflags(sc->ifp, IFF_BROADCAST | IFF_MULTICAST | IFF_KNOWSEPOCH);
+ if_setflags(sc->ifp, IFF_BROADCAST | IFF_MULTICAST);
if_setioctlfn(sc->ifp, oce_ioctl);
if_setstartfn(sc->ifp, oce_start);
if_setinitfn(sc->ifp, oce_init);
diff --git a/sys/dev/virtio/network/if_vtnet.c b/sys/dev/virtio/network/if_vtnet.c
--- a/sys/dev/virtio/network/if_vtnet.c
+++ b/sys/dev/virtio/network/if_vtnet.c
@@ -1103,8 +1103,7 @@
dev = sc->vtnet_dev;
ifp = sc->vtnet_ifp;
- if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST |
- IFF_KNOWSEPOCH);
+ if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST);
if_setbaudrate(ifp, IF_Gbps(10));
if_setinitfn(ifp, vtnet_init);
if_setioctlfn(ifp, vtnet_ioctl);
diff --git a/sys/net/if.h b/sys/net/if.h
--- a/sys/net/if.h
+++ b/sys/net/if.h
@@ -144,7 +144,7 @@
#define IFF_DEBUG 0x4 /* (n) turn on debugging */
#define IFF_LOOPBACK 0x8 /* (i) is a loopback net */
#define IFF_POINTOPOINT 0x10 /* (i) is a point-to-point link */
-#define IFF_KNOWSEPOCH 0x20 /* (i) calls if_input in net epoch */
+#define IFF_NEEDSEPOCH 0x20 /* (i) calls if_input w/o net epoch */
#define IFF_DRV_RUNNING 0x40 /* (d) resources allocated */
#define IFF_NOARP 0x80 /* (n) no address resolution protocol */
#define IFF_PROMISC 0x100 /* (n) receive all packets */
@@ -179,7 +179,7 @@
#define IFF_CANTCHANGE \
(IFF_BROADCAST|IFF_POINTOPOINT|IFF_DRV_RUNNING|IFF_DRV_OACTIVE|\
IFF_SIMPLEX|IFF_MULTICAST|IFF_ALLMULTI|IFF_PROMISC|\
- IFF_DYING|IFF_CANTCONFIG|IFF_KNOWSEPOCH)
+ IFF_DYING|IFF_CANTCONFIG|IFF_NEEDSEPOCH)
/*
* Values for if_link_state.
diff --git a/sys/net/if_epair.c b/sys/net/if_epair.c
--- a/sys/net/if_epair.c
+++ b/sys/net/if_epair.c
@@ -543,7 +543,6 @@
ifp->if_dname = epairname;
ifp->if_dunit = unit;
ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
- ifp->if_flags |= IFF_KNOWSEPOCH;
ifp->if_capabilities = IFCAP_VLAN_MTU;
ifp->if_capenable = IFCAP_VLAN_MTU;
ifp->if_transmit = epair_transmit;
diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c
--- a/sys/net/if_ethersubr.c
+++ b/sys/net/if_ethersubr.c
@@ -56,6 +56,9 @@
#include <sys/sockio.h>
#include <sys/sysctl.h>
#include <sys/uuid.h>
+#ifdef KDB
+#include <sys/kdb.h>
+#endif
#include <net/ieee_oui.h>
#include <net/if.h>
@@ -813,7 +816,27 @@
struct mbuf *mn;
bool needs_epoch;
- needs_epoch = !(ifp->if_flags & IFF_KNOWSEPOCH);
+ needs_epoch = (ifp->if_flags & IFF_NEEDSEPOCH);
+#ifdef INVARIANTS
+ /*
+ * This temporary code is here to prevent epoch unaware and unmarked
+ * drivers to panic the system. Once all drivers are taken care of,
+ * the whole INVARIANTS block should go away.
+ */
+ if (!needs_epoch && !in_epoch(net_epoch_preempt)) {
+ static bool printedonce;
+
+ needs_epoch = true;
+ if (!printedonce) {
+ printedonce = true;
+ if_printf(ifp, "called %s w/o net epoch! "
+ "PLEASE file a bug report.", __func__);
+#ifdef KDB
+ kdb_backtrace();
+#endif
+ }
+ }
+#endif
/*
* The drivers are allowed to pass in a chain of packets linked with
diff --git a/sys/net/if_infiniband.c b/sys/net/if_infiniband.c
--- a/sys/net/if_infiniband.c
+++ b/sys/net/if_infiniband.c
@@ -25,6 +25,7 @@
#include "opt_inet.h"
#include "opt_inet6.h"
+#include "opt_kbd.h"
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
@@ -38,6 +39,9 @@
#include <sys/module.h>
#include <sys/socket.h>
#include <sys/sysctl.h>
+#ifdef KDB
+#include <sys/kdb.h>
+#endif
#include <net/bpf.h>
#include <net/ethernet.h>
@@ -417,7 +421,27 @@
int isr;
bool needs_epoch;
- needs_epoch = (ifp->if_flags & IFF_KNOWSEPOCH) == 0;
+ needs_epoch = (ifp->if_flags & IFF_NEEDSEPOCH);
+#ifdef INVARIANTS
+ /*
+ * This temporary code is here to prevent epoch unaware and unmarked
+ * drivers to panic the system. Once all drivers are taken care of,
+ * the whole INVARIANTS block should go away.
+ */
+ if (!needs_epoch && !in_epoch(net_epoch_preempt)) {
+ static bool printedonce;
+
+ needs_epoch = true;
+ if (!printedonce) {
+ printedonce = true;
+ if_printf(ifp, "called %s w/o net epoch! "
+ "PLEASE file a bug report.", __func__);
+#ifdef KDB
+ kdb_backtrace();
+#endif
+ }
+ }
+#endif
CURVNET_SET_QUIET(ifp->if_vnet);
if (__predict_false(needs_epoch))
diff --git a/sys/net/iflib.c b/sys/net/iflib.c
--- a/sys/net/iflib.c
+++ b/sys/net/iflib.c
@@ -6010,7 +6010,7 @@
if_settransmitfn(ifp, iflib_if_transmit);
#endif
if_setqflushfn(ifp, iflib_if_qflush);
- iflags = IFF_MULTICAST | IFF_KNOWSEPOCH;
+ iflags = IFF_MULTICAST;
if ((sctx->isc_flags & IFLIB_PSEUDO) &&
(sctx->isc_flags & IFLIB_PSEUDO_ETHER) == 0)
diff --git a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
--- a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -922,8 +922,8 @@
}
if_initname(dev, name, priv->unit);
if_setflags(dev, IFF_BROADCAST | IFF_MULTICAST);
- if (hca->attrs.device_cap_flags & IB_DEVICE_KNOWSEPOCH)
- if_setflagbits(dev, IFF_KNOWSEPOCH, 0);
+ if ((hca->attrs.device_cap_flags & IB_DEVICE_KNOWSEPOCH) == 0)
+ if_setflagbits(dev, IFF_NEEDSEPOCH, 0);
infiniband_ifattach(priv->dev, NULL, priv->broadcastaddr);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Apr 28, 11:53 PM (15 h, 8 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17834972
Default Alt Text
D39510.diff (6 KB)
Attached To
Mode
D39510: net: replace IFF_KNOWSEPOCH with IFF_NEEDSEPOCH
Attached
Detach File
Event Timeline
Log In to Comment