Lines Matching refs:ibp
59 static u16 hfi1_lookup_pkey_value(struct hfi1_ibport *ibp, int pkey_idx)
61 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
83 static void cleanup_traps(struct hfi1_ibport *ibp, struct trap_node *trap)
91 spin_lock_irqsave(&ibp->rvp.lock, flags);
92 list_replace_init(&ibp->rvp.trap_lists[i].list, &trap_list);
93 ibp->rvp.trap_lists[i].list_len = 0;
94 spin_unlock_irqrestore(&ibp->rvp.lock, flags);
114 static struct trap_node *check_and_add_trap(struct hfi1_ibport *ibp,
138 spin_lock_irqsave(&ibp->rvp.lock, flags);
139 trap_list = &ibp->rvp.trap_lists[queue_id];
166 if (!timer_pending(&ibp->rvp.trap_timer)) {
174 (1UL << ibp->rvp.subnet_timeout)) / 1000;
175 mod_timer(&ibp->rvp.trap_timer,
181 spin_unlock_irqrestore(&ibp->rvp.lock, flags);
186 static void subn_handle_opa_trap_repress(struct hfi1_ibport *ibp,
197 spin_lock_irqsave(&ibp->rvp.lock, flags);
199 trap_list = &ibp->rvp.trap_lists[i];
213 spin_unlock_irqrestore(&ibp->rvp.lock, flags);
216 static void hfi1_update_sm_ah_attr(struct hfi1_ibport *ibp,
220 rdma_ah_set_port_num(attr, ppd_from_ibp(ibp)->port);
228 ibp->rvp.gid_prefix;
233 static int hfi1_modify_qp0_ah(struct hfi1_ibport *ibp,
242 hfi1_update_sm_ah_attr(ibp, &attr, dlid);
244 qp0 = rcu_dereference(ibp->rvp.qp[0]);
251 static struct ib_ah *hfi1_create_qp0_ah(struct hfi1_ibport *ibp, u32 dlid)
256 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
262 hfi1_update_sm_ah_attr(ibp, &attr, dlid);
264 qp0 = rcu_dereference(ibp->rvp.qp[0]);
271 static void send_trap(struct hfi1_ibport *ibp, struct trap_node *trap)
278 u32 qpn = ppd_from_ibp(ibp)->sm_trap_qp;
280 agent = ibp->rvp.send_agent;
282 cleanup_traps(ibp, trap);
287 if (driver_lstate(ppd_from_ibp(ibp)) != IB_PORT_ACTIVE) {
288 cleanup_traps(ibp, trap);
293 trap = check_and_add_trap(ibp, trap);
297 pkey_idx = hfi1_lookup_pkey_idx(ibp, LIM_MGMT_P_KEY);
300 __func__, hfi1_get_pkey(ibp, 1));
318 ibp->rvp.tid++;
320 if (ibp->rvp.tid == 0)
321 ibp->rvp.tid++;
322 trap->tid = cpu_to_be64(ibp->rvp.tid);
331 spin_lock_irqsave(&ibp->rvp.lock, flags);
332 if (!ibp->rvp.sm_ah) {
333 if (ibp->rvp.sm_lid != be16_to_cpu(IB_LID_PERMISSIVE)) {
336 ah = hfi1_create_qp0_ah(ibp, ibp->rvp.sm_lid);
338 spin_unlock_irqrestore(&ibp->rvp.lock, flags);
342 ibp->rvp.sm_ah = ibah_to_rvtah(ah);
344 spin_unlock_irqrestore(&ibp->rvp.lock, flags);
348 send_buf->ah = &ibp->rvp.sm_ah->ibah;
357 spin_unlock_irqrestore(&ibp->rvp.lock, flags);
364 spin_unlock_irqrestore(&ibp->rvp.lock, flags);
372 struct hfi1_ibport *ibp = from_timer(ibp, t, rvp.trap_timer);
378 spin_lock_irqsave(&ibp->rvp.lock, flags);
380 trap = list_first_entry_or_null(&ibp->rvp.trap_lists[i].list,
383 spin_unlock_irqrestore(&ibp->rvp.lock, flags);
386 send_trap(ibp, trap);
409 void hfi1_bad_pkey(struct hfi1_ibport *ibp, u32 key, u32 sl,
413 u32 lid = ppd_from_ibp(ibp)->lid;
415 ibp->rvp.n_pkt_drops++;
416 ibp->rvp.pkey_violations++;
432 send_trap(ibp, trap);
438 static void bad_mkey(struct hfi1_ibport *ibp, struct ib_mad_hdr *mad,
442 u32 lid = ppd_from_ibp(ibp)->lid;
470 send_trap(ibp, trap);
481 struct hfi1_ibport *ibp = &dd->pport[port_num - 1].ibport_data;
482 u32 lid = ppd_from_ibp(ibp)->lid;
491 trap->data.ntc_144.new_cap_mask = cpu_to_be32(ibp->rvp.port_cap_flags);
492 trap->data.ntc_144.cap_mask3 = cpu_to_be16(ibp->rvp.port_cap3_flags);
495 send_trap(ibp, trap);
501 void hfi1_sys_guid_chg(struct hfi1_ibport *ibp)
504 u32 lid = ppd_from_ibp(ibp)->lid;
515 send_trap(ibp, trap);
521 void hfi1_node_desc_chg(struct hfi1_ibport *ibp)
524 u32 lid = ppd_from_ibp(ibp)->lid;
537 send_trap(ibp, trap);
650 static int check_mkey(struct hfi1_ibport *ibp, struct ib_mad_hdr *mad,
658 if (ibp->rvp.mkey_lease_timeout &&
659 time_after_eq(jiffies, ibp->rvp.mkey_lease_timeout)) {
661 ibp->rvp.mkey_lease_timeout = 0;
662 ibp->rvp.mkeyprot = 0;
665 if ((mad_flags & IB_MAD_IGNORE_MKEY) || ibp->rvp.mkey == 0 ||
666 ibp->rvp.mkey == mkey)
670 if (valid_mkey && ibp->rvp.mkey_lease_timeout &&
674 ibp->rvp.mkey_lease_timeout = 0;
680 if (ibp->rvp.mkeyprot < 2)
685 if (ibp->rvp.mkey_violations != 0xFFFF)
686 ++ibp->rvp.mkey_violations;
687 if (!ibp->rvp.mkey_lease_timeout &&
688 ibp->rvp.mkey_lease_period)
689 ibp->rvp.mkey_lease_timeout = jiffies +
690 ibp->rvp.mkey_lease_period * HZ;
692 bad_mkey(ibp, mad, mkey, dr_slid, return_path,
761 struct hfi1_ibport *ibp;
780 ibp = &ppd->ibport_data;
792 ibp->rvp.mkey != smp->mkey &&
793 ibp->rvp.mkeyprot == 1))
794 pi->mkey = ibp->rvp.mkey;
796 pi->subnet_prefix = ibp->rvp.gid_prefix;
797 pi->sm_lid = cpu_to_be32(ibp->rvp.sm_lid);
798 pi->ib_cap_mask = cpu_to_be32(ibp->rvp.port_cap_flags);
799 pi->mkey_lease_period = cpu_to_be16(ibp->rvp.mkey_lease_period);
844 pi->mkeyprotect_lmc = (ibp->rvp.mkeyprot << 6) | ppd->lmc;
857 pi->smsl = ibp->rvp.sm_sl & OPA_PI_MASK_SMSL;
865 pi->mkey_violations = cpu_to_be16(ibp->rvp.mkey_violations);
867 pi->pkey_violations = cpu_to_be16(ibp->rvp.pkey_violations);
868 pi->qkey_violations = cpu_to_be16(ibp->rvp.qkey_violations);
871 pi->vl.high_limit = cpu_to_be16(ibp->rvp.vl_high_limit);
875 pi->clientrereg_subnettimeout = ibp->rvp.subnet_timeout;
941 pi->opa_cap_mask = cpu_to_be16(ibp->rvp.port_cap3_flags);
1317 struct hfi1_ibport *ibp;
1359 ibp = &ppd->ibport_data;
1365 ibp->rvp.mkey = pi->mkey;
1366 if (ibp->rvp.gid_prefix != pi->subnet_prefix) {
1367 ibp->rvp.gid_prefix = pi->subnet_prefix;
1371 ibp->rvp.mkey_lease_period = be16_to_cpu(pi->mkey_lease_period);
1411 } else if (smlid != ibp->rvp.sm_lid || msl != ibp->rvp.sm_sl) {
1413 spin_lock_irqsave(&ibp->rvp.lock, flags);
1414 if (ibp->rvp.sm_ah) {
1415 if (smlid != ibp->rvp.sm_lid)
1416 hfi1_modify_qp0_ah(ibp, ibp->rvp.sm_ah, smlid);
1417 if (msl != ibp->rvp.sm_sl)
1418 rdma_ah_set_sl(&ibp->rvp.sm_ah->attr, msl);
1420 spin_unlock_irqrestore(&ibp->rvp.lock, flags);
1421 if (smlid != ibp->rvp.sm_lid)
1422 ibp->rvp.sm_lid = smlid;
1423 if (msl != ibp->rvp.sm_sl)
1424 ibp->rvp.sm_sl = msl;
1478 ibp->rvp.mkeyprot =
1480 ibp->rvp.vl_high_limit = be16_to_cpu(pi->vl.high_limit) & 0xFF;
1482 ibp->rvp.vl_high_limit);
1542 ibp->rvp.mkey_violations = 0;
1545 ibp->rvp.pkey_violations = 0;
1548 ibp->rvp.qkey_violations = 0;
1550 ibp->rvp.subnet_timeout =
1789 struct hfi1_ibport *ibp = to_iport(ibdev, port);
1791 size_t size = ARRAY_SIZE(ibp->sl_to_sc); /* == 32 */
1799 for (i = 0; i < ARRAY_SIZE(ibp->sl_to_sc); i++)
1800 *p++ = ibp->sl_to_sc[i];
1812 struct hfi1_ibport *ibp = to_iport(ibdev, port);
1814 size_t size = ARRAY_SIZE(ibp->sl_to_sc);
1823 for (i = 0; i < ARRAY_SIZE(ibp->sl_to_sc); i++) {
1825 if (ibp->sl_to_sc[i] != sc) {
1826 ibp->sl_to_sc[i] = sc;
1829 hfi1_error_port_qps(ibp, i);
1841 struct hfi1_ibport *ibp = to_iport(ibdev, port);
1843 size_t size = ARRAY_SIZE(ibp->sc_to_sl); /* == 32 */
1851 for (i = 0; i < ARRAY_SIZE(ibp->sc_to_sl); i++)
1852 *p++ = ibp->sc_to_sl[i];
1864 struct hfi1_ibport *ibp = to_iport(ibdev, port);
1865 size_t size = ARRAY_SIZE(ibp->sc_to_sl);
1874 for (i = 0; i < ARRAY_SIZE(ibp->sc_to_sl); i++)
1875 ibp->sc_to_sl[i] = *p++;
2009 struct hfi1_ibport *ibp;
2018 ibp = to_iport(ibdev, port);
2019 ppd = ppd_from_ibp(ibp);
2052 struct hfi1_ibport *ibp;
2062 ibp = to_iport(ibdev, port);
2063 ppd = ppd_from_ibp(ibp);
2696 struct hfi1_ibport *ibp = to_iport(ibdev, port);
2697 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
2853 struct hfi1_ibport *ibp = to_iport(ibdev, port);
2854 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
2939 struct hfi1_ibport *ibp = to_iport(ibdev, port);
2940 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
3116 struct hfi1_ibport *ibp = to_iport(ibdev, port);
3117 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
3165 struct hfi1_ibport *ibp;
3206 ibp = to_iport(ibdev, port_num);
3207 ppd = ppd_from_ibp(ibp);
3434 struct hfi1_ibport *ibp = to_iport(ibdev, port);
3435 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
3668 struct hfi1_ibport *ibp = to_iport(ibdev, port);
3669 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
3693 struct hfi1_ibport *ibp = to_iport(ibdev, port);
3694 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
3785 struct hfi1_ibport *ibp = to_iport(ibdev, port);
3786 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
3823 struct hfi1_ibport *ibp = to_iport(ibdev, port);
3824 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
3891 struct hfi1_ibport *ibp = to_iport(ibdev, port);
3892 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
3942 struct hfi1_ibport *ibp = to_iport(ibdev, port);
3943 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
4054 struct hfi1_ibport *ibp = to_iport(ibdev, port);
4126 if (ibp->rvp.port_cap_flags & IB_PORT_SM_DISABLED)
4128 if (ibp->rvp.port_cap_flags & IB_PORT_SM)
4144 struct hfi1_ibport *ibp = to_iport(ibdev, port);
4196 if (ibp->rvp.port_cap_flags & IB_PORT_SM_DISABLED)
4198 if (ibp->rvp.port_cap_flags & IB_PORT_SM)
4337 static int is_full_mgmt_pkey_in_table(struct hfi1_ibport *ibp)
4340 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
4353 static int is_local_mad(struct hfi1_ibport *ibp, const struct opa_mad *mad,
4356 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
4378 static int opa_local_smp_check(struct hfi1_ibport *ibp,
4381 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
4414 * @ibp: IB port data
4449 static int hfi1_pkey_validation_pma(struct hfi1_ibport *ibp,
4453 u16 pkey_value = hfi1_lookup_pkey_value(ibp, in_wc->pkey_index);
4456 if (!is_local_mad(ibp, in_mad, in_wc) &&
4463 is_full_mgmt_pkey_in_table(ibp))
4475 struct hfi1_ibport *ibp = to_iport(ibdev, port);
4492 ret = check_mkey(ibp, (struct ib_mad_hdr *)smp, mad_flags, smp->mkey,
4561 subn_handle_opa_trap_repress(ibp, smp);
4579 struct hfi1_ibport *ibp = to_iport(ibdev, port);
4589 ret = check_mkey(ibp, (struct ib_mad_hdr *)smp, mad_flags,
4787 struct hfi1_ibport *ibp = to_iport(ibdev, port);
4789 pkey_idx = hfi1_lookup_pkey_idx(ibp, LIM_MGMT_P_KEY);
4792 hfi1_get_pkey(ibp, 1));
4800 local_mad = is_local_mad(ibp, in_mad, in_wc);
4802 ret = opa_local_smp_check(ibp, in_wc);
4810 ret = hfi1_pkey_validation_pma(ibp, in_mad, in_wc);