@@ -176,17 +176,14 @@ struct rpmsg_endpoint *rpmsg_get_endpoint(struct rpmsg_device *rdev,
176176
177177static void rpmsg_unregister_endpoint (struct rpmsg_endpoint * ept )
178178{
179- struct rpmsg_device * rdev ;
180-
181- if (!ept )
182- return ;
183-
184- rdev = ept -> rdev ;
179+ struct rpmsg_device * rdev = ept -> rdev ;
185180
181+ metal_mutex_acquire (& rdev -> lock );
186182 if (ept -> addr != RPMSG_ADDR_ANY )
187183 rpmsg_release_address (rdev -> bitmap , RPMSG_ADDR_BMP_SIZE ,
188184 ept -> addr );
189185 metal_list_del (& ept -> node );
186+ metal_mutex_release (& rdev -> lock );
190187}
191188
192189void rpmsg_register_endpoint (struct rpmsg_device * rdev ,
@@ -230,15 +227,15 @@ int rpmsg_create_ept(struct rpmsg_endpoint *ept, struct rpmsg_device *rdev,
230227
231228 rpmsg_init_ept (ept , name , addr , dest , cb , unbind_cb );
232229 rpmsg_register_endpoint (rdev , ept );
230+ metal_mutex_release (& rdev -> lock );
233231
234- if (rdev -> support_ns && ept -> dest_addr == RPMSG_ADDR_ANY ) {
235- /* Send NS announcement to remote processor */
236- metal_mutex_release (& rdev -> lock );
232+ /* Send NS announcement to remote processor */
233+ if (rdev -> support_ns && ept -> dest_addr == RPMSG_ADDR_ANY )
237234 status = rpmsg_send_ns_message (ept , RPMSG_NS_CREATE );
238- metal_mutex_acquire ( & rdev -> lock );
239- if (status )
240- rpmsg_unregister_endpoint (ept );
241- }
235+
236+ if (status )
237+ rpmsg_unregister_endpoint (ept );
238+ return status ;
242239
243240ret_status :
244241 metal_mutex_release (& rdev -> lock );
@@ -261,9 +258,10 @@ void rpmsg_destroy_ept(struct rpmsg_endpoint *ept)
261258 return ;
262259
263260 rdev = ept -> rdev ;
261+ if (!rdev )
262+ return ;
263+
264264 if (ept -> name [0 ] && rdev -> support_ns && ept -> addr != RPMSG_NS_EPT_ADDR )
265265 (void )rpmsg_send_ns_message (ept , RPMSG_NS_DESTROY );
266- metal_mutex_acquire (& rdev -> lock );
267266 rpmsg_unregister_endpoint (ept );
268- metal_mutex_release (& rdev -> lock );
269267}
0 commit comments