@@ -181,11 +181,13 @@ static void rpmsg_unregister_endpoint(struct rpmsg_endpoint *ept)
181181{
182182 struct rpmsg_device * rdev = ept -> rdev ;
183183
184+ metal_mutex_acquire (& rdev -> lock );
184185 if (ept -> addr != RPMSG_ADDR_ANY )
185186 rpmsg_release_address (rdev -> bitmap , RPMSG_ADDR_BMP_SIZE ,
186187 ept -> addr );
187188 metal_list_del (& ept -> node );
188189 ept -> rdev = NULL ;
190+ metal_mutex_release (& rdev -> lock );
189191}
190192
191193void rpmsg_register_endpoint (struct rpmsg_device * rdev ,
@@ -229,15 +231,16 @@ int rpmsg_create_ept(struct rpmsg_endpoint *ept, struct rpmsg_device *rdev,
229231
230232 rpmsg_init_ept (ept , name , addr , dest , cb , unbind_cb );
231233 rpmsg_register_endpoint (rdev , ept );
234+ metal_mutex_release (& rdev -> lock );
232235
233- if ( rdev -> support_ns && ept -> dest_addr == RPMSG_ADDR_ANY ) {
234- /* Send NS announcement to remote processor */
235- metal_mutex_release ( & rdev -> lock );
236+ /* Send NS announcement to remote processor */
237+ if ( ept -> name [ 0 ] && rdev -> support_ns &&
238+ ept -> dest_addr == RPMSG_ADDR_ANY )
236239 status = rpmsg_send_ns_message (ept , RPMSG_NS_CREATE );
237- metal_mutex_acquire ( & rdev -> lock );
238- if (status )
239- rpmsg_unregister_endpoint (ept );
240- }
240+
241+ if (status )
242+ rpmsg_unregister_endpoint (ept );
243+ return status ;
241244
242245ret_status :
243246 metal_mutex_release (& rdev -> lock );
@@ -262,7 +265,5 @@ void rpmsg_destroy_ept(struct rpmsg_endpoint *ept)
262265 rdev = ept -> rdev ;
263266 if (ept -> name [0 ] && rdev -> support_ns && ept -> addr != RPMSG_NS_EPT_ADDR )
264267 (void )rpmsg_send_ns_message (ept , RPMSG_NS_DESTROY );
265- metal_mutex_acquire (& rdev -> lock );
266268 rpmsg_unregister_endpoint (ept );
267- metal_mutex_release (& rdev -> lock );
268269}
0 commit comments