@@ -424,6 +424,8 @@ static void qcom_glink_handle_intent_req_ack(struct qcom_glink *glink,
424424 struct glink_channel * channel ;
425425 unsigned long flags ;
426426
427+ qcom_glink_rx_advance (glink , ALIGN (sizeof (struct glink_msg ), 8 ));
428+
427429 spin_lock_irqsave (& glink -> idr_lock , flags );
428430 channel = idr_find (& glink -> rcids , cid );
429431 spin_unlock_irqrestore (& glink -> idr_lock , flags );
@@ -745,6 +747,8 @@ static void qcom_glink_handle_rx_done(struct qcom_glink *glink,
745747 struct glink_channel * channel ;
746748 unsigned long flags ;
747749
750+ qcom_glink_rx_advance (glink , ALIGN (sizeof (struct glink_msg ), 8 ));
751+
748752 spin_lock_irqsave (& glink -> idr_lock , flags );
749753 channel = idr_find (& glink -> rcids , cid );
750754 spin_unlock_irqrestore (& glink -> idr_lock , flags );
@@ -952,6 +956,12 @@ static int qcom_glink_rx_data(struct qcom_glink *glink, size_t avail)
952956 return ret ;
953957}
954958
959+ static void qcom_glink_rx_read_notif (struct qcom_glink * glink )
960+ {
961+ qcom_glink_rx_advance (glink , ALIGN (sizeof (struct glink_msg ), 8 ));
962+ qcom_glink_tx_kick (glink );
963+ }
964+
955965static void qcom_glink_handle_intent (struct qcom_glink * glink ,
956966 unsigned int cid ,
957967 unsigned int count ,
@@ -1022,6 +1032,8 @@ static int qcom_glink_rx_open_ack(struct qcom_glink *glink, unsigned int lcid)
10221032{
10231033 struct glink_channel * channel ;
10241034
1035+ qcom_glink_rx_advance (glink , ALIGN (sizeof (struct glink_msg ), 8 ));
1036+
10251037 spin_lock (& glink -> idr_lock );
10261038 channel = idr_find (& glink -> lcids , lcid );
10271039 spin_unlock (& glink -> idr_lock );
@@ -1067,6 +1079,8 @@ static void qcom_glink_handle_signals(struct qcom_glink *glink,
10671079 unsigned long flags ;
10681080 bool enable ;
10691081
1082+ qcom_glink_rx_advance (glink , ALIGN (sizeof (struct glink_msg ), 8 ));
1083+
10701084 spin_lock_irqsave (& glink -> idr_lock , flags );
10711085 channel = idr_find (& glink -> rcids , rcid );
10721086 spin_unlock_irqrestore (& glink -> idr_lock , flags );
@@ -1114,7 +1128,6 @@ void qcom_glink_native_rx(struct qcom_glink *glink)
11141128 break ;
11151129 case GLINK_CMD_OPEN_ACK :
11161130 ret = qcom_glink_rx_open_ack (glink , param1 );
1117- qcom_glink_rx_advance (glink , ALIGN (sizeof (msg ), 8 ));
11181131 break ;
11191132 case GLINK_CMD_OPEN :
11201133 ret = qcom_glink_rx_defer (glink , param2 );
@@ -1124,27 +1137,22 @@ void qcom_glink_native_rx(struct qcom_glink *glink)
11241137 ret = qcom_glink_rx_data (glink , avail );
11251138 break ;
11261139 case GLINK_CMD_READ_NOTIF :
1127- qcom_glink_rx_advance (glink , ALIGN (sizeof (msg ), 8 ));
1128- qcom_glink_tx_kick (glink );
1140+ qcom_glink_rx_read_notif (glink );
11291141 break ;
11301142 case GLINK_CMD_INTENT :
11311143 qcom_glink_handle_intent (glink , param1 , param2 , avail );
11321144 break ;
11331145 case GLINK_CMD_RX_DONE :
11341146 qcom_glink_handle_rx_done (glink , param1 , param2 , false);
1135- qcom_glink_rx_advance (glink , ALIGN (sizeof (msg ), 8 ));
11361147 break ;
11371148 case GLINK_CMD_RX_DONE_W_REUSE :
11381149 qcom_glink_handle_rx_done (glink , param1 , param2 , true);
1139- qcom_glink_rx_advance (glink , ALIGN (sizeof (msg ), 8 ));
11401150 break ;
11411151 case GLINK_CMD_RX_INTENT_REQ_ACK :
11421152 qcom_glink_handle_intent_req_ack (glink , param1 , param2 );
1143- qcom_glink_rx_advance (glink , ALIGN (sizeof (msg ), 8 ));
11441153 break ;
11451154 case GLINK_CMD_SIGNALS :
11461155 qcom_glink_handle_signals (glink , param1 , param2 );
1147- qcom_glink_rx_advance (glink , ALIGN (sizeof (msg ), 8 ));
11481156 break ;
11491157 default :
11501158 dev_err (glink -> dev , "unhandled rx cmd: %d\n" , cmd );
0 commit comments