All of lore.kernel.org
 help / color / mirror / Atom feed
From: Leon Romanovsky <leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	Jason Gunthorpe <jgg-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Daniel Jurgens <danielj-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>,
	Parav Pandit <parav-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Subject: [PATCH rdma-next 13/15] IB/mlx5: Use correct mdev for vport queries in ib_virt
Date: Sun, 24 Dec 2017 14:57:39 +0200	[thread overview]
Message-ID: <20171224125741.25464-14-leon@kernel.org> (raw)
In-Reply-To: <20171224125741.25464-1-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>

From: Daniel Jurgens <danielj-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>

When using dual port RoCE mode vport queries should be routed to the
respective port mlx5_core_dev instead of the IB devices master mdev.

Signed-off-by: Daniel Jurgens <danielj-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Reviewed-by: Parav Pandit <parav-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Signed-off-by: Leon Romanovsky <leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
---
 drivers/infiniband/hw/mlx5/ib_virt.c | 84 +++++++++++++++++++++++++++++-------
 1 file changed, 69 insertions(+), 15 deletions(-)

diff --git a/drivers/infiniband/hw/mlx5/ib_virt.c b/drivers/infiniband/hw/mlx5/ib_virt.c
index 649a3364f838..fcdc85e89ba8 100644
--- a/drivers/infiniband/hw/mlx5/ib_virt.c
+++ b/drivers/infiniband/hw/mlx5/ib_virt.c
@@ -52,26 +52,36 @@ int mlx5_ib_get_vf_config(struct ib_device *device, int vf, u8 port,
 			  struct ifla_vf_info *info)
 {
 	struct mlx5_ib_dev *dev = to_mdev(device);
-	struct mlx5_core_dev *mdev = dev->mdev;
 	struct mlx5_hca_vport_context *rep;
+	struct mlx5_core_dev *mdev;
+	u8 mdev_port_num;
 	int err;
 
 	rep = kzalloc(sizeof(*rep), GFP_KERNEL);
 	if (!rep)
 		return -ENOMEM;
 
-	err = mlx5_query_hca_vport_context(mdev, 1, 1,  vf + 1, rep);
+	mdev = mlx5_ib_get_native_port_mdev(dev, port, &mdev_port_num);
+	if (!mdev) {
+		err = -ENODEV;
+		goto out;
+	}
+
+	err = mlx5_query_hca_vport_context(mdev, 1, mdev_port_num, vf + 1,
+					   rep);
 	if (err) {
 		mlx5_ib_warn(dev, "failed to query port policy for vf %d (%d)\n",
 			     vf, err);
-		goto free;
+		goto put_mdev;
 	}
 	memset(info, 0, sizeof(*info));
 	info->linkstate = mlx_to_net_policy(rep->policy);
 	if (info->linkstate == __IFLA_VF_LINK_STATE_MAX)
 		err = -EINVAL;
 
-free:
+put_mdev:
+	mlx5_ib_put_native_port_mdev(dev, port);
+out:
 	kfree(rep);
 	return err;
 }
@@ -94,9 +104,10 @@ int mlx5_ib_set_vf_link_state(struct ib_device *device, int vf,
 			      u8 port, int state)
 {
 	struct mlx5_ib_dev *dev = to_mdev(device);
-	struct mlx5_core_dev *mdev = dev->mdev;
 	struct mlx5_hca_vport_context *in;
-	struct mlx5_vf_context *vfs_ctx = mdev->priv.sriov.vfs_ctx;
+	struct mlx5_vf_context *vfs_ctx;
+	struct mlx5_core_dev *mdev;
+	u8 mdev_port_num;
 	int err;
 
 	in = kzalloc(sizeof(*in), GFP_KERNEL);
@@ -108,11 +119,21 @@ int mlx5_ib_set_vf_link_state(struct ib_device *device, int vf,
 		err = -EINVAL;
 		goto out;
 	}
+
+	mdev = mlx5_ib_get_native_port_mdev(dev, port, &mdev_port_num);
+	if (!mdev) {
+		err = -ENODEV;
+		goto out;
+	}
+
+	vfs_ctx = mdev->priv.sriov.vfs_ctx;
 	in->field_select = MLX5_HCA_VPORT_SEL_STATE_POLICY;
-	err = mlx5_core_modify_hca_vport_context(mdev, 1, 1, vf + 1, in);
+	err = mlx5_core_modify_hca_vport_context(mdev, 1, mdev_port_num,
+						 vf + 1, in);
 	if (!err)
 		vfs_ctx[vf].policy = in->policy;
 
+	mlx5_ib_put_native_port_mdev(dev, port);
 out:
 	kfree(in);
 	return err;
@@ -124,20 +145,29 @@ int mlx5_ib_get_vf_stats(struct ib_device *device, int vf,
 	int out_sz = MLX5_ST_SZ_BYTES(query_vport_counter_out);
 	struct mlx5_core_dev *mdev;
 	struct mlx5_ib_dev *dev;
+	u8 mdev_port_num;
 	void *out;
 	int err;
 
 	dev = to_mdev(device);
-	mdev = dev->mdev;
 
 	out = kzalloc(out_sz, GFP_KERNEL);
 	if (!out)
 		return -ENOMEM;
 
-	err = mlx5_core_query_vport_counter(mdev, true, vf, port, out, out_sz);
+	mdev = mlx5_ib_get_native_port_mdev(dev, port, &mdev_port_num);
+	if (!mdev) {
+		err = -ENODEV;
+		goto ex;
+	}
+
+	err = mlx5_core_query_vport_counter(mdev, true, vf, mdev_port_num, out,
+					    out_sz);
 	if (err)
 		goto ex;
 
+	mlx5_ib_put_native_port_mdev(dev, port);
+
 	stats->rx_packets = MLX5_GET64_PR(query_vport_counter_out, out, received_ib_unicast.packets);
 	stats->tx_packets = MLX5_GET64_PR(query_vport_counter_out, out, transmitted_ib_unicast.packets);
 	stats->rx_bytes = MLX5_GET64_PR(query_vport_counter_out, out, received_ib_unicast.octets);
@@ -152,20 +182,32 @@ int mlx5_ib_get_vf_stats(struct ib_device *device, int vf,
 static int set_vf_node_guid(struct ib_device *device, int vf, u8 port, u64 guid)
 {
 	struct mlx5_ib_dev *dev = to_mdev(device);
-	struct mlx5_core_dev *mdev = dev->mdev;
 	struct mlx5_hca_vport_context *in;
-	struct mlx5_vf_context *vfs_ctx = mdev->priv.sriov.vfs_ctx;
+	struct mlx5_vf_context *vfs_ctx;
+	struct mlx5_core_dev *mdev;
+	u8 mdev_port_num;
 	int err;
 
 	in = kzalloc(sizeof(*in), GFP_KERNEL);
 	if (!in)
 		return -ENOMEM;
 
+	mdev = mlx5_ib_get_native_port_mdev(dev, port, &mdev_port_num);
+	if (!mdev) {
+		err = -ENODEV;
+		goto out;
+	}
+
+	vfs_ctx = mdev->priv.sriov.vfs_ctx;
 	in->field_select = MLX5_HCA_VPORT_SEL_NODE_GUID;
 	in->node_guid = guid;
-	err = mlx5_core_modify_hca_vport_context(mdev, 1, 1, vf + 1, in);
+	err = mlx5_core_modify_hca_vport_context(mdev, 1, mdev_port_num,
+						 vf + 1, in);
 	if (!err)
 		vfs_ctx[vf].node_guid = guid;
+
+	mlx5_ib_put_native_port_mdev(dev, port);
+out:
 	kfree(in);
 	return err;
 }
@@ -173,20 +215,32 @@ static int set_vf_node_guid(struct ib_device *device, int vf, u8 port, u64 guid)
 static int set_vf_port_guid(struct ib_device *device, int vf, u8 port, u64 guid)
 {
 	struct mlx5_ib_dev *dev = to_mdev(device);
-	struct mlx5_core_dev *mdev = dev->mdev;
 	struct mlx5_hca_vport_context *in;
-	struct mlx5_vf_context *vfs_ctx = mdev->priv.sriov.vfs_ctx;
+	struct mlx5_vf_context *vfs_ctx;
+	struct mlx5_core_dev *mdev;
+	u8 mdev_port_num;
 	int err;
 
 	in = kzalloc(sizeof(*in), GFP_KERNEL);
 	if (!in)
 		return -ENOMEM;
 
+	mdev = mlx5_ib_get_native_port_mdev(dev, port, &mdev_port_num);
+	if (!mdev) {
+		err = -ENODEV;
+		goto out;
+	}
+
+	vfs_ctx = mdev->priv.sriov.vfs_ctx;
 	in->field_select = MLX5_HCA_VPORT_SEL_PORT_GUID;
 	in->port_guid = guid;
-	err = mlx5_core_modify_hca_vport_context(mdev, 1, 1, vf + 1, in);
+	err = mlx5_core_modify_hca_vport_context(mdev, 1, mdev_port_num,
+						 vf + 1, in);
 	if (!err)
 		vfs_ctx[vf].port_guid = guid;
+
+	mlx5_ib_put_native_port_mdev(dev, port);
+out:
 	kfree(in);
 	return err;
 }
-- 
2.15.1

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2017-12-24 12:57 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-24 12:57 [PATCH rdma-next 00/15] Dual Port mlx5 IB Device for RoCE Leon Romanovsky
     [not found] ` <20171224125741.25464-1-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-12-24 12:57   ` [PATCH rdma-next 01/15] net/mlx5: Fix race for multiple RoCE enable Leon Romanovsky
     [not found]     ` <20171224125741.25464-2-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-12-24 21:53       ` Or Gerlitz
     [not found]         ` <CAJ3xEMg8U_4DpYEWa8t1QpccNzjU6f0shEtQ7fRWg-EtGupy+w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-12-25  5:59           ` Leon Romanovsky
     [not found]             ` <20171225055916.GU2942-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-12-25  9:21               ` Or Gerlitz
2017-12-24 12:57   ` [PATCH rdma-next 02/15] net/mlx5: Set software owner ID during init HCA Leon Romanovsky
     [not found]     ` <20171224125741.25464-3-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-12-24 22:00       ` Or Gerlitz
     [not found]         ` <CAJ3xEMiq-4DGFW-Z3hX3NfsSGXD6bm_uarGF_cm6K7+YuutJBQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-12-25  5:35           ` Leon Romanovsky
     [not found]             ` <20171225053534.GT2942-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-12-27 21:28               ` Or Gerlitz
2017-12-27 15:27           ` Daniel Jurgens
     [not found]             ` <b329f348-2462-2bf4-ee06-064e798c9b86-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2017-12-27 17:52               ` Jason Gunthorpe
     [not found]                 ` <20171227175208.GD31310-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2017-12-27 18:06                   ` Daniel Jurgens
     [not found]                     ` <37588052-e7cd-b2ad-b2e0-91e03a9401d1-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2017-12-27 18:10                       ` Jason Gunthorpe
2018-01-02  9:34               ` Or Gerlitz
     [not found]                 ` <CAJ3xEMixQ-Tw9gUYYPhNLvrEbntNTQBvLcVUe+x130hkEq15Bg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-02 10:10                   ` Leon Romanovsky
2017-12-24 12:57   ` [PATCH rdma-next 03/15] IB/core: Change roce_rescan_device to return void Leon Romanovsky
2017-12-24 12:57   ` [PATCH rdma-next 04/15] IB/mlx5: Reduce the use of num_port capability Leon Romanovsky
2017-12-24 12:57   ` [PATCH rdma-next 05/15] IB/mlx5: Make netdev notifications multiport capable Leon Romanovsky
2017-12-24 12:57   ` [PATCH rdma-next 06/15] {net,IB}/mlx5: Manage port association for multiport RoCE Leon Romanovsky
2017-12-24 12:57   ` [PATCH rdma-next 07/15] IB/mlx5: Move IB event processing onto a workqueue Leon Romanovsky
2017-12-24 12:57   ` [PATCH rdma-next 08/15] IB/mlx5: Implement dual port functionality in query routines Leon Romanovsky
2017-12-24 12:57   ` [PATCH rdma-next 09/15] IB/mlx5: Change debugfs to have per port contents Leon Romanovsky
2017-12-24 12:57   ` [PATCH rdma-next 10/15] IB/mlx5: Update counter implementation for dual port RoCE Leon Romanovsky
2017-12-24 12:57   ` [PATCH rdma-next 11/15] {net,IB}/mlx5: Change set_roce_gid to take a port number Leon Romanovsky
2017-12-24 12:57   ` [PATCH rdma-next 12/15] IB/mlx5: Route MADs for dual port RoCE Leon Romanovsky
2017-12-24 12:57   ` Leon Romanovsky [this message]
     [not found]     ` <20171224125741.25464-14-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-12-24 22:14       ` [PATCH rdma-next 13/15] IB/mlx5: Use correct mdev for vport queries in ib_virt Or Gerlitz
     [not found]         ` <CAJ3xEMgyD693JPtu_vag-q3kVP=Nyag=dPEp15AZcyX62FwkPw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-12-25  7:25           ` Leon Romanovsky
2017-12-24 12:57   ` [PATCH rdma-next 14/15] IB/mlx5: Don't advertise RAW QP support in dual port mode Leon Romanovsky
     [not found]     ` <20171224125741.25464-15-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-12-24 22:16       ` Or Gerlitz
     [not found]         ` <CAJ3xEMgAtd1PKN2h1NFj=Mt72msuU5bpFy0jO4KFXxXxGRf7hA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-12-25  7:16           ` Leon Romanovsky
     [not found]             ` <20171225071613.GW2942-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-12-25  9:17               ` Or Gerlitz
     [not found]                 ` <CAJ3xEMhtssDWuu8JAB_jhyofKbkeo4vYTLixLeta6vPzKQOp+A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-03 20:35                   ` Daniel Jurgens
     [not found]                     ` <ab3fb697-7b2c-685c-2151-5f48d5d7270a-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2018-01-03 20:39                       ` Or Gerlitz
     [not found]                         ` <CAJ3xEMimYj8=USqjHEF_uiwJCNoeT5qpbNMYTWUX7EgTVSeuuw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-03 20:43                           ` Daniel Jurgens
     [not found]                             ` <6f114e3c-2e16-f7ce-2e60-d06113afc9b8-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2018-01-03 20:47                               ` Or Gerlitz
     [not found]                                 ` <CAJ3xEMjZfTJP1fi=VosXL_v=AUueWZc54iOsXz1ynikYm-jcjA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-04  5:21                                   ` Leon Romanovsky
2017-12-24 12:57   ` [PATCH rdma-next 15/15] net/mlx5: Set num_vhca_ports capability Leon Romanovsky
2017-12-24 21:48   ` [PATCH rdma-next 00/15] Dual Port mlx5 IB Device for RoCE Or Gerlitz
     [not found] ` <CAJ3xEMhZgEee+VLpV4bV150siOdXwpcp64AGqeqr5Y2o--WRdw@mail.gmail.com>
     [not found]   ` <CAJ3xEMhZgEee+VLpV4bV150siOdXwpcp64AGqeqr5Y2o--WRdw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-12-25  9:24     ` Or Gerlitz
     [not found]       ` <CAJ3xEMgpP0Sbj4vY3_pJDjrDqHLHmkaTSGLyVuBY+aoC6VUnHA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-01-03 18:58         ` Daniel Jurgens
2017-12-27 15:22     ` Daniel Jurgens
     [not found]       ` <382ba516-bf7b-0a0b-7a9f-604cbf805c80-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2017-12-27 21:22         ` Or Gerlitz
     [not found]           ` <CAJ3xEMi3CvATj-vpfy8E89=ZoPL1mmoiu8HWea_NEwfV2++ZpQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-12-27 23:20             ` Daniel Jurgens
     [not found]               ` <a3cf271c-f66c-074a-88bd-b48b39959e6b-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2017-12-29 18:03                 ` Jason Gunthorpe
     [not found]                   ` <20171229180313.GD6513-uk2M96/98Pc@public.gmane.org>
2017-12-29 20:52                     ` Daniel Jurgens
     [not found]                       ` <9d102fb2-122c-d7e9-2521-cf61b708d8c0-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2017-12-29 21:27                         ` Jason Gunthorpe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171224125741.25464-14-leon@kernel.org \
    --to=leon-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
    --cc=danielj-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=jgg-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=parav-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.