aboutsummaryrefslogtreecommitdiff
path: root/sys/ofed
diff options
context:
space:
mode:
authorZhenlei Huang <zlei@FreeBSD.org>2023-04-05 16:05:02 +0000
committerZhenlei Huang <zlei@FreeBSD.org>2023-04-05 16:08:23 +0000
commitfc6c93b6a5cf14cbc099f550f745d63779499fec (patch)
tree12086af48995e8f5dd019c4d2bdbc5f66104a524 /sys/ofed
parent03276e338a1b6ee0b36797071720ae0645a59811 (diff)
downloadsrc-fc6c93b6a5cf14cbc099f550f745d63779499fec.tar.gz
src-fc6c93b6a5cf14cbc099f550f745d63779499fec.zip
infiniband: Opt-in for net epoch
This is counterpart to e87c4940156c, which did the same for ethernet. Suggested by: hselasky Reviewed by: hselasky, kib MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D39405
Diffstat (limited to 'sys/ofed')
-rw-r--r--sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h2
-rw-r--r--sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c6
-rw-r--r--sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_vlan.c2
-rw-r--r--sys/ofed/include/rdma/ib_verbs.h1
4 files changed, 7 insertions, 4 deletions
diff --git a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h
index c2cbc553e744..e6f191ef86de 100644
--- a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h
+++ b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h
@@ -459,7 +459,7 @@ void ipoib_reap_ah(struct work_struct *work);
void ipoib_mark_paths_invalid(struct ipoib_dev_priv *priv);
void ipoib_flush_paths(struct ipoib_dev_priv *priv);
-struct ipoib_dev_priv *ipoib_intf_alloc(const char *format);
+struct ipoib_dev_priv *ipoib_intf_alloc(const char *format, struct ib_device *ca);
int ipoib_ib_dev_init(struct ipoib_dev_priv *priv, struct ib_device *ca,
int port);
diff --git a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
index 38d8680ebf38..8b2f4724d2fd 100644
--- a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -901,7 +901,7 @@ ipoib_priv_alloc(void)
}
struct ipoib_dev_priv *
-ipoib_intf_alloc(const char *name)
+ipoib_intf_alloc(const char *name, struct ib_device *hca)
{
struct ipoib_dev_priv *priv;
if_t dev;
@@ -922,6 +922,8 @@ ipoib_intf_alloc(const char *name)
}
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);
infiniband_ifattach(priv->dev, NULL, priv->broadcastaddr);
@@ -976,7 +978,7 @@ ipoib_add_port(const char *format, struct ib_device *hca, u8 port)
struct ib_port_attr attr;
int result = -ENOMEM;
- priv = ipoib_intf_alloc(format);
+ priv = ipoib_intf_alloc(format, hca);
if (!priv)
goto alloc_mem_failed;
diff --git a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_vlan.c b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
index c9c24acf8529..bcb7e66a114c 100644
--- a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
+++ b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
@@ -89,7 +89,7 @@ int ipoib_vlan_add(if_t pdev, unsigned short pkey)
snprintf(intf_name, sizeof intf_name, "%s.%04x",
ppriv->dev->name, pkey);
- priv = ipoib_intf_alloc(intf_name);
+ priv = ipoib_intf_alloc(intf_name, ppriv->ca);
if (!priv) {
result = -ENOMEM;
goto err;
diff --git a/sys/ofed/include/rdma/ib_verbs.h b/sys/ofed/include/rdma/ib_verbs.h
index 1caa08b6b003..b726526838f5 100644
--- a/sys/ofed/include/rdma/ib_verbs.h
+++ b/sys/ofed/include/rdma/ib_verbs.h
@@ -242,6 +242,7 @@ enum ib_device_cap_flags {
IB_DEVICE_SG_GAPS_REG = (1ULL << 32),
IB_DEVICE_VIRTUAL_FUNCTION = (1ULL << 33),
IB_DEVICE_RAW_SCATTER_FCS = (1ULL << 34),
+ IB_DEVICE_KNOWSEPOCH = (1ULL << 35),
};
enum ib_atomic_cap {