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>
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Leon Romanovsky <leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Parav Pandit <parav-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Subject: [rdma-next 02/22] IB/uverbs: Introduce and use helper functions to copy ah attributes
Date: Fri, 11 Aug 2017 13:49:43 +0300	[thread overview]
Message-ID: <20170811105003.7661-3-leon@kernel.org> (raw)
In-Reply-To: <20170811105003.7661-1-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>

From: Parav Pandit <parav-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>

This patch introduces two helper functions to copy ah attributes
from uverbs to internal ib_ah_attr structure and the other way
during modify qp and query qp respectively.

Signed-off-by: Parav Pandit <parav-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Reviewed-by: Daniel Jurgens <danielj-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Signed-off-by: Leon Romanovsky <leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
---
 drivers/infiniband/core/uverbs_cmd.c | 124 ++++++++++++++---------------------
 1 file changed, 49 insertions(+), 75 deletions(-)

diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
index 60535c754db3..ab8a176971f6 100644
--- a/drivers/infiniband/core/uverbs_cmd.c
+++ b/drivers/infiniband/core/uverbs_cmd.c
@@ -1801,6 +1801,28 @@ ssize_t ib_uverbs_open_qp(struct ib_uverbs_file *file,
 	return ret;
 }
 
+static void copy_ah_attr_to_uverbs(struct ib_uverbs_qp_dest *uverb_attr,
+				   struct rdma_ah_attr *rdma_attr)
+{
+	const struct ib_global_route   *grh;
+
+	uverb_attr->dlid              = rdma_ah_get_dlid(rdma_attr);
+	uverb_attr->sl                = rdma_ah_get_sl(rdma_attr);
+	uverb_attr->src_path_bits     = rdma_ah_get_path_bits(rdma_attr);
+	uverb_attr->static_rate       = rdma_ah_get_static_rate(rdma_attr);
+	uverb_attr->is_global         = !!(rdma_ah_get_ah_flags(rdma_attr) &
+					 IB_AH_GRH);
+	if (uverb_attr->is_global) {
+		grh = rdma_ah_read_grh(rdma_attr);
+		memcpy(uverb_attr->dgid, grh->dgid.raw, 16);
+		uverb_attr->flow_label        = grh->flow_label;
+		uverb_attr->sgid_index        = grh->sgid_index;
+		uverb_attr->hop_limit         = grh->hop_limit;
+		uverb_attr->traffic_class     = grh->traffic_class;
+	}
+	uverb_attr->port_num          = rdma_ah_get_port_num(rdma_attr);
+}
+
 ssize_t ib_uverbs_query_qp(struct ib_uverbs_file *file,
 			   struct ib_device *ib_dev,
 			   const char __user *buf, int in_len,
@@ -1811,7 +1833,6 @@ ssize_t ib_uverbs_query_qp(struct ib_uverbs_file *file,
 	struct ib_qp                   *qp;
 	struct ib_qp_attr              *attr;
 	struct ib_qp_init_attr         *init_attr;
-	const struct ib_global_route   *grh;
 	int                            ret;
 
 	if (copy_from_user(&cmd, buf, sizeof cmd))
@@ -1861,39 +1882,8 @@ ssize_t ib_uverbs_query_qp(struct ib_uverbs_file *file,
 	resp.alt_port_num           = attr->alt_port_num;
 	resp.alt_timeout            = attr->alt_timeout;
 
-	resp.dest.dlid              = rdma_ah_get_dlid(&attr->ah_attr);
-	resp.dest.sl                = rdma_ah_get_sl(&attr->ah_attr);
-	resp.dest.src_path_bits     = rdma_ah_get_path_bits(&attr->ah_attr);
-	resp.dest.static_rate       = rdma_ah_get_static_rate(&attr->ah_attr);
-	resp.dest.is_global         = !!(rdma_ah_get_ah_flags(&attr->ah_attr) &
-					 IB_AH_GRH);
-	if (resp.dest.is_global) {
-		grh = rdma_ah_read_grh(&attr->ah_attr);
-		memcpy(resp.dest.dgid, grh->dgid.raw, 16);
-		resp.dest.flow_label        = grh->flow_label;
-		resp.dest.sgid_index        = grh->sgid_index;
-		resp.dest.hop_limit         = grh->hop_limit;
-		resp.dest.traffic_class     = grh->traffic_class;
-	}
-	resp.dest.port_num          = rdma_ah_get_port_num(&attr->ah_attr);
-
-	resp.alt_dest.dlid          = rdma_ah_get_dlid(&attr->alt_ah_attr);
-	resp.alt_dest.sl            = rdma_ah_get_sl(&attr->alt_ah_attr);
-	resp.alt_dest.src_path_bits = rdma_ah_get_path_bits(&attr->alt_ah_attr);
-	resp.alt_dest.static_rate
-			= rdma_ah_get_static_rate(&attr->alt_ah_attr);
-	resp.alt_dest.is_global
-			= !!(rdma_ah_get_ah_flags(&attr->alt_ah_attr) &
-						  IB_AH_GRH);
-	if (resp.alt_dest.is_global) {
-		grh = rdma_ah_read_grh(&attr->alt_ah_attr);
-		memcpy(resp.alt_dest.dgid, grh->dgid.raw, 16);
-		resp.alt_dest.flow_label    = grh->flow_label;
-		resp.alt_dest.sgid_index    = grh->sgid_index;
-		resp.alt_dest.hop_limit     = grh->hop_limit;
-		resp.alt_dest.traffic_class = grh->traffic_class;
-	}
-	resp.alt_dest.port_num      = rdma_ah_get_port_num(&attr->alt_ah_attr);
+	copy_ah_attr_to_uverbs(&resp.dest, &attr->ah_attr);
+	copy_ah_attr_to_uverbs(&resp.alt_dest, &attr->alt_ah_attr);
 
 	resp.max_send_wr            = init_attr->cap.max_send_wr;
 	resp.max_recv_wr            = init_attr->cap.max_recv_wr;
@@ -1927,6 +1917,28 @@ static int modify_qp_mask(enum ib_qp_type qp_type, int mask)
 	}
 }
 
+static void copy_ah_attr_from_uverbs(struct ib_device *dev,
+				     struct rdma_ah_attr *rdma_attr,
+				     struct ib_uverbs_qp_dest *uverb_attr)
+{
+	rdma_attr->type = rdma_ah_find_type(dev, uverb_attr->port_num);
+	if (uverb_attr->is_global) {
+		rdma_ah_set_grh(rdma_attr, NULL,
+				uverb_attr->flow_label,
+				uverb_attr->sgid_index,
+				uverb_attr->hop_limit,
+				uverb_attr->traffic_class);
+		rdma_ah_set_dgid_raw(rdma_attr, uverb_attr->dgid);
+	} else {
+		rdma_ah_set_ah_flags(rdma_attr, 0);
+	}
+	rdma_ah_set_dlid(rdma_attr, uverb_attr->dlid);
+	rdma_ah_set_sl(rdma_attr, uverb_attr->sl);
+	rdma_ah_set_path_bits(rdma_attr, uverb_attr->src_path_bits);
+	rdma_ah_set_static_rate(rdma_attr, uverb_attr->static_rate);
+	rdma_ah_set_port_num(rdma_attr, uverb_attr->port_num);
+}
+
 static int modify_qp(struct ib_uverbs_file *file,
 		     struct ib_uverbs_ex_modify_qp *cmd, struct ib_udata *udata)
 {
@@ -1973,47 +1985,9 @@ static int modify_qp(struct ib_uverbs_file *file,
 	attr->alt_timeout	  = cmd->base.alt_timeout;
 	attr->rate_limit	  = cmd->rate_limit;
 
-	attr->ah_attr.type = rdma_ah_find_type(qp->device,
-					       cmd->base.dest.port_num);
-	if (cmd->base.dest.is_global) {
-		rdma_ah_set_grh(&attr->ah_attr, NULL,
-				cmd->base.dest.flow_label,
-				cmd->base.dest.sgid_index,
-				cmd->base.dest.hop_limit,
-				cmd->base.dest.traffic_class);
-		rdma_ah_set_dgid_raw(&attr->ah_attr, cmd->base.dest.dgid);
-	} else {
-		rdma_ah_set_ah_flags(&attr->ah_attr, 0);
-	}
-	rdma_ah_set_dlid(&attr->ah_attr, cmd->base.dest.dlid);
-	rdma_ah_set_sl(&attr->ah_attr, cmd->base.dest.sl);
-	rdma_ah_set_path_bits(&attr->ah_attr, cmd->base.dest.src_path_bits);
-	rdma_ah_set_static_rate(&attr->ah_attr, cmd->base.dest.static_rate);
-	rdma_ah_set_port_num(&attr->ah_attr,
-			     cmd->base.dest.port_num);
-
-	attr->alt_ah_attr.type = rdma_ah_find_type(qp->device,
-						   cmd->base.dest.port_num);
-	if (cmd->base.alt_dest.is_global) {
-		rdma_ah_set_grh(&attr->alt_ah_attr, NULL,
-				cmd->base.alt_dest.flow_label,
-				cmd->base.alt_dest.sgid_index,
-				cmd->base.alt_dest.hop_limit,
-				cmd->base.alt_dest.traffic_class);
-		rdma_ah_set_dgid_raw(&attr->alt_ah_attr,
-				     cmd->base.alt_dest.dgid);
-	} else {
-		rdma_ah_set_ah_flags(&attr->alt_ah_attr, 0);
-	}
-
-	rdma_ah_set_dlid(&attr->alt_ah_attr, cmd->base.alt_dest.dlid);
-	rdma_ah_set_sl(&attr->alt_ah_attr, cmd->base.alt_dest.sl);
-	rdma_ah_set_path_bits(&attr->alt_ah_attr,
-			      cmd->base.alt_dest.src_path_bits);
-	rdma_ah_set_static_rate(&attr->alt_ah_attr,
-				cmd->base.alt_dest.static_rate);
-	rdma_ah_set_port_num(&attr->alt_ah_attr,
-			     cmd->base.alt_dest.port_num);
+	copy_ah_attr_from_uverbs(qp->device, &attr->ah_attr, &cmd->base.dest);
+	copy_ah_attr_from_uverbs(qp->device, &attr->alt_ah_attr,
+				 &cmd->base.alt_dest);
 
 	ret = ib_modify_qp_with_udata(qp, attr,
 				      modify_qp_mask(qp->qp_type,
-- 
2.14.0

--
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-08-11 10:49 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-11 10:49 [pull request][rdma-next 00/22] RDMA core, drivers and IPoIB fixes Leon Romanovsky
     [not found] ` <20170811105003.7661-1-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-08-11 10:49   ` [rdma-next 01/22] IB/cma: Fix erroneous validation of supported default GID type Leon Romanovsky
2017-08-11 10:49   ` Leon Romanovsky [this message]
     [not found]     ` <20170811105003.7661-3-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-08-11 12:15       ` [rdma-next 02/22] IB/uverbs: Introduce and use helper functions to copy ah attributes Dennis Dalessandro
2017-08-11 10:49   ` [rdma-next 03/22] RDMA/mlx4: Don't use uninitialized variable Leon Romanovsky
2017-08-11 10:49   ` [rdma-next 04/22] RDMA/mlx4: Fix create qp command alignment Leon Romanovsky
2017-08-11 10:49   ` [rdma-next 05/22] RDMA/(core,ulp): Convert register/unregister event handler to be void Leon Romanovsky
2017-08-11 10:49   ` [rdma-next 06/22] RDMA/core: Cleanup device capability enum Leon Romanovsky
2017-08-11 10:49   ` [rdma-next 07/22] RDMA/core: Remove unimplemented node_types and node transport Leon Romanovsky
     [not found]     ` <20170811105003.7661-8-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-08-11 12:32       ` Dennis Dalessandro
2017-08-11 16:46       ` Hal Rosenstock
     [not found]         ` <36aea320-a018-040d-c44a-3a23d54771cd-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2017-08-11 18:13           ` Dennis Dalessandro
     [not found]             ` <72f3047f-8b29-435d-57bf-be0734606368-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-08-12  6:32               ` Leon Romanovsky
2017-08-11 18:13           ` Leon Romanovsky
2017-08-11 10:49   ` [rdma-next 08/22] RDMA/core: Delete BUG() from unreachable flow Leon Romanovsky
     [not found]     ` <20170811105003.7661-9-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-08-13 10:21       ` Yuval Shaia
2017-08-13 10:29         ` Leon Romanovsky
     [not found]           ` <20170813102904.GV24282-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-08-13 10:51             ` Yuval Shaia
2017-08-13 11:00               ` Leon Romanovsky
     [not found]                 ` <20170813110017.GX24282-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-08-13 11:08                   ` Yuval Shaia
2017-08-11 10:49   ` [rdma-next 09/22] RDMA/core: Refactor get link layer wrapper Leon Romanovsky
     [not found]     ` <20170811105003.7661-10-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-08-13 10:13       ` Yuval Shaia
2017-08-11 10:49   ` [rdma-next 10/22] RDMA/mlx4: Remove gfp_mask argument from acquire_group call Leon Romanovsky
2017-08-11 10:49   ` [rdma-next 11/22] RDMA/usnic: Fix remove address space warning Leon Romanovsky
2017-08-11 10:49   ` [rdma-next 12/22] RDMA/mthca: Make explicit conversion to 64bit value Leon Romanovsky
2017-08-11 10:49   ` [rdma-next 13/22] RDMA/hns: Remove empty functions Leon Romanovsky
     [not found]     ` <20170811105003.7661-14-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-08-11 12:26       ` Dennis Dalessandro
     [not found]         ` <fe444f34-ec1e-a5bb-34cb-0c34499d1e21-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-08-15  3:36           ` oulijun
2017-08-11 10:49   ` [rdma-next 14/22] IB/mlx4: Fix some spelling mistakes Leon Romanovsky
2017-08-11 10:49   ` [rdma-next 15/22] IB/mlx5: " Leon Romanovsky
2017-08-11 10:49   ` [rdma-next 16/22] IB/mlx5: Add necessary delay drop assignment Leon Romanovsky
2017-08-11 10:49   ` [rdma-next 17/22] IB/mlx4: Fix RSS QP type in creation verb Leon Romanovsky
2017-08-11 10:49   ` [rdma-next 18/22] IB/mlx4: Fix struct mlx4_ib_create_wq alignment Leon Romanovsky
2017-08-11 10:50   ` [rdma-next 19/22] IB/mlx4: Remove redundant attribute in mlx4_ib_create_qp_rss struct Leon Romanovsky
     [not found]     ` <20170811105003.7661-20-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-08-13  9:07       ` Yuval Shaia
2017-08-13  9:43         ` Leon Romanovsky
2017-08-11 10:50   ` [rdma-next 20/22] IB/mlx4: Check that reserved fields in mlx4_ib_create_qp_rss are zero Leon Romanovsky
     [not found]     ` <20170811105003.7661-21-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-08-13  9:17       ` Yuval Shaia
2017-08-13  9:58         ` Leon Romanovsky
2017-08-11 10:50   ` [rdma-next 21/22] IB/ipoib: Sync between remove_one to sysfs calls that use rtnl_lock Leon Romanovsky
2017-08-11 10:50   ` [rdma-next 22/22] IB/ipoib: Add get statistics support to SRIOV VF Leon Romanovsky

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=20170811105003.7661-3-leon@kernel.org \
    --to=leon-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
    --cc=dledford-H+wXaHxf7aLQT0dZR+AlfA@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.