Lines Matching refs:ibdev
82 static void do_slave_init(struct mlx4_ib_dev *ibdev, int slave, int do_init);
129 struct mlx4_ib_dev *ibdev = to_mdev(device); in mlx4_ib_get_netdev() local
134 if (dev->dev.parent != ibdev->ib_dev.dev.parent || in mlx4_ib_get_netdev()
138 if (mlx4_is_bonded(ibdev->dev)) { in mlx4_ib_get_netdev()
161 struct mlx4_ib_dev *ibdev, in mlx4_ib_update_gids_v1() argument
166 struct mlx4_dev *dev = ibdev->dev; in mlx4_ib_update_gids_v1()
194 struct mlx4_ib_dev *ibdev, in mlx4_ib_update_gids_v1_v2() argument
199 struct mlx4_dev *dev = ibdev->dev; in mlx4_ib_update_gids_v1_v2()
239 struct mlx4_ib_dev *ibdev, in mlx4_ib_update_gids() argument
242 if (ibdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_ROCE_V1_V2) in mlx4_ib_update_gids()
243 return mlx4_ib_update_gids_v1_v2(gids, ibdev, port_num); in mlx4_ib_update_gids()
245 return mlx4_ib_update_gids_v1(gids, ibdev, port_num); in mlx4_ib_update_gids()
257 struct mlx4_ib_dev *ibdev = to_mdev(attr->device); in mlx4_ib_add_gid() local
258 struct mlx4_ib_iboe *iboe = &ibdev->iboe; in mlx4_ib_add_gid()
333 ret = mlx4_ib_update_gids(gids, ibdev, attr->port_num); in mlx4_ib_add_gid()
349 struct mlx4_ib_dev *ibdev = to_mdev(attr->device); in mlx4_ib_del_gid() local
350 struct mlx4_ib_iboe *iboe = &ibdev->iboe; in mlx4_ib_del_gid()
393 ret = mlx4_ib_update_gids(gids, ibdev, attr->port_num); in mlx4_ib_del_gid()
399 int mlx4_ib_gid_index_to_real_index(struct mlx4_ib_dev *ibdev, in mlx4_ib_gid_index_to_real_index() argument
402 struct mlx4_ib_iboe *iboe = &ibdev->iboe; in mlx4_ib_gid_index_to_real_index()
413 if (mlx4_is_bonded(ibdev->dev)) in mlx4_ib_gid_index_to_real_index()
416 if (!rdma_cap_roce_gid_table(&ibdev->ib_dev, port_num)) in mlx4_ib_gid_index_to_real_index()
435 static int mlx4_ib_query_device(struct ib_device *ibdev, in mlx4_ib_query_device() argument
439 struct mlx4_ib_dev *dev = to_mdev(ibdev); in mlx4_ib_query_device()
474 err = mlx4_MAD_IFC(to_mdev(ibdev), MLX4_MAD_IFC_IGNORE_KEYS, in mlx4_ib_query_device()
563 if (mlx4_ib_port_link_layer(ibdev, 1) == IB_LINK_LAYER_ETHERNET || in mlx4_ib_query_device()
564 mlx4_ib_port_link_layer(ibdev, 2) == IB_LINK_LAYER_ETHERNET) { in mlx4_ib_query_device()
622 ((mlx4_ib_port_link_layer(ibdev, 1) == in mlx4_ib_query_device()
624 (mlx4_ib_port_link_layer(ibdev, 2) == in mlx4_ib_query_device()
655 static int ib_link_query_port(struct ib_device *ibdev, u32 port, in ib_link_query_port() argument
673 if (mlx4_is_mfunc(to_mdev(ibdev)->dev) && netw_view) in ib_link_query_port()
676 err = mlx4_MAD_IFC(to_mdev(ibdev), mad_ifc_flags, port, NULL, NULL, in ib_link_query_port()
692 props->gid_tbl_len = to_mdev(ibdev)->dev->caps.gid_table_len[port]; in ib_link_query_port()
693 props->max_msg_sz = to_mdev(ibdev)->dev->caps.max_msg_sz; in ib_link_query_port()
694 props->pkey_tbl_len = to_mdev(ibdev)->dev->caps.pkey_table_len[port]; in ib_link_query_port()
725 err = mlx4_MAD_IFC(to_mdev(ibdev), mad_ifc_flags, port, in ib_link_query_port()
751 static int eth_link_query_port(struct ib_device *ibdev, u32 port, in eth_link_query_port() argument
755 struct mlx4_ib_dev *mdev = to_mdev(ibdev); in eth_link_query_port()
812 int __mlx4_ib_query_port(struct ib_device *ibdev, u32 port, in __mlx4_ib_query_port() argument
819 err = mlx4_ib_port_link_layer(ibdev, port) == IB_LINK_LAYER_INFINIBAND ? in __mlx4_ib_query_port()
820 ib_link_query_port(ibdev, port, props, netw_view) : in __mlx4_ib_query_port()
821 eth_link_query_port(ibdev, port, props); in __mlx4_ib_query_port()
826 static int mlx4_ib_query_port(struct ib_device *ibdev, u32 port, in mlx4_ib_query_port() argument
830 return __mlx4_ib_query_port(ibdev, port, props, 0); in mlx4_ib_query_port()
833 int __mlx4_ib_query_gid(struct ib_device *ibdev, u32 port, int index, in __mlx4_ib_query_gid() argument
839 struct mlx4_ib_dev *dev = to_mdev(ibdev); in __mlx4_ib_query_gid()
889 static int mlx4_ib_query_gid(struct ib_device *ibdev, u32 port, int index, in mlx4_ib_query_gid() argument
892 if (rdma_protocol_ib(ibdev, port)) in mlx4_ib_query_gid()
893 return __mlx4_ib_query_gid(ibdev, port, index, gid, 0); in mlx4_ib_query_gid()
897 static int mlx4_ib_query_sl2vl(struct ib_device *ibdev, u32 port, in mlx4_ib_query_sl2vl() argument
907 if (mlx4_is_slave(to_mdev(ibdev)->dev)) { in mlx4_ib_query_sl2vl()
921 if (mlx4_is_mfunc(to_mdev(ibdev)->dev)) in mlx4_ib_query_sl2vl()
924 err = mlx4_MAD_IFC(to_mdev(ibdev), mad_ifc_flags, port, NULL, NULL, in mlx4_ib_query_sl2vl()
958 int __mlx4_ib_query_pkey(struct ib_device *ibdev, u32 port, u16 index, in __mlx4_ib_query_pkey() argument
975 if (mlx4_is_mfunc(to_mdev(ibdev)->dev) && netw_view) in __mlx4_ib_query_pkey()
978 err = mlx4_MAD_IFC(to_mdev(ibdev), mad_ifc_flags, port, NULL, NULL, in __mlx4_ib_query_pkey()
991 static int mlx4_ib_query_pkey(struct ib_device *ibdev, u32 port, u16 index, in mlx4_ib_query_pkey() argument
994 return __mlx4_ib_query_pkey(ibdev, port, index, pkey, 0); in mlx4_ib_query_pkey()
997 static int mlx4_ib_modify_device(struct ib_device *ibdev, int mask, in mlx4_ib_modify_device() argument
1009 if (mlx4_is_slave(to_mdev(ibdev)->dev)) in mlx4_ib_modify_device()
1012 spin_lock_irqsave(&to_mdev(ibdev)->sm_lock, flags); in mlx4_ib_modify_device()
1013 memcpy(ibdev->node_desc, props->node_desc, IB_DEVICE_NODE_DESC_MAX); in mlx4_ib_modify_device()
1014 spin_unlock_irqrestore(&to_mdev(ibdev)->sm_lock, flags); in mlx4_ib_modify_device()
1020 mailbox = mlx4_alloc_cmd_mailbox(to_mdev(ibdev)->dev); in mlx4_ib_modify_device()
1025 mlx4_cmd(to_mdev(ibdev)->dev, mailbox->dma, 1, 0, in mlx4_ib_modify_device()
1028 mlx4_free_cmd_mailbox(to_mdev(ibdev)->dev, mailbox); in mlx4_ib_modify_device()
1059 static int mlx4_ib_modify_port(struct ib_device *ibdev, u32 port, int mask, in mlx4_ib_modify_port() argument
1062 struct mlx4_ib_dev *mdev = to_mdev(ibdev); in mlx4_ib_modify_port()
1077 err = ib_query_port(ibdev, port, &attr); in mlx4_ib_modify_port()
1089 mutex_unlock(&to_mdev(ibdev)->cap_mask_mutex); in mlx4_ib_modify_port()
1096 struct ib_device *ibdev = uctx->device; in mlx4_ib_alloc_ucontext() local
1097 struct mlx4_ib_dev *dev = to_mdev(ibdev); in mlx4_ib_alloc_ucontext()
1106 if (ibdev->ops.uverbs_abi_ver == in mlx4_ib_alloc_ucontext()
1119 err = mlx4_uar_alloc(to_mdev(ibdev)->dev, &context->uar); in mlx4_ib_alloc_ucontext()
1129 if (ibdev->ops.uverbs_abi_ver == MLX4_IB_UVERBS_NO_DEV_CAPS_ABI_VERSION) in mlx4_ib_alloc_ucontext()
1135 mlx4_uar_free(to_mdev(ibdev)->dev, &context->uar); in mlx4_ib_alloc_ucontext()
1201 struct ib_device *ibdev = ibpd->device; in mlx4_ib_alloc_pd() local
1204 err = mlx4_pd_alloc(to_mdev(ibdev)->dev, &pd->pdn); in mlx4_ib_alloc_pd()
1209 mlx4_pd_free(to_mdev(ibdev)->dev, pd->pdn); in mlx4_ib_alloc_pd()
1288 static void mlx4_ib_delete_counters_table(struct mlx4_ib_dev *ibdev, in mlx4_ib_delete_counters_table() argument
1297 mlx4_counter_free(ibdev->dev, counter->index); in mlx4_ib_delete_counters_table()
2097 mlx4_ib_alloc_hw_device_stats(struct ib_device *ibdev) in mlx4_ib_alloc_hw_device_stats() argument
2099 struct mlx4_ib_dev *dev = to_mdev(ibdev); in mlx4_ib_alloc_hw_device_stats()
2110 mlx4_ib_alloc_hw_port_stats(struct ib_device *ibdev, u32 port_num) in mlx4_ib_alloc_hw_port_stats() argument
2112 struct mlx4_ib_dev *dev = to_mdev(ibdev); in mlx4_ib_alloc_hw_port_stats()
2122 static int mlx4_ib_get_hw_stats(struct ib_device *ibdev, in mlx4_ib_get_hw_stats() argument
2126 struct mlx4_ib_dev *dev = to_mdev(ibdev); in mlx4_ib_get_hw_stats()
2147 static int __mlx4_ib_alloc_diag_counters(struct mlx4_ib_dev *ibdev, in __mlx4_ib_alloc_diag_counters() argument
2155 if (ibdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_DIAG_PER_PORT) in __mlx4_ib_alloc_diag_counters()
2179 static void mlx4_ib_fill_diag_counters(struct mlx4_ib_dev *ibdev, in mlx4_ib_fill_diag_counters() argument
2191 if (ibdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_DIAG_PER_PORT) { in mlx4_ib_fill_diag_counters()
2217 static int mlx4_ib_alloc_diag_counters(struct mlx4_ib_dev *ibdev) in mlx4_ib_alloc_diag_counters() argument
2219 struct mlx4_ib_diag_counters *diag = ibdev->diag_counters; in mlx4_ib_alloc_diag_counters()
2222 bool per_port = !!(ibdev->dev->caps.flags2 & in mlx4_ib_alloc_diag_counters()
2225 if (mlx4_is_slave(ibdev->dev)) in mlx4_ib_alloc_diag_counters()
2234 ib_set_device_ops(&ibdev->ib_dev, in mlx4_ib_alloc_diag_counters()
2240 ret = __mlx4_ib_alloc_diag_counters(ibdev, &diag[i].descs, in mlx4_ib_alloc_diag_counters()
2246 mlx4_ib_fill_diag_counters(ibdev, diag[i].descs, in mlx4_ib_alloc_diag_counters()
2250 ib_set_device_ops(&ibdev->ib_dev, &mlx4_ib_hw_stats_ops); in mlx4_ib_alloc_diag_counters()
2263 static void mlx4_ib_diag_cleanup(struct mlx4_ib_dev *ibdev) in mlx4_ib_diag_cleanup() argument
2268 kfree(ibdev->diag_counters[i].offset); in mlx4_ib_diag_cleanup()
2269 kfree(ibdev->diag_counters[i].descs); in mlx4_ib_diag_cleanup()
2274 static void mlx4_ib_update_qps(struct mlx4_ib_dev *ibdev, in mlx4_ib_update_qps() argument
2283 atomic64_set(&ibdev->iboe.mac[port - 1], new_smac); in mlx4_ib_update_qps()
2286 if (!mlx4_is_mfunc(ibdev->dev)) in mlx4_ib_update_qps()
2289 mutex_lock(&ibdev->qp1_proxy_lock[port - 1]); in mlx4_ib_update_qps()
2290 qp = ibdev->qp1_proxy[port - 1]; in mlx4_ib_update_qps()
2301 new_smac_index = mlx4_register_mac(ibdev->dev, port, new_smac); in mlx4_ib_update_qps()
2307 if (mlx4_update_qp(ibdev->dev, qp->mqp.qpn, MLX4_UPDATE_QP_SMAC, in mlx4_ib_update_qps()
2322 mlx4_unregister_mac(ibdev->dev, port, release_mac); in mlx4_ib_update_qps()
2325 mutex_unlock(&ibdev->qp1_proxy_lock[port - 1]); in mlx4_ib_update_qps()
2328 static void mlx4_ib_scan_netdev(struct mlx4_ib_dev *ibdev, in mlx4_ib_scan_netdev() argument
2333 struct mlx4_ib_iboe *iboe = &ibdev->iboe; in mlx4_ib_scan_netdev()
2337 if (dev->dev.parent != ibdev->ib_dev.dev.parent) in mlx4_ib_scan_netdev()
2347 mlx4_ib_update_qps(ibdev, dev, dev->dev_port + 1); in mlx4_ib_scan_netdev()
2350 static void mlx4_ib_port_event(struct ib_device *ibdev, struct net_device *ndev, in mlx4_ib_port_event() argument
2354 container_of(ibdev, struct mlx4_ib_dev, ib_dev); in mlx4_ib_port_event()
2382 struct mlx4_ib_dev *ibdev; in mlx4_ib_netdev_event() local
2387 ibdev = container_of(this, struct mlx4_ib_dev, iboe.nb); in mlx4_ib_netdev_event()
2388 mlx4_ib_scan_netdev(ibdev, dev, event); in mlx4_ib_netdev_event()
2393 static void init_pkeys(struct mlx4_ib_dev *ibdev) in init_pkeys() argument
2399 if (mlx4_is_master(ibdev->dev)) { in init_pkeys()
2400 for (slave = 0; slave <= ibdev->dev->persist->num_vfs; in init_pkeys()
2402 for (port = 1; port <= ibdev->dev->caps.num_ports; ++port) { in init_pkeys()
2404 i < ibdev->dev->phys_caps.pkey_phys_table_len[port]; in init_pkeys()
2406 ibdev->pkeys.virt2phys_pkey[slave][port - 1][i] = in init_pkeys()
2408 (slave == mlx4_master_func_num(ibdev->dev) || !i) ? i : in init_pkeys()
2409 ibdev->dev->phys_caps.pkey_phys_table_len[port] - 1; in init_pkeys()
2410 mlx4_sync_pkey_table(ibdev->dev, slave, port, i, in init_pkeys()
2411 ibdev->pkeys.virt2phys_pkey[slave][port - 1][i]); in init_pkeys()
2416 for (port = 1; port <= ibdev->dev->caps.num_ports; ++port) { in init_pkeys()
2418 i < ibdev->dev->phys_caps.pkey_phys_table_len[port]; in init_pkeys()
2420 ibdev->pkeys.phys_pkey_cache[port-1][i] = in init_pkeys()
2426 static void mlx4_ib_alloc_eqs(struct mlx4_dev *dev, struct mlx4_ib_dev *ibdev) in mlx4_ib_alloc_eqs() argument
2430 ibdev->eq_table = kcalloc(dev->caps.num_comp_vectors, in mlx4_ib_alloc_eqs()
2431 sizeof(ibdev->eq_table[0]), GFP_KERNEL); in mlx4_ib_alloc_eqs()
2432 if (!ibdev->eq_table) in mlx4_ib_alloc_eqs()
2440 ibdev->eq_table[eq] = total_eqs; in mlx4_ib_alloc_eqs()
2442 &ibdev->eq_table[eq])) in mlx4_ib_alloc_eqs()
2445 ibdev->eq_table[eq] = -1; in mlx4_ib_alloc_eqs()
2450 ibdev->eq_table[i++] = -1) in mlx4_ib_alloc_eqs()
2454 ibdev->ib_dev.num_comp_vectors = eq; in mlx4_ib_alloc_eqs()
2457 static void mlx4_ib_free_eqs(struct mlx4_dev *dev, struct mlx4_ib_dev *ibdev) in mlx4_ib_free_eqs() argument
2460 int total_eqs = ibdev->ib_dev.num_comp_vectors; in mlx4_ib_free_eqs()
2463 if (!ibdev->eq_table) in mlx4_ib_free_eqs()
2467 ibdev->ib_dev.num_comp_vectors = 0; in mlx4_ib_free_eqs()
2470 mlx4_release_eq(dev, ibdev->eq_table[i]); in mlx4_ib_free_eqs()
2472 kfree(ibdev->eq_table); in mlx4_ib_free_eqs()
2473 ibdev->eq_table = NULL; in mlx4_ib_free_eqs()
2476 static int mlx4_port_immutable(struct ib_device *ibdev, u32 port_num, in mlx4_port_immutable() argument
2480 struct mlx4_ib_dev *mdev = to_mdev(ibdev); in mlx4_port_immutable()
2483 if (mlx4_ib_port_link_layer(ibdev, port_num) == IB_LINK_LAYER_INFINIBAND) { in mlx4_port_immutable()
2498 err = ib_query_port(ibdev, port_num, &attr); in mlx4_port_immutable()
2618 struct mlx4_ib_dev *ibdev; in mlx4_ib_probe() local
2639 ibdev = ib_alloc_device(mlx4_ib_dev, ib_dev); in mlx4_ib_probe()
2640 if (!ibdev) { in mlx4_ib_probe()
2646 iboe = &ibdev->iboe; in mlx4_ib_probe()
2648 err = mlx4_pd_alloc(dev, &ibdev->priv_pdn); in mlx4_ib_probe()
2652 err = mlx4_uar_alloc(dev, &ibdev->priv_uar); in mlx4_ib_probe()
2656 ibdev->uar_map = ioremap((phys_addr_t) ibdev->priv_uar.pfn << PAGE_SHIFT, in mlx4_ib_probe()
2658 if (!ibdev->uar_map) { in mlx4_ib_probe()
2662 MLX4_INIT_DOORBELL_LOCK(&ibdev->uar_lock); in mlx4_ib_probe()
2664 ibdev->dev = dev; in mlx4_ib_probe()
2665 ibdev->bond_next_port = 0; in mlx4_ib_probe()
2667 ibdev->ib_dev.node_type = RDMA_NODE_IB_CA; in mlx4_ib_probe()
2668 ibdev->ib_dev.local_dma_lkey = dev->caps.reserved_lkey; in mlx4_ib_probe()
2669 ibdev->num_ports = num_ports; in mlx4_ib_probe()
2670 ibdev->ib_dev.phys_port_cnt = mlx4_is_bonded(dev) ? in mlx4_ib_probe()
2671 1 : ibdev->num_ports; in mlx4_ib_probe()
2672 ibdev->ib_dev.num_comp_vectors = dev->caps.num_comp_vectors; in mlx4_ib_probe()
2673 ibdev->ib_dev.dev.parent = &dev->persist->pdev->dev; in mlx4_ib_probe()
2675 ib_set_device_ops(&ibdev->ib_dev, &mlx4_ib_dev_ops); in mlx4_ib_probe()
2678 ((mlx4_ib_port_link_layer(&ibdev->ib_dev, 1) == in mlx4_ib_probe()
2680 (mlx4_ib_port_link_layer(&ibdev->ib_dev, 2) == in mlx4_ib_probe()
2682 ib_set_device_ops(&ibdev->ib_dev, &mlx4_ib_dev_wq_ops); in mlx4_ib_probe()
2686 ib_set_device_ops(&ibdev->ib_dev, &mlx4_ib_dev_mw_ops); in mlx4_ib_probe()
2689 ib_set_device_ops(&ibdev->ib_dev, &mlx4_ib_dev_xrc_ops); in mlx4_ib_probe()
2693 ibdev->steering_support = MLX4_STEERING_MODE_DEVICE_MANAGED; in mlx4_ib_probe()
2694 ib_set_device_ops(&ibdev->ib_dev, &mlx4_ib_dev_fs_ops); in mlx4_ib_probe()
2698 ibdev->ib_dev.ops.uverbs_abi_ver = in mlx4_ib_probe()
2701 mlx4_ib_alloc_eqs(dev, ibdev); in mlx4_ib_probe()
2705 err = init_node_data(ibdev); in mlx4_ib_probe()
2708 mlx4_init_sl2vl_tbl(ibdev); in mlx4_ib_probe()
2710 for (i = 0; i < ibdev->num_ports; ++i) { in mlx4_ib_probe()
2711 mutex_init(&ibdev->counters_table[i].mutex); in mlx4_ib_probe()
2712 INIT_LIST_HEAD(&ibdev->counters_table[i].counters_list); in mlx4_ib_probe()
2716 num_req_counters = mlx4_is_bonded(dev) ? 1 : ibdev->num_ports; in mlx4_ib_probe()
2718 mutex_init(&ibdev->qp1_proxy_lock[i]); in mlx4_ib_probe()
2720 if (mlx4_ib_port_link_layer(&ibdev->ib_dev, i + 1) == in mlx4_ib_probe()
2722 err = mlx4_counter_alloc(ibdev->dev, &counter_index, in mlx4_ib_probe()
2740 mlx4_counter_free(ibdev->dev, counter_index); in mlx4_ib_probe()
2746 &ibdev->counters_table[i].counters_list); in mlx4_ib_probe()
2747 ibdev->counters_table[i].default_counter = counter_index; in mlx4_ib_probe()
2752 for (i = 1; i < ibdev->num_ports ; ++i) { in mlx4_ib_probe()
2763 &ibdev->counters_table[i].counters_list); in mlx4_ib_probe()
2764 ibdev->counters_table[i].default_counter = in mlx4_ib_probe()
2771 spin_lock_init(&ibdev->sm_lock); in mlx4_ib_probe()
2772 mutex_init(&ibdev->cap_mask_mutex); in mlx4_ib_probe()
2773 INIT_LIST_HEAD(&ibdev->qp_list); in mlx4_ib_probe()
2774 spin_lock_init(&ibdev->reset_flow_resource_lock); in mlx4_ib_probe()
2776 if (ibdev->steering_support == MLX4_STEERING_MODE_DEVICE_MANAGED && in mlx4_ib_probe()
2778 ibdev->steer_qpn_count = MLX4_IB_UC_MAX_NUM_QPS; in mlx4_ib_probe()
2779 err = mlx4_qp_reserve_range(dev, ibdev->steer_qpn_count, in mlx4_ib_probe()
2781 &ibdev->steer_qpn_base, 0, in mlx4_ib_probe()
2786 ibdev->ib_uc_qpns_bitmap = bitmap_alloc(ibdev->steer_qpn_count, in mlx4_ib_probe()
2788 if (!ibdev->ib_uc_qpns_bitmap) { in mlx4_ib_probe()
2794 bitmap_zero(ibdev->ib_uc_qpns_bitmap, in mlx4_ib_probe()
2795 ibdev->steer_qpn_count); in mlx4_ib_probe()
2797 dev, ibdev->steer_qpn_base, in mlx4_ib_probe()
2798 ibdev->steer_qpn_base + in mlx4_ib_probe()
2799 ibdev->steer_qpn_count - 1); in mlx4_ib_probe()
2803 bitmap_fill(ibdev->ib_uc_qpns_bitmap, in mlx4_ib_probe()
2804 ibdev->steer_qpn_count); in mlx4_ib_probe()
2808 for (j = 1; j <= ibdev->dev->caps.num_ports; j++) in mlx4_ib_probe()
2809 atomic64_set(&iboe->mac[j - 1], ibdev->dev->caps.def_mac[j]); in mlx4_ib_probe()
2811 err = mlx4_ib_alloc_diag_counters(ibdev); in mlx4_ib_probe()
2815 err = ib_register_device(&ibdev->ib_dev, "mlx4_%d", in mlx4_ib_probe()
2820 err = mlx4_ib_mad_init(ibdev); in mlx4_ib_probe()
2824 err = mlx4_ib_init_sriov(ibdev); in mlx4_ib_probe()
2842 ibdev->ib_active = true; in mlx4_ib_probe()
2845 &ibdev->ib_dev); in mlx4_ib_probe()
2847 if (mlx4_is_mfunc(ibdev->dev)) in mlx4_ib_probe()
2848 init_pkeys(ibdev); in mlx4_ib_probe()
2851 if (mlx4_is_master(ibdev->dev)) { in mlx4_ib_probe()
2853 if (j == mlx4_master_func_num(ibdev->dev)) in mlx4_ib_probe()
2855 if (mlx4_is_slave_active(ibdev->dev, j)) in mlx4_ib_probe()
2856 do_slave_init(ibdev, j, 1); in mlx4_ib_probe()
2861 ibdev->mlx_nb.notifier_call = mlx4_ib_event; in mlx4_ib_probe()
2862 err = mlx4_register_event_notifier(dev, &ibdev->mlx_nb); in mlx4_ib_probe()
2865 auxiliary_set_drvdata(adev, ibdev); in mlx4_ib_probe()
2869 if (ibdev->iboe.nb.notifier_call) { in mlx4_ib_probe()
2870 if (unregister_netdevice_notifier(&ibdev->iboe.nb)) in mlx4_ib_probe()
2872 ibdev->iboe.nb.notifier_call = NULL; in mlx4_ib_probe()
2876 mlx4_ib_close_sriov(ibdev); in mlx4_ib_probe()
2879 mlx4_ib_mad_cleanup(ibdev); in mlx4_ib_probe()
2882 ib_unregister_device(&ibdev->ib_dev); in mlx4_ib_probe()
2885 mlx4_ib_diag_cleanup(ibdev); in mlx4_ib_probe()
2888 bitmap_free(ibdev->ib_uc_qpns_bitmap); in mlx4_ib_probe()
2891 mlx4_qp_release_range(dev, ibdev->steer_qpn_base, in mlx4_ib_probe()
2892 ibdev->steer_qpn_count); in mlx4_ib_probe()
2894 for (i = 0; i < ibdev->num_ports; ++i) in mlx4_ib_probe()
2895 mlx4_ib_delete_counters_table(ibdev, &ibdev->counters_table[i]); in mlx4_ib_probe()
2898 mlx4_ib_free_eqs(dev, ibdev); in mlx4_ib_probe()
2899 iounmap(ibdev->uar_map); in mlx4_ib_probe()
2902 mlx4_uar_free(dev, &ibdev->priv_uar); in mlx4_ib_probe()
2905 mlx4_pd_free(dev, ibdev->priv_pdn); in mlx4_ib_probe()
2908 ib_dealloc_device(&ibdev->ib_dev); in mlx4_ib_probe()
2981 struct mlx4_ib_dev *ibdev = auxiliary_get_drvdata(adev); in mlx4_ib_remove() local
2985 mlx4_unregister_event_notifier(dev, &ibdev->mlx_nb); in mlx4_ib_remove()
2989 ibdev->ib_active = false; in mlx4_ib_remove()
2992 if (ibdev->iboe.nb.notifier_call) { in mlx4_ib_remove()
2993 if (unregister_netdevice_notifier(&ibdev->iboe.nb)) in mlx4_ib_remove()
2995 ibdev->iboe.nb.notifier_call = NULL; in mlx4_ib_remove()
2998 mlx4_ib_close_sriov(ibdev); in mlx4_ib_remove()
2999 mlx4_ib_mad_cleanup(ibdev); in mlx4_ib_remove()
3000 ib_unregister_device(&ibdev->ib_dev); in mlx4_ib_remove()
3001 mlx4_ib_diag_cleanup(ibdev); in mlx4_ib_remove()
3003 mlx4_qp_release_range(dev, ibdev->steer_qpn_base, in mlx4_ib_remove()
3004 ibdev->steer_qpn_count); in mlx4_ib_remove()
3005 bitmap_free(ibdev->ib_uc_qpns_bitmap); in mlx4_ib_remove()
3007 iounmap(ibdev->uar_map); in mlx4_ib_remove()
3008 for (p = 0; p < ibdev->num_ports; ++p) in mlx4_ib_remove()
3009 mlx4_ib_delete_counters_table(ibdev, &ibdev->counters_table[p]); in mlx4_ib_remove()
3014 mlx4_ib_free_eqs(dev, ibdev); in mlx4_ib_remove()
3016 mlx4_uar_free(dev, &ibdev->priv_uar); in mlx4_ib_remove()
3017 mlx4_pd_free(dev, ibdev->priv_pdn); in mlx4_ib_remove()
3018 ib_dealloc_device(&ibdev->ib_dev); in mlx4_ib_remove()
3021 static void do_slave_init(struct mlx4_ib_dev *ibdev, int slave, int do_init) in do_slave_init() argument
3024 struct mlx4_dev *dev = ibdev->dev; in do_slave_init()
3053 dm[i]->dev = ibdev; in do_slave_init()
3056 spin_lock_irqsave(&ibdev->sriov.going_down_lock, flags); in do_slave_init()
3057 if (!ibdev->sriov.is_going_down) { in do_slave_init()
3059 queue_work(ibdev->sriov.demux[i].ud_wq, &dm[i]->work); in do_slave_init()
3060 spin_unlock_irqrestore(&ibdev->sriov.going_down_lock, flags); in do_slave_init()
3062 spin_unlock_irqrestore(&ibdev->sriov.going_down_lock, flags); in do_slave_init()
3071 static void mlx4_ib_handle_catas_error(struct mlx4_ib_dev *ibdev) in mlx4_ib_handle_catas_error() argument
3085 spin_lock_irqsave(&ibdev->reset_flow_resource_lock, flags); in mlx4_ib_handle_catas_error()
3087 list_for_each_entry(mqp, &ibdev->qp_list, qps_list) { in mlx4_ib_handle_catas_error()
3128 spin_unlock_irqrestore(&ibdev->reset_flow_resource_lock, flags); in mlx4_ib_handle_catas_error()
3136 struct mlx4_ib_dev *ibdev = ew->ib_dev; in handle_bonded_port_state_event() local
3142 spin_lock_bh(&ibdev->iboe.lock); in handle_bonded_port_state_event()
3144 struct net_device *curr_netdev = ibdev->iboe.netdevs[i]; in handle_bonded_port_state_event()
3158 spin_unlock_bh(&ibdev->iboe.lock); in handle_bonded_port_state_event()
3160 ibev.device = &ibdev->ib_dev; in handle_bonded_port_state_event()
3193 void mlx4_sched_ib_sl2vl_update_work(struct mlx4_ib_dev *ibdev, in mlx4_sched_ib_sl2vl_update_work() argument
3202 ew->ib_dev = ibdev; in mlx4_sched_ib_sl2vl_update_work()
3210 struct mlx4_ib_dev *ibdev = in mlx4_ib_event() local
3212 struct mlx4_dev *dev = ibdev->dev; in mlx4_ib_event()
3225 ew->ib_dev = ibdev; in mlx4_ib_event()
3243 if (p > ibdev->num_ports) in mlx4_ib_event()
3246 rdma_port_get_link_layer(&ibdev->ib_dev, p) == in mlx4_ib_event()
3249 mlx4_ib_invalidate_all_guid_record(ibdev, p); in mlx4_ib_event()
3250 if (ibdev->dev->flags & MLX4_FLAG_SECURE_HOST && in mlx4_ib_event()
3251 !(ibdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_SL_TO_VL_CHANGE_EVENT)) in mlx4_ib_event()
3252 mlx4_sched_ib_sl2vl_update_work(ibdev, p); in mlx4_ib_event()
3258 if (p > ibdev->num_ports) in mlx4_ib_event()
3264 ibdev->ib_active = false; in mlx4_ib_event()
3266 mlx4_ib_handle_catas_error(ibdev); in mlx4_ib_event()
3276 ew->ib_dev = ibdev; in mlx4_ib_event()
3286 do_slave_init(ibdev, p, 1); in mlx4_ib_event()
3290 for (i = 1; i <= ibdev->num_ports; i++) { in mlx4_ib_event()
3291 if (rdma_port_get_link_layer(&ibdev->ib_dev, i) in mlx4_ib_event()
3293 mlx4_ib_slave_alias_guid_event(ibdev, in mlx4_ib_event()
3304 for (i = 1; i <= ibdev->num_ports; i++) { in mlx4_ib_event()
3305 if (rdma_port_get_link_layer(&ibdev->ib_dev, i) in mlx4_ib_event()
3307 mlx4_ib_slave_alias_guid_event(ibdev, in mlx4_ib_event()
3313 do_slave_init(ibdev, p, 0); in mlx4_ib_event()
3320 ibev.device = &ibdev->ib_dev; in mlx4_ib_event()
3321 ibev.element.port_num = mlx4_is_bonded(ibdev->dev) ? 1 : (u8)p; in mlx4_ib_event()