From: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
To: Bjorn Andersson <bjorn.andersson@linaro.org>,
Ohad Ben-Cohen <ohad@wizery.com>,
Mathieu Poirier <mathieu.poirier@linaro.org>,
Andy Gross <agross@kernel.org>
Cc: <linux-remoteproc@vger.kernel.org>,
<linux-kernel@vger.kernel.org>,
<linux-stm32@st-md-mailman.stormreply.com>,
<linux-arm-msm@vger.kernel.org>, <arnaud.pouliquen@foss.st.com>
Subject: [PATCH v3 14/15] rpmsg: char: no dynamic endpoint management for the default one
Date: Thu, 4 Feb 2021 09:45:33 +0100 [thread overview]
Message-ID: <20210204084534.10516-15-arnaud.pouliquen@foss.st.com> (raw)
In-Reply-To: <20210204084534.10516-1-arnaud.pouliquen@foss.st.com>
Do not dynamically manage the default endpoint. The ept address must
not change.
This update is needed to manage the RPMSG_CREATE_DEV_IOCTL. In this
case a default endpoint is used and it's address must not change or
been reused by another service.
Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
---
drivers/rpmsg/rpmsg_char.c | 28 +++++++++++++++++++++-------
1 file changed, 21 insertions(+), 7 deletions(-)
diff --git a/drivers/rpmsg/rpmsg_char.c b/drivers/rpmsg/rpmsg_char.c
index d5aa874865f7..0b0a6b7c0c9a 100644
--- a/drivers/rpmsg/rpmsg_char.c
+++ b/drivers/rpmsg/rpmsg_char.c
@@ -114,14 +114,23 @@ static int rpmsg_eptdev_open(struct inode *inode, struct file *filp)
struct rpmsg_endpoint *ept;
struct rpmsg_device *rpdev = eptdev->rpdev;
struct device *dev = &eptdev->dev;
+ u32 addr = eptdev->chinfo.src;
get_device(dev);
- ept = rpmsg_create_ept(rpdev, rpmsg_ept_cb, eptdev, eptdev->chinfo);
- if (!ept) {
- dev_err(dev, "failed to open %s\n", eptdev->chinfo.name);
- put_device(dev);
- return -EINVAL;
+ /*
+ * The ept device can has been created by a ns announcement. In this
+ * case a default endpoint has been created. Reuse it to avoid to manage
+ * a new address on each open close.
+ */
+ ept = rpdev->ept;
+ if (!ept || addr != ept->addr) {
+ ept = rpmsg_create_ept(rpdev, rpmsg_ept_cb, eptdev, eptdev->chinfo);
+ if (!ept) {
+ dev_err(dev, "failed to open %s\n", eptdev->chinfo.name);
+ put_device(dev);
+ return -EINVAL;
+ }
}
eptdev->ept = ept;
@@ -133,12 +142,17 @@ static int rpmsg_eptdev_open(struct inode *inode, struct file *filp)
static int rpmsg_eptdev_release(struct inode *inode, struct file *filp)
{
struct rpmsg_eptdev *eptdev = cdev_to_eptdev(inode->i_cdev);
+ struct rpmsg_device *rpdev = eptdev->rpdev;
struct device *dev = &eptdev->dev;
- /* Close the endpoint, if it's not already destroyed by the parent */
+ /*
+ * Close the endpoint, if it's not already destroyed by the parent and it is not the
+ * default one.
+ */
mutex_lock(&eptdev->ept_lock);
if (eptdev->ept) {
- rpmsg_destroy_ept(eptdev->ept);
+ if (eptdev->ept != rpdev->ept)
+ rpmsg_destroy_ept(eptdev->ept);
eptdev->ept = NULL;
}
mutex_unlock(&eptdev->ept_lock);
--
2.17.1
next prev parent reply other threads:[~2021-02-04 8:48 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-04 8:45 [PATCH v3 00/15] introduce a generic IOCTL interface for RPMsg channels management Arnaud Pouliquen
2021-02-04 8:45 ` [PATCH v3 01/15] rpmsg: char: rename rpmsg_char_init to rpmsg_chrdev_init Arnaud Pouliquen
2021-02-04 8:45 ` [PATCH v3 02/15] rpmsg: move RPMSG_ADDR_ANY in user API and document the API Arnaud Pouliquen
2021-02-04 8:45 ` [PATCH v3 03/15] rpmsg: char: export eptdev create an destroy functions Arnaud Pouliquen
2021-02-04 8:45 ` [PATCH v3 04/15] rpmsg: char: dissociate the control device from the rpmsg class Arnaud Pouliquen
2021-02-04 8:45 ` [PATCH v3 05/15] rpmsg: move the rpmsg control device from rpmsg_char to rpmsg_ctrl Arnaud Pouliquen
2021-02-04 8:45 ` [PATCH v3 06/15] rpmsg: update rpmsg_chrdev_register_device function Arnaud Pouliquen
2021-02-04 12:44 ` kernel test robot
2021-02-04 15:11 ` Arnaud POULIQUEN
2021-02-04 16:53 ` Mathieu Poirier
2021-02-05 8:21 ` Arnaud POULIQUEN
2021-02-04 8:45 ` [PATCH v3 07/15] rpmsg: virtio: probe the rpmsg_ctrl device Arnaud Pouliquen
2021-02-04 11:35 ` kernel test robot
2021-02-04 8:45 ` [PATCH v3 08/15] rpmsg: glink: add sendto and trysendto ops Arnaud Pouliquen
2021-02-04 8:45 ` [PATCH v3 09/15] rpmsg: smd: " Arnaud Pouliquen
2021-02-04 8:45 ` [PATCH v3 10/15] rpmsg: char: use sendto to specify the message destination address Arnaud Pouliquen
2021-02-04 8:45 ` [PATCH v3 11/15] rpmsg: ctrl: introduce RPMSG_CREATE_DEV_IOCTL Arnaud Pouliquen
2021-02-04 8:45 ` [PATCH v3 12/15] rpmsg: char: introduce __rpmsg_chrdev_create_eptdev function Arnaud Pouliquen
2021-02-04 8:45 ` [PATCH v3 13/15] rpmsg: char: introduce a RPMsg driver for the RPmsg char device Arnaud Pouliquen
2021-02-04 8:45 ` Arnaud Pouliquen [this message]
2021-02-04 8:45 ` [PATCH v3 15/15] rpmsg: char: return an error if device already open Arnaud Pouliquen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210204084534.10516-15-arnaud.pouliquen@foss.st.com \
--to=arnaud.pouliquen@foss.st.com \
--cc=agross@kernel.org \
--cc=bjorn.andersson@linaro.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-remoteproc@vger.kernel.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=mathieu.poirier@linaro.org \
--cc=ohad@wizery.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).