From: Bjorn Andersson <bjorn.andersson@linaro.org>
To: Christian Gmeiner <christian.gmeiner@gmail.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
Ohad Ben-Cohen <ohad@wizery.com>,
Mathieu Poirier <mathieu.poirier@linaro.org>,
linux-remoteproc@vger.kernel.org
Subject: Re: [RFC PATCH v2 1/1] rpmsg: add syslog driver
Date: Wed, 17 Nov 2021 09:07:33 -0600 [thread overview]
Message-ID: <YZUatUlg72DQb8ui@builder.lan> (raw)
In-Reply-To: <CAH9NwWcyKyaGrTZ1=N73gA+zjO0wH_oMzLG_zi2TUc3dN69SNg@mail.gmail.com>
On Thu 11 Nov 04:36 CST 2021, Christian Gmeiner wrote:
> Hi Bjorn
>
>
> > > Allows the remote firmware to log into syslog.
> > >
> >
> > This allows the remote firmware to print log messages in the kernel log,
> > not the syslog (although your system might inject the kernel log into
> > the syslog as well)
> >
>
> Correct.
>
> > > Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
> > > ---
> > > drivers/rpmsg/Kconfig | 8 +++++
> > > drivers/rpmsg/Makefile | 1 +
> > > drivers/rpmsg/rpmsg_syslog.c | 65 ++++++++++++++++++++++++++++++++++++
> >
> > drivers/rpmsg is for rpmsg bus and transport drivers. Client drivers
> > should live elsewhere.
> >
>
> Ahh .. yes.
>
> > But perhaps, rather than having a driver for this, you could simply use
> > rpmsg_char and a userspace tool; if you want to get the remote processor
> > logs into syslog, instead of the kernel log?
> >
>
> I thought about that too (also regarding the rpmsg tty driver) but that means I
> need to start/supervise a user space tool.
>
> > > 3 files changed, 74 insertions(+)
> > > create mode 100644 drivers/rpmsg/rpmsg_syslog.c
> > >
> > > diff --git a/drivers/rpmsg/Kconfig b/drivers/rpmsg/Kconfig
> > > index 0b4407abdf13..801f9956ec21 100644
> > > --- a/drivers/rpmsg/Kconfig
> > > +++ b/drivers/rpmsg/Kconfig
> > > @@ -73,4 +73,12 @@ config RPMSG_VIRTIO
> > > select RPMSG_NS
> > > select VIRTIO
> > >
> > > +config RPMSG_SYSLOG
> > > + tristate "SYSLOG device interface"
> > > + depends on RPMSG
> > > + help
> > > + Say Y here to export rpmsg endpoints as device files, usually found
> > > + in /dev. They make it possible for user-space programs to send and
> > > + receive rpmsg packets.
> > > +
> > > endmenu
> > > diff --git a/drivers/rpmsg/Makefile b/drivers/rpmsg/Makefile
> > > index 8d452656f0ee..75b2ec7133a5 100644
> > > --- a/drivers/rpmsg/Makefile
> > > +++ b/drivers/rpmsg/Makefile
> > > @@ -9,3 +9,4 @@ obj-$(CONFIG_RPMSG_QCOM_GLINK_RPM) += qcom_glink_rpm.o
> > > obj-$(CONFIG_RPMSG_QCOM_GLINK_SMEM) += qcom_glink_smem.o
> > > obj-$(CONFIG_RPMSG_QCOM_SMD) += qcom_smd.o
> > > obj-$(CONFIG_RPMSG_VIRTIO) += virtio_rpmsg_bus.o
> > > +obj-$(CONFIG_RPMSG_SYSLOG) += rpmsg_syslog.o
> > > diff --git a/drivers/rpmsg/rpmsg_syslog.c b/drivers/rpmsg/rpmsg_syslog.c
> > > new file mode 100644
> > > index 000000000000..b3fdae495fd9
> > > --- /dev/null
> > > +++ b/drivers/rpmsg/rpmsg_syslog.c
> > > @@ -0,0 +1,65 @@
> > > +// SPDX-License-Identifier: GPL-2.0
> > > +
> > > +#include <linux/kernel.h>
> > > +#include <linux/module.h>
> > > +#include <linux/rpmsg.h>
> > > +
> > > +static int rpmsg_syslog_cb(struct rpmsg_device *rpdev, void *data, int len,
> > > + void *priv, u32 src)
> > > +{
> > > + const char *buffer = data;
> > > +
> > > + switch (buffer[0]) {
> > > + case 'e':
> > > + dev_err(&rpdev->dev, "%s", buffer + 1);
> > > + break;
> > > + case 'w':
> > > + dev_warn(&rpdev->dev, "%s", buffer + 1);
> > > + break;
> > > + case 'i':
> > > + dev_info(&rpdev->dev, "%s", buffer + 1);
> > > + break;
> > > + default:
> > > + dev_info(&rpdev->dev, "%s", buffer);
> > > + break;
> > > + }
> > > +
> > > + return 0;
> > > +}
> > > +
> > > +static int rpmsg_syslog_probe(struct rpmsg_device *rpdev)
> > > +{
> > > + struct rpmsg_endpoint *syslog_ept;
> > > + struct rpmsg_channel_info syslog_chinfo = {
> > > + .src = 42,
> > > + .dst = 42,
> > > + .name = "syslog",
> > > + };
> > > +
> > > + /*
> > > + * Create the syslog service endpoint associated to the RPMsg
> > > + * device. The endpoint will be automatically destroyed when the RPMsg
> > > + * device will be deleted.
> > > + */
> > > + syslog_ept = rpmsg_create_ept(rpdev, rpmsg_syslog_cb, NULL, syslog_chinfo);
> >
> > The rpmsg_device_id below should cause the device to probe on the
> > presence of a "syslog" channel announcement, so why are you creating a
> > new endpoint with the same here?
> >
> > Why aren't you just specifying the callback of the driver?
> >
>
> Good question. I think I was happy that I got work working somehow. I
> also want to send out
> a documentation update as it is not up to date with the current API.
>
I'd be happy to take any documentation updates - or perhaps we should
reduce the duplication between the kerneldoc and Documentation/*...
> > > + if (!syslog_ept) {
> > > + dev_err(&rpdev->dev, "failed to create the syslog ept\n");
> > > + return -ENOMEM;
> > > + }
> > > + rpdev->ept = syslog_ept;
> > > +
> > > + return 0;
> > > +}
> > > +
> > > +static struct rpmsg_device_id rpmsg_driver_syslog_id_table[] = {
> > > + { .name = "syslog" },
> > > + { },
> > > +};
> > > +MODULE_DEVICE_TABLE(rpmsg, rpmsg_driver_syslog_id_table);
> > > +
> > > +static struct rpmsg_driver rpmsg_syslog_client = {
> > > + .drv.name = KBUILD_MODNAME,
> > > + .id_table = rpmsg_driver_syslog_id_table,
> > > + .probe = rpmsg_syslog_probe,
> > > +};
> > > +module_rpmsg_driver(rpmsg_syslog_client);
> >
> > I would expect that building this as a module gives you complaints about
> > lacking MODULE_LICENSE().
> >
>
> Yeah .. I never built it as a module.
>
> The biggest question I have: do you see any possibility to get such a
> redirection
> driver into mainline? At the moment I have not heard a big no.
>
My feeling is "do we really need a dedicated driver for it", but I do
recognize that it solves a problem for you.
The only "objection" I have is that I personally wouldn't want all the
firmware logs mixed up with the kernel logs. Somehow getting this into
journald separately seems more useful.
Regards,
Bjorn
> --
> greets
> --
> Christian Gmeiner, MSc
>
> https://christian-gmeiner.info/privacypolicy
prev parent reply other threads:[~2021-11-17 15:07 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-09 8:39 [RFC PATCH v2 0/1] rpmsg: syslog driver Christian Gmeiner
2021-11-09 8:39 ` [RFC PATCH v2 1/1] rpmsg: add " Christian Gmeiner
2021-11-09 18:06 ` Bjorn Andersson
2021-11-10 16:55 ` Arnaud POULIQUEN
2021-11-11 10:29 ` Christian Gmeiner
2021-11-17 17:57 ` Arnaud POULIQUEN
2021-11-11 10:36 ` Christian Gmeiner
2021-11-17 15:07 ` Bjorn Andersson [this message]
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=YZUatUlg72DQb8ui@builder.lan \
--to=bjorn.andersson@linaro.org \
--cc=christian.gmeiner@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-remoteproc@vger.kernel.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.