Lines Matching refs:ibp
101 static u16 hfi1_lookup_pkey_value(struct hfi1_ibport *ibp, int pkey_idx)
103 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
125 static void cleanup_traps(struct hfi1_ibport *ibp, struct trap_node *trap)
133 spin_lock_irqsave(&ibp->rvp.lock, flags);
134 list_replace_init(&ibp->rvp.trap_lists[i].list, &trap_list);
135 ibp->rvp.trap_lists[i].list_len = 0;
136 spin_unlock_irqrestore(&ibp->rvp.lock, flags);
156 static struct trap_node *check_and_add_trap(struct hfi1_ibport *ibp,
180 spin_lock_irqsave(&ibp->rvp.lock, flags);
181 trap_list = &ibp->rvp.trap_lists[queue_id];
208 if (!timer_pending(&ibp->rvp.trap_timer)) {
216 (1UL << ibp->rvp.subnet_timeout)) / 1000;
217 mod_timer(&ibp->rvp.trap_timer,
223 spin_unlock_irqrestore(&ibp->rvp.lock, flags);
228 static void subn_handle_opa_trap_repress(struct hfi1_ibport *ibp,
239 spin_lock_irqsave(&ibp->rvp.lock, flags);
241 trap_list = &ibp->rvp.trap_lists[i];
255 spin_unlock_irqrestore(&ibp->rvp.lock, flags);
258 static void hfi1_update_sm_ah_attr(struct hfi1_ibport *ibp,
262 rdma_ah_set_port_num(attr, ppd_from_ibp(ibp)->port);
270 ibp->rvp.gid_prefix;
275 static int hfi1_modify_qp0_ah(struct hfi1_ibport *ibp,
284 hfi1_update_sm_ah_attr(ibp, &attr, dlid);
286 qp0 = rcu_dereference(ibp->rvp.qp[0]);
293 static struct ib_ah *hfi1_create_qp0_ah(struct hfi1_ibport *ibp, u32 dlid)
298 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
304 hfi1_update_sm_ah_attr(ibp, &attr, dlid);
306 qp0 = rcu_dereference(ibp->rvp.qp[0]);
313 static void send_trap(struct hfi1_ibport *ibp, struct trap_node *trap)
320 u32 qpn = ppd_from_ibp(ibp)->sm_trap_qp;
322 agent = ibp->rvp.send_agent;
324 cleanup_traps(ibp, trap);
329 if (driver_lstate(ppd_from_ibp(ibp)) != IB_PORT_ACTIVE) {
330 cleanup_traps(ibp, trap);
335 trap = check_and_add_trap(ibp, trap);
339 pkey_idx = hfi1_lookup_pkey_idx(ibp, LIM_MGMT_P_KEY);
342 __func__, hfi1_get_pkey(ibp, 1));
360 ibp->rvp.tid++;
362 if (ibp->rvp.tid == 0)
363 ibp->rvp.tid++;
364 trap->tid = cpu_to_be64(ibp->rvp.tid);
373 spin_lock_irqsave(&ibp->rvp.lock, flags);
374 if (!ibp->rvp.sm_ah) {
375 if (ibp->rvp.sm_lid != be16_to_cpu(IB_LID_PERMISSIVE)) {
378 ah = hfi1_create_qp0_ah(ibp, ibp->rvp.sm_lid);
380 spin_unlock_irqrestore(&ibp->rvp.lock, flags);
384 ibp->rvp.sm_ah = ibah_to_rvtah(ah);
386 spin_unlock_irqrestore(&ibp->rvp.lock, flags);
390 send_buf->ah = &ibp->rvp.sm_ah->ibah;
399 spin_unlock_irqrestore(&ibp->rvp.lock, flags);
406 spin_unlock_irqrestore(&ibp->rvp.lock, flags);
414 struct hfi1_ibport *ibp = from_timer(ibp, t, rvp.trap_timer);
420 spin_lock_irqsave(&ibp->rvp.lock, flags);
422 trap = list_first_entry_or_null(&ibp->rvp.trap_lists[i].list,
425 spin_unlock_irqrestore(&ibp->rvp.lock, flags);
428 send_trap(ibp, trap);
451 void hfi1_bad_pkey(struct hfi1_ibport *ibp, u32 key, u32 sl,
455 u32 lid = ppd_from_ibp(ibp)->lid;
457 ibp->rvp.n_pkt_drops++;
458 ibp->rvp.pkey_violations++;
474 send_trap(ibp, trap);
480 static void bad_mkey(struct hfi1_ibport *ibp, struct ib_mad_hdr *mad,
484 u32 lid = ppd_from_ibp(ibp)->lid;
512 send_trap(ibp, trap);
523 struct hfi1_ibport *ibp = &dd->pport[port_num - 1].ibport_data;
524 u32 lid = ppd_from_ibp(ibp)->lid;
533 trap->data.ntc_144.new_cap_mask = cpu_to_be32(ibp->rvp.port_cap_flags);
534 trap->data.ntc_144.cap_mask3 = cpu_to_be16(ibp->rvp.port_cap3_flags);
537 send_trap(ibp, trap);
543 void hfi1_sys_guid_chg(struct hfi1_ibport *ibp)
546 u32 lid = ppd_from_ibp(ibp)->lid;
557 send_trap(ibp, trap);
563 void hfi1_node_desc_chg(struct hfi1_ibport *ibp)
566 u32 lid = ppd_from_ibp(ibp)->lid;
579 send_trap(ibp, trap);
692 static int check_mkey(struct hfi1_ibport *ibp, struct ib_mad_hdr *mad,
700 if (ibp->rvp.mkey_lease_timeout &&
701 time_after_eq(jiffies, ibp->rvp.mkey_lease_timeout)) {
703 ibp->rvp.mkey_lease_timeout = 0;
704 ibp->rvp.mkeyprot = 0;
707 if ((mad_flags & IB_MAD_IGNORE_MKEY) || ibp->rvp.mkey == 0 ||
708 ibp->rvp.mkey == mkey)
712 if (valid_mkey && ibp->rvp.mkey_lease_timeout &&
716 ibp->rvp.mkey_lease_timeout = 0;
722 if (ibp->rvp.mkeyprot < 2)
727 if (ibp->rvp.mkey_violations != 0xFFFF)
728 ++ibp->rvp.mkey_violations;
729 if (!ibp->rvp.mkey_lease_timeout &&
730 ibp->rvp.mkey_lease_period)
731 ibp->rvp.mkey_lease_timeout = jiffies +
732 ibp->rvp.mkey_lease_period * HZ;
734 bad_mkey(ibp, mad, mkey, dr_slid, return_path,
803 struct hfi1_ibport *ibp;
822 ibp = &ppd->ibport_data;
834 ibp->rvp.mkey != smp->mkey &&
835 ibp->rvp.mkeyprot == 1))
836 pi->mkey = ibp->rvp.mkey;
838 pi->subnet_prefix = ibp->rvp.gid_prefix;
839 pi->sm_lid = cpu_to_be32(ibp->rvp.sm_lid);
840 pi->ib_cap_mask = cpu_to_be32(ibp->rvp.port_cap_flags);
841 pi->mkey_lease_period = cpu_to_be16(ibp->rvp.mkey_lease_period);
886 pi->mkeyprotect_lmc = (ibp->rvp.mkeyprot << 6) | ppd->lmc;
899 pi->smsl = ibp->rvp.sm_sl & OPA_PI_MASK_SMSL;
907 pi->mkey_violations = cpu_to_be16(ibp->rvp.mkey_violations);
909 pi->pkey_violations = cpu_to_be16(ibp->rvp.pkey_violations);
910 pi->qkey_violations = cpu_to_be16(ibp->rvp.qkey_violations);
913 pi->vl.high_limit = cpu_to_be16(ibp->rvp.vl_high_limit);
917 pi->clientrereg_subnettimeout = ibp->rvp.subnet_timeout;
983 pi->opa_cap_mask = cpu_to_be16(ibp->rvp.port_cap3_flags);
1359 struct hfi1_ibport *ibp;
1401 ibp = &ppd->ibport_data;
1407 ibp->rvp.mkey = pi->mkey;
1408 if (ibp->rvp.gid_prefix != pi->subnet_prefix) {
1409 ibp->rvp.gid_prefix = pi->subnet_prefix;
1413 ibp->rvp.mkey_lease_period = be16_to_cpu(pi->mkey_lease_period);
1453 } else if (smlid != ibp->rvp.sm_lid || msl != ibp->rvp.sm_sl) {
1455 spin_lock_irqsave(&ibp->rvp.lock, flags);
1456 if (ibp->rvp.sm_ah) {
1457 if (smlid != ibp->rvp.sm_lid)
1458 hfi1_modify_qp0_ah(ibp, ibp->rvp.sm_ah, smlid);
1459 if (msl != ibp->rvp.sm_sl)
1460 rdma_ah_set_sl(&ibp->rvp.sm_ah->attr, msl);
1462 spin_unlock_irqrestore(&ibp->rvp.lock, flags);
1463 if (smlid != ibp->rvp.sm_lid)
1464 ibp->rvp.sm_lid = smlid;
1465 if (msl != ibp->rvp.sm_sl)
1466 ibp->rvp.sm_sl = msl;
1520 ibp->rvp.mkeyprot =
1522 ibp->rvp.vl_high_limit = be16_to_cpu(pi->vl.high_limit) & 0xFF;
1524 ibp->rvp.vl_high_limit);
1584 ibp->rvp.mkey_violations = 0;
1587 ibp->rvp.pkey_violations = 0;
1590 ibp->rvp.qkey_violations = 0;
1592 ibp->rvp.subnet_timeout =
1831 struct hfi1_ibport *ibp = to_iport(ibdev, port);
1833 size_t size = ARRAY_SIZE(ibp->sl_to_sc); /* == 32 */
1841 for (i = 0; i < ARRAY_SIZE(ibp->sl_to_sc); i++)
1842 *p++ = ibp->sl_to_sc[i];
1854 struct hfi1_ibport *ibp = to_iport(ibdev, port);
1856 size_t size = ARRAY_SIZE(ibp->sl_to_sc);
1865 for (i = 0; i < ARRAY_SIZE(ibp->sl_to_sc); i++) {
1867 if (ibp->sl_to_sc[i] != sc) {
1868 ibp->sl_to_sc[i] = sc;
1871 hfi1_error_port_qps(ibp, i);
1883 struct hfi1_ibport *ibp = to_iport(ibdev, port);
1885 size_t size = ARRAY_SIZE(ibp->sc_to_sl); /* == 32 */
1893 for (i = 0; i < ARRAY_SIZE(ibp->sc_to_sl); i++)
1894 *p++ = ibp->sc_to_sl[i];
1906 struct hfi1_ibport *ibp = to_iport(ibdev, port);
1907 size_t size = ARRAY_SIZE(ibp->sc_to_sl);
1916 for (i = 0; i < ARRAY_SIZE(ibp->sc_to_sl); i++)
1917 ibp->sc_to_sl[i] = *p++;
2051 struct hfi1_ibport *ibp;
2060 ibp = to_iport(ibdev, port);
2061 ppd = ppd_from_ibp(ibp);
2094 struct hfi1_ibport *ibp;
2104 ibp = to_iport(ibdev, port);
2105 ppd = ppd_from_ibp(ibp);
2738 struct hfi1_ibport *ibp = to_iport(ibdev, port);
2739 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
2895 struct hfi1_ibport *ibp = to_iport(ibdev, port);
2896 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
2981 struct hfi1_ibport *ibp = to_iport(ibdev, port);
2982 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
3158 struct hfi1_ibport *ibp = to_iport(ibdev, port);
3159 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
3207 struct hfi1_ibport *ibp;
3248 ibp = to_iport(ibdev, port_num);
3249 ppd = ppd_from_ibp(ibp);
3476 struct hfi1_ibport *ibp = to_iport(ibdev, port);
3477 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
3710 struct hfi1_ibport *ibp = to_iport(ibdev, port);
3711 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
3735 struct hfi1_ibport *ibp = to_iport(ibdev, port);
3736 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
3827 struct hfi1_ibport *ibp = to_iport(ibdev, port);
3828 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
3865 struct hfi1_ibport *ibp = to_iport(ibdev, port);
3866 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
3933 struct hfi1_ibport *ibp = to_iport(ibdev, port);
3934 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
3984 struct hfi1_ibport *ibp = to_iport(ibdev, port);
3985 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
4096 struct hfi1_ibport *ibp = to_iport(ibdev, port);
4168 if (ibp->rvp.port_cap_flags & IB_PORT_SM_DISABLED)
4170 if (ibp->rvp.port_cap_flags & IB_PORT_SM)
4186 struct hfi1_ibport *ibp = to_iport(ibdev, port);
4238 if (ibp->rvp.port_cap_flags & IB_PORT_SM_DISABLED)
4240 if (ibp->rvp.port_cap_flags & IB_PORT_SM)
4379 static int is_full_mgmt_pkey_in_table(struct hfi1_ibport *ibp)
4382 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
4395 static int is_local_mad(struct hfi1_ibport *ibp, const struct opa_mad *mad,
4398 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
4420 static int opa_local_smp_check(struct hfi1_ibport *ibp,
4423 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
4456 * @ibp: IB port data
4491 static int hfi1_pkey_validation_pma(struct hfi1_ibport *ibp,
4495 u16 pkey_value = hfi1_lookup_pkey_value(ibp, in_wc->pkey_index);
4498 if (!is_local_mad(ibp, in_mad, in_wc) &&
4505 is_full_mgmt_pkey_in_table(ibp))
4517 struct hfi1_ibport *ibp = to_iport(ibdev, port);
4534 ret = check_mkey(ibp, (struct ib_mad_hdr *)smp, mad_flags, smp->mkey,
4603 subn_handle_opa_trap_repress(ibp, smp);
4621 struct hfi1_ibport *ibp = to_iport(ibdev, port);
4631 ret = check_mkey(ibp, (struct ib_mad_hdr *)smp, mad_flags,
4829 struct hfi1_ibport *ibp = to_iport(ibdev, port);
4831 pkey_idx = hfi1_lookup_pkey_idx(ibp, LIM_MGMT_P_KEY);
4834 hfi1_get_pkey(ibp, 1));
4842 local_mad = is_local_mad(ibp, in_mad, in_wc);
4844 ret = opa_local_smp_check(ibp, in_wc);
4852 ret = hfi1_pkey_validation_pma(ibp, in_mad, in_wc);