diff options
author | Zhenlei Huang <zlei@FreeBSD.org> | 2023-04-05 16:05:02 +0000 |
---|---|---|
committer | Zhenlei Huang <zlei@FreeBSD.org> | 2023-04-05 16:08:23 +0000 |
commit | fc6c93b6a5cf14cbc099f550f745d63779499fec (patch) | |
tree | 12086af48995e8f5dd019c4d2bdbc5f66104a524 /sys/ofed | |
parent | 03276e338a1b6ee0b36797071720ae0645a59811 (diff) | |
download | src-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.h | 2 | ||||
-rw-r--r-- | sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c | 6 | ||||
-rw-r--r-- | sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 2 | ||||
-rw-r--r-- | sys/ofed/include/rdma/ib_verbs.h | 1 |
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 { |