Lines Matching refs:ibp

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