[openib-general] [RFC] [uCM] proposed API changes
Arlin Davis
ardavis at ichips.intel.com
Wed Aug 10 20:08:42 PDT 2005
Sean Hefty wrote:
>I'd like to propose the following changes to the user CM API. These
>would allow returning user specified context when reporting events to
>the user. I also added a call to retrieve the necessary QP attributes
>from the kernel CM that I would like to include as a part of the API/ABI
>changes. Comments?
>
>- Sean
>
>
Looks good so far. The context will save uDAPL a list search and the uCM
QP attributes is a much
needed feature that I have been anxiously watiting for.
Thanks,
-arlin
>
>Index: include/infiniband/cm.h
>===================================================================
>--- include/infiniband/cm.h (revision 2989)
>+++ include/infiniband/cm.h (working copy)
>@@ -77,8 +77,15 @@ enum ib_cm_data_size {
> IB_CM_SIDR_REP_INFO_LENGTH = 72
> };
>
>+struct ib_cm_id {
>+ void *context;
>+ uint64_t service_id;
>+ uint64_t service_mask;
>+ uint32_t handle;
>+};
>+
> struct ib_cm_req_event_param {
>- uint32_t listen_id;
>+ struct ib_cm_id *listen_id;
>
> struct ib_sa_path_rec *primary_path;
> struct ib_sa_path_rec *alternate_path;
>@@ -187,7 +194,7 @@ struct ib_cm_apr_event_param {
> };
>
> struct ib_cm_sidr_req_event_param {
>- uint32_t listen_id;
>+ struct ib_cm_id *listen_id;
> struct ib_device *device;
> uint8_t port;
> uint16_t pkey;
>@@ -212,7 +219,7 @@ struct ib_cm_sidr_rep_event_param {
> };
>
> struct ib_cm_event {
>- uint32_t cm_id;
>+ struct ib_cm_id *cm_id;
> enum ib_cm_event_type event;
> union {
> struct ib_cm_req_event_param req_rcvd;
>@@ -287,30 +294,13 @@ int ib_cm_get_fd(void);
> * Communication identifiers are used to track connection states, service
> * ID resolution requests, and listen requests.
> */
>-int ib_cm_create_id(uint32_t *cm_id);
>+struct ib_cm_id *ib_cm_create_id(void *context);
>
> /**
> * ib_cm_destroy_id - Destroy a connection identifier.
> * @cm_id: Connection identifier to destroy.
> */
>-int ib_cm_destroy_id(uint32_t cm_id);
>-
>-struct ib_cm_attr_param {
>- uint64_t service_id;
>- uint64_t service_mask;
>- uint32_t local_id;
>- uint32_t remote_id;
>-};
>-
>-/**
>- * ib_cm_attr_id - Get connection identifier attributes.
>- * @cm_id: Connection identifier to retrieve attributes.
>- * @param: Destination of retreived parameters.
>- *
>- * Not all parameters are valid during all connection states.
>- */
>-int ib_cm_attr_id(uint32_t cm_id,
>- struct ib_cm_attr_param *param);
>+int ib_cm_destroy_id(struct ib_cm_id *cm_id);
>
> /**
> * ib_cm_listen - Initiates listening on the specified service ID for
>@@ -323,7 +313,7 @@ int ib_cm_attr_id(uint32_t cm_id,
> * range of service IDs. If set to 0, the service ID is matched
> * exactly.
> */
>-int ib_cm_listen(uint32_t cm_id,
>+int ib_cm_listen(struct ib_cm_id *cm_id,
> uint64_t service_id,
> uint64_t service_mask);
>
>@@ -355,7 +345,7 @@ struct ib_cm_req_param {
> * @param: Connection request information needed to establish the
> * connection.
> */
>-int ib_cm_send_req(uint32_t cm_id,
>+int ib_cm_send_req(struct ib_cm_id *cm_id,
> struct ib_cm_req_param *param);
>
> struct ib_cm_rep_param {
>@@ -380,7 +370,7 @@ struct ib_cm_rep_param {
> * @param: Connection reply information needed to establish the
> * connection.
> */
>-int ib_cm_send_rep(uint32_t cm_id,
>+int ib_cm_send_rep(struct ib_cm_id *cm_id,
> struct ib_cm_rep_param *param);
>
> /**
>@@ -391,7 +381,7 @@ int ib_cm_send_rep(uint32_t cm_id,
> * ready to use message.
> * @private_data_len: Size of the private data buffer, in bytes.
> */
>-int ib_cm_send_rtu(uint32_t cm_id,
>+int ib_cm_send_rtu(struct ib_cm_id *cm_id,
> void *private_data,
> uint8_t private_data_len);
>
>@@ -404,7 +394,7 @@ int ib_cm_send_rtu(uint32_t cm_id,
> * disconnection request message.
> * @private_data_len: Size of the private data buffer, in bytes.
> */
>-int ib_cm_send_dreq(uint32_t cm_id,
>+int ib_cm_send_dreq(struct ib_cm_id *cm_id,
> void *private_data,
> uint8_t private_data_len);
>
>@@ -416,7 +406,7 @@ int ib_cm_send_dreq(uint32_t cm_id,
> * disconnection reply message.
> * @private_data_len: Size of the private data buffer, in bytes.
> */
>-int ib_cm_send_drep(uint32_t cm_id,
>+int ib_cm_send_drep(struct ib_cm_id *cm_id,
> void *private_data,
> uint8_t private_data_len);
>
>@@ -427,7 +417,7 @@ int ib_cm_send_drep(uint32_t cm_id,
> * This routine should be invoked by users who receive messages on a
> * connected QP before an RTU has been received.
> */
>-int ib_cm_establish(uint32_t cm_id);
>+int ib_cm_establish(struct ib_cm_id *cm_id);
>
> /**
> * ib_cm_send_rej - Sends a connection rejection message to the
>@@ -441,7 +431,7 @@ int ib_cm_establish(uint32_t cm_id);
> * rejection message.
> * @private_data_len: Size of the private data buffer, in bytes.
> */
>-int ib_cm_send_rej(uint32_t cm_id,
>+int ib_cm_send_rej(struct ib_cm_id *cm_id,
> enum ib_cm_rej_reason reason,
> void *ari,
> uint8_t ari_length,
>@@ -458,7 +448,7 @@ int ib_cm_send_rej(uint32_t cm_id,
> * message receipt acknowledgement.
> * @private_data_len: Size of the private data buffer, in bytes.
> */
>-int ib_cm_send_mra(uint32_t cm_id,
>+int ib_cm_send_mra(struct ib_cm_id *cm_id,
> uint8_t service_timeout,
> void *private_data,
> uint8_t private_data_len);
>@@ -473,12 +463,32 @@ int ib_cm_send_mra(uint32_t cm_id,
> * load alternate path message.
> * @private_data_len: Size of the private data buffer, in bytes.
> */
>-int ib_cm_send_lap(uint32_t cm_id,
>+int ib_cm_send_lap(struct ib_cm_id *cm_id,
> struct ib_sa_path_rec *alternate_path,
> void *private_data,
> uint8_t private_data_len);
>
> /**
>+ * ib_cm_init_qp_attr - Initializes the QP attributes for use in transitioning
>+ * to a specified QP state.
>+ * @cm_id: Communication identifier associated with the QP attributes to
>+ * initialize.
>+ * @qp_attr: On input, specifies the desired QP state. On output, the
>+ * mandatory and desired optional attributes will be set in order to
>+ * modify the QP to the specified state.
>+ * @qp_attr_mask: The QP attribute mask that may be used to transition the
>+ * QP to the specified state.
>+ *
>+ * Users must set the @qp_attr->qp_state to the desired QP state. This call
>+ * will set all required attributes for the given transition, along with
>+ * known optional attributes. Users may override the attributes returned from
>+ * this call before calling ib_modify_qp.
>+ */
>+int ib_cm_init_qp_attr(struct ib_cm_id *cm_id,
>+ struct ibv_qp_attr *qp_attr,
>+ int *qp_attr_mask);
>+
>+/**
> * ib_cm_send_apr - Sends an alternate path response message in response to
> * a load alternate path request.
> * @cm_id: Connection identifier associated with the alternate path response.
>@@ -490,7 +500,7 @@ int ib_cm_send_lap(uint32_t cm_id,
> * alternate path response message.
> * @private_data_len: Size of the private data buffer, in bytes.
> */
>-int ib_cm_send_apr(uint32_t cm_id,
>+int ib_cm_send_apr(struct ib_cm_id *cm_id,
> enum ib_cm_apr_status status,
> void *info,
> uint8_t info_length,
>@@ -514,7 +524,7 @@ struct ib_cm_sidr_req_param {
> * service ID resolution request.
> * @param: Service ID resolution request information.
> */
>-int ib_cm_send_sidr_req(uint32_t cm_id,
>+int ib_cm_send_sidr_req(struct ib_cm_id *cm_id,
> struct ib_cm_sidr_req_param *param);
>
> struct ib_cm_sidr_rep_param {
>@@ -534,7 +544,7 @@ struct ib_cm_sidr_rep_param {
> * resolution request.
> * @param: Service ID resolution reply information.
> */
>-int ib_cm_send_sidr_rep(uint32_t cm_id,
>+int ib_cm_send_sidr_rep(struct ib_cm_id *cm_id,
> struct ib_cm_sidr_rep_param *param);
>
> #endif /* CM_H */
>
>
>
>_______________________________________________
>openib-general mailing list
>openib-general at openib.org
>http://openib.org/mailman/listinfo/openib-general
>
>To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
>
>
>
More information about the general
mailing list