summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorMark Zhang <markzhang@nvidia.com>2025-06-30 13:52:35 +0300
committerLeon Romanovsky <leon@kernel.org>2025-08-13 13:16:11 +0300
commita3c9d0fcd3715541bbf97da2ddde9d032e2fe6d5 (patch)
treef877642188990a8fe21063028ffa8ab00d1f7b34 /include
parent810f874eda8e492701ba3623aa298caad61bb47c (diff)
downloadlinux-a3c9d0fcd3715541bbf97da2ddde9d032e2fe6d5.tar.xz
RDMA/ucma: Support write an event into a CM
Enable user-space to inject an event into a CM through it's event channel. Two new events are added and supported: RDMA_CM_EVENT_USER and RDMA_CM_EVENT_INTERNAL. With these 2 events a new event parameter "arg" is supported, which is passed from sender to receiver transparently. With this feature an application is able to write an event into a CM channel with a new user-space rdmacm API. For example thread T1 could write an event with the API: rdma_write_cm_event(cm_id, RDMA_CM_EVENT_USER, status, arg); and thread T2 could receive the event with rdma_get_cm_event(). Signed-off-by: Mark Zhang <markzhang@nvidia.com> Reviewed-by: Vlad Dumitrescu <vdumitrescu@nvidia.com> Link: https://patch.msgid.link/fdf49d0b17a45933c5d8c1d90605c9447d9a3c73.1751279794.git.leonro@nvidia.com Signed-off-by: Leon Romanovsky <leon@kernel.org>
Diffstat (limited to 'include')
-rw-r--r--include/rdma/rdma_cm.h5
-rw-r--r--include/uapi/rdma/rdma_user_cm.h16
2 files changed, 19 insertions, 2 deletions
diff --git a/include/rdma/rdma_cm.h b/include/rdma/rdma_cm.h
index 72d1568e4cfb..9bd930a83e6e 100644
--- a/include/rdma/rdma_cm.h
+++ b/include/rdma/rdma_cm.h
@@ -35,7 +35,9 @@ enum rdma_cm_event_type {
RDMA_CM_EVENT_ADDR_CHANGE,
RDMA_CM_EVENT_TIMEWAIT_EXIT,
RDMA_CM_EVENT_ADDRINFO_RESOLVED,
- RDMA_CM_EVENT_ADDRINFO_ERROR
+ RDMA_CM_EVENT_ADDRINFO_ERROR,
+ RDMA_CM_EVENT_USER,
+ RDMA_CM_EVENT_INTERNAL,
};
const char *__attribute_const__ rdma_event_msg(enum rdma_cm_event_type event);
@@ -98,6 +100,7 @@ struct rdma_cm_event {
union {
struct rdma_conn_param conn;
struct rdma_ud_param ud;
+ u64 arg;
} param;
struct rdma_ucm_ece ece;
};
diff --git a/include/uapi/rdma/rdma_user_cm.h b/include/uapi/rdma/rdma_user_cm.h
index 00501da0567e..5ded174687ee 100644
--- a/include/uapi/rdma/rdma_user_cm.h
+++ b/include/uapi/rdma/rdma_user_cm.h
@@ -68,7 +68,8 @@ enum {
RDMA_USER_CM_CMD_BIND,
RDMA_USER_CM_CMD_RESOLVE_ADDR,
RDMA_USER_CM_CMD_JOIN_MCAST,
- RDMA_USER_CM_CMD_RESOLVE_IB_SERVICE
+ RDMA_USER_CM_CMD_RESOLVE_IB_SERVICE,
+ RDMA_USER_CM_CMD_WRITE_CM_EVENT,
};
/* See IBTA Annex A11, servies ID bytes 4 & 5 */
@@ -304,6 +305,7 @@ struct rdma_ucm_event_resp {
union {
struct rdma_ucm_conn_param conn;
struct rdma_ucm_ud_param ud;
+ __u32 arg32[2];
} param;
__u32 reserved;
struct rdma_ucm_ece ece;
@@ -362,4 +364,16 @@ struct rdma_ucm_resolve_ib_service {
__u32 id;
struct rdma_ucm_ib_service ibs;
};
+
+struct rdma_ucm_write_cm_event {
+ __u32 id;
+ __u32 reserved;
+ __u32 event;
+ __u32 status;
+ union {
+ struct rdma_ucm_conn_param conn;
+ struct rdma_ucm_ud_param ud;
+ __u64 arg;
+ } param;
+};
#endif /* RDMA_USER_CM_H */