@@ -36,6 +36,7 @@ MODULE_LICENSE("Dual BSD/GPL");
36
36
37
37
#define CM_DESTROY_ID_WAIT_TIMEOUT 10000 /* msecs */
38
38
#define CM_DIRECT_RETRY_CTX ((void *) 1UL)
39
+ #define CM_MRA_SETTING 24 /* 4.096us * 2^24 = ~68.7 seconds */
39
40
40
41
static const char * const ibcm_rej_reason_strs [] = {
41
42
[IB_CM_REJ_NO_QP ] = "no QP" ,
@@ -241,7 +242,6 @@ struct cm_id_private {
241
242
u8 initiator_depth ;
242
243
u8 retry_count ;
243
244
u8 rnr_retry_count ;
244
- u8 service_timeout ;
245
245
u8 target_ack_delay ;
246
246
247
247
struct list_head work_list ;
@@ -1872,7 +1872,7 @@ static void cm_process_work(struct cm_id_private *cm_id_priv,
1872
1872
1873
1873
static void cm_format_mra (struct cm_mra_msg * mra_msg ,
1874
1874
struct cm_id_private * cm_id_priv ,
1875
- enum cm_msg_response msg_mraed , u8 service_timeout ,
1875
+ enum cm_msg_response msg_mraed ,
1876
1876
const void * private_data , u8 private_data_len )
1877
1877
{
1878
1878
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,
1881
1881
be32_to_cpu (cm_id_priv -> id .local_id ));
1882
1882
IBA_SET (CM_MRA_REMOTE_COMM_ID , mra_msg ,
1883
1883
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 );
1885
1885
1886
1886
if (private_data && private_data_len )
1887
1887
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,
1960
1960
switch (cm_id_priv -> id .state ) {
1961
1961
case IB_CM_MRA_REQ_SENT :
1962
1962
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 ,
1964
1964
cm_id_priv -> private_data ,
1965
1965
cm_id_priv -> private_data_len );
1966
1966
break ;
@@ -2454,7 +2454,7 @@ static void cm_dup_rep_handler(struct cm_work *work)
2454
2454
cm_id_priv -> private_data_len );
2455
2455
else if (cm_id_priv -> id .state == IB_CM_MRA_REP_SENT )
2456
2456
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 ,
2458
2458
cm_id_priv -> private_data ,
2459
2459
cm_id_priv -> private_data_len );
2460
2460
else
@@ -3094,26 +3094,13 @@ static int cm_rej_handler(struct cm_work *work)
3094
3094
return - EINVAL ;
3095
3095
}
3096
3096
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 )
3101
3098
{
3102
3099
struct cm_id_private * cm_id_priv ;
3103
- struct ib_mad_send_buf * msg ;
3104
3100
enum ib_cm_state cm_state ;
3105
3101
enum ib_cm_lap_state lap_state ;
3106
- enum cm_msg_response msg_response ;
3107
- void * data ;
3108
3102
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 ;
3117
3104
3118
3105
cm_id_priv = container_of (cm_id , struct cm_id_private , id );
3119
3106
@@ -3122,58 +3109,33 @@ int ib_send_cm_mra(struct ib_cm_id *cm_id,
3122
3109
case IB_CM_REQ_RCVD :
3123
3110
cm_state = IB_CM_MRA_REQ_SENT ;
3124
3111
lap_state = cm_id -> lap_state ;
3125
- msg_response = CM_MSG_RESPONSE_REQ ;
3126
3112
break ;
3127
3113
case IB_CM_REP_RCVD :
3128
3114
cm_state = IB_CM_MRA_REP_SENT ;
3129
3115
lap_state = cm_id -> lap_state ;
3130
- msg_response = CM_MSG_RESPONSE_REP ;
3131
3116
break ;
3132
3117
case IB_CM_ESTABLISHED :
3133
3118
if (cm_id -> lap_state == IB_CM_LAP_RCVD ) {
3134
3119
cm_state = cm_id -> state ;
3135
3120
lap_state = IB_CM_MRA_LAP_SENT ;
3136
- msg_response = CM_MSG_RESPONSE_OTHER ;
3137
3121
break ;
3138
3122
}
3139
3123
fallthrough ;
3140
3124
default :
3141
- trace_icm_send_mra_unknown_err (& cm_id_priv -> id );
3125
+ trace_icm_prepare_mra_unknown_err (& cm_id_priv -> id );
3142
3126
ret = - EINVAL ;
3143
3127
goto error_unlock ;
3144
3128
}
3145
3129
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
-
3162
3130
cm_id -> state = cm_state ;
3163
3131
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 );
3168
3133
3169
- error_free_msg :
3170
- cm_free_msg (msg );
3171
3134
error_unlock :
3172
3135
spin_unlock_irqrestore (& cm_id_priv -> lock , flags );
3173
- kfree (data );
3174
3136
return ret ;
3175
3137
}
3176
- EXPORT_SYMBOL (ib_send_cm_mra );
3138
+ EXPORT_SYMBOL (ib_prepare_cm_mra );
3177
3139
3178
3140
static struct cm_id_private * cm_acquire_mraed_id (struct cm_mra_msg * mra_msg )
3179
3141
{
@@ -3377,7 +3339,6 @@ static int cm_lap_handler(struct cm_work *work)
3377
3339
3378
3340
cm_format_mra ((struct cm_mra_msg * ) msg -> mad , cm_id_priv ,
3379
3341
CM_MSG_RESPONSE_OTHER ,
3380
- cm_id_priv -> service_timeout ,
3381
3342
cm_id_priv -> private_data ,
3382
3343
cm_id_priv -> private_data_len );
3383
3344
spin_unlock_irq (& cm_id_priv -> lock );
0 commit comments