mirror of
https://github.com/OpenAMP/open-amp.git
synced 2026-02-06 11:13:09 +08:00
check VIRTIO_RPMSG_F_NS before send the namespace message
Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
This commit is contained in:
@@ -97,6 +97,7 @@ struct rpmsg_device_ops {
|
||||
* @ns_bind_cb: callback handler for name service announcement without local
|
||||
* endpoints waiting to bind.
|
||||
* @ops: RPMsg device operations
|
||||
* @support_ns: create/destroy namespace message
|
||||
*/
|
||||
struct rpmsg_device {
|
||||
struct metal_list endpoints;
|
||||
@@ -105,6 +106,7 @@ struct rpmsg_device {
|
||||
metal_mutex_t lock;
|
||||
rpmsg_ns_bind_cb ns_bind_cb;
|
||||
struct rpmsg_device_ops ops;
|
||||
bool support_ns;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -227,7 +227,7 @@ int rpmsg_create_ept(struct rpmsg_endpoint *ept, struct rpmsg_device *rdev,
|
||||
rpmsg_init_ept(ept, name, addr, dest, cb, unbind_cb);
|
||||
rpmsg_register_endpoint(rdev, ept);
|
||||
|
||||
if (ept->dest_addr == RPMSG_ADDR_ANY) {
|
||||
if (rdev->support_ns && ept->dest_addr == RPMSG_ADDR_ANY) {
|
||||
/* Send NS announcement to remote processor */
|
||||
metal_mutex_release(&rdev->lock);
|
||||
status = rpmsg_send_ns_message(ept, RPMSG_NS_CREATE);
|
||||
@@ -257,7 +257,7 @@ void rpmsg_destroy_ept(struct rpmsg_endpoint *ept)
|
||||
return;
|
||||
|
||||
rdev = ept->rdev;
|
||||
if (ept->addr != RPMSG_NS_EPT_ADDR)
|
||||
if (rdev->support_ns && ept->addr != RPMSG_NS_EPT_ADDR)
|
||||
(void)rpmsg_send_ns_message(ept, RPMSG_NS_DESTROY);
|
||||
metal_mutex_acquire(&rdev->lock);
|
||||
rpmsg_unregister_endpoint(ept);
|
||||
|
||||
@@ -538,6 +538,7 @@ int rpmsg_init_vdev(struct rpmsg_virtio_device *rvdev,
|
||||
}
|
||||
#endif /*!VIRTIO_MASTER_ONLY*/
|
||||
vdev->features = rpmsg_virtio_get_features(rvdev);
|
||||
rdev->support_ns = !!(vdev->features & (1 << VIRTIO_RPMSG_F_NS));
|
||||
|
||||
#ifndef VIRTIO_SLAVE_ONLY
|
||||
if (role == RPMSG_MASTER) {
|
||||
@@ -633,7 +634,7 @@ int rpmsg_init_vdev(struct rpmsg_virtio_device *rvdev,
|
||||
* Create name service announcement endpoint if device supports name
|
||||
* service announcement feature.
|
||||
*/
|
||||
if (vdev->features & (1 << VIRTIO_RPMSG_F_NS)) {
|
||||
if (rdev->support_ns) {
|
||||
rpmsg_init_ept(&rdev->ns_ept, "NS",
|
||||
RPMSG_NS_EPT_ADDR, RPMSG_NS_EPT_ADDR,
|
||||
rpmsg_virtio_ns_callback, NULL);
|
||||
|
||||
Reference in New Issue
Block a user