@@ -178,11 +178,13 @@ static void rpmsg_unregister_endpoint(struct rpmsg_endpoint *ept)
178178{
179179 struct rpmsg_device * rdev = ept -> rdev ;
180180
181+ metal_mutex_acquire (& rdev -> lock );
181182 if (ept -> addr != RPMSG_ADDR_ANY )
182183 rpmsg_release_address (rdev -> bitmap , RPMSG_ADDR_BMP_SIZE ,
183184 ept -> addr );
184185 metal_list_del (& ept -> node );
185186 ept -> rdev = NULL ;
187+ metal_mutex_release (& rdev -> lock );
186188}
187189
188190void rpmsg_register_endpoint (struct rpmsg_device * rdev ,
@@ -226,15 +228,16 @@ int rpmsg_create_ept(struct rpmsg_endpoint *ept, struct rpmsg_device *rdev,
226228
227229 rpmsg_init_ept (ept , name , addr , dest , cb , unbind_cb );
228230 rpmsg_register_endpoint (rdev , ept );
231+ metal_mutex_release (& rdev -> lock );
229232
230- if ( rdev -> support_ns && ept -> dest_addr == RPMSG_ADDR_ANY ) {
231- /* Send NS announcement to remote processor */
232- metal_mutex_release ( & rdev -> lock );
233+ /* Send NS announcement to remote processor */
234+ if ( ept -> name [ 0 ] && rdev -> support_ns &&
235+ ept -> dest_addr == RPMSG_ADDR_ANY )
233236 status = rpmsg_send_ns_message (ept , RPMSG_NS_CREATE );
234- metal_mutex_acquire ( & rdev -> lock );
235- if (status )
236- rpmsg_unregister_endpoint (ept );
237- }
237+
238+ if (status )
239+ rpmsg_unregister_endpoint (ept );
240+ return status ;
238241
239242ret_status :
240243 metal_mutex_release (& rdev -> lock );
@@ -257,9 +260,10 @@ void rpmsg_destroy_ept(struct rpmsg_endpoint *ept)
257260 return ;
258261
259262 rdev = ept -> rdev ;
263+ if (!rdev )
264+ return ;
265+
260266 if (ept -> name [0 ] && rdev -> support_ns && ept -> addr != RPMSG_NS_EPT_ADDR )
261267 (void )rpmsg_send_ns_message (ept , RPMSG_NS_DESTROY );
262- metal_mutex_acquire (& rdev -> lock );
263268 rpmsg_unregister_endpoint (ept );
264- metal_mutex_release (& rdev -> lock );
265269}
0 commit comments