net/mlx5_core: Add VF param when querying vport counter
authorEli Cohen <eli@mellanox.com>
Fri, 11 Mar 2016 20:58:40 +0000 (22:58 +0200)
committerDoug Ledford <dledford@redhat.com>
Mon, 21 Mar 2016 21:13:14 +0000 (17:13 -0400)
Add a vf parameter to mlx5_core_query_vport_counter so we can call it to
query counters of virtual functions. Also update current users of the
API.

PFs may call mlx5_core_query_vport_counter with other_vport set to
indicate that they are querying a virtual function. The virtual
function to be queried is given by the vf parameter. Virtual function
numbering is zero based so the first VF is 0 and so on. When a PF
queries its own function, the other_vport parameter is cleared.

Signed-off-by: Eli Cohen <eli@mellanox.com>
Reviewed-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/mlx5/mad.c
drivers/net/ethernet/mellanox/mlx5/core/vport.c
include/linux/mlx5/vport.h

index 41d8a0036465eb8ccc12290a4054cab18ad64c29..1534af1130588f03b5be1f4fae333d4277a02486 100644 (file)
@@ -208,7 +208,7 @@ static int process_pma_cmd(struct ib_device *ibdev, u8 port_num,
                if (!out_cnt)
                        return IB_MAD_RESULT_FAILURE;
 
-               err = mlx5_core_query_vport_counter(dev->mdev, 0,
+               err = mlx5_core_query_vport_counter(dev->mdev, 0, 0,
                                                    port_num, out_cnt, sz);
                if (!err)
                        pma_cnt_ext_assign(pma_cnt_ext, out_cnt);
index 90ab09e375b8dff7c957fbdd8eee3dd46429273e..2b836d0b473887aecfb64301414ca9488abed41a 100644 (file)
@@ -852,7 +852,8 @@ int mlx5_nic_vport_disable_roce(struct mlx5_core_dev *mdev)
 EXPORT_SYMBOL_GPL(mlx5_nic_vport_disable_roce);
 
 int mlx5_core_query_vport_counter(struct mlx5_core_dev *dev, u8 other_vport,
-                                 u8 port_num, void *out, size_t out_sz)
+                                 int vf, u8 port_num, void *out,
+                                 size_t out_sz)
 {
        int     in_sz = MLX5_ST_SZ_BYTES(query_vport_counter_in);
        int     is_group_manager;
@@ -871,7 +872,7 @@ int mlx5_core_query_vport_counter(struct mlx5_core_dev *dev, u8 other_vport,
        if (other_vport) {
                if (is_group_manager) {
                        MLX5_SET(query_vport_counter_in, in, other_vport, 1);
-                       MLX5_SET(query_vport_counter_in, in, vport_number, 0);
+                       MLX5_SET(query_vport_counter_in, in, vport_number, vf + 1);
                } else {
                        err = -EPERM;
                        goto free;
index a9f2bcc98cabff2f29c90735b3e9d5452ded4520..aafb3e48b5f8355ee57450abc025fa8d7dbd47b8 100644 (file)
@@ -93,6 +93,7 @@ int mlx5_modify_nic_vport_vlans(struct mlx5_core_dev *dev,
 int mlx5_nic_vport_enable_roce(struct mlx5_core_dev *mdev);
 int mlx5_nic_vport_disable_roce(struct mlx5_core_dev *mdev);
 int mlx5_core_query_vport_counter(struct mlx5_core_dev *dev, u8 other_vport,
-                                 u8 port_num, void *out, size_t out_sz);
+                                 int vf, u8 port_num, void *out,
+                                 size_t out_sz);
 
 #endif /* __MLX5_VPORT_H__ */