 + * the remote service pointer.
 + */
 +static struct virtio_rpmsg_rsvc *
-+virtio_rpmsg_find_rsvc_by_name(struct virtproc_info *vrp, char *name)
++virtio_rpmsg_find_rsvc(struct virtproc_info *vrp, char *name, u32 addr)
 +{
 +	struct virtio_rpmsg_rsvc *rsvc;
 +
 +	list_for_each_entry(rsvc, &vrp->rsvcs, node) {
-+		if (!strncmp(rsvc->name, name, RPMSG_NAME_SIZE))
-+			/* remote service has found */
-+			return rsvc;
++		if (!strncmp(rsvc->name, name, RPMSG_NAME_SIZE)) {
++			if (addr == RPMSG_ADDR_ANY || addr == rsvc->addr)
++				/* remote service has found */
++				return rsvc;
++		}
 +	}
 +
 +	return NULL;
 +}
 +
 +/**
-+ * virtio_rpmsg_create_rsvc_by_name - create remote service
++ * virtio_rpmsg_create_rsvc - create remote service
 + * @vrp: virtio remote proc information
 + * @name: remote service name
++ * @addr: remote service address
 + *
 + * The caller is supposed to have mutex lock before calling this function
 + *

 /*
  * We're allocating buffers of 512 bytes each for communications. The
  * number of buffers will be computed from the number of buffers supported
@@ -216,6 +250,199 @@ rpmsg_sg_init(struct scatterlist *sg, void *cpu_addr, unsigned int len)
 	}
 }
 
+#ifdef CONFIG_RPMSG_VIRTIO_CHAR
+/**
+ * virtio_rpmsg_find_rsvc_by_name - find the announced remote service
+ * @vrp: virtio remote proc information
+ * @name: remote service name
+ *
+ * The caller is supposed to have mutex lock before calling this function
+ *

 /**
  * __ept_release() - deallocate an rpmsg endpoint
  * @kref: the ept's reference count
@@ -229,26 +437,53 @@ static void __ept_release(struct kref *kref)
 {
 	struct rpmsg_endpoint *ept = container_of(kref, struct rpmsg_endpoint,
 						  refcount);
