Skip to content

Commit 5e9a288

Browse files
rpmsg: move the lock to rpmsg_unregister_endpoint
to simplify the work in the furture Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
1 parent 14abca2 commit 5e9a288

1 file changed

Lines changed: 13 additions & 9 deletions

File tree

lib/rpmsg/rpmsg.c

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

188190
void 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

239242
ret_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

Comments
 (0)