@@ -36,6 +36,7 @@ MODULE_LICENSE("Dual BSD/GPL");
3636
3737#define CM_DESTROY_ID_WAIT_TIMEOUT 10000 /* msecs */
3838#define CM_DIRECT_RETRY_CTX ((void *) 1UL)
39+ #define CM_MRA_SETTING 24 /* 4.096us * 2^24 = ~68.7 seconds */
3940
4041static const char * const ibcm_rej_reason_strs [] = {
4142 [IB_CM_REJ_NO_QP ] = "no QP" ,
@@ -241,7 +242,6 @@ struct cm_id_private {
241242 u8 initiator_depth ;
242243 u8 retry_count ;
243244 u8 rnr_retry_count ;
244- u8 service_timeout ;
245245 u8 target_ack_delay ;
246246
247247 struct list_head work_list ;
@@ -1872,7 +1872,7 @@ static void cm_process_work(struct cm_id_private *cm_id_priv,
18721872
18731873static void cm_format_mra (struct cm_mra_msg * mra_msg ,
18741874 struct cm_id_private * cm_id_priv ,
1875- enum cm_msg_response msg_mraed , u8 service_timeout ,
1875+ enum cm_msg_response msg_mraed ,
18761876 const void * private_data , u8 private_data_len )
18771877{
18781878 cm_format_mad_hdr (& mra_msg -> hdr , CM_MRA_ATTR_ID , cm_id_priv -> tid );
@@ -1881,7 +1881,7 @@ static void cm_format_mra(struct cm_mra_msg *mra_msg,
18811881 be32_to_cpu (cm_id_priv -> id .local_id ));
18821882 IBA_SET (CM_MRA_REMOTE_COMM_ID , mra_msg ,
18831883 be32_to_cpu (cm_id_priv -> id .remote_id ));
1884- IBA_SET (CM_MRA_SERVICE_TIMEOUT , mra_msg , service_timeout );
1884+ IBA_SET (CM_MRA_SERVICE_TIMEOUT , mra_msg , CM_MRA_SETTING );
18851885
18861886 if (private_data && private_data_len )
18871887 IBA_SET_MEM (CM_MRA_PRIVATE_DATA , mra_msg , private_data ,
@@ -1960,7 +1960,7 @@ static void cm_dup_req_handler(struct cm_work *work,
19601960 switch (cm_id_priv -> id .state ) {
19611961 case IB_CM_MRA_REQ_SENT :
19621962 cm_format_mra ((struct cm_mra_msg * ) msg -> mad , cm_id_priv ,
1963- CM_MSG_RESPONSE_REQ , cm_id_priv -> service_timeout ,
1963+ CM_MSG_RESPONSE_REQ ,
19641964 cm_id_priv -> private_data ,
19651965 cm_id_priv -> private_data_len );
19661966 break ;
@@ -2454,7 +2454,7 @@ static void cm_dup_rep_handler(struct cm_work *work)
24542454 cm_id_priv -> private_data_len );
24552455 else if (cm_id_priv -> id .state == IB_CM_MRA_REP_SENT )
24562456 cm_format_mra ((struct cm_mra_msg * ) msg -> mad , cm_id_priv ,
2457- CM_MSG_RESPONSE_REP , cm_id_priv -> service_timeout ,
2457+ CM_MSG_RESPONSE_REP ,
24582458 cm_id_priv -> private_data ,
24592459 cm_id_priv -> private_data_len );
24602460 else
@@ -3094,26 +3094,13 @@ static int cm_rej_handler(struct cm_work *work)
30943094 return - EINVAL ;
30953095}
30963096
3097- int ib_send_cm_mra (struct ib_cm_id * cm_id ,
3098- u8 service_timeout ,
3099- const void * private_data ,
3100- u8 private_data_len )
3097+ int ib_prepare_cm_mra (struct ib_cm_id * cm_id )
31013098{
31023099 struct cm_id_private * cm_id_priv ;
3103- struct ib_mad_send_buf * msg ;
31043100 enum ib_cm_state cm_state ;
31053101 enum ib_cm_lap_state lap_state ;
3106- enum cm_msg_response msg_response ;
3107- void * data ;
31083102 unsigned long flags ;
3109- int ret ;
3110-
3111- if (private_data && private_data_len > IB_CM_MRA_PRIVATE_DATA_SIZE )
3112- return - EINVAL ;
3113-
3114- data = cm_copy_private_data (private_data , private_data_len );
3115- if (IS_ERR (data ))
3116- return PTR_ERR (data );
3103+ int ret = 0 ;
31173104
31183105 cm_id_priv = container_of (cm_id , struct cm_id_private , id );
31193106
@@ -3122,58 +3109,33 @@ int ib_send_cm_mra(struct ib_cm_id *cm_id,
31223109 case IB_CM_REQ_RCVD :
31233110 cm_state = IB_CM_MRA_REQ_SENT ;
31243111 lap_state = cm_id -> lap_state ;
3125- msg_response = CM_MSG_RESPONSE_REQ ;
31263112 break ;
31273113 case IB_CM_REP_RCVD :
31283114 cm_state = IB_CM_MRA_REP_SENT ;
31293115 lap_state = cm_id -> lap_state ;
3130- msg_response = CM_MSG_RESPONSE_REP ;
31313116 break ;
31323117 case IB_CM_ESTABLISHED :
31333118 if (cm_id -> lap_state == IB_CM_LAP_RCVD ) {
31343119 cm_state = cm_id -> state ;
31353120 lap_state = IB_CM_MRA_LAP_SENT ;
3136- msg_response = CM_MSG_RESPONSE_OTHER ;
31373121 break ;
31383122 }
31393123 fallthrough ;
31403124 default :
3141- trace_icm_send_mra_unknown_err (& cm_id_priv -> id );
3125+ trace_icm_prepare_mra_unknown_err (& cm_id_priv -> id );
31423126 ret = - EINVAL ;
31433127 goto error_unlock ;
31443128 }
31453129
3146- if (!(service_timeout & IB_CM_MRA_FLAG_DELAY )) {
3147- msg = cm_alloc_msg (cm_id_priv );
3148- if (IS_ERR (msg )) {
3149- ret = PTR_ERR (msg );
3150- goto error_unlock ;
3151- }
3152-
3153- cm_format_mra ((struct cm_mra_msg * ) msg -> mad , cm_id_priv ,
3154- msg_response , service_timeout ,
3155- private_data , private_data_len );
3156- trace_icm_send_mra (cm_id );
3157- ret = ib_post_send_mad (msg , NULL );
3158- if (ret )
3159- goto error_free_msg ;
3160- }
3161-
31623130 cm_id -> state = cm_state ;
31633131 cm_id -> lap_state = lap_state ;
3164- cm_id_priv -> service_timeout = service_timeout ;
3165- cm_set_private_data (cm_id_priv , data , private_data_len );
3166- spin_unlock_irqrestore (& cm_id_priv -> lock , flags );
3167- return 0 ;
3132+ cm_set_private_data (cm_id_priv , NULL , 0 );
31683133
3169- error_free_msg :
3170- cm_free_msg (msg );
31713134error_unlock :
31723135 spin_unlock_irqrestore (& cm_id_priv -> lock , flags );
3173- kfree (data );
31743136 return ret ;
31753137}
3176- EXPORT_SYMBOL (ib_send_cm_mra );
3138+ EXPORT_SYMBOL (ib_prepare_cm_mra );
31773139
31783140static struct cm_id_private * cm_acquire_mraed_id (struct cm_mra_msg * mra_msg )
31793141{
@@ -3377,7 +3339,6 @@ static int cm_lap_handler(struct cm_work *work)
33773339
33783340 cm_format_mra ((struct cm_mra_msg * ) msg -> mad , cm_id_priv ,
33793341 CM_MSG_RESPONSE_OTHER ,
3380- cm_id_priv -> service_timeout ,
33813342 cm_id_priv -> private_data ,
33823343 cm_id_priv -> private_data_len );
33833344 spin_unlock_irq (& cm_id_priv -> lock );
0 commit comments