Skip to content

Commit 30344bf

Browse files
rpmsg: shouldn't generate any namespace message if the endpoint name is empty
Signed-off-by: Xiang Xiao <[email protected]>
1 parent 6cd4215 commit 30344bf

File tree

2 files changed

+38
-11
lines changed

2 files changed

+38
-11
lines changed

lib/include/openamp/rpmsg.h

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ static inline void rpmsg_init_ept(struct rpmsg_endpoint *ept,
289289
rpmsg_ept_cb cb,
290290
rpmsg_ns_unbind_cb ns_unbind_cb)
291291
{
292-
strncpy(ept->name, name, sizeof(ept->name));
292+
strncpy(ept->name, name ? name : "", sizeof(ept->name));
293293
ept->addr = src;
294294
ept->dest_addr = dest;
295295
ept->cb = cb;
@@ -326,6 +326,31 @@ int rpmsg_create_ept(struct rpmsg_endpoint *ept, struct rpmsg_device *rdev,
326326
const char *name, uint32_t src, uint32_t dest,
327327
rpmsg_ept_cb cb, rpmsg_ns_unbind_cb ns_unbind_cb);
328328

329+
330+
/**
331+
* rpmsg_create_anon_ept - like rpmsg_create_ept but without name
332+
*
333+
* Create a RPMsg endpoint, initialize it with source address,
334+
* remoteproc address and endpoint callback, and register it to
335+
* the RPMsg device.
336+
*
337+
* @ept: pointer to rpmsg endpoint
338+
* @src: local address of the endpoint
339+
* @dest: target address of the endpoint
340+
* @cb: endpoint callback
341+
*
342+
* In essence, an rpmsg endpoint represents a listener on the rpmsg bus, as
343+
* it binds an rpmsg address with an rx callback handler.
344+
*/
345+
346+
static inline int rpmsg_create_anon_ept(struct rpmsg_endpoint *ept,
347+
struct rpmsg_device *rdev,
348+
uint32_t src, uint32_t dest,
349+
rpmsg_ept_cb cb)
350+
{
351+
return rpmsg_create_ept(ept, rdev, NULL, src, dest, cb, NULL);
352+
}
353+
329354
/**
330355
* rpmsg_destroy_ept - destroy rpmsg endpoint and unregister it from rpmsg
331356
* device

lib/rpmsg/rpmsg.c

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -227,15 +227,17 @@ int rpmsg_create_ept(struct rpmsg_endpoint *ept, struct rpmsg_device *rdev,
227227
rpmsg_init_ept(ept, name, addr, dest, cb, unbind_cb);
228228
rpmsg_register_endpoint(rdev, ept);
229229

230-
/* Send NS announcement to remote processor */
231-
metal_mutex_release(&rdev->lock);
232-
if (rdev->support_ns && ept->dest_addr == RPMSG_ADDR_ANY)
233-
status = rpmsg_send_ns_message(ept, RPMSG_NS_CREATE);
234-
else if (rdev->support_ack && ept->dest_addr != RPMSG_ADDR_ANY)
235-
status = rpmsg_send_ns_message(ept, RPMSG_NS_CREATE_ACK);
236-
metal_mutex_acquire(&rdev->lock);
237-
if (status)
238-
rpmsg_unregister_endpoint(ept);
230+
if (ept->name[0]) {
231+
/* Send NS announcement to remote processor */
232+
metal_mutex_release(&rdev->lock);
233+
if (rdev->support_ns && ept->dest_addr == RPMSG_ADDR_ANY)
234+
status = rpmsg_send_ns_message(ept, RPMSG_NS_CREATE);
235+
else if (rdev->support_ack && ept->dest_addr != RPMSG_ADDR_ANY)
236+
status = rpmsg_send_ns_message(ept, RPMSG_NS_CREATE_ACK);
237+
metal_mutex_acquire(&rdev->lock);
238+
if (status)
239+
rpmsg_unregister_endpoint(ept);
240+
}
239241

240242
ret_status:
241243
metal_mutex_release(&rdev->lock);
@@ -258,7 +260,7 @@ void rpmsg_destroy_ept(struct rpmsg_endpoint *ept)
258260
return;
259261

260262
rdev = ept->rdev;
261-
if (rdev->support_ns && ept->addr != RPMSG_NS_EPT_ADDR)
263+
if (ept->name[0] && rdev->support_ns && ept->addr != RPMSG_NS_EPT_ADDR)
262264
(void)rpmsg_send_ns_message(ept, RPMSG_NS_DESTROY);
263265
metal_mutex_acquire(&rdev->lock);
264266
rpmsg_unregister_endpoint(ept);

0 commit comments

Comments
 (0)