All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bjorn Andersson <bjorn.andersson@linaro.org>
To: Christian Gmeiner <christian.gmeiner@gmail.com>
Cc: 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: Tue, 9 Nov 2021 10:06:46 -0800	[thread overview]
Message-ID: <YYq4tjyv0qh+Zpqe@ripper> (raw)
In-Reply-To: <20211109083926.32052-2-christian.gmeiner@gmail.com>

On Tue 09 Nov 00:39 PST 2021, Christian Gmeiner wrote:

> 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)

> 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.

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?

>  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?

> +	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().

Regards,
Bjorn

> -- 
> 2.33.1
> 

  reply	other threads:[~2021-11-09 18:05 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 [this message]
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

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=YYq4tjyv0qh+Zpqe@ripper \
    --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.