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
next prev 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox