main.c (7a58779edd75c37352917e8fbc7769efce0e65b6) main.c (7416790e22452bfa86de6b55638eacf7780c8f6f)
1// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
2/*
3 * Copyright (c) 2013-2020, Mellanox Technologies inc. All rights reserved.
4 * Copyright (c) 2020, Intel Corporation. All rights reserved.
5 */
6
7#include <linux/debugfs.h>
8#include <linux/highmem.h>

--- 2950 unchanged lines hidden (view full) ---

2959static void get_ext_port_caps(struct mlx5_ib_dev *dev)
2960{
2961 int port;
2962
2963 for (port = 1; port <= dev->num_ports; port++)
2964 mlx5_query_ext_port_caps(dev, port);
2965}
2966
1// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
2/*
3 * Copyright (c) 2013-2020, Mellanox Technologies inc. All rights reserved.
4 * Copyright (c) 2020, Intel Corporation. All rights reserved.
5 */
6
7#include <linux/debugfs.h>
8#include <linux/highmem.h>

--- 2950 unchanged lines hidden (view full) ---

2959static void get_ext_port_caps(struct mlx5_ib_dev *dev)
2960{
2961 int port;
2962
2963 for (port = 1; port <= dev->num_ports; port++)
2964 mlx5_query_ext_port_caps(dev, port);
2965}
2966
2967static int __get_port_caps(struct mlx5_ib_dev *dev, u8 port)
2968{
2969 struct ib_port_attr *pprops = NULL;
2970 int err = -ENOMEM;
2971
2972 pprops = kzalloc(sizeof(*pprops), GFP_KERNEL);
2973 if (!pprops)
2974 goto out;
2975
2976 err = mlx5_ib_query_port(&dev->ib_dev, port, pprops);
2977 if (err) {
2978 mlx5_ib_warn(dev, "query_port %d failed %d\n",
2979 port, err);
2980 goto out;
2981 }
2982
2983 dev->port_caps[port - 1].gid_table_len = pprops->gid_tbl_len;
2984 mlx5_ib_dbg(dev, "port %d: pkey_table_len %d, gid_table_len %d\n",
2985 port, dev->pkey_table_len, pprops->gid_tbl_len);
2986
2987out:
2988 kfree(pprops);
2989 return err;
2990}
2991
2992static int get_port_caps(struct mlx5_ib_dev *dev, u8 port)
2993{
2994 /* For representors use port 1, is this is the only native
2995 * port
2996 */
2997 if (dev->is_rep)
2998 return __get_port_caps(dev, 1);
2999 return __get_port_caps(dev, port);
3000}
3001
3002static u8 mlx5_get_umr_fence(u8 umr_fence_cap)
3003{
3004 switch (umr_fence_cap) {
3005 case MLX5_CAP_UMR_FENCE_NONE:
3006 return MLX5_FENCE_MODE_NONE;
3007 case MLX5_CAP_UMR_FENCE_SMALL:
3008 return MLX5_FENCE_MODE_INITIATOR_SMALL;
3009 default:

--- 457 unchanged lines hidden (view full) ---

3467 mpi->ibdev = ibdev;
3468 mpi->mdev_events.notifier_call = NULL;
3469 spin_unlock(&ibdev->port[port_num].mp.mpi_lock);
3470
3471 err = mlx5_nic_vport_affiliate_multiport(ibdev->mdev, mpi->mdev);
3472 if (err)
3473 goto unbind;
3474
2967static u8 mlx5_get_umr_fence(u8 umr_fence_cap)
2968{
2969 switch (umr_fence_cap) {
2970 case MLX5_CAP_UMR_FENCE_NONE:
2971 return MLX5_FENCE_MODE_NONE;
2972 case MLX5_CAP_UMR_FENCE_SMALL:
2973 return MLX5_FENCE_MODE_INITIATOR_SMALL;
2974 default:

--- 457 unchanged lines hidden (view full) ---

3432 mpi->ibdev = ibdev;
3433 mpi->mdev_events.notifier_call = NULL;
3434 spin_unlock(&ibdev->port[port_num].mp.mpi_lock);
3435
3436 err = mlx5_nic_vport_affiliate_multiport(ibdev->mdev, mpi->mdev);
3437 if (err)
3438 goto unbind;
3439
3475 err = get_port_caps(ibdev, mlx5_core_native_port_num(mpi->mdev));
3476 if (err)
3477 goto unbind;
3478
3479 err = mlx5_add_netdev_notifier(ibdev, port_num);
3480 if (err) {
3481 mlx5_ib_err(ibdev, "failed adding netdev notifier for port %u\n",
3482 port_num + 1);
3483 goto unbind;
3484 }
3485
3486 mpi->mdev_events.notifier_call = mlx5_ib_event_slave_port;

--- 61 unchanged lines hidden (view full) ---

3548 if (bound) {
3549 dev_dbg(mpi->mdev->device,
3550 "removing port from unaffiliated list.\n");
3551 mlx5_ib_dbg(dev, "port %d bound\n", i + 1);
3552 list_del(&mpi->list);
3553 break;
3554 }
3555 }
3440 err = mlx5_add_netdev_notifier(ibdev, port_num);
3441 if (err) {
3442 mlx5_ib_err(ibdev, "failed adding netdev notifier for port %u\n",
3443 port_num + 1);
3444 goto unbind;
3445 }
3446
3447 mpi->mdev_events.notifier_call = mlx5_ib_event_slave_port;

--- 61 unchanged lines hidden (view full) ---

3509 if (bound) {
3510 dev_dbg(mpi->mdev->device,
3511 "removing port from unaffiliated list.\n");
3512 mlx5_ib_dbg(dev, "port %d bound\n", i + 1);
3513 list_del(&mpi->list);
3514 break;
3515 }
3516 }
3556 if (!bound) {
3557 get_port_caps(dev, i + 1);
3517 if (!bound)
3558 mlx5_ib_dbg(dev, "no free port found for port %d\n",
3559 i + 1);
3518 mlx5_ib_dbg(dev, "no free port found for port %d\n",
3519 i + 1);
3560 }
3561 }
3562
3563 list_add_tail(&dev->ib_dev_list, &mlx5_ib_dev_list);
3564 mutex_unlock(&mlx5_ib_multiport_mutex);
3565 return err;
3566}
3567
3568static void mlx5_ib_cleanup_multiport_master(struct mlx5_ib_dev *dev)

--- 366 unchanged lines hidden (view full) ---

3935 err = mlx5_ib_init_multiport_master(dev);
3936 if (err)
3937 return err;
3938
3939 err = set_has_smi_cap(dev);
3940 if (err)
3941 goto err_mp;
3942
3520 }
3521
3522 list_add_tail(&dev->ib_dev_list, &mlx5_ib_dev_list);
3523 mutex_unlock(&mlx5_ib_multiport_mutex);
3524 return err;
3525}
3526
3527static void mlx5_ib_cleanup_multiport_master(struct mlx5_ib_dev *dev)

--- 366 unchanged lines hidden (view full) ---

3894 err = mlx5_ib_init_multiport_master(dev);
3895 if (err)
3896 return err;
3897
3898 err = set_has_smi_cap(dev);
3899 if (err)
3900 goto err_mp;
3901
3943 if (!mlx5_core_mp_enabled(mdev)) {
3944 for (i = 1; i <= dev->num_ports; i++) {
3945 err = get_port_caps(dev, i);
3946 if (err)
3947 break;
3948 }
3949 } else {
3950 err = get_port_caps(dev, mlx5_core_native_port_num(mdev));
3951 }
3952 if (err)
3953 goto err_mp;
3954
3955 err = mlx5_query_max_pkeys(&dev->ib_dev, &dev->pkey_table_len);
3956 if (err)
3957 goto err_mp;
3958
3959 if (mlx5_use_mad_ifc(dev))
3960 get_ext_port_caps(dev);
3961
3962 dev->ib_dev.node_type = RDMA_NODE_IB_CA;

--- 909 unchanged lines hidden ---
3902 err = mlx5_query_max_pkeys(&dev->ib_dev, &dev->pkey_table_len);
3903 if (err)
3904 goto err_mp;
3905
3906 if (mlx5_use_mad_ifc(dev))
3907 get_ext_port_caps(dev);
3908
3909 dev->ib_dev.node_type = RDMA_NODE_IB_CA;

--- 909 unchanged lines hidden ---