|
Thomas Bogendoerfer |
733f2b |
From: Dasaratharaman Chandramouli <dasaratharaman.chandramouli@intel.com>
|
|
Thomas Bogendoerfer |
733f2b |
Date: Fri, 4 Aug 2017 13:54:35 -0700
|
|
Thomas Bogendoerfer |
733f2b |
Subject: IB/rdmavt, hfi1, qib: Enhance rdmavt and hfi1 to use 32 bit lids
|
|
Thomas Bogendoerfer |
733f2b |
Patch-mainline: v4.14-rc1
|
|
Thomas Bogendoerfer |
733f2b |
Git-commit: 51e658f5dd362cc8666f3f5ec1986660e3e51047
|
|
Thomas Bogendoerfer |
733f2b |
References: bsc#1060463 FATE#323043 bsc#1027067 FATE#322649 bsc#1058717 FATE#322789
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
Increase lid used in hfi1 driver to 32 bits. qib continues
|
|
Thomas Bogendoerfer |
733f2b |
to use 16 bit lids.
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
|
|
Thomas Bogendoerfer |
733f2b |
Signed-off-by: Dasaratharaman Chandramouli <dasaratharaman.chandramouli@intel.com>
|
|
Thomas Bogendoerfer |
733f2b |
Signed-off-by: Don Hiatt <don.hiatt@intel.com>
|
|
Thomas Bogendoerfer |
733f2b |
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
|
|
Thomas Bogendoerfer |
733f2b |
Signed-off-by: Doug Ledford <dledford@redhat.com>
|
|
Thomas Bogendoerfer |
733f2b |
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
|
|
Thomas Bogendoerfer |
733f2b |
---
|
|
Thomas Bogendoerfer |
733f2b |
drivers/infiniband/hw/hfi1/chip.c | 12 +++-
|
|
Thomas Bogendoerfer |
733f2b |
drivers/infiniband/hw/hfi1/hfi.h | 2
|
|
Thomas Bogendoerfer |
733f2b |
drivers/infiniband/hw/hfi1/mad.c | 91 +++++++++++++++++++++++++++++++-----
|
|
Thomas Bogendoerfer |
733f2b |
drivers/infiniband/hw/hfi1/verbs.c | 23 ---------
|
|
Thomas Bogendoerfer |
733f2b |
drivers/infiniband/hw/hfi1/verbs.h | 2
|
|
Thomas Bogendoerfer |
733f2b |
drivers/infiniband/hw/qib/qib_mad.c | 4 -
|
|
Thomas Bogendoerfer |
733f2b |
include/rdma/rdma_vt.h | 2
|
|
Thomas Bogendoerfer |
733f2b |
7 files changed, 93 insertions(+), 43 deletions(-)
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
--- a/drivers/infiniband/hw/hfi1/chip.c
|
|
Thomas Bogendoerfer |
733f2b |
+++ b/drivers/infiniband/hw/hfi1/chip.c
|
|
Thomas Bogendoerfer |
733f2b |
@@ -10067,10 +10067,16 @@ static void set_lidlmc(struct hfi1_pport
|
|
Thomas Bogendoerfer |
733f2b |
struct hfi1_devdata *dd = ppd->dd;
|
|
Thomas Bogendoerfer |
733f2b |
u32 mask = ~((1U << ppd->lmc) - 1);
|
|
Thomas Bogendoerfer |
733f2b |
u64 c1 = read_csr(ppd->dd, DCC_CFG_PORT_CONFIG1);
|
|
Thomas Bogendoerfer |
733f2b |
+ u32 lid;
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
+ /*
|
|
Thomas Bogendoerfer |
733f2b |
+ * Program 0 in CSR if port lid is extended. This prevents
|
|
Thomas Bogendoerfer |
733f2b |
+ * 9B packets being sent out for large lids.
|
|
Thomas Bogendoerfer |
733f2b |
+ */
|
|
Thomas Bogendoerfer |
733f2b |
+ lid = (ppd->lid >= be16_to_cpu(IB_MULTICAST_LID_BASE)) ? 0 : ppd->lid;
|
|
Thomas Bogendoerfer |
733f2b |
c1 &= ~(DCC_CFG_PORT_CONFIG1_TARGET_DLID_SMASK
|
|
Thomas Bogendoerfer |
733f2b |
| DCC_CFG_PORT_CONFIG1_DLID_MASK_SMASK);
|
|
Thomas Bogendoerfer |
733f2b |
- c1 |= ((ppd->lid & DCC_CFG_PORT_CONFIG1_TARGET_DLID_MASK)
|
|
Thomas Bogendoerfer |
733f2b |
+ c1 |= ((lid & DCC_CFG_PORT_CONFIG1_TARGET_DLID_MASK)
|
|
Thomas Bogendoerfer |
733f2b |
<< DCC_CFG_PORT_CONFIG1_TARGET_DLID_SHIFT) |
|
|
Thomas Bogendoerfer |
733f2b |
((mask & DCC_CFG_PORT_CONFIG1_DLID_MASK_MASK)
|
|
Thomas Bogendoerfer |
733f2b |
<< DCC_CFG_PORT_CONFIG1_DLID_MASK_SHIFT);
|
|
Thomas Bogendoerfer |
733f2b |
@@ -10081,7 +10087,7 @@ static void set_lidlmc(struct hfi1_pport
|
|
Thomas Bogendoerfer |
733f2b |
*/
|
|
Thomas Bogendoerfer |
733f2b |
sreg = ((mask & SEND_CTXT_CHECK_SLID_MASK_MASK) <<
|
|
Thomas Bogendoerfer |
733f2b |
SEND_CTXT_CHECK_SLID_MASK_SHIFT) |
|
|
Thomas Bogendoerfer |
733f2b |
- (((ppd->lid & mask) & SEND_CTXT_CHECK_SLID_VALUE_MASK) <<
|
|
Thomas Bogendoerfer |
733f2b |
+ (((lid & mask) & SEND_CTXT_CHECK_SLID_VALUE_MASK) <<
|
|
Thomas Bogendoerfer |
733f2b |
SEND_CTXT_CHECK_SLID_VALUE_SHIFT);
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
for (i = 0; i < dd->chip_send_contexts; i++) {
|
|
Thomas Bogendoerfer |
733f2b |
@@ -10091,7 +10097,7 @@ static void set_lidlmc(struct hfi1_pport
|
|
Thomas Bogendoerfer |
733f2b |
}
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
/* Now we have to do the same thing for the sdma engines */
|
|
Thomas Bogendoerfer |
733f2b |
- sdma_update_lmc(dd, mask, ppd->lid);
|
|
Thomas Bogendoerfer |
733f2b |
+ sdma_update_lmc(dd, mask, lid);
|
|
Thomas Bogendoerfer |
733f2b |
}
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
static const char *state_completed_string(u32 completed)
|
|
Thomas Bogendoerfer |
733f2b |
--- a/drivers/infiniband/hw/hfi1/hfi.h
|
|
Thomas Bogendoerfer |
733f2b |
+++ b/drivers/infiniband/hw/hfi1/hfi.h
|
|
Thomas Bogendoerfer |
733f2b |
@@ -718,7 +718,7 @@ struct hfi1_pportdata {
|
|
Thomas Bogendoerfer |
733f2b |
u32 ibmaxlen;
|
|
Thomas Bogendoerfer |
733f2b |
u32 current_egress_rate; /* units [10^6 bits/sec] */
|
|
Thomas Bogendoerfer |
733f2b |
/* LID programmed for this instance */
|
|
Thomas Bogendoerfer |
733f2b |
- u16 lid;
|
|
Thomas Bogendoerfer |
733f2b |
+ u32 lid;
|
|
Thomas Bogendoerfer |
733f2b |
/* list of pkeys programmed; 0 if not set */
|
|
Thomas Bogendoerfer |
733f2b |
u16 pkeys[MAX_PKEY_VALUES];
|
|
Thomas Bogendoerfer |
733f2b |
u16 link_width_supported;
|
|
Thomas Bogendoerfer |
733f2b |
--- a/drivers/infiniband/hw/hfi1/mad.c
|
|
Thomas Bogendoerfer |
733f2b |
+++ b/drivers/infiniband/hw/hfi1/mad.c
|
|
Thomas Bogendoerfer |
733f2b |
@@ -234,6 +234,61 @@ static void subn_handle_opa_trap_repress
|
|
Thomas Bogendoerfer |
733f2b |
spin_unlock_irqrestore(&ibp->rvp.lock, flags);
|
|
Thomas Bogendoerfer |
733f2b |
}
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
+static void hfi1_update_sm_ah_attr(struct hfi1_ibport *ibp,
|
|
Thomas Bogendoerfer |
733f2b |
+ struct rdma_ah_attr *attr, u32 dlid)
|
|
Thomas Bogendoerfer |
733f2b |
+{
|
|
Thomas Bogendoerfer |
733f2b |
+ rdma_ah_set_dlid(attr, dlid);
|
|
Thomas Bogendoerfer |
733f2b |
+ rdma_ah_set_port_num(attr, ppd_from_ibp(ibp)->port);
|
|
Thomas Bogendoerfer |
733f2b |
+ if (dlid >= be16_to_cpu(IB_MULTICAST_LID_BASE)) {
|
|
Thomas Bogendoerfer |
733f2b |
+ struct ib_global_route *grh = rdma_ah_retrieve_grh(attr);
|
|
Thomas Bogendoerfer |
733f2b |
+
|
|
Thomas Bogendoerfer |
733f2b |
+ rdma_ah_set_ah_flags(attr, IB_AH_GRH);
|
|
Thomas Bogendoerfer |
733f2b |
+ grh->sgid_index = 0;
|
|
Thomas Bogendoerfer |
733f2b |
+ grh->hop_limit = 1;
|
|
Thomas Bogendoerfer |
733f2b |
+ grh->dgid.global.subnet_prefix =
|
|
Thomas Bogendoerfer |
733f2b |
+ ibp->rvp.gid_prefix;
|
|
Thomas Bogendoerfer |
733f2b |
+ grh->dgid.global.interface_id = OPA_MAKE_ID(dlid);
|
|
Thomas Bogendoerfer |
733f2b |
+ }
|
|
Thomas Bogendoerfer |
733f2b |
+}
|
|
Thomas Bogendoerfer |
733f2b |
+
|
|
Thomas Bogendoerfer |
733f2b |
+static int hfi1_modify_qp0_ah(struct hfi1_ibport *ibp,
|
|
Thomas Bogendoerfer |
733f2b |
+ struct rvt_ah *ah, u32 dlid)
|
|
Thomas Bogendoerfer |
733f2b |
+{
|
|
Thomas Bogendoerfer |
733f2b |
+ struct rdma_ah_attr attr;
|
|
Thomas Bogendoerfer |
733f2b |
+ struct rvt_qp *qp0;
|
|
Thomas Bogendoerfer |
733f2b |
+ int ret = -EINVAL;
|
|
Thomas Bogendoerfer |
733f2b |
+
|
|
Thomas Bogendoerfer |
733f2b |
+ memset(&attr, 0, sizeof(attr));
|
|
Thomas Bogendoerfer |
733f2b |
+ attr.type = ah->ibah.type;
|
|
Thomas Bogendoerfer |
733f2b |
+ hfi1_update_sm_ah_attr(ibp, &attr, dlid);
|
|
Thomas Bogendoerfer |
733f2b |
+ rcu_read_lock();
|
|
Thomas Bogendoerfer |
733f2b |
+ qp0 = rcu_dereference(ibp->rvp.qp[0]);
|
|
Thomas Bogendoerfer |
733f2b |
+ if (qp0)
|
|
Thomas Bogendoerfer |
733f2b |
+ ret = rdma_modify_ah(&ah->ibah, &attr);
|
|
Thomas Bogendoerfer |
733f2b |
+ rcu_read_unlock();
|
|
Thomas Bogendoerfer |
733f2b |
+ return ret;
|
|
Thomas Bogendoerfer |
733f2b |
+}
|
|
Thomas Bogendoerfer |
733f2b |
+
|
|
Thomas Bogendoerfer |
733f2b |
+static struct ib_ah *hfi1_create_qp0_ah(struct hfi1_ibport *ibp, u32 dlid)
|
|
Thomas Bogendoerfer |
733f2b |
+{
|
|
Thomas Bogendoerfer |
733f2b |
+ struct rdma_ah_attr attr;
|
|
Thomas Bogendoerfer |
733f2b |
+ struct ib_ah *ah = ERR_PTR(-EINVAL);
|
|
Thomas Bogendoerfer |
733f2b |
+ struct rvt_qp *qp0;
|
|
Thomas Bogendoerfer |
733f2b |
+ struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
|
|
Thomas Bogendoerfer |
733f2b |
+ struct hfi1_devdata *dd = dd_from_ppd(ppd);
|
|
Thomas Bogendoerfer |
733f2b |
+ u8 port_num = ppd->port;
|
|
Thomas Bogendoerfer |
733f2b |
+
|
|
Thomas Bogendoerfer |
733f2b |
+ memset(&attr, 0, sizeof(attr));
|
|
Thomas Bogendoerfer |
733f2b |
+ attr.type = rdma_ah_find_type(&dd->verbs_dev.rdi.ibdev, port_num);
|
|
Thomas Bogendoerfer |
733f2b |
+ hfi1_update_sm_ah_attr(ibp, &attr, dlid);
|
|
Thomas Bogendoerfer |
733f2b |
+ rcu_read_lock();
|
|
Thomas Bogendoerfer |
733f2b |
+ qp0 = rcu_dereference(ibp->rvp.qp[0]);
|
|
Thomas Bogendoerfer |
733f2b |
+ if (qp0)
|
|
Thomas Bogendoerfer |
733f2b |
+ ah = rdma_create_ah(qp0->ibqp.pd, &attr);
|
|
Thomas Bogendoerfer |
733f2b |
+ rcu_read_unlock();
|
|
Thomas Bogendoerfer |
733f2b |
+ return ah;
|
|
Thomas Bogendoerfer |
733f2b |
+}
|
|
Thomas Bogendoerfer |
733f2b |
+
|
|
Thomas Bogendoerfer |
733f2b |
static void send_trap(struct hfi1_ibport *ibp, struct trap_node *trap)
|
|
Thomas Bogendoerfer |
733f2b |
{
|
|
Thomas Bogendoerfer |
733f2b |
struct ib_mad_send_buf *send_buf;
|
|
Thomas Bogendoerfer |
733f2b |
@@ -1283,8 +1338,8 @@ static int __subn_set_opa_portinfo(struc
|
|
Thomas Bogendoerfer |
733f2b |
struct hfi1_ibport *ibp;
|
|
Thomas Bogendoerfer |
733f2b |
u8 clientrereg;
|
|
Thomas Bogendoerfer |
733f2b |
unsigned long flags;
|
|
Thomas Bogendoerfer |
733f2b |
- u32 smlid, opa_lid; /* tmp vars to hold LID values */
|
|
Thomas Bogendoerfer |
733f2b |
- u16 lid;
|
|
Thomas Bogendoerfer |
733f2b |
+ u32 smlid;
|
|
Thomas Bogendoerfer |
733f2b |
+ u32 lid;
|
|
Thomas Bogendoerfer |
733f2b |
u8 ls_old, ls_new, ps_new;
|
|
Thomas Bogendoerfer |
733f2b |
u8 vls;
|
|
Thomas Bogendoerfer |
733f2b |
u8 msl;
|
|
Thomas Bogendoerfer |
733f2b |
@@ -1301,22 +1356,20 @@ static int __subn_set_opa_portinfo(struc
|
|
Thomas Bogendoerfer |
733f2b |
return reply((struct ib_mad_hdr *)smp);
|
|
Thomas Bogendoerfer |
733f2b |
}
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
- opa_lid = be32_to_cpu(pi->lid);
|
|
Thomas Bogendoerfer |
733f2b |
- if (opa_lid & 0xFFFF0000) {
|
|
Thomas Bogendoerfer |
733f2b |
- pr_warn("OPA_PortInfo lid out of range: %X\n", opa_lid);
|
|
Thomas Bogendoerfer |
733f2b |
+ lid = be32_to_cpu(pi->lid);
|
|
Thomas Bogendoerfer |
733f2b |
+ if (lid & 0xFF000000) {
|
|
Thomas Bogendoerfer |
733f2b |
+ pr_warn("OPA_PortInfo lid out of range: %X\n", lid);
|
|
Thomas Bogendoerfer |
733f2b |
smp->status |= IB_SMP_INVALID_FIELD;
|
|
Thomas Bogendoerfer |
733f2b |
goto get_only;
|
|
Thomas Bogendoerfer |
733f2b |
}
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
- lid = (u16)(opa_lid & 0x0000FFFF);
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
smlid = be32_to_cpu(pi->sm_lid);
|
|
Thomas Bogendoerfer |
733f2b |
- if (smlid & 0xFFFF0000) {
|
|
Thomas Bogendoerfer |
733f2b |
+ if (smlid & 0xFF000000) {
|
|
Thomas Bogendoerfer |
733f2b |
pr_warn("OPA_PortInfo SM lid out of range: %X\n", smlid);
|
|
Thomas Bogendoerfer |
733f2b |
smp->status |= IB_SMP_INVALID_FIELD;
|
|
Thomas Bogendoerfer |
733f2b |
goto get_only;
|
|
Thomas Bogendoerfer |
733f2b |
}
|
|
Thomas Bogendoerfer |
733f2b |
- smlid &= 0x0000FFFF;
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
clientrereg = (pi->clientrereg_subnettimeout &
|
|
Thomas Bogendoerfer |
733f2b |
OPA_PI_MASK_CLIENT_REREGISTER);
|
|
Thomas Bogendoerfer |
733f2b |
@@ -1331,12 +1384,16 @@ static int __subn_set_opa_portinfo(struc
|
|
Thomas Bogendoerfer |
733f2b |
ls_old = driver_lstate(ppd);
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
ibp->rvp.mkey = pi->mkey;
|
|
Thomas Bogendoerfer |
733f2b |
- ibp->rvp.gid_prefix = pi->subnet_prefix;
|
|
Thomas Bogendoerfer |
733f2b |
+ if (ibp->rvp.gid_prefix != pi->subnet_prefix) {
|
|
Thomas Bogendoerfer |
733f2b |
+ ibp->rvp.gid_prefix = pi->subnet_prefix;
|
|
Thomas Bogendoerfer |
733f2b |
+ event.event = IB_EVENT_GID_CHANGE;
|
|
Thomas Bogendoerfer |
733f2b |
+ ib_dispatch_event(&event);
|
|
Thomas Bogendoerfer |
733f2b |
+ }
|
|
Thomas Bogendoerfer |
733f2b |
ibp->rvp.mkey_lease_period = be16_to_cpu(pi->mkey_lease_period);
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
/* Must be a valid unicast LID address. */
|
|
Thomas Bogendoerfer |
733f2b |
if ((lid == 0 && ls_old > IB_PORT_INIT) ||
|
|
Thomas Bogendoerfer |
733f2b |
- lid >= be16_to_cpu(IB_MULTICAST_LID_BASE)) {
|
|
Thomas Bogendoerfer |
733f2b |
+ (hfi1_is_16B_mcast(lid))) {
|
|
Thomas Bogendoerfer |
733f2b |
smp->status |= IB_SMP_INVALID_FIELD;
|
|
Thomas Bogendoerfer |
733f2b |
pr_warn("SubnSet(OPA_PortInfo) lid invalid 0x%x\n",
|
|
Thomas Bogendoerfer |
733f2b |
lid);
|
|
Thomas Bogendoerfer |
733f2b |
@@ -1349,6 +1406,16 @@ static int __subn_set_opa_portinfo(struc
|
|
Thomas Bogendoerfer |
733f2b |
hfi1_set_lid(ppd, lid, pi->mkeyprotect_lmc & OPA_PI_MASK_LMC);
|
|
Thomas Bogendoerfer |
733f2b |
event.event = IB_EVENT_LID_CHANGE;
|
|
Thomas Bogendoerfer |
733f2b |
ib_dispatch_event(&event);
|
|
Thomas Bogendoerfer |
733f2b |
+
|
|
Thomas Bogendoerfer |
733f2b |
+ if (HFI1_PORT_GUID_INDEX + 1 < HFI1_GUIDS_PER_PORT) {
|
|
Thomas Bogendoerfer |
733f2b |
+ /* Manufacture GID from LID to support extended
|
|
Thomas Bogendoerfer |
733f2b |
+ * addresses
|
|
Thomas Bogendoerfer |
733f2b |
+ */
|
|
Thomas Bogendoerfer |
733f2b |
+ ppd->guids[HFI1_PORT_GUID_INDEX + 1] =
|
|
Thomas Bogendoerfer |
733f2b |
+ be64_to_cpu(OPA_MAKE_ID(lid));
|
|
Thomas Bogendoerfer |
733f2b |
+ event.event = IB_EVENT_GID_CHANGE;
|
|
Thomas Bogendoerfer |
733f2b |
+ ib_dispatch_event(&event);
|
|
Thomas Bogendoerfer |
733f2b |
+ }
|
|
Thomas Bogendoerfer |
733f2b |
}
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
msl = pi->smsl & OPA_PI_MASK_SMSL;
|
|
Thomas Bogendoerfer |
733f2b |
@@ -1359,7 +1426,7 @@ static int __subn_set_opa_portinfo(struc
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
/* Must be a valid unicast LID address. */
|
|
Thomas Bogendoerfer |
733f2b |
if ((smlid == 0 && ls_old > IB_PORT_INIT) ||
|
|
Thomas Bogendoerfer |
733f2b |
- smlid >= be16_to_cpu(IB_MULTICAST_LID_BASE)) {
|
|
Thomas Bogendoerfer |
733f2b |
+ (hfi1_is_16B_mcast(smlid))) {
|
|
Thomas Bogendoerfer |
733f2b |
smp->status |= IB_SMP_INVALID_FIELD;
|
|
Thomas Bogendoerfer |
733f2b |
pr_warn("SubnSet(OPA_PortInfo) smlid invalid 0x%x\n", smlid);
|
|
Thomas Bogendoerfer |
733f2b |
} else if (smlid != ibp->rvp.sm_lid || msl != ibp->rvp.sm_sl) {
|
|
Thomas Bogendoerfer |
733f2b |
@@ -1367,7 +1434,7 @@ static int __subn_set_opa_portinfo(struc
|
|
Thomas Bogendoerfer |
733f2b |
spin_lock_irqsave(&ibp->rvp.lock, flags);
|
|
Thomas Bogendoerfer |
733f2b |
if (ibp->rvp.sm_ah) {
|
|
Thomas Bogendoerfer |
733f2b |
if (smlid != ibp->rvp.sm_lid)
|
|
Thomas Bogendoerfer |
733f2b |
- rdma_ah_set_dlid(&ibp->rvp.sm_ah->attr, smlid);
|
|
Thomas Bogendoerfer |
733f2b |
+ hfi1_modify_qp0_ah(ibp, ibp->rvp.sm_ah, smlid);
|
|
Thomas Bogendoerfer |
733f2b |
if (msl != ibp->rvp.sm_sl)
|
|
Thomas Bogendoerfer |
733f2b |
rdma_ah_set_sl(&ibp->rvp.sm_ah->attr, msl);
|
|
Thomas Bogendoerfer |
733f2b |
}
|
|
Thomas Bogendoerfer |
733f2b |
--- a/drivers/infiniband/hw/hfi1/verbs.c
|
|
Thomas Bogendoerfer |
733f2b |
+++ b/drivers/infiniband/hw/hfi1/verbs.c
|
|
Thomas Bogendoerfer |
733f2b |
@@ -1394,7 +1394,7 @@ static int query_port(struct rvt_dev_inf
|
|
Thomas Bogendoerfer |
733f2b |
struct hfi1_ibdev *verbs_dev = dev_from_rdi(rdi);
|
|
Thomas Bogendoerfer |
733f2b |
struct hfi1_devdata *dd = dd_from_dev(verbs_dev);
|
|
Thomas Bogendoerfer |
733f2b |
struct hfi1_pportdata *ppd = &dd->pport[port_num - 1];
|
|
Thomas Bogendoerfer |
733f2b |
- u16 lid = ppd->lid;
|
|
Thomas Bogendoerfer |
733f2b |
+ u32 lid = ppd->lid;
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
/* props being zeroed by the caller, avoid zeroing it here */
|
|
Thomas Bogendoerfer |
733f2b |
props->lid = lid ? lid : 0;
|
|
Thomas Bogendoerfer |
733f2b |
@@ -1555,27 +1555,6 @@ static void hfi1_notify_new_ah(struct ib
|
|
Thomas Bogendoerfer |
733f2b |
ah->log_pmtu = ilog2(dd->vld[ah->vl].mtu);
|
|
Thomas Bogendoerfer |
733f2b |
}
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
-struct ib_ah *hfi1_create_qp0_ah(struct hfi1_ibport *ibp, u16 dlid)
|
|
Thomas Bogendoerfer |
733f2b |
-{
|
|
Thomas Bogendoerfer |
733f2b |
- struct rdma_ah_attr attr;
|
|
Thomas Bogendoerfer |
733f2b |
- struct ib_ah *ah = ERR_PTR(-EINVAL);
|
|
Thomas Bogendoerfer |
733f2b |
- struct rvt_qp *qp0;
|
|
Thomas Bogendoerfer |
733f2b |
- struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
|
|
Thomas Bogendoerfer |
733f2b |
- struct hfi1_devdata *dd = dd_from_ppd(ppd);
|
|
Thomas Bogendoerfer |
733f2b |
- u8 port_num = ppd->port;
|
|
Thomas Bogendoerfer |
733f2b |
-
|
|
Thomas Bogendoerfer |
733f2b |
- memset(&attr, 0, sizeof(attr));
|
|
Thomas Bogendoerfer |
733f2b |
- attr.type = rdma_ah_find_type(&dd->verbs_dev.rdi.ibdev, port_num);
|
|
Thomas Bogendoerfer |
733f2b |
- rdma_ah_set_dlid(&attr, dlid);
|
|
Thomas Bogendoerfer |
733f2b |
- rdma_ah_set_port_num(&attr, ppd_from_ibp(ibp)->port);
|
|
Thomas Bogendoerfer |
733f2b |
- rcu_read_lock();
|
|
Thomas Bogendoerfer |
733f2b |
- qp0 = rcu_dereference(ibp->rvp.qp[0]);
|
|
Thomas Bogendoerfer |
733f2b |
- if (qp0)
|
|
Thomas Bogendoerfer |
733f2b |
- ah = rdma_create_ah(qp0->ibqp.pd, &attr);
|
|
Thomas Bogendoerfer |
733f2b |
- rcu_read_unlock();
|
|
Thomas Bogendoerfer |
733f2b |
- return ah;
|
|
Thomas Bogendoerfer |
733f2b |
-}
|
|
Thomas Bogendoerfer |
733f2b |
-
|
|
Thomas Bogendoerfer |
733f2b |
/**
|
|
Thomas Bogendoerfer |
733f2b |
* hfi1_get_npkeys - return the size of the PKEY table for context 0
|
|
Thomas Bogendoerfer |
733f2b |
* @dd: the hfi1_ib device
|
|
Thomas Bogendoerfer |
733f2b |
--- a/drivers/infiniband/hw/hfi1/verbs.h
|
|
Thomas Bogendoerfer |
733f2b |
+++ b/drivers/infiniband/hw/hfi1/verbs.h
|
|
Thomas Bogendoerfer |
733f2b |
@@ -334,8 +334,6 @@ void hfi1_rc_hdrerr(
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
u8 ah_to_sc(struct ib_device *ibdev, struct rdma_ah_attr *ah_attr);
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
-struct ib_ah *hfi1_create_qp0_ah(struct hfi1_ibport *ibp, u16 dlid);
|
|
Thomas Bogendoerfer |
733f2b |
-
|
|
Thomas Bogendoerfer |
733f2b |
void hfi1_rc_send_complete(struct rvt_qp *qp, struct hfi1_opa_header *opah);
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
void hfi1_ud_rcv(struct hfi1_packet *packet);
|
|
Thomas Bogendoerfer |
733f2b |
--- a/drivers/infiniband/hw/qib/qib_mad.c
|
|
Thomas Bogendoerfer |
733f2b |
+++ b/drivers/infiniband/hw/qib/qib_mad.c
|
|
Thomas Bogendoerfer |
733f2b |
@@ -105,7 +105,7 @@ static void qib_send_trap(struct qib_ibp
|
|
Thomas Bogendoerfer |
733f2b |
if (ibp->rvp.sm_lid != be16_to_cpu(IB_LID_PERMISSIVE)) {
|
|
Thomas Bogendoerfer |
733f2b |
struct ib_ah *ah;
|
|
Thomas Bogendoerfer |
733f2b |
|
|
Thomas Bogendoerfer |
733f2b |
- ah = qib_create_qp0_ah(ibp, ibp->rvp.sm_lid);
|
|
Thomas Bogendoerfer |
733f2b |
+ ah = qib_create_qp0_ah(ibp, (u16)ibp->rvp.sm_lid);
|
|
Thomas Bogendoerfer |
733f2b |
if (IS_ERR(ah))
|
|
Thomas Bogendoerfer |
733f2b |
ret = PTR_ERR(ah);
|
|
Thomas Bogendoerfer |
733f2b |
else {
|
|
Thomas Bogendoerfer |
733f2b |
@@ -496,7 +496,7 @@ static int subn_get_portinfo(struct ib_s
|
|
Thomas Bogendoerfer |
733f2b |
pip->mkey = ibp->rvp.mkey;
|
|
Thomas Bogendoerfer |
733f2b |
pip->gid_prefix = ibp->rvp.gid_prefix;
|
|
Thomas Bogendoerfer |
733f2b |
pip->lid = cpu_to_be16(ppd->lid);
|
|
Thomas Bogendoerfer |
733f2b |
- pip->sm_lid = cpu_to_be16(ibp->rvp.sm_lid);
|
|
Thomas Bogendoerfer |
733f2b |
+ pip->sm_lid = cpu_to_be16((u16)ibp->rvp.sm_lid);
|
|
Thomas Bogendoerfer |
733f2b |
pip->cap_mask = cpu_to_be32(ibp->rvp.port_cap_flags);
|
|
Thomas Bogendoerfer |
733f2b |
/* pip->diag_code; */
|
|
Thomas Bogendoerfer |
733f2b |
pip->mkey_lease_period = cpu_to_be16(ibp->rvp.mkey_lease_period);
|
|
Thomas Bogendoerfer |
733f2b |
--- a/include/rdma/rdma_vt.h
|
|
Thomas Bogendoerfer |
733f2b |
+++ b/include/rdma/rdma_vt.h
|
|
Thomas Bogendoerfer |
733f2b |
@@ -91,7 +91,7 @@ struct rvt_ibport {
|
|
Thomas Bogendoerfer |
733f2b |
__be16 pma_counter_select[5];
|
|
Thomas Bogendoerfer |
733f2b |
u16 pma_tag;
|
|
Thomas Bogendoerfer |
733f2b |
u16 mkey_lease_period;
|
|
Thomas Bogendoerfer |
733f2b |
- u16 sm_lid;
|
|
Thomas Bogendoerfer |
733f2b |
+ u32 sm_lid;
|
|
Thomas Bogendoerfer |
733f2b |
u8 sm_sl;
|
|
Thomas Bogendoerfer |
733f2b |
u8 mkeyprot;
|
|
Thomas Bogendoerfer |
733f2b |
u8 subnet_timeout;
|