Page MenuHomeFreeBSD

D39510.diff
No OneTemporary

D39510.diff

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

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)

Event Timeline