diff options
author | Yonatan Cohen <yonatanc@mellanox.com> | 2017-11-13 03:51:16 -0500 |
---|---|---|
committer | Doug Ledford <dledford@redhat.com> | 2017-11-13 16:59:22 -0500 |
commit | 18bd90729237dc6ddbad01bc9618148224f03590 (patch) | |
tree | f3c00ca494484a90d359c971bdfeeca826ee231f | |
parent | b0e9df6da25890448ebd134b7f647f16bced9abc (diff) |
IB/uverbs: Add CQ moderation capability to query_device
The query_device function can now obtain the maximum values for
cq_max_count and cq_period, needed for CQ moderation.
cq_max_count is a 16 bits number that determines the number
of CQEs to accumulate before generating an event.
cq_period is a 16 bits number that determines the timeout in micro
seconds from the last event generated, upon which a new event will
be generated even if cq_max_count was not reached.
Signed-off-by: Yonatan Cohen <yonatanc@mellanox.com>
Reviewed-by: Majd Dibbiny <majd@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Doug Ledford <dledford@redhat.com>
-rw-r--r-- | drivers/infiniband/core/uverbs_cmd.c | 9 | ||||
-rw-r--r-- | include/rdma/ib_verbs.h | 6 | ||||
-rw-r--r-- | include/uapi/rdma/ib_user_verbs.h | 7 |
3 files changed, 22 insertions, 0 deletions
diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c index 3c2673cd4090..53143e4b1c50 100644 --- a/drivers/infiniband/core/uverbs_cmd.c +++ b/drivers/infiniband/core/uverbs_cmd.c | |||
@@ -3852,6 +3852,15 @@ int ib_uverbs_ex_query_device(struct ib_uverbs_file *file, | |||
3852 | resp.tm_caps.max_sge = attr.tm_caps.max_sge; | 3852 | resp.tm_caps.max_sge = attr.tm_caps.max_sge; |
3853 | resp.tm_caps.flags = attr.tm_caps.flags; | 3853 | resp.tm_caps.flags = attr.tm_caps.flags; |
3854 | resp.response_length += sizeof(resp.tm_caps); | 3854 | resp.response_length += sizeof(resp.tm_caps); |
3855 | |||
3856 | if (ucore->outlen < resp.response_length + sizeof(resp.cq_moderation_caps)) | ||
3857 | goto end; | ||
3858 | |||
3859 | resp.cq_moderation_caps.max_cq_moderation_count = | ||
3860 | attr.cq_caps.max_cq_moderation_count; | ||
3861 | resp.cq_moderation_caps.max_cq_moderation_period = | ||
3862 | attr.cq_caps.max_cq_moderation_period; | ||
3863 | resp.response_length += sizeof(resp.cq_moderation_caps); | ||
3855 | end: | 3864 | end: |
3856 | err = ib_copy_to_udata(ucore, &resp, resp.response_length); | 3865 | err = ib_copy_to_udata(ucore, &resp, resp.response_length); |
3857 | return err; | 3866 | return err; |
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 8e0d3780ce4e..0b484c023fa9 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h | |||
@@ -315,6 +315,11 @@ enum ib_cq_attr_mask { | |||
315 | IB_CQ_MODERATE = 1 << 0, | 315 | IB_CQ_MODERATE = 1 << 0, |
316 | }; | 316 | }; |
317 | 317 | ||
318 | struct ib_cq_caps { | ||
319 | u16 max_cq_moderation_count; | ||
320 | u16 max_cq_moderation_period; | ||
321 | }; | ||
322 | |||
318 | struct ib_device_attr { | 323 | struct ib_device_attr { |
319 | u64 fw_ver; | 324 | u64 fw_ver; |
320 | __be64 sys_image_guid; | 325 | __be64 sys_image_guid; |
@@ -365,6 +370,7 @@ struct ib_device_attr { | |||
365 | u32 max_wq_type_rq; | 370 | u32 max_wq_type_rq; |
366 | u32 raw_packet_caps; /* Use ib_raw_packet_caps enum */ | 371 | u32 raw_packet_caps; /* Use ib_raw_packet_caps enum */ |
367 | struct ib_tm_caps tm_caps; | 372 | struct ib_tm_caps tm_caps; |
373 | struct ib_cq_caps cq_caps; | ||
368 | }; | 374 | }; |
369 | 375 | ||
370 | enum ib_mtu { | 376 | enum ib_mtu { |
diff --git a/include/uapi/rdma/ib_user_verbs.h b/include/uapi/rdma/ib_user_verbs.h index cfa09d6095d6..5186fb12629b 100644 --- a/include/uapi/rdma/ib_user_verbs.h +++ b/include/uapi/rdma/ib_user_verbs.h | |||
@@ -125,6 +125,12 @@ struct ib_uverbs_comp_event_desc { | |||
125 | __u64 cq_handle; | 125 | __u64 cq_handle; |
126 | }; | 126 | }; |
127 | 127 | ||
128 | struct ib_uverbs_cq_moderation_caps { | ||
129 | __u16 max_cq_moderation_count; | ||
130 | __u16 max_cq_moderation_period; | ||
131 | __u32 reserved; | ||
132 | }; | ||
133 | |||
128 | /* | 134 | /* |
129 | * All commands from userspace should start with a __u32 command field | 135 | * All commands from userspace should start with a __u32 command field |
130 | * followed by __u16 in_words and out_words fields (which give the | 136 | * followed by __u16 in_words and out_words fields (which give the |
@@ -263,6 +269,7 @@ struct ib_uverbs_ex_query_device_resp { | |||
263 | __u32 max_wq_type_rq; | 269 | __u32 max_wq_type_rq; |
264 | __u32 raw_packet_caps; | 270 | __u32 raw_packet_caps; |
265 | struct ib_uverbs_tm_caps tm_caps; | 271 | struct ib_uverbs_tm_caps tm_caps; |
272 | struct ib_uverbs_cq_moderation_caps cq_moderation_caps; | ||
266 | }; | 273 | }; |
267 | 274 | ||
268 | struct ib_uverbs_query_port { | 275 | struct ib_uverbs_query_port { |