aboutsummaryrefslogtreecommitdiff
path: root/sys/ofed/drivers
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2019-01-09 01:11:19 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2019-01-09 01:11:19 +0000
commita68cc388790587b330a01380a0c1864fb9ff3f1e (patch)
treef5bb270ef868e474632d85d470c6f571f63fbe1a /sys/ofed/drivers
parent086566c1c1b306c7eda0485e11c870bfaed6c721 (diff)
Notes
Diffstat (limited to 'sys/ofed/drivers')
-rw-r--r--sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c6
-rw-r--r--sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c5
2 files changed, 7 insertions, 4 deletions
diff --git a/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c b/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c
index 8bdd7aed1ea3..0c397ebe8dce 100644
--- a/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c
+++ b/sys/ofed/drivers/infiniband/core/ib_roce_gid_mgmt.c
@@ -186,6 +186,8 @@ roce_gid_update_addr_callback(struct ib_device *device, u8 port,
CURVNET_SET(vnet_iter);
IFNET_RLOCK();
CK_STAILQ_FOREACH(idev, &V_ifnet, if_link) {
+ struct epoch_tracker et;
+
if (idev != ndev) {
if (idev->if_type != IFT_L2VLAN)
continue;
@@ -194,7 +196,7 @@ roce_gid_update_addr_callback(struct ib_device *device, u8 port,
}
/* clone address information for IPv4 and IPv6 */
- IF_ADDR_RLOCK(idev);
+ NET_EPOCH_ENTER(et);
#if defined(INET)
CK_STAILQ_FOREACH(ifa, &idev->if_addrhead, ifa_link) {
if (ifa->ifa_addr == NULL ||
@@ -232,7 +234,7 @@ roce_gid_update_addr_callback(struct ib_device *device, u8 port,
STAILQ_INSERT_TAIL(&ipx_head, entry, entry);
}
#endif
- IF_ADDR_RUNLOCK(idev);
+ NET_EPOCH_EXIT(et);
}
IFNET_RUNLOCK();
CURVNET_RESTORE();
diff --git a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
index f634496fb914..ac3108edeabe 100644
--- a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -1150,11 +1150,12 @@ ipoib_remove_one(struct ib_device *device, void *client_data)
static int
ipoib_match_dev_addr(const struct sockaddr *addr, struct net_device *dev)
{
+ struct epoch_tracker et;
struct ifaddr *ifa;
int retval = 0;
CURVNET_SET(dev->if_vnet);
- IF_ADDR_RLOCK(dev);
+ NET_EPOCH_ENTER(et);
CK_STAILQ_FOREACH(ifa, &dev->if_addrhead, ifa_link) {
if (ifa->ifa_addr == NULL ||
ifa->ifa_addr->sa_family != addr->sa_family ||
@@ -1166,7 +1167,7 @@ ipoib_match_dev_addr(const struct sockaddr *addr, struct net_device *dev)
break;
}
}
- IF_ADDR_RUNLOCK(dev);
+ NET_EPOCH_EXIT(et);
CURVNET_RESTORE();
return (retval);