aboutsummaryrefslogtreecommitdiff
path: root/sys/ofed
diff options
context:
space:
mode:
authorHans Petter Selasky <hselasky@FreeBSD.org>2017-11-07 08:39:14 +0000
committerHans Petter Selasky <hselasky@FreeBSD.org>2017-11-07 08:39:14 +0000
commitc2c014f24c10f90d85126ac5fbd4d8524de32b1c (patch)
tree75716d0e44f388e8e9162b62933021bc156d9db8 /sys/ofed
parent4051f0c8edfe20742ecc540dc7961c33d37d1465 (diff)
parentd61b3d7a720f36fdff69749c8096546a3ba8aba4 (diff)
downloadsrc-c2c014f24c10f90d85126ac5fbd4d8524de32b1c.tar.gz
src-c2c014f24c10f90d85126ac5fbd4d8524de32b1c.zip
Merge ^/head r323559 through r325504.
Notes
Notes: svn path=/projects/bsd_rdma_4_9/; revision=325505
Diffstat (limited to 'sys/ofed')
-rw-r--r--sys/ofed/drivers/infiniband/hw/mthca/mthca_provider.c20
-rw-r--r--sys/ofed/include/rdma/ib_addr.h6
2 files changed, 26 insertions, 0 deletions
diff --git a/sys/ofed/drivers/infiniband/hw/mthca/mthca_provider.c b/sys/ofed/drivers/infiniband/hw/mthca/mthca_provider.c
index adc24aae6e9b..264db51e7758 100644
--- a/sys/ofed/drivers/infiniband/hw/mthca/mthca_provider.c
+++ b/sys/ofed/drivers/infiniband/hw/mthca/mthca_provider.c
@@ -1297,6 +1297,25 @@ out:
return err;
}
+static int mthca_port_immutable(struct ib_device *ibdev, u8 port_num,
+ struct ib_port_immutable *immutable)
+{
+ struct ib_port_attr attr;
+ int err;
+
+ immutable->core_cap_flags = RDMA_CORE_PORT_IBA_IB;
+
+ err = ib_query_port(ibdev, port_num, &attr);
+ if (err)
+ return err;
+
+ immutable->pkey_tbl_len = attr.pkey_tbl_len;
+ immutable->gid_tbl_len = attr.gid_tbl_len;
+ immutable->max_mad_size = IB_MGMT_MAD_SIZE;
+
+ return 0;
+}
+
int mthca_register_device(struct mthca_dev *dev)
{
int ret;
@@ -1376,6 +1395,7 @@ int mthca_register_device(struct mthca_dev *dev)
dev->ib_dev.reg_phys_mr = mthca_reg_phys_mr;
dev->ib_dev.reg_user_mr = mthca_reg_user_mr;
dev->ib_dev.dereg_mr = mthca_dereg_mr;
+ dev->ib_dev.get_port_immutable = mthca_port_immutable;
if (dev->mthca_flags & MTHCA_FLAG_FMR) {
dev->ib_dev.alloc_fmr = mthca_alloc_fmr;
diff --git a/sys/ofed/include/rdma/ib_addr.h b/sys/ofed/include/rdma/ib_addr.h
index 1dbe844cc8d0..2c27977eb295 100644
--- a/sys/ofed/include/rdma/ib_addr.h
+++ b/sys/ofed/include/rdma/ib_addr.h
@@ -177,6 +177,12 @@ static inline int rdma_ip2gid(const struct sockaddr *addr, union ib_gid *gid)
break;
case AF_INET6:
memcpy(gid->raw, &((const struct sockaddr_in6 *)addr)->sin6_addr, 16);
+ /* make sure scope ID gets zeroed inside GID */
+ if (IN6_IS_SCOPE_LINKLOCAL((struct in6_addr *)gid->raw) ||
+ IN6_IS_ADDR_MC_INTFACELOCAL((struct in6_addr *)gid->raw)) {
+ gid->raw[2] = 0;
+ gid->raw[3] = 0;
+ }
break;
default:
return -EINVAL;