From: Greg KH <gregkh@linuxfoundation.org>
To: Tomas Hlavacek <tmshlvck@gmail.com>
Cc: alan@linux.intel.com, linux-serial@vger.kernel.org,
linux-kernel@vger.kernel.org, marek.vasut@gmail.com
Subject: Re: [PATCHv3 1/1] [RFC] uartclk from serial_core exposed to sysfs
Date: Fri, 17 Aug 2012 08:06:03 -0700 [thread overview]
Message-ID: <20120817150603.GA13684@kroah.com> (raw)
In-Reply-To: <1345214637-4189-1-git-send-email-tmshlvck@gmail.com>
On Fri, Aug 17, 2012 at 04:43:57PM +0200, Tomas Hlavacek wrote:
> Added file /sys/devices/.../tty/ttySX/uartclk to allow reading
> uartclk value in struct uart_port in serial_core via sysfs.
Whenever you add/remove/modify a sysfs file, you also need to add an
update to Documentation/ABI/ as well.
Please add this to the patch and resend.
> It simplifies initialization verification of no-name cards that
> have non-standard oscillator speed while having no distinguishing
> PCI IDs to allow autodetection.
>
> Signed-off-by: Tomas Hlavacek <tmshlvck@gmail.com>
> ---
> drivers/tty/serial/serial_core.c | 32 ++++++++++++++++++++++++++++++++
> drivers/tty/tty_io.c | 17 +++++++++++++++++
> include/linux/tty.h | 2 ++
> 3 files changed, 51 insertions(+)
>
> diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
> index a21dc8e..454e9d3 100644
> --- a/drivers/tty/serial/serial_core.c
> +++ b/drivers/tty/serial/serial_core.c
> @@ -2293,6 +2293,24 @@ struct tty_driver *uart_console_device(struct console *co, int *index)
> return p->tty_driver;
> }
>
> +static ssize_t uart_get_attr_uartclk(struct device *dev,
> + struct device_attribute *attr, char *buf)
> +{
> + int ret;
> +
> + struct tty_port *port = dev_get_drvdata(dev);
> + struct uart_state *state = container_of(port, struct uart_state, port);
> +
> + mutex_lock(&state->port.mutex);
> + ret = snprintf(buf, PAGE_SIZE, "%d\n", state->uart_port->uartclk);
> + mutex_unlock(&state->port.mutex);
> +
> + return ret;
> +}
> +
> +static DEVICE_ATTR(uartclk, S_IRUSR | S_IRGRP, uart_get_attr_uartclk,
> + NULL);
> +
> /**
> * uart_add_one_port - attach a driver-defined port structure
> * @drv: pointer to the uart low level driver structure for this port
> @@ -2355,6 +2373,14 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *uport)
> }
>
> /*
> + * Expose uartclk in sysfs. Use driverdata of the tty device for
> + * referencing the UART port.
> + */
> + dev_set_drvdata(tty_dev, port);
> + if (device_create_file(tty_dev, &dev_attr_uartclk) < 0)
> + dev_err(tty_dev, "Failed to add uartclk attr\n");
I think you just raced with userspace in creating the file after the
device was announced to userspace. Are you sure it's ok?
If not (hint, I don't think so), please make it a default attribute of
the device, which will then cause the file to be created before it is
announced to userspace. It will also be less code as you don't have to
clean it up by hand :)
> --- a/drivers/tty/tty_io.c
> +++ b/drivers/tty/tty_io.c
> @@ -3049,6 +3049,23 @@ void tty_unregister_device(struct tty_driver *driver, unsigned index)
> }
> EXPORT_SYMBOL(tty_unregister_device);
>
> +/*
> + * tty_lookup_device - lookup a tty device
> + * @driver: the tty driver that describes the tty device
> + * @index: the index in the tty driver for this tty device
> + *
> + * This function returns a struct device pointer when device has
> + * been found and NULL otherwise.
> + *
> + * Locking: ??
> + */
> +struct device *tty_lookup_device(struct tty_driver *driver, unsigned index)
> +{
> + dev_t devt = MKDEV(driver->major, driver->minor_start) + index;
> + return class_find_device(tty_class, NULL, &devt, dev_match_devt);
> +}
> +EXPORT_SYMBOL(tty_lookup_device);
EXPORT_SYMBOL_GPL as you are just wrapping a class_find_device() call?
thanks,
greg k-h
next prev parent reply other threads:[~2012-08-17 15:06 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-10 22:28 RFC: exposing uartclk value to sysfs Tomas Hlavacek
2012-08-10 22:48 ` Alan Cox
2012-08-11 8:18 ` Tomas Hlavacek
2012-08-14 7:35 ` [PATCH 1/1] [RFC] uartclk from serial_core exposed " Tomas Hlavacek
2012-08-14 12:50 ` Marek Vasut
2012-08-15 17:09 ` Tomas Hlavacek
2012-08-15 17:12 ` [PATCHv2 " Tomas Hlavacek
2012-08-16 10:31 ` [PATCH " Alan Cox
2012-08-17 14:43 ` [PATCHv3 " Tomas Hlavacek
2012-08-17 15:06 ` Greg KH [this message]
2012-08-17 16:30 ` Tomas Hlavacek
2012-08-17 16:54 ` Greg KH
2012-08-17 18:44 ` Marek Vasut
2012-08-17 19:01 ` Greg KH
2012-08-17 20:25 ` Tomas Hlavacek
2012-08-17 20:25 ` Tomas Hlavacek
2012-08-17 15:07 ` Alan Cox
2012-08-19 18:34 ` [PATCHv4 " Tomas Hlavacek
2012-08-21 13:24 ` Tomas Hlavacek
2012-08-21 13:44 ` Alan Cox
2012-09-05 20:36 ` Greg KH
2012-09-05 23:16 ` [PATCHv5 1/1] uartclk value " Tomas Hlavacek
2012-09-05 23:42 ` Greg KH
2012-09-06 1:01 ` Tomas Hlavacek
2012-09-06 1:17 ` [PATCH v6] " Tomas Hlavacek
2012-09-06 16:23 ` [PATCH v6] tty: " Greg KH
2012-09-06 17:54 ` [PATCH v6] " Jiri Slaby
2012-09-06 18:39 ` Tomas Hlavacek
2012-09-06 18:54 ` Jiri Slaby
2012-09-06 19:41 ` Tomas Hlavacek
2012-09-06 19:41 ` Tomas Hlavacek
2012-09-06 19:47 ` Jiri Slaby
2012-09-06 19:47 ` Jiri Slaby
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=20120817150603.GA13684@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=alan@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=marek.vasut@gmail.com \
--cc=tmshlvck@gmail.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.