diff options
author | Hans Petter Selasky <hselasky@FreeBSD.org> | 2017-11-07 08:39:14 +0000 |
---|---|---|
committer | Hans Petter Selasky <hselasky@FreeBSD.org> | 2017-11-07 08:39:14 +0000 |
commit | c2c014f24c10f90d85126ac5fbd4d8524de32b1c (patch) | |
tree | 75716d0e44f388e8e9162b62933021bc156d9db8 /sys/ofed | |
parent | 4051f0c8edfe20742ecc540dc7961c33d37d1465 (diff) | |
parent | d61b3d7a720f36fdff69749c8096546a3ba8aba4 (diff) | |
download | src-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.c | 20 | ||||
-rw-r--r-- | sys/ofed/include/rdma/ib_addr.h | 6 |
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; |