* [PATCH 03/10] mfd / platform: cros_ec: Miscellaneous character device to talk with the EC [not found] <20190604152019.16100-1-enric.balletbo@collabora.com> @ 2019-06-04 15:20 ` Enric Balletbo i Serra 2019-06-04 15:52 ` Greg Kroah-Hartman 0 siblings, 1 reply; 17+ messages in thread From: Enric Balletbo i Serra @ 2019-06-04 15:20 UTC (permalink / raw) To: linux-kernel Cc: gwendal, Guenter Roeck, Benson Leung, Lee Jones, kernel, dtor, Gustavo Pimentel, Randy Dunlap, Lorenzo Pieralisi, linux-doc, Enno Luebbers, Guido Kiener, Thomas Gleixner, Kishon Vijay Abraham I, Jonathan Corbet, Wu Hao, Kate Stewart, Greg Kroah-Hartman, Tycho Andersen, Gerd Hoffmann, Jilayne Lovejoy That's a driver to talk with the ChromeOS Embedded Controller via a miscellaneous character device, it creates an entry in /dev for every instance and implements basic file operations for communicating with the Embedded Controller with an userspace application. The API is moved to the uapi folder, which is supposed to contain the user space API of the kernel. Note that this will replace current character device interface implemented in the cros-ec-dev driver in the MFD subsystem. The idea is to move all the functionality that extends the bounds of what MFD was designed to platform/chrome subsystem. Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> --- Documentation/ioctl/ioctl-number.txt | 2 +- drivers/mfd/cros_ec_dev.c | 2 +- drivers/platform/chrome/Kconfig | 11 + drivers/platform/chrome/Makefile | 1 + drivers/platform/chrome/cros_ec_chardev.c | 279 ++++++++++++++++++ .../uapi/linux/cros_ec_chardev.h | 18 +- 6 files changed, 302 insertions(+), 11 deletions(-) create mode 100644 drivers/platform/chrome/cros_ec_chardev.c rename drivers/mfd/cros_ec_dev.h => include/uapi/linux/cros_ec_chardev.h (70%) diff --git a/Documentation/ioctl/ioctl-number.txt b/Documentation/ioctl/ioctl-number.txt index c9558146ac58..8bd7907ee36d 100644 --- a/Documentation/ioctl/ioctl-number.txt +++ b/Documentation/ioctl/ioctl-number.txt @@ -340,7 +340,7 @@ Code Seq#(hex) Include File Comments 0xDD 00-3F ZFCP device driver see drivers/s390/scsi/ <mailto:aherrman@de.ibm.com> 0xE5 00-3F linux/fuse.h -0xEC 00-01 drivers/platform/chrome/cros_ec_dev.h ChromeOS EC driver +0xEC 00-01 include/uapi/linux/cros_ec_chardev.h ChromeOS EC driver 0xF3 00-3F drivers/usb/misc/sisusbvga/sisusb.h sisfb (in development) <mailto:thomas@winischhofer.net> 0xF4 00-1F video/mbxfb.h mbxfb diff --git a/drivers/mfd/cros_ec_dev.c b/drivers/mfd/cros_ec_dev.c index 607383b67cf1..11b791c28f84 100644 --- a/drivers/mfd/cros_ec_dev.c +++ b/drivers/mfd/cros_ec_dev.c @@ -15,7 +15,7 @@ #include <linux/slab.h> #include <linux/uaccess.h> -#include "cros_ec_dev.h" +#include <uapi/linux/cros_ec_chardev.h> #define DRV_NAME "cros-ec-dev" diff --git a/drivers/platform/chrome/Kconfig b/drivers/platform/chrome/Kconfig index 9417b982ad92..3a9ad001838a 100644 --- a/drivers/platform/chrome/Kconfig +++ b/drivers/platform/chrome/Kconfig @@ -147,6 +147,17 @@ config CROS_KBD_LED_BACKLIGHT To compile this driver as a module, choose M here: the module will be called cros_kbd_led_backlight. +config CROS_EC_CHARDEV + tristate "ChromeOS EC miscdevice" + depends on MFD_CROS_EC_CHARDEV + default MFD_CROS_EC_CHARDEV + help + This driver adds file operations support to talk with the + ChromeOS EC from userspace via a character device. + + To compile this driver as a module, choose M here: the + module will be called cros_ec_chardev. + config CROS_EC_LIGHTBAR tristate "Chromebook Pixel's lightbar support" depends on MFD_CROS_EC_CHARDEV diff --git a/drivers/platform/chrome/Makefile b/drivers/platform/chrome/Makefile index ebb57e21923b..d47a7e1097ee 100644 --- a/drivers/platform/chrome/Makefile +++ b/drivers/platform/chrome/Makefile @@ -16,6 +16,7 @@ cros_ec_lpcs-$(CONFIG_CROS_EC_LPC_MEC) += cros_ec_lpc_mec.o obj-$(CONFIG_CROS_EC_LPC) += cros_ec_lpcs.o obj-$(CONFIG_CROS_EC_PROTO) += cros_ec_proto.o cros_ec_trace.o obj-$(CONFIG_CROS_KBD_LED_BACKLIGHT) += cros_kbd_led_backlight.o +obj-$(CONFIG_CROS_EC_CHARDEV) += cros_ec_chardev.o obj-$(CONFIG_CROS_EC_LIGHTBAR) += cros_ec_lightbar.o obj-$(CONFIG_CROS_EC_VBC) += cros_ec_vbc.o obj-$(CONFIG_CROS_EC_DEBUGFS) += cros_ec_debugfs.o diff --git a/drivers/platform/chrome/cros_ec_chardev.c b/drivers/platform/chrome/cros_ec_chardev.c new file mode 100644 index 000000000000..1a0a27080026 --- /dev/null +++ b/drivers/platform/chrome/cros_ec_chardev.c @@ -0,0 +1,279 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Miscellaneous character driver for ChromeOS Embedded Controller + * + * Copyright 2019 Google LLC + */ + +#include <linux/init.h> +#include <linux/device.h> +#include <linux/fs.h> +#include <linux/list.h> +#include <linux/mfd/cros_ec.h> +#include <linux/mfd/cros_ec_commands.h> +#include <linux/miscdevice.h> +#include <linux/module.h> +#include <linux/platform_device.h> +#include <linux/slab.h> +#include <linux/spinlock.h> +#include <linux/types.h> +#include <linux/uaccess.h> + +#include <uapi/linux/cros_ec_chardev.h> + +#define DRV_NAME "cros-ec-chardev" + +static LIST_HEAD(chardev_devices); +static DEFINE_SPINLOCK(chardev_lock); + +struct chardev_data { + struct list_head list; + struct cros_ec_dev *ec_dev; + struct miscdevice misc; +}; + +static int ec_get_version(struct cros_ec_dev *ec, char *str, int maxlen) +{ + static const char * const current_image_name[] = { + "unknown", "read-only", "read-write", "invalid", + }; + struct ec_response_get_version *resp; + struct cros_ec_command *msg; + int ret; + + msg = kzalloc(sizeof(*msg) + sizeof(*resp), GFP_KERNEL); + if (!msg) + return -ENOMEM; + + msg->command = EC_CMD_GET_VERSION + ec->cmd_offset; + msg->insize = sizeof(*resp); + + ret = cros_ec_cmd_xfer_status(ec->ec_dev, msg); + if (ret < 0) { + snprintf(str, maxlen, + "Unknown EC version, returned error: %d\n", + msg->result); + goto exit; + } + + resp = (struct ec_response_get_version *)msg->data; + if (resp->current_image >= ARRAY_SIZE(current_image_name)) + resp->current_image = 3; /* invalid */ + + snprintf(str, maxlen, "%s\n%s\n%s\n", + resp->version_string_ro, + resp->version_string_rw, + current_image_name[resp->current_image]); + + ret = 0; +exit: + kfree(msg); + return ret; +} + +/* + * Device file ops + */ +static int cros_ec_chardev_open(struct inode *inode, struct file *filp) +{ + struct miscdevice *mdev = filp->private_data; + struct cros_ec_dev *ec_dev = dev_get_drvdata(mdev->parent); + + filp->private_data = ec_dev; + nonseekable_open(inode, filp); + + return 0; +} + +static ssize_t cros_ec_chardev_read(struct file *filp, char __user *buffer, + size_t length, loff_t *offset) +{ + char msg[sizeof(struct ec_response_get_version) + + sizeof(CROS_EC_DEV_VERSION)]; + struct cros_ec_dev *ec = filp->private_data; + size_t count; + int ret; + + if (*offset != 0) + return 0; + + ret = ec_get_version(ec, msg, sizeof(msg)); + if (ret) + return ret; + + count = min(length, strlen(msg)); + + if (copy_to_user(buffer, msg, count)) + return -EFAULT; + + *offset = count; + return count; +} + +/* + * Ioctls + */ +static long cros_ec_chardev_ioctl_xcmd(struct cros_ec_dev *ec, void __user *arg) +{ + struct cros_ec_command *s_cmd; + struct cros_ec_command u_cmd; + long ret; + + if (copy_from_user(&u_cmd, arg, sizeof(u_cmd))) + return -EFAULT; + + if (u_cmd.outsize > EC_MAX_MSG_BYTES || + u_cmd.insize > EC_MAX_MSG_BYTES) + return -EINVAL; + + s_cmd = kmalloc(sizeof(*s_cmd) + max(u_cmd.outsize, u_cmd.insize), + GFP_KERNEL); + if (!s_cmd) + return -ENOMEM; + + if (copy_from_user(s_cmd, arg, sizeof(*s_cmd) + u_cmd.outsize)) { + ret = -EFAULT; + goto exit; + } + + if (u_cmd.outsize != s_cmd->outsize || + u_cmd.insize != s_cmd->insize) { + ret = -EINVAL; + goto exit; + } + + s_cmd->command += ec->cmd_offset; + ret = cros_ec_cmd_xfer(ec->ec_dev, s_cmd); + /* Only copy data to userland if data was received. */ + if (ret < 0) + goto exit; + + if (copy_to_user(arg, s_cmd, sizeof(*s_cmd) + s_cmd->insize)) + ret = -EFAULT; +exit: + kfree(s_cmd); + return ret; +} + +static long cros_ec_chardev_ioctl_readmem(struct cros_ec_dev *ec, + void __user *arg) +{ + struct cros_ec_device *ec_dev = ec->ec_dev; + struct cros_ec_readmem s_mem = { }; + long num; + + /* Not every platform supports direct reads */ + if (!ec_dev->cmd_readmem) + return -ENOTTY; + + if (copy_from_user(&s_mem, arg, sizeof(s_mem))) + return -EFAULT; + + num = ec_dev->cmd_readmem(ec_dev, s_mem.offset, s_mem.bytes, + s_mem.buffer); + if (num <= 0) + return num; + + if (copy_to_user((void __user *)arg, &s_mem, sizeof(s_mem))) + return -EFAULT; + + return num; +} + +static long cros_ec_chardev_ioctl(struct file *filp, unsigned int cmd, + unsigned long arg) +{ + struct cros_ec_dev *ec = filp->private_data; + + if (_IOC_TYPE(cmd) != CROS_EC_DEV_IOC) + return -ENOTTY; + + switch (cmd) { + case CROS_EC_DEV_IOCXCMD: + return cros_ec_chardev_ioctl_xcmd(ec, (void __user *)arg); + case CROS_EC_DEV_IOCRDMEM: + return cros_ec_chardev_ioctl_readmem(ec, (void __user *)arg); + } + + return -ENOTTY; +} + +static const struct file_operations chardev_fops = { + .open = cros_ec_chardev_open, + .read = cros_ec_chardev_read, + .unlocked_ioctl = cros_ec_chardev_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = cros_ec_chardev_ioctl, +#endif +}; + +static int cros_ec_chardev_probe(struct platform_device *pdev) +{ + struct cros_ec_dev *ec_dev = dev_get_drvdata(pdev->dev.parent); + struct cros_ec_platform *ec_platform = dev_get_platdata(ec_dev->dev); + struct chardev_data *data; + int ret; + + /* Create a char device: we want to create it anew */ + data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); + if (!data) + return -ENOMEM; + + data->ec_dev = ec_dev; + data->misc.minor = MISC_DYNAMIC_MINOR; + data->misc.fops = &chardev_fops; + data->misc.name = ec_platform->ec_name; + data->misc.parent = pdev->dev.parent; + + ret = misc_register(&data->misc); + if (ret) + return ret; + + spin_lock(&chardev_lock); + list_add(&data->list, &chardev_devices); + spin_unlock(&chardev_lock); + + dev_info(&pdev->dev, "Created misc device /dev/%s\n", + data->misc.name); + + return 0; +} + +static int cros_ec_chardev_remove(struct platform_device *pdev) +{ + struct cros_ec_dev *ec_dev = dev_get_drvdata(pdev->dev.parent); + struct chardev_data *data; + + list_for_each_entry(data, &chardev_devices, list) + if (data->ec_dev == ec_dev) + break; + + if (data->ec_dev != ec_dev) { + dev_err(&pdev->dev, + "remove called but miscdevice %s not found\n", + data->misc.name); + return -ENODEV; + } + + spin_lock(&chardev_lock); + list_del(&data->list); + spin_unlock(&chardev_lock); + misc_deregister(&data->misc); + + return 0; +} + +static struct platform_driver cros_ec_chardev_driver = { + .driver = { + .name = DRV_NAME, + }, + .probe = cros_ec_chardev_probe, + .remove = cros_ec_chardev_remove, +}; + +module_platform_driver(cros_ec_chardev_driver); + +MODULE_ALIAS("platform:" DRV_NAME); +MODULE_AUTHOR("Enric Balletbo i Serra <enric.balletbo@collabora.com>"); +MODULE_DESCRIPTION("ChromeOS EC Miscellaneous Character Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/mfd/cros_ec_dev.h b/include/uapi/linux/cros_ec_chardev.h similarity index 70% rename from drivers/mfd/cros_ec_dev.h rename to include/uapi/linux/cros_ec_chardev.h index 7a42c3ef50e4..c6dd2549a2a5 100644 --- a/drivers/mfd/cros_ec_dev.h +++ b/include/uapi/linux/cros_ec_chardev.h @@ -1,12 +1,12 @@ -/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* - * cros_ec_dev - expose the Chrome OS Embedded Controller to userspace + * ChromeOS EC device interface. * * Copyright (C) 2014 Google, Inc. */ -#ifndef _CROS_EC_DEV_H_ -#define _CROS_EC_DEV_H_ +#ifndef _UAPI_LINUX_CROS_EC_DEV_H_ +#define _UAPI_LINUX_CROS_EC_DEV_H_ #include <linux/ioctl.h> #include <linux/types.h> @@ -20,16 +20,16 @@ * @bytes: Number of bytes to read. Zero means "read a string" (including '\0') * At most only EC_MEMMAP_SIZE bytes can be read. * @buffer: Where to store the result. The ioctl returns the number of bytes - * read or negative on error. + * read or negative on error. */ struct cros_ec_readmem { - uint32_t offset; - uint32_t bytes; - uint8_t buffer[EC_MEMMAP_SIZE]; + __u32 offset; + __u32 bytes; + __u8 buffer[EC_MEMMAP_SIZE]; }; #define CROS_EC_DEV_IOC 0xEC #define CROS_EC_DEV_IOCXCMD _IOWR(CROS_EC_DEV_IOC, 0, struct cros_ec_command) #define CROS_EC_DEV_IOCRDMEM _IOWR(CROS_EC_DEV_IOC, 1, struct cros_ec_readmem) -#endif /* _CROS_EC_DEV_H_ */ +#endif /* _UAPI_LINUX_CROS_EC_DEV_H_ */ -- 2.20.1 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH 03/10] mfd / platform: cros_ec: Miscellaneous character device to talk with the EC 2019-06-04 15:20 ` [PATCH 03/10] mfd / platform: cros_ec: Miscellaneous character device to talk with the EC Enric Balletbo i Serra @ 2019-06-04 15:52 ` Greg Kroah-Hartman 2019-06-04 16:58 ` Ezequiel Garcia 2019-06-05 14:33 ` Enric Balletbo Serra 0 siblings, 2 replies; 17+ messages in thread From: Greg Kroah-Hartman @ 2019-06-04 15:52 UTC (permalink / raw) To: Enric Balletbo i Serra Cc: linux-kernel, gwendal, Guenter Roeck, Benson Leung, Lee Jones, kernel, dtor, Gustavo Pimentel, Randy Dunlap, Lorenzo Pieralisi, linux-doc, Enno Luebbers, Guido Kiener, Thomas Gleixner, Kishon Vijay Abraham I, Jonathan Corbet, Wu Hao, Kate Stewart, Tycho Andersen, Gerd Hoffmann, Jilayne Lovejoy On Tue, Jun 04, 2019 at 05:20:12PM +0200, Enric Balletbo i Serra wrote: > That's a driver to talk with the ChromeOS Embedded Controller via a > miscellaneous character device, it creates an entry in /dev for every > instance and implements basic file operations for communicating with the > Embedded Controller with an userspace application. The API is moved to > the uapi folder, which is supposed to contain the user space API of the > kernel. > > Note that this will replace current character device interface > implemented in the cros-ec-dev driver in the MFD subsystem. The idea is > to move all the functionality that extends the bounds of what MFD was > designed to platform/chrome subsystem. > > Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> > --- > > Documentation/ioctl/ioctl-number.txt | 2 +- > drivers/mfd/cros_ec_dev.c | 2 +- > drivers/platform/chrome/Kconfig | 11 + > drivers/platform/chrome/Makefile | 1 + > drivers/platform/chrome/cros_ec_chardev.c | 279 ++++++++++++++++++ > .../uapi/linux/cros_ec_chardev.h | 18 +- > 6 files changed, 302 insertions(+), 11 deletions(-) > create mode 100644 drivers/platform/chrome/cros_ec_chardev.c > rename drivers/mfd/cros_ec_dev.h => include/uapi/linux/cros_ec_chardev.h (70%) > > diff --git a/Documentation/ioctl/ioctl-number.txt b/Documentation/ioctl/ioctl-number.txt > index c9558146ac58..8bd7907ee36d 100644 > --- a/Documentation/ioctl/ioctl-number.txt > +++ b/Documentation/ioctl/ioctl-number.txt > @@ -340,7 +340,7 @@ Code Seq#(hex) Include File Comments > 0xDD 00-3F ZFCP device driver see drivers/s390/scsi/ > <mailto:aherrman@de.ibm.com> > 0xE5 00-3F linux/fuse.h > -0xEC 00-01 drivers/platform/chrome/cros_ec_dev.h ChromeOS EC driver > +0xEC 00-01 include/uapi/linux/cros_ec_chardev.h ChromeOS EC driver > 0xF3 00-3F drivers/usb/misc/sisusbvga/sisusb.h sisfb (in development) > <mailto:thomas@winischhofer.net> > 0xF4 00-1F video/mbxfb.h mbxfb > diff --git a/drivers/mfd/cros_ec_dev.c b/drivers/mfd/cros_ec_dev.c > index 607383b67cf1..11b791c28f84 100644 > --- a/drivers/mfd/cros_ec_dev.c > +++ b/drivers/mfd/cros_ec_dev.c > @@ -15,7 +15,7 @@ > #include <linux/slab.h> > #include <linux/uaccess.h> > > -#include "cros_ec_dev.h" > +#include <uapi/linux/cros_ec_chardev.h> > > #define DRV_NAME "cros-ec-dev" > > diff --git a/drivers/platform/chrome/Kconfig b/drivers/platform/chrome/Kconfig > index 9417b982ad92..3a9ad001838a 100644 > --- a/drivers/platform/chrome/Kconfig > +++ b/drivers/platform/chrome/Kconfig > @@ -147,6 +147,17 @@ config CROS_KBD_LED_BACKLIGHT > To compile this driver as a module, choose M here: the > module will be called cros_kbd_led_backlight. > > +config CROS_EC_CHARDEV > + tristate "ChromeOS EC miscdevice" > + depends on MFD_CROS_EC_CHARDEV > + default MFD_CROS_EC_CHARDEV > + help > + This driver adds file operations support to talk with the > + ChromeOS EC from userspace via a character device. > + > + To compile this driver as a module, choose M here: the > + module will be called cros_ec_chardev. > + > config CROS_EC_LIGHTBAR > tristate "Chromebook Pixel's lightbar support" > depends on MFD_CROS_EC_CHARDEV > diff --git a/drivers/platform/chrome/Makefile b/drivers/platform/chrome/Makefile > index ebb57e21923b..d47a7e1097ee 100644 > --- a/drivers/platform/chrome/Makefile > +++ b/drivers/platform/chrome/Makefile > @@ -16,6 +16,7 @@ cros_ec_lpcs-$(CONFIG_CROS_EC_LPC_MEC) += cros_ec_lpc_mec.o > obj-$(CONFIG_CROS_EC_LPC) += cros_ec_lpcs.o > obj-$(CONFIG_CROS_EC_PROTO) += cros_ec_proto.o cros_ec_trace.o > obj-$(CONFIG_CROS_KBD_LED_BACKLIGHT) += cros_kbd_led_backlight.o > +obj-$(CONFIG_CROS_EC_CHARDEV) += cros_ec_chardev.o > obj-$(CONFIG_CROS_EC_LIGHTBAR) += cros_ec_lightbar.o > obj-$(CONFIG_CROS_EC_VBC) += cros_ec_vbc.o > obj-$(CONFIG_CROS_EC_DEBUGFS) += cros_ec_debugfs.o > diff --git a/drivers/platform/chrome/cros_ec_chardev.c b/drivers/platform/chrome/cros_ec_chardev.c > new file mode 100644 > index 000000000000..1a0a27080026 > --- /dev/null > +++ b/drivers/platform/chrome/cros_ec_chardev.c > @@ -0,0 +1,279 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * Miscellaneous character driver for ChromeOS Embedded Controller > + * > + * Copyright 2019 Google LLC > + */ > + > +#include <linux/init.h> > +#include <linux/device.h> > +#include <linux/fs.h> > +#include <linux/list.h> > +#include <linux/mfd/cros_ec.h> > +#include <linux/mfd/cros_ec_commands.h> > +#include <linux/miscdevice.h> > +#include <linux/module.h> > +#include <linux/platform_device.h> > +#include <linux/slab.h> > +#include <linux/spinlock.h> > +#include <linux/types.h> > +#include <linux/uaccess.h> > + > +#include <uapi/linux/cros_ec_chardev.h> > + > +#define DRV_NAME "cros-ec-chardev" > + > +static LIST_HEAD(chardev_devices); > +static DEFINE_SPINLOCK(chardev_lock); > + > +struct chardev_data { > + struct list_head list; > + struct cros_ec_dev *ec_dev; > + struct miscdevice misc; > +}; > + > +static int ec_get_version(struct cros_ec_dev *ec, char *str, int maxlen) > +{ > + static const char * const current_image_name[] = { > + "unknown", "read-only", "read-write", "invalid", > + }; > + struct ec_response_get_version *resp; > + struct cros_ec_command *msg; > + int ret; > + > + msg = kzalloc(sizeof(*msg) + sizeof(*resp), GFP_KERNEL); > + if (!msg) > + return -ENOMEM; > + > + msg->command = EC_CMD_GET_VERSION + ec->cmd_offset; > + msg->insize = sizeof(*resp); > + > + ret = cros_ec_cmd_xfer_status(ec->ec_dev, msg); > + if (ret < 0) { > + snprintf(str, maxlen, > + "Unknown EC version, returned error: %d\n", > + msg->result); > + goto exit; > + } > + > + resp = (struct ec_response_get_version *)msg->data; > + if (resp->current_image >= ARRAY_SIZE(current_image_name)) > + resp->current_image = 3; /* invalid */ > + > + snprintf(str, maxlen, "%s\n%s\n%s\n", > + resp->version_string_ro, > + resp->version_string_rw, > + current_image_name[resp->current_image]); > + > + ret = 0; > +exit: > + kfree(msg); > + return ret; > +} > + > +/* > + * Device file ops > + */ > +static int cros_ec_chardev_open(struct inode *inode, struct file *filp) > +{ > + struct miscdevice *mdev = filp->private_data; > + struct cros_ec_dev *ec_dev = dev_get_drvdata(mdev->parent); > + > + filp->private_data = ec_dev; > + nonseekable_open(inode, filp); > + > + return 0; > +} > + > +static ssize_t cros_ec_chardev_read(struct file *filp, char __user *buffer, > + size_t length, loff_t *offset) > +{ > + char msg[sizeof(struct ec_response_get_version) + > + sizeof(CROS_EC_DEV_VERSION)]; > + struct cros_ec_dev *ec = filp->private_data; > + size_t count; > + int ret; > + > + if (*offset != 0) > + return 0; > + > + ret = ec_get_version(ec, msg, sizeof(msg)); > + if (ret) > + return ret; > + > + count = min(length, strlen(msg)); > + > + if (copy_to_user(buffer, msg, count)) > + return -EFAULT; > + > + *offset = count; > + return count; > +} > + > +/* > + * Ioctls > + */ > +static long cros_ec_chardev_ioctl_xcmd(struct cros_ec_dev *ec, void __user *arg) > +{ > + struct cros_ec_command *s_cmd; > + struct cros_ec_command u_cmd; > + long ret; > + > + if (copy_from_user(&u_cmd, arg, sizeof(u_cmd))) > + return -EFAULT; > + > + if (u_cmd.outsize > EC_MAX_MSG_BYTES || > + u_cmd.insize > EC_MAX_MSG_BYTES) > + return -EINVAL; > + > + s_cmd = kmalloc(sizeof(*s_cmd) + max(u_cmd.outsize, u_cmd.insize), > + GFP_KERNEL); > + if (!s_cmd) > + return -ENOMEM; > + > + if (copy_from_user(s_cmd, arg, sizeof(*s_cmd) + u_cmd.outsize)) { > + ret = -EFAULT; > + goto exit; > + } > + > + if (u_cmd.outsize != s_cmd->outsize || > + u_cmd.insize != s_cmd->insize) { > + ret = -EINVAL; > + goto exit; > + } > + > + s_cmd->command += ec->cmd_offset; > + ret = cros_ec_cmd_xfer(ec->ec_dev, s_cmd); > + /* Only copy data to userland if data was received. */ > + if (ret < 0) > + goto exit; > + > + if (copy_to_user(arg, s_cmd, sizeof(*s_cmd) + s_cmd->insize)) > + ret = -EFAULT; > +exit: > + kfree(s_cmd); > + return ret; > +} > + > +static long cros_ec_chardev_ioctl_readmem(struct cros_ec_dev *ec, > + void __user *arg) > +{ > + struct cros_ec_device *ec_dev = ec->ec_dev; > + struct cros_ec_readmem s_mem = { }; > + long num; > + > + /* Not every platform supports direct reads */ > + if (!ec_dev->cmd_readmem) > + return -ENOTTY; > + > + if (copy_from_user(&s_mem, arg, sizeof(s_mem))) > + return -EFAULT; > + > + num = ec_dev->cmd_readmem(ec_dev, s_mem.offset, s_mem.bytes, > + s_mem.buffer); > + if (num <= 0) > + return num; > + > + if (copy_to_user((void __user *)arg, &s_mem, sizeof(s_mem))) > + return -EFAULT; > + > + return num; > +} > + > +static long cros_ec_chardev_ioctl(struct file *filp, unsigned int cmd, > + unsigned long arg) > +{ > + struct cros_ec_dev *ec = filp->private_data; > + > + if (_IOC_TYPE(cmd) != CROS_EC_DEV_IOC) > + return -ENOTTY; > + > + switch (cmd) { > + case CROS_EC_DEV_IOCXCMD: > + return cros_ec_chardev_ioctl_xcmd(ec, (void __user *)arg); > + case CROS_EC_DEV_IOCRDMEM: > + return cros_ec_chardev_ioctl_readmem(ec, (void __user *)arg); > + } > + > + return -ENOTTY; > +} > + > +static const struct file_operations chardev_fops = { > + .open = cros_ec_chardev_open, > + .read = cros_ec_chardev_read, > + .unlocked_ioctl = cros_ec_chardev_ioctl, > +#ifdef CONFIG_COMPAT > + .compat_ioctl = cros_ec_chardev_ioctl, > +#endif > +}; > + > +static int cros_ec_chardev_probe(struct platform_device *pdev) > +{ > + struct cros_ec_dev *ec_dev = dev_get_drvdata(pdev->dev.parent); > + struct cros_ec_platform *ec_platform = dev_get_platdata(ec_dev->dev); > + struct chardev_data *data; > + int ret; > + > + /* Create a char device: we want to create it anew */ > + data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); > + if (!data) > + return -ENOMEM; > + > + data->ec_dev = ec_dev; > + data->misc.minor = MISC_DYNAMIC_MINOR; > + data->misc.fops = &chardev_fops; > + data->misc.name = ec_platform->ec_name; > + data->misc.parent = pdev->dev.parent; > + > + ret = misc_register(&data->misc); > + if (ret) > + return ret; > + > + spin_lock(&chardev_lock); > + list_add(&data->list, &chardev_devices); > + spin_unlock(&chardev_lock); > + > + dev_info(&pdev->dev, "Created misc device /dev/%s\n", > + data->misc.name); No need to be noisy, if all goes well, your code should be quiet. > + > + return 0; > +} > + > +static int cros_ec_chardev_remove(struct platform_device *pdev) > +{ > + struct cros_ec_dev *ec_dev = dev_get_drvdata(pdev->dev.parent); > + struct chardev_data *data; > + > + list_for_each_entry(data, &chardev_devices, list) > + if (data->ec_dev == ec_dev) > + break; > + > + if (data->ec_dev != ec_dev) { > + dev_err(&pdev->dev, > + "remove called but miscdevice %s not found\n", > + data->misc.name); > + return -ENODEV; > + } Why do you have this separate list of devices? You don't seem to need it, you only iterate over it, why is it needed? > + spin_lock(&chardev_lock); > + list_del(&data->list); > + spin_unlock(&chardev_lock); > + misc_deregister(&data->misc); > + > + return 0; > +} You also iterate over the list without the lock, so why even have the lock? Are you sure the list, and the lock, is even needed? thanks, greg k-h ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 03/10] mfd / platform: cros_ec: Miscellaneous character device to talk with the EC 2019-06-04 15:52 ` Greg Kroah-Hartman @ 2019-06-04 16:58 ` Ezequiel Garcia 2019-06-04 18:35 ` Greg Kroah-Hartman 2019-06-05 14:33 ` Enric Balletbo Serra 1 sibling, 1 reply; 17+ messages in thread From: Ezequiel Garcia @ 2019-06-04 16:58 UTC (permalink / raw) To: Greg Kroah-Hartman, Enric Balletbo i Serra Cc: linux-kernel, gwendal, Guenter Roeck, Benson Leung, Lee Jones, kernel, dtor, Gustavo Pimentel, Randy Dunlap, Lorenzo Pieralisi, linux-doc, Enno Luebbers, Guido Kiener, Thomas Gleixner, Kishon Vijay Abraham I, Jonathan Corbet, Wu Hao, Kate Stewart, Tycho Andersen, Gerd Hoffmann, Jilayne Lovejoy Hey Greg, > > + dev_info(&pdev->dev, "Created misc device /dev/%s\n", > > + data->misc.name); > > No need to be noisy, if all goes well, your code should be quiet. > I sometimes wonder about this being noise or not, so I will slightly hijack this thread for this discussion. From a kernel developer point-of-view, or even from a platform developer or user with a debugging hat point-of-view, having a "device created" or "device registered" message is often very useful. In fact, I wish people would do this more often, so I don't have to deal with dynamic debug, or hack my way: diff --git a/drivers/media/i2c/ov5647.c b/drivers/media/i2c/ov5647.c index 4589631798c9..473549b26bb2 100644 --- a/drivers/media/i2c/ov5647.c +++ b/drivers/media/i2c/ov5647.c @@ -603,7 +603,7 @@ static int ov5647_probe(struct i2c_client *client, if (ret < 0) goto error; - dev_dbg(dev, "OmniVision OV5647 camera driver probed\n"); + dev_info(dev, "OmniVision OV5647 camera driver probed\n"); return 0; error: media_entity_cleanup(&sd->entity); In some subsystems, it's even a behavior I'm more or less relying on: $ git grep v4l2_info.*registered drivers/media/ | wc -l 26 And on the downsides, I can't find much. It's just one little line, that is not even noticed unless you have logging turned on. Thanks, Ezequiel ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH 03/10] mfd / platform: cros_ec: Miscellaneous character device to talk with the EC 2019-06-04 16:58 ` Ezequiel Garcia @ 2019-06-04 18:35 ` Greg Kroah-Hartman 2019-06-04 18:39 ` Guenter Roeck 0 siblings, 1 reply; 17+ messages in thread From: Greg Kroah-Hartman @ 2019-06-04 18:35 UTC (permalink / raw) To: Ezequiel Garcia Cc: Enric Balletbo i Serra, linux-kernel, gwendal, Guenter Roeck, Benson Leung, Lee Jones, kernel, dtor, Gustavo Pimentel, Randy Dunlap, Lorenzo Pieralisi, linux-doc, Enno Luebbers, Guido Kiener, Thomas Gleixner, Kishon Vijay Abraham I, Jonathan Corbet, Wu Hao, Kate Stewart, Tycho Andersen, Gerd Hoffmann, Jilayne Lovejoy On Tue, Jun 04, 2019 at 01:58:38PM -0300, Ezequiel Garcia wrote: > Hey Greg, > > > > + dev_info(&pdev->dev, "Created misc device /dev/%s\n", > > > + data->misc.name); > > > > No need to be noisy, if all goes well, your code should be quiet. > > > > I sometimes wonder about this being noise or not, so I will slightly > hijack this thread for this discussion. > > >From a kernel developer point-of-view, or even from a platform > developer or user with a debugging hat point-of-view, having > a "device created" or "device registered" message is often very useful. For you, yes. For someone with 30000 devices attached to their system, it is not, and causes booting to take longer than it should be. > In fact, I wish people would do this more often, so I don't have to > deal with dynamic debug, or hack my way: > > diff --git a/drivers/media/i2c/ov5647.c b/drivers/media/i2c/ov5647.c > index 4589631798c9..473549b26bb2 100644 > --- a/drivers/media/i2c/ov5647.c > +++ b/drivers/media/i2c/ov5647.c > @@ -603,7 +603,7 @@ static int ov5647_probe(struct i2c_client *client, > if (ret < 0) > goto error; > > - dev_dbg(dev, "OmniVision OV5647 camera driver probed\n"); > + dev_info(dev, "OmniVision OV5647 camera driver probed\n"); > return 0; > error: > media_entity_cleanup(&sd->entity); > > In some subsystems, it's even a behavior I'm more or less relying on: > > $ git grep v4l2_info.*registered drivers/media/ | wc -l > 26 > > And on the downsides, I can't find much. It's just one little line, > that is not even noticed unless you have logging turned on. Its better to be quiet, which is why the "default driver registration" macros do not have any printk messages in them. When converting drivers over to it, we made the boot process much more sane, don't try to go and add messages for no good reason back in please. dynamic debugging can be enabled on a module and line-by-line basis, even from the boot command line. So if you need debugging, you can always ask someone to just reboot or unload/load the module and get the message that way. thanks, greg k-h ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 03/10] mfd / platform: cros_ec: Miscellaneous character device to talk with the EC 2019-06-04 18:35 ` Greg Kroah-Hartman @ 2019-06-04 18:39 ` Guenter Roeck 2019-06-04 18:59 ` Greg Kroah-Hartman 0 siblings, 1 reply; 17+ messages in thread From: Guenter Roeck @ 2019-06-04 18:39 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Ezequiel Garcia, Enric Balletbo i Serra, linux-kernel, Gwendal Grignou, Guenter Roeck, Benson Leung, Lee Jones, kernel, Dmitry Torokhov, Gustavo Pimentel, Randy Dunlap, Lorenzo Pieralisi, linux-doc, Enno Luebbers, Guido Kiener, Thomas Gleixner, Kishon Vijay Abraham I, Jonathan Corbet, Wu Hao, Kate Stewart, Tycho Andersen, Gerd Hoffmann, Jilayne Lovejoy On Tue, Jun 4, 2019 at 11:35 AM Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > > On Tue, Jun 04, 2019 at 01:58:38PM -0300, Ezequiel Garcia wrote: > > Hey Greg, > > > > > > + dev_info(&pdev->dev, "Created misc device /dev/%s\n", > > > > + data->misc.name); > > > > > > No need to be noisy, if all goes well, your code should be quiet. > > > > > > > I sometimes wonder about this being noise or not, so I will slightly > > hijack this thread for this discussion. > > > > >From a kernel developer point-of-view, or even from a platform > > developer or user with a debugging hat point-of-view, having > > a "device created" or "device registered" message is often very useful. > > For you, yes. For someone with 30000 devices attached to their system, > it is not, and causes booting to take longer than it should be. > > > In fact, I wish people would do this more often, so I don't have to > > deal with dynamic debug, or hack my way: > > > > diff --git a/drivers/media/i2c/ov5647.c b/drivers/media/i2c/ov5647.c > > index 4589631798c9..473549b26bb2 100644 > > --- a/drivers/media/i2c/ov5647.c > > +++ b/drivers/media/i2c/ov5647.c > > @@ -603,7 +603,7 @@ static int ov5647_probe(struct i2c_client *client, > > if (ret < 0) > > goto error; > > > > - dev_dbg(dev, "OmniVision OV5647 camera driver probed\n"); > > + dev_info(dev, "OmniVision OV5647 camera driver probed\n"); > > return 0; > > error: > > media_entity_cleanup(&sd->entity); > > > > In some subsystems, it's even a behavior I'm more or less relying on: > > > > $ git grep v4l2_info.*registered drivers/media/ | wc -l > > 26 > > > > And on the downsides, I can't find much. It's just one little line, > > that is not even noticed unless you have logging turned on. > > Its better to be quiet, which is why the "default driver registration" > macros do not have any printk messages in them. When converting drivers > over to it, we made the boot process much more sane, don't try to go and > add messages for no good reason back in please. > > dynamic debugging can be enabled on a module and line-by-line basis, > even from the boot command line. So if you need debugging, you can > always ask someone to just reboot or unload/load the module and get the > message that way. > Can we by any chance make this an official policy ? I am kind of tired having to argue about this over and over again. Thanks, Guenter ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 03/10] mfd / platform: cros_ec: Miscellaneous character device to talk with the EC 2019-06-04 18:39 ` Guenter Roeck @ 2019-06-04 18:59 ` Greg Kroah-Hartman 2019-06-05 6:48 ` Lee Jones 2019-06-06 14:01 ` Ezequiel Garcia 0 siblings, 2 replies; 17+ messages in thread From: Greg Kroah-Hartman @ 2019-06-04 18:59 UTC (permalink / raw) To: Guenter Roeck Cc: Ezequiel Garcia, Enric Balletbo i Serra, linux-kernel, Gwendal Grignou, Guenter Roeck, Benson Leung, Lee Jones, kernel, Dmitry Torokhov, Gustavo Pimentel, Randy Dunlap, Lorenzo Pieralisi, linux-doc, Enno Luebbers, Guido Kiener, Thomas Gleixner, Kishon Vijay Abraham I, Jonathan Corbet, Wu Hao, Kate Stewart, Tycho Andersen, Gerd Hoffmann, Jilayne Lovejoy On Tue, Jun 04, 2019 at 11:39:21AM -0700, Guenter Roeck wrote: > On Tue, Jun 4, 2019 at 11:35 AM Greg Kroah-Hartman > <gregkh@linuxfoundation.org> wrote: > > > > On Tue, Jun 04, 2019 at 01:58:38PM -0300, Ezequiel Garcia wrote: > > > Hey Greg, > > > > > > > > + dev_info(&pdev->dev, "Created misc device /dev/%s\n", > > > > > + data->misc.name); > > > > > > > > No need to be noisy, if all goes well, your code should be quiet. > > > > > > > > > > I sometimes wonder about this being noise or not, so I will slightly > > > hijack this thread for this discussion. > > > > > > >From a kernel developer point-of-view, or even from a platform > > > developer or user with a debugging hat point-of-view, having > > > a "device created" or "device registered" message is often very useful. > > > > For you, yes. For someone with 30000 devices attached to their system, > > it is not, and causes booting to take longer than it should be. > > > > > In fact, I wish people would do this more often, so I don't have to > > > deal with dynamic debug, or hack my way: > > > > > > diff --git a/drivers/media/i2c/ov5647.c b/drivers/media/i2c/ov5647.c > > > index 4589631798c9..473549b26bb2 100644 > > > --- a/drivers/media/i2c/ov5647.c > > > +++ b/drivers/media/i2c/ov5647.c > > > @@ -603,7 +603,7 @@ static int ov5647_probe(struct i2c_client *client, > > > if (ret < 0) > > > goto error; > > > > > > - dev_dbg(dev, "OmniVision OV5647 camera driver probed\n"); > > > + dev_info(dev, "OmniVision OV5647 camera driver probed\n"); > > > return 0; > > > error: > > > media_entity_cleanup(&sd->entity); > > > > > > In some subsystems, it's even a behavior I'm more or less relying on: > > > > > > $ git grep v4l2_info.*registered drivers/media/ | wc -l > > > 26 > > > > > > And on the downsides, I can't find much. It's just one little line, > > > that is not even noticed unless you have logging turned on. > > > > Its better to be quiet, which is why the "default driver registration" > > macros do not have any printk messages in them. When converting drivers > > over to it, we made the boot process much more sane, don't try to go and > > add messages for no good reason back in please. > > > > dynamic debugging can be enabled on a module and line-by-line basis, > > even from the boot command line. So if you need debugging, you can > > always ask someone to just reboot or unload/load the module and get the > > message that way. > > > > Can we by any chance make this an official policy ? I am kind of tired > having to argue about this over and over again. Sure, but how does anyone make any "official policy" in the kernel? :) I could just go through and delete all "look ma, a new driver/device!" messages, but that might be annoying... thanks, greg k-h ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 03/10] mfd / platform: cros_ec: Miscellaneous character device to talk with the EC 2019-06-04 18:59 ` Greg Kroah-Hartman @ 2019-06-05 6:48 ` Lee Jones 2019-06-05 8:02 ` Greg Kroah-Hartman 2019-06-06 14:01 ` Ezequiel Garcia 1 sibling, 1 reply; 17+ messages in thread From: Lee Jones @ 2019-06-05 6:48 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Guenter Roeck, Ezequiel Garcia, Enric Balletbo i Serra, linux-kernel, Gwendal Grignou, Guenter Roeck, Benson Leung, kernel, Dmitry Torokhov, Gustavo Pimentel, Randy Dunlap, Lorenzo Pieralisi, linux-doc, Enno Luebbers, Guido Kiener, Thomas Gleixner, Kishon Vijay Abraham I, Jonathan Corbet, Wu Hao, Kate Stewart, Tycho Andersen, Gerd Hoffmann, Jilayne Lovejoy On Tue, 04 Jun 2019, Greg Kroah-Hartman wrote: > On Tue, Jun 04, 2019 at 11:39:21AM -0700, Guenter Roeck wrote: > > On Tue, Jun 4, 2019 at 11:35 AM Greg Kroah-Hartman > > <gregkh@linuxfoundation.org> wrote: > > > > > > On Tue, Jun 04, 2019 at 01:58:38PM -0300, Ezequiel Garcia wrote: > > > > Hey Greg, > > > > > > > > > > + dev_info(&pdev->dev, "Created misc device /dev/%s\n", > > > > > > + data->misc.name); > > > > > > > > > > No need to be noisy, if all goes well, your code should be quiet. > > > > > > > > > > > > > I sometimes wonder about this being noise or not, so I will slightly > > > > hijack this thread for this discussion. > > > > > > > > >From a kernel developer point-of-view, or even from a platform > > > > developer or user with a debugging hat point-of-view, having > > > > a "device created" or "device registered" message is often very useful. > > > > > > For you, yes. For someone with 30000 devices attached to their system, > > > it is not, and causes booting to take longer than it should be. Who has 30,000 devices attached to their systems? I would argue that in these special corner-cases, they should knock the log-level *down* a notch. For the rest of us who run normal platforms, an extra second of boot time renders a more forthcoming/useful system than if each of our devices initialised silently. Personally I like to know what devices I have on my system, and the kernel log is the first place I look. As far as I'm concerned, for the most part, if it's not in the kernel log, I don't have it. "Oh wow, I didn't know I had XXX functionality on this platform." In my real job, I am currently enabling some newly released AArch64 based laptops for booting with ACPI. I must have wasted a day whilst enabling some of the devices the system relies upon, just to find out that 90% of them were actually probing semi-fine (at least probe() was succeeding), just silently. *grumble* -- Lee Jones [李琼斯] Linaro Services Technical Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 03/10] mfd / platform: cros_ec: Miscellaneous character device to talk with the EC 2019-06-05 6:48 ` Lee Jones @ 2019-06-05 8:02 ` Greg Kroah-Hartman 2019-06-05 8:40 ` Lee Jones 0 siblings, 1 reply; 17+ messages in thread From: Greg Kroah-Hartman @ 2019-06-05 8:02 UTC (permalink / raw) To: Lee Jones Cc: Guenter Roeck, Ezequiel Garcia, Enric Balletbo i Serra, linux-kernel, Gwendal Grignou, Guenter Roeck, Benson Leung, kernel, Dmitry Torokhov, Gustavo Pimentel, Randy Dunlap, Lorenzo Pieralisi, linux-doc, Enno Luebbers, Guido Kiener, Thomas Gleixner, Kishon Vijay Abraham I, Jonathan Corbet, Wu Hao, Kate Stewart, Tycho Andersen, Gerd Hoffmann, Jilayne Lovejoy On Wed, Jun 05, 2019 at 07:48:39AM +0100, Lee Jones wrote: > On Tue, 04 Jun 2019, Greg Kroah-Hartman wrote: > > On Tue, Jun 04, 2019 at 11:39:21AM -0700, Guenter Roeck wrote: > > > On Tue, Jun 4, 2019 at 11:35 AM Greg Kroah-Hartman > > > <gregkh@linuxfoundation.org> wrote: > > > > > > > > On Tue, Jun 04, 2019 at 01:58:38PM -0300, Ezequiel Garcia wrote: > > > > > Hey Greg, > > > > > > > > > > > > + dev_info(&pdev->dev, "Created misc device /dev/%s\n", > > > > > > > + data->misc.name); > > > > > > > > > > > > No need to be noisy, if all goes well, your code should be quiet. > > > > > > > > > > > > > > > > I sometimes wonder about this being noise or not, so I will slightly > > > > > hijack this thread for this discussion. > > > > > > > > > > >From a kernel developer point-of-view, or even from a platform > > > > > developer or user with a debugging hat point-of-view, having > > > > > a "device created" or "device registered" message is often very useful. > > > > > > > > For you, yes. For someone with 30000 devices attached to their system, > > > > it is not, and causes booting to take longer than it should be. > > Who has 30,000 devices attached to their systems? More than you might imagine. > I would argue that > in these special corner-cases, they should knock the log-level *down* > a notch. For the rest of us who run normal platforms, an extra second > of boot time renders a more forthcoming/useful system than if each of > our devices initialised silently. > > Personally I like to know what devices I have on my system, and the > kernel log is the first place I look. As far as I'm concerned, for > the most part, if it's not in the kernel log, I don't have it. Then you "do not have" lots of devices, as we have been removing these messages for a number of years now :) > "Oh wow, I didn't know I had XXX functionality on this platform." > > In my real job, I am currently enabling some newly released AArch64 > based laptops for booting with ACPI. I must have wasted a day whilst > enabling some of the devices the system relies upon, just to find > out that 90% of them were actually probing semi-fine (at least probe() > was succeeding), just silently. *grumble* Yup, that's normal. If you want to see what devices are in the system, look in /sys/devices/ as that is what it is for, not the kernel log. thanks, greg k-h ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 03/10] mfd / platform: cros_ec: Miscellaneous character device to talk with the EC 2019-06-05 8:02 ` Greg Kroah-Hartman @ 2019-06-05 8:40 ` Lee Jones 2019-06-05 8:48 ` Greg Kroah-Hartman 0 siblings, 1 reply; 17+ messages in thread From: Lee Jones @ 2019-06-05 8:40 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Guenter Roeck, Ezequiel Garcia, Enric Balletbo i Serra, linux-kernel, Gwendal Grignou, Guenter Roeck, Benson Leung, kernel, Dmitry Torokhov, Gustavo Pimentel, Randy Dunlap, Lorenzo Pieralisi, linux-doc, Enno Luebbers, Guido Kiener, Thomas Gleixner, Kishon Vijay Abraham I, Jonathan Corbet, Wu Hao, Kate Stewart, Tycho Andersen, Gerd Hoffmann, Jilayne Lovejoy On Wed, 05 Jun 2019, Greg Kroah-Hartman wrote: > On Wed, Jun 05, 2019 at 07:48:39AM +0100, Lee Jones wrote: > > On Tue, 04 Jun 2019, Greg Kroah-Hartman wrote: > > > On Tue, Jun 04, 2019 at 11:39:21AM -0700, Guenter Roeck wrote: > > > > On Tue, Jun 4, 2019 at 11:35 AM Greg Kroah-Hartman > > > > <gregkh@linuxfoundation.org> wrote: > > > > > > > > > > On Tue, Jun 04, 2019 at 01:58:38PM -0300, Ezequiel Garcia wrote: > > > > > > Hey Greg, > > > > > > > > > > > > > > + dev_info(&pdev->dev, "Created misc device /dev/%s\n", > > > > > > > > + data->misc.name); > > > > > > > > > > > > > > No need to be noisy, if all goes well, your code should be quiet. > > > > > > > > > > > > > > > > > > > I sometimes wonder about this being noise or not, so I will slightly > > > > > > hijack this thread for this discussion. > > > > > > > > > > > > >From a kernel developer point-of-view, or even from a platform > > > > > > developer or user with a debugging hat point-of-view, having > > > > > > a "device created" or "device registered" message is often very useful. > > > > > > > > > > For you, yes. For someone with 30000 devices attached to their system, > > > > > it is not, and causes booting to take longer than it should be. > > > > Who has 30,000 devices attached to their systems? > > More than you might imagine. > > > I would argue that > > in these special corner-cases, they should knock the log-level *down* > > a notch. For the rest of us who run normal platforms, an extra second > > of boot time renders a more forthcoming/useful system than if each of > > our devices initialised silently. > > > > Personally I like to know what devices I have on my system, and the > > kernel log is the first place I look. As far as I'm concerned, for > > the most part, if it's not in the kernel log, I don't have it. > > Then you "do not have" lots of devices, as we have been removing these > messages for a number of years now :) > > > "Oh wow, I didn't know I had XXX functionality on this platform." > > > > In my real job, I am currently enabling some newly released AArch64 > > based laptops for booting with ACPI. I must have wasted a day whilst > > enabling some of the devices the system relies upon, just to find > > out that 90% of them were actually probing semi-fine (at least probe() > > was succeeding), just silently. *grumble* > > Yup, that's normal. If you want to see what devices are in the system, > look in /sys/devices/ as that is what it is for, not the kernel log. My guess is that less than 1% of Linux users use /sys/devices in this way. It's a very unfriendly interface. Besides, when enabling a new platform, access to sysfs comes too far down the line to be useful in the majority of cases. -- Lee Jones [李琼斯] Linaro Services Technical Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 03/10] mfd / platform: cros_ec: Miscellaneous character device to talk with the EC 2019-06-05 8:40 ` Lee Jones @ 2019-06-05 8:48 ` Greg Kroah-Hartman 2019-06-05 9:21 ` Lee Jones 0 siblings, 1 reply; 17+ messages in thread From: Greg Kroah-Hartman @ 2019-06-05 8:48 UTC (permalink / raw) To: Lee Jones Cc: Guenter Roeck, Ezequiel Garcia, Enric Balletbo i Serra, linux-kernel, Gwendal Grignou, Guenter Roeck, Benson Leung, kernel, Dmitry Torokhov, Gustavo Pimentel, Randy Dunlap, Lorenzo Pieralisi, linux-doc, Enno Luebbers, Guido Kiener, Thomas Gleixner, Kishon Vijay Abraham I, Jonathan Corbet, Wu Hao, Kate Stewart, Tycho Andersen, Gerd Hoffmann, Jilayne Lovejoy On Wed, Jun 05, 2019 at 09:40:02AM +0100, Lee Jones wrote: > On Wed, 05 Jun 2019, Greg Kroah-Hartman wrote: > > > On Wed, Jun 05, 2019 at 07:48:39AM +0100, Lee Jones wrote: > > > On Tue, 04 Jun 2019, Greg Kroah-Hartman wrote: > > > > On Tue, Jun 04, 2019 at 11:39:21AM -0700, Guenter Roeck wrote: > > > > > On Tue, Jun 4, 2019 at 11:35 AM Greg Kroah-Hartman > > > > > <gregkh@linuxfoundation.org> wrote: > > > > > > > > > > > > On Tue, Jun 04, 2019 at 01:58:38PM -0300, Ezequiel Garcia wrote: > > > > > > > Hey Greg, > > > > > > > > > > > > > > > > + dev_info(&pdev->dev, "Created misc device /dev/%s\n", > > > > > > > > > + data->misc.name); > > > > > > > > > > > > > > > > No need to be noisy, if all goes well, your code should be quiet. > > > > > > > > > > > > > > > > > > > > > > I sometimes wonder about this being noise or not, so I will slightly > > > > > > > hijack this thread for this discussion. > > > > > > > > > > > > > > >From a kernel developer point-of-view, or even from a platform > > > > > > > developer or user with a debugging hat point-of-view, having > > > > > > > a "device created" or "device registered" message is often very useful. > > > > > > > > > > > > For you, yes. For someone with 30000 devices attached to their system, > > > > > > it is not, and causes booting to take longer than it should be. > > > > > > Who has 30,000 devices attached to their systems? > > > > More than you might imagine. > > > > > I would argue that > > > in these special corner-cases, they should knock the log-level *down* > > > a notch. For the rest of us who run normal platforms, an extra second > > > of boot time renders a more forthcoming/useful system than if each of > > > our devices initialised silently. > > > > > > Personally I like to know what devices I have on my system, and the > > > kernel log is the first place I look. As far as I'm concerned, for > > > the most part, if it's not in the kernel log, I don't have it. > > > > Then you "do not have" lots of devices, as we have been removing these > > messages for a number of years now :) > > > > > "Oh wow, I didn't know I had XXX functionality on this platform." > > > > > > In my real job, I am currently enabling some newly released AArch64 > > > based laptops for booting with ACPI. I must have wasted a day whilst > > > enabling some of the devices the system relies upon, just to find > > > out that 90% of them were actually probing semi-fine (at least probe() > > > was succeeding), just silently. *grumble* > > > > Yup, that's normal. If you want to see what devices are in the system, > > look in /sys/devices/ as that is what it is for, not the kernel log. > > My guess is that less than 1% of Linux users use /sys/devices in this > way. It's a very unfriendly interface. Besides, when enabling a new > platform, access to sysfs comes too far down the line to be useful in > the majority of cases. `lshw` is your friend :) ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 03/10] mfd / platform: cros_ec: Miscellaneous character device to talk with the EC 2019-06-05 8:48 ` Greg Kroah-Hartman @ 2019-06-05 9:21 ` Lee Jones 0 siblings, 0 replies; 17+ messages in thread From: Lee Jones @ 2019-06-05 9:21 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Guenter Roeck, Ezequiel Garcia, Enric Balletbo i Serra, linux-kernel, Gwendal Grignou, Guenter Roeck, Benson Leung, kernel, Dmitry Torokhov, Gustavo Pimentel, Randy Dunlap, Lorenzo Pieralisi, linux-doc, Enno Luebbers, Guido Kiener, Thomas Gleixner, Kishon Vijay Abraham I, Jonathan Corbet, Wu Hao, Kate Stewart, Tycho Andersen, Gerd Hoffmann, Jilayne Lovejoy On Wed, 05 Jun 2019, Greg Kroah-Hartman wrote: > On Wed, Jun 05, 2019 at 09:40:02AM +0100, Lee Jones wrote: > > On Wed, 05 Jun 2019, Greg Kroah-Hartman wrote: > > > > > On Wed, Jun 05, 2019 at 07:48:39AM +0100, Lee Jones wrote: > > > > On Tue, 04 Jun 2019, Greg Kroah-Hartman wrote: > > > > > On Tue, Jun 04, 2019 at 11:39:21AM -0700, Guenter Roeck wrote: > > > > > > On Tue, Jun 4, 2019 at 11:35 AM Greg Kroah-Hartman > > > > > > <gregkh@linuxfoundation.org> wrote: > > > > > > > > > > > > > > On Tue, Jun 04, 2019 at 01:58:38PM -0300, Ezequiel Garcia wrote: > > > > > > > > Hey Greg, > > > > > > > > > > > > > > > > > > + dev_info(&pdev->dev, "Created misc device /dev/%s\n", > > > > > > > > > > + data->misc.name); > > > > > > > > > > > > > > > > > > No need to be noisy, if all goes well, your code should be quiet. > > > > > > > > > > > > > > > > > > > > > > > > > I sometimes wonder about this being noise or not, so I will slightly > > > > > > > > hijack this thread for this discussion. > > > > > > > > > > > > > > > > >From a kernel developer point-of-view, or even from a platform > > > > > > > > developer or user with a debugging hat point-of-view, having > > > > > > > > a "device created" or "device registered" message is often very useful. > > > > > > > > > > > > > > For you, yes. For someone with 30000 devices attached to their system, > > > > > > > it is not, and causes booting to take longer than it should be. > > > > > > > > Who has 30,000 devices attached to their systems? > > > > > > More than you might imagine. > > > > > > > I would argue that > > > > in these special corner-cases, they should knock the log-level *down* > > > > a notch. For the rest of us who run normal platforms, an extra second > > > > of boot time renders a more forthcoming/useful system than if each of > > > > our devices initialised silently. > > > > > > > > Personally I like to know what devices I have on my system, and the > > > > kernel log is the first place I look. As far as I'm concerned, for > > > > the most part, if it's not in the kernel log, I don't have it. > > > > > > Then you "do not have" lots of devices, as we have been removing these > > > messages for a number of years now :) > > > > > > > "Oh wow, I didn't know I had XXX functionality on this platform." > > > > > > > > In my real job, I am currently enabling some newly released AArch64 > > > > based laptops for booting with ACPI. I must have wasted a day whilst > > > > enabling some of the devices the system relies upon, just to find > > > > out that 90% of them were actually probing semi-fine (at least probe() > > > > was succeeding), just silently. *grumble* > > > > > > Yup, that's normal. If you want to see what devices are in the system, > > > look in /sys/devices/ as that is what it is for, not the kernel log. > > > > My guess is that less than 1% of Linux users use /sys/devices in this > > way. It's a very unfriendly interface. Besides, when enabling a new > > platform, access to sysfs comes too far down the line to be useful in > > the majority of cases. > > `lshw` is your friend :) Provided you have a command line (with `lshw` installed) and a working keyboard. ;) -- Lee Jones [李琼斯] Linaro Services Technical Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 03/10] mfd / platform: cros_ec: Miscellaneous character device to talk with the EC 2019-06-04 18:59 ` Greg Kroah-Hartman 2019-06-05 6:48 ` Lee Jones @ 2019-06-06 14:01 ` Ezequiel Garcia 2019-06-06 14:51 ` Greg Kroah-Hartman 1 sibling, 1 reply; 17+ messages in thread From: Ezequiel Garcia @ 2019-06-06 14:01 UTC (permalink / raw) To: Greg Kroah-Hartman, Guenter Roeck Cc: Enric Balletbo i Serra, linux-kernel, Gwendal Grignou, Guenter Roeck, Benson Leung, Lee Jones, kernel, Dmitry Torokhov, Gustavo Pimentel, Randy Dunlap, Lorenzo Pieralisi, linux-doc, Enno Luebbers, Guido Kiener, Thomas Gleixner, Kishon Vijay Abraham I, Jonathan Corbet, Wu Hao, Kate Stewart, Tycho Andersen, Gerd Hoffmann, Jilayne Lovejoy On Tue, 2019-06-04 at 20:59 +0200, Greg Kroah-Hartman wrote: > On Tue, Jun 04, 2019 at 11:39:21AM -0700, Guenter Roeck wrote: > > On Tue, Jun 4, 2019 at 11:35 AM Greg Kroah-Hartman > > <gregkh@linuxfoundation.org> wrote: > > > On Tue, Jun 04, 2019 at 01:58:38PM -0300, Ezequiel Garcia wrote: > > > > Hey Greg, > > > > > > > > > > + dev_info(&pdev->dev, "Created misc device /dev/%s\n", > > > > > > + data->misc.name); > > > > > > > > > > No need to be noisy, if all goes well, your code should be quiet. > > > > > > > > > > > > > I sometimes wonder about this being noise or not, so I will slightly > > > > hijack this thread for this discussion. > > > > > > > > > From a kernel developer point-of-view, or even from a platform > > > > developer or user with a debugging hat point-of-view, having > > > > a "device created" or "device registered" message is often very useful. > > > > > > For you, yes. For someone with 30000 devices attached to their system, > > > it is not, and causes booting to take longer than it should be. > > > > > > > In fact, I wish people would do this more often, so I don't have to > > > > deal with dynamic debug, or hack my way: > > > > > > > > diff --git a/drivers/media/i2c/ov5647.c b/drivers/media/i2c/ov5647.c > > > > index 4589631798c9..473549b26bb2 100644 > > > > --- a/drivers/media/i2c/ov5647.c > > > > +++ b/drivers/media/i2c/ov5647.c > > > > @@ -603,7 +603,7 @@ static int ov5647_probe(struct i2c_client *client, > > > > if (ret < 0) > > > > goto error; > > > > > > > > - dev_dbg(dev, "OmniVision OV5647 camera driver probed\n"); > > > > + dev_info(dev, "OmniVision OV5647 camera driver probed\n"); > > > > return 0; > > > > error: > > > > media_entity_cleanup(&sd->entity); > > > > > > > > In some subsystems, it's even a behavior I'm more or less relying on: > > > > > > > > $ git grep v4l2_info.*registered drivers/media/ | wc -l > > > > 26 > > > > > > > > And on the downsides, I can't find much. It's just one little line, > > > > that is not even noticed unless you have logging turned on. > > > > > > Its better to be quiet, which is why the "default driver registration" > > > macros do not have any printk messages in them. When converting drivers > > > over to it, we made the boot process much more sane, don't try to go and > > > add messages for no good reason back in please. > > > > > > dynamic debugging can be enabled on a module and line-by-line basis, > > > even from the boot command line. So if you need debugging, you can > > > always ask someone to just reboot or unload/load the module and get the > > > message that way. > > > > > > > Can we by any chance make this an official policy ? I am kind of tired > > having to argue about this over and over again. > > Sure, but how does anyone make any "official policy" in the kernel? :) > > I could just go through and delete all "look ma, a new driver/device!" > messages, but that might be annoying... > Well, I really need to task. If it's not an official policy (and won't be anytime soon?), then what's preventing Enric from pushing this print on this driver, given he is the one maintaining the code? Thanks, Eze ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 03/10] mfd / platform: cros_ec: Miscellaneous character device to talk with the EC 2019-06-06 14:01 ` Ezequiel Garcia @ 2019-06-06 14:51 ` Greg Kroah-Hartman 2019-06-06 15:12 ` Ezequiel Garcia 0 siblings, 1 reply; 17+ messages in thread From: Greg Kroah-Hartman @ 2019-06-06 14:51 UTC (permalink / raw) To: Ezequiel Garcia Cc: Guenter Roeck, Enric Balletbo i Serra, linux-kernel, Gwendal Grignou, Guenter Roeck, Benson Leung, Lee Jones, kernel, Dmitry Torokhov, Gustavo Pimentel, Randy Dunlap, Lorenzo Pieralisi, linux-doc, Enno Luebbers, Guido Kiener, Thomas Gleixner, Kishon Vijay Abraham I, Jonathan Corbet, Wu Hao, Kate Stewart, Tycho Andersen, Gerd Hoffmann, Jilayne Lovejoy On Thu, Jun 06, 2019 at 11:01:17AM -0300, Ezequiel Garcia wrote: > On Tue, 2019-06-04 at 20:59 +0200, Greg Kroah-Hartman wrote: > > On Tue, Jun 04, 2019 at 11:39:21AM -0700, Guenter Roeck wrote: > > > On Tue, Jun 4, 2019 at 11:35 AM Greg Kroah-Hartman > > > <gregkh@linuxfoundation.org> wrote: > > > > On Tue, Jun 04, 2019 at 01:58:38PM -0300, Ezequiel Garcia wrote: > > > > > Hey Greg, > > > > > > > > > > > > + dev_info(&pdev->dev, "Created misc device /dev/%s\n", > > > > > > > + data->misc.name); > > > > > > > > > > > > No need to be noisy, if all goes well, your code should be quiet. > > > > > > > > > > > > > > > > I sometimes wonder about this being noise or not, so I will slightly > > > > > hijack this thread for this discussion. > > > > > > > > > > > From a kernel developer point-of-view, or even from a platform > > > > > developer or user with a debugging hat point-of-view, having > > > > > a "device created" or "device registered" message is often very useful. > > > > > > > > For you, yes. For someone with 30000 devices attached to their system, > > > > it is not, and causes booting to take longer than it should be. > > > > > > > > > In fact, I wish people would do this more often, so I don't have to > > > > > deal with dynamic debug, or hack my way: > > > > > > > > > > diff --git a/drivers/media/i2c/ov5647.c b/drivers/media/i2c/ov5647.c > > > > > index 4589631798c9..473549b26bb2 100644 > > > > > --- a/drivers/media/i2c/ov5647.c > > > > > +++ b/drivers/media/i2c/ov5647.c > > > > > @@ -603,7 +603,7 @@ static int ov5647_probe(struct i2c_client *client, > > > > > if (ret < 0) > > > > > goto error; > > > > > > > > > > - dev_dbg(dev, "OmniVision OV5647 camera driver probed\n"); > > > > > + dev_info(dev, "OmniVision OV5647 camera driver probed\n"); > > > > > return 0; > > > > > error: > > > > > media_entity_cleanup(&sd->entity); > > > > > > > > > > In some subsystems, it's even a behavior I'm more or less relying on: > > > > > > > > > > $ git grep v4l2_info.*registered drivers/media/ | wc -l > > > > > 26 > > > > > > > > > > And on the downsides, I can't find much. It's just one little line, > > > > > that is not even noticed unless you have logging turned on. > > > > > > > > Its better to be quiet, which is why the "default driver registration" > > > > macros do not have any printk messages in them. When converting drivers > > > > over to it, we made the boot process much more sane, don't try to go and > > > > add messages for no good reason back in please. > > > > > > > > dynamic debugging can be enabled on a module and line-by-line basis, > > > > even from the boot command line. So if you need debugging, you can > > > > always ask someone to just reboot or unload/load the module and get the > > > > message that way. > > > > > > > > > > Can we by any chance make this an official policy ? I am kind of tired > > > having to argue about this over and over again. > > > > Sure, but how does anyone make any "official policy" in the kernel? :) > > > > I could just go through and delete all "look ma, a new driver/device!" > > messages, but that might be annoying... > > > > Well, I really need to task. ??? > If it's not an official policy (and won't be anytime soon?), The ":)" there was that we really have very few "official" policies, only things that we all strongly encourage to happen. And get grumpy if we see them in code reviews. Like I did here. > then what's preventing Enric from pushing this print on this driver, > given he is the one maintaining the code? Given that he wants people to review his code, why would you tell him to ignore what people are trying to tell him? Again, don't be noisy, it's not hard, and is how things have been trending for many years now. thanks, greg k-h ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 03/10] mfd / platform: cros_ec: Miscellaneous character device to talk with the EC 2019-06-06 14:51 ` Greg Kroah-Hartman @ 2019-06-06 15:12 ` Ezequiel Garcia 2019-06-06 21:11 ` Randy Dunlap 0 siblings, 1 reply; 17+ messages in thread From: Ezequiel Garcia @ 2019-06-06 15:12 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Guenter Roeck, Enric Balletbo i Serra, linux-kernel, Gwendal Grignou, Guenter Roeck, Benson Leung, Lee Jones, kernel, Dmitry Torokhov, Gustavo Pimentel, Randy Dunlap, Lorenzo Pieralisi, linux-doc, Enno Luebbers, Guido Kiener, Thomas Gleixner, Kishon Vijay Abraham I, Jonathan Corbet, Wu Hao, Kate Stewart, Tycho Andersen, Gerd Hoffmann, Jilayne Lovejoy On Thu, 2019-06-06 at 16:51 +0200, Greg Kroah-Hartman wrote: > On Thu, Jun 06, 2019 at 11:01:17AM -0300, Ezequiel Garcia wrote: > > On Tue, 2019-06-04 at 20:59 +0200, Greg Kroah-Hartman wrote: > > > On Tue, Jun 04, 2019 at 11:39:21AM -0700, Guenter Roeck wrote: > > > > On Tue, Jun 4, 2019 at 11:35 AM Greg Kroah-Hartman > > > > <gregkh@linuxfoundation.org> wrote: > > > > > On Tue, Jun 04, 2019 at 01:58:38PM -0300, Ezequiel Garcia wrote: > > > > > > Hey Greg, > > > > > > > > > > > > > > + dev_info(&pdev->dev, "Created misc device /dev/%s\n", > > > > > > > > + data->misc.name); > > > > > > > > > > > > > > No need to be noisy, if all goes well, your code should be quiet. > > > > > > > > > > > > > > > > > > > I sometimes wonder about this being noise or not, so I will slightly > > > > > > hijack this thread for this discussion. > > > > > > > > > > > > > From a kernel developer point-of-view, or even from a platform > > > > > > developer or user with a debugging hat point-of-view, having > > > > > > a "device created" or "device registered" message is often very useful. > > > > > > > > > > For you, yes. For someone with 30000 devices attached to their system, > > > > > it is not, and causes booting to take longer than it should be. > > > > > > > > > > > In fact, I wish people would do this more often, so I don't have to > > > > > > deal with dynamic debug, or hack my way: > > > > > > > > > > > > diff --git a/drivers/media/i2c/ov5647.c b/drivers/media/i2c/ov5647.c > > > > > > index 4589631798c9..473549b26bb2 100644 > > > > > > --- a/drivers/media/i2c/ov5647.c > > > > > > +++ b/drivers/media/i2c/ov5647.c > > > > > > @@ -603,7 +603,7 @@ static int ov5647_probe(struct i2c_client *client, > > > > > > if (ret < 0) > > > > > > goto error; > > > > > > > > > > > > - dev_dbg(dev, "OmniVision OV5647 camera driver probed\n"); > > > > > > + dev_info(dev, "OmniVision OV5647 camera driver probed\n"); > > > > > > return 0; > > > > > > error: > > > > > > media_entity_cleanup(&sd->entity); > > > > > > > > > > > > In some subsystems, it's even a behavior I'm more or less relying on: > > > > > > > > > > > > $ git grep v4l2_info.*registered drivers/media/ | wc -l > > > > > > 26 > > > > > > > > > > > > And on the downsides, I can't find much. It's just one little line, > > > > > > that is not even noticed unless you have logging turned on. > > > > > > > > > > Its better to be quiet, which is why the "default driver registration" > > > > > macros do not have any printk messages in them. When converting drivers > > > > > over to it, we made the boot process much more sane, don't try to go and > > > > > add messages for no good reason back in please. > > > > > > > > > > dynamic debugging can be enabled on a module and line-by-line basis, > > > > > even from the boot command line. So if you need debugging, you can > > > > > always ask someone to just reboot or unload/load the module and get the > > > > > message that way. > > > > > > > > > > > > > Can we by any chance make this an official policy ? I am kind of tired > > > > having to argue about this over and over again. > > > > > > Sure, but how does anyone make any "official policy" in the kernel? :) > > > > > > I could just go through and delete all "look ma, a new driver/device!" > > > messages, but that might be annoying... > > > > > > > Well, I really need to task. > > ??? > Oops, typo: s/task/ask :-) > > If it's not an official policy (and won't be anytime soon?), > > The ":)" there was that we really have very few "official" policies, > only things that we all strongly encourage to happen. And get grumpy if > we see them in code reviews. Like I did here. > Well, not everyone gets grumpy. As I pointed out, we use this "registered" messages (messages or noise, seems this lie in the eye of the beholder), consistently across entire subsystems. > > then what's preventing Enric from pushing this print on this driver, > > given he is the one maintaining the code? > > Given that he wants people to review his code, why would you tell him to > ignore what people are trying to tell him? > I'm not suggesting to ignore anyone, rather to consider all voices involved in each review comment. > Again, don't be noisy, it's not hard, and is how things have been > trending for many years now. > Thanks, Eze ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 03/10] mfd / platform: cros_ec: Miscellaneous character device to talk with the EC 2019-06-06 15:12 ` Ezequiel Garcia @ 2019-06-06 21:11 ` Randy Dunlap 2019-06-10 7:27 ` Lee Jones 0 siblings, 1 reply; 17+ messages in thread From: Randy Dunlap @ 2019-06-06 21:11 UTC (permalink / raw) To: Ezequiel Garcia, Greg Kroah-Hartman Cc: Guenter Roeck, Enric Balletbo i Serra, linux-kernel, Gwendal Grignou, Guenter Roeck, Benson Leung, Lee Jones, kernel, Dmitry Torokhov, Gustavo Pimentel, Lorenzo Pieralisi, linux-doc, Enno Luebbers, Guido Kiener, Thomas Gleixner, Kishon Vijay Abraham I, Jonathan Corbet, Wu Hao, Kate Stewart, Tycho Andersen, Gerd Hoffmann, Jilayne Lovejoy On 6/6/19 8:12 AM, Ezequiel Garcia wrote: > On Thu, 2019-06-06 at 16:51 +0200, Greg Kroah-Hartman wrote: >> On Thu, Jun 06, 2019 at 11:01:17AM -0300, Ezequiel Garcia wrote: >>> On Tue, 2019-06-04 at 20:59 +0200, Greg Kroah-Hartman wrote: >>>> On Tue, Jun 04, 2019 at 11:39:21AM -0700, Guenter Roeck wrote: >>>>> On Tue, Jun 4, 2019 at 11:35 AM Greg Kroah-Hartman >>>>> <gregkh@linuxfoundation.org> wrote: >>>>>> On Tue, Jun 04, 2019 at 01:58:38PM -0300, Ezequiel Garcia wrote: >>>>>>> Hey Greg, >>>>>>> >>>>>>>>> + dev_info(&pdev->dev, "Created misc device /dev/%s\n", >>>>>>>>> + data->misc.name); >>>>>>>> >>>>>>>> No need to be noisy, if all goes well, your code should be quiet. >>>>>>>> >>>>>>> >>>>>>> I sometimes wonder about this being noise or not, so I will slightly >>>>>>> hijack this thread for this discussion. >>>>>>> >>>>>>>> From a kernel developer point-of-view, or even from a platform >>>>>>> developer or user with a debugging hat point-of-view, having >>>>>>> a "device created" or "device registered" message is often very useful. >>>>>> >>>>>> For you, yes. For someone with 30000 devices attached to their system, >>>>>> it is not, and causes booting to take longer than it should be. >>>>>> >>>>>>> In fact, I wish people would do this more often, so I don't have to >>>>>>> deal with dynamic debug, or hack my way: >>>>>>> >>>>>>> diff --git a/drivers/media/i2c/ov5647.c b/drivers/media/i2c/ov5647.c >>>>>>> index 4589631798c9..473549b26bb2 100644 >>>>>>> --- a/drivers/media/i2c/ov5647.c >>>>>>> +++ b/drivers/media/i2c/ov5647.c >>>>>>> @@ -603,7 +603,7 @@ static int ov5647_probe(struct i2c_client *client, >>>>>>> if (ret < 0) >>>>>>> goto error; >>>>>>> >>>>>>> - dev_dbg(dev, "OmniVision OV5647 camera driver probed\n"); >>>>>>> + dev_info(dev, "OmniVision OV5647 camera driver probed\n"); >>>>>>> return 0; >>>>>>> error: >>>>>>> media_entity_cleanup(&sd->entity); >>>>>>> >>>>>>> In some subsystems, it's even a behavior I'm more or less relying on: >>>>>>> >>>>>>> $ git grep v4l2_info.*registered drivers/media/ | wc -l >>>>>>> 26 >>>>>>> >>>>>>> And on the downsides, I can't find much. It's just one little line, >>>>>>> that is not even noticed unless you have logging turned on. >>>>>> >>>>>> Its better to be quiet, which is why the "default driver registration" >>>>>> macros do not have any printk messages in them. When converting drivers >>>>>> over to it, we made the boot process much more sane, don't try to go and >>>>>> add messages for no good reason back in please. >>>>>> >>>>>> dynamic debugging can be enabled on a module and line-by-line basis, >>>>>> even from the boot command line. So if you need debugging, you can >>>>>> always ask someone to just reboot or unload/load the module and get the >>>>>> message that way. >>>>>> >>>>> >>>>> Can we by any chance make this an official policy ? I am kind of tired >>>>> having to argue about this over and over again. >>>> >>>> Sure, but how does anyone make any "official policy" in the kernel? :) >>>> >>>> I could just go through and delete all "look ma, a new driver/device!" >>>> messages, but that might be annoying... >>>> >>> >>> Well, I really need to task. >> >> ??? >> > > Oops, typo: s/task/ask :-) > >>> If it's not an official policy (and won't be anytime soon?), >> >> The ":)" there was that we really have very few "official" policies, >> only things that we all strongly encourage to happen. And get grumpy if >> we see them in code reviews. Like I did here. >> > > Well, not everyone gets grumpy. As I pointed out, we use this "registered" > messages (messages or noise, seems this lie in the eye of the beholder), > consistently across entire subsystems. :( >>> then what's preventing Enric from pushing this print on this driver, >>> given he is the one maintaining the code? >> >> Given that he wants people to review his code, why would you tell him to >> ignore what people are trying to tell him? >> > > I'm not suggesting to ignore anyone, rather to consider all voices > involved in each review comment. > >> Again, don't be noisy, it's not hard, and is how things have been >> trending for many years now. Ack that. -- ~Randy ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 03/10] mfd / platform: cros_ec: Miscellaneous character device to talk with the EC 2019-06-06 21:11 ` Randy Dunlap @ 2019-06-10 7:27 ` Lee Jones 0 siblings, 0 replies; 17+ messages in thread From: Lee Jones @ 2019-06-10 7:27 UTC (permalink / raw) To: Randy Dunlap Cc: Ezequiel Garcia, Greg Kroah-Hartman, Guenter Roeck, Enric Balletbo i Serra, linux-kernel, Gwendal Grignou, Guenter Roeck, Benson Leung, kernel, Dmitry Torokhov, Gustavo Pimentel, Lorenzo Pieralisi, linux-doc, Enno Luebbers, Guido Kiener, Thomas Gleixner, Kishon Vijay Abraham I, Jonathan Corbet, Wu Hao, Kate Stewart, Tycho Andersen, Gerd Hoffmann, Jilayne Lovejoy On Thu, 06 Jun 2019, Randy Dunlap wrote: > > On Thu, 2019-06-06 at 16:51 +0200, Greg Kroah-Hartman wrote: > >> Again, don't be noisy, it's not hard, and is how things have been > >> trending for many years now. > > Ack that. Not to say that this particular print is acceptable, but there are places where a low-level (dbg/info) print on successful probe is helpful. Driver initialisation is important! There's a big difference between drivers 'being noisy', spilling all sorts of information that may well be useful or interesting to a driver developer, but has little value to anyone else, and providing a single print to say that a device has been detected and successfully initialised/probed. I recently fell victim to a silent, but fully functional device. Successful device initialisation should not be silent when debugging has been set to the highest level IMHO. And yes, of course turning on debugging for Driver Core works, but is not practical for all cases and is certainly not the first port of call when figuring out why initialisation seems to be failing for a single particular device. Truly surplus churn should absolutely be removed from the boot log, or at the very least downgraded, leaving only truly useful information such as highlighting a newly detected device for example. If the user wants an even more silent boot log, they should turn the log level down a notch. That is why we have log levels after all. Simply removing all useful prints regardless of log-level is not the way to go IMHO. -- Lee Jones [李琼斯] Linaro Services Technical Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 03/10] mfd / platform: cros_ec: Miscellaneous character device to talk with the EC 2019-06-04 15:52 ` Greg Kroah-Hartman 2019-06-04 16:58 ` Ezequiel Garcia @ 2019-06-05 14:33 ` Enric Balletbo Serra 1 sibling, 0 replies; 17+ messages in thread From: Enric Balletbo Serra @ 2019-06-05 14:33 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Enric Balletbo i Serra, linux-kernel, Gwendal Grignou, Guenter Roeck, Benson Leung, Lee Jones, kernel, Dmitry Torokhov, Gustavo Pimentel, Randy Dunlap, Lorenzo Pieralisi, linux-doc, Enno Luebbers, Guido Kiener, Thomas Gleixner, Kishon Vijay Abraham I, Jonathan Corbet, Wu Hao, Kate Stewart, Tycho Andersen, Gerd Hoffmann, Jilayne Lovejoy Hi Greg, Many thanks for your comments, Missatge de Greg Kroah-Hartman <gregkh@linuxfoundation.org> del dia dt., 4 de juny 2019 a les 17:53: > > On Tue, Jun 04, 2019 at 05:20:12PM +0200, Enric Balletbo i Serra wrote: > > That's a driver to talk with the ChromeOS Embedded Controller via a > > miscellaneous character device, it creates an entry in /dev for every > > instance and implements basic file operations for communicating with the > > Embedded Controller with an userspace application. The API is moved to > > the uapi folder, which is supposed to contain the user space API of the > > kernel. > > > > Note that this will replace current character device interface > > implemented in the cros-ec-dev driver in the MFD subsystem. The idea is > > to move all the functionality that extends the bounds of what MFD was > > designed to platform/chrome subsystem. > > > > Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> > > --- > > > > Documentation/ioctl/ioctl-number.txt | 2 +- > > drivers/mfd/cros_ec_dev.c | 2 +- > > drivers/platform/chrome/Kconfig | 11 + > > drivers/platform/chrome/Makefile | 1 + > > drivers/platform/chrome/cros_ec_chardev.c | 279 ++++++++++++++++++ > > .../uapi/linux/cros_ec_chardev.h | 18 +- > > 6 files changed, 302 insertions(+), 11 deletions(-) > > create mode 100644 drivers/platform/chrome/cros_ec_chardev.c > > rename drivers/mfd/cros_ec_dev.h => include/uapi/linux/cros_ec_chardev.h (70%) > > > > diff --git a/Documentation/ioctl/ioctl-number.txt b/Documentation/ioctl/ioctl-number.txt > > index c9558146ac58..8bd7907ee36d 100644 > > --- a/Documentation/ioctl/ioctl-number.txt > > +++ b/Documentation/ioctl/ioctl-number.txt > > @@ -340,7 +340,7 @@ Code Seq#(hex) Include File Comments > > 0xDD 00-3F ZFCP device driver see drivers/s390/scsi/ > > <mailto:aherrman@de.ibm.com> > > 0xE5 00-3F linux/fuse.h > > -0xEC 00-01 drivers/platform/chrome/cros_ec_dev.h ChromeOS EC driver > > +0xEC 00-01 include/uapi/linux/cros_ec_chardev.h ChromeOS EC driver > > 0xF3 00-3F drivers/usb/misc/sisusbvga/sisusb.h sisfb (in development) > > <mailto:thomas@winischhofer.net> > > 0xF4 00-1F video/mbxfb.h mbxfb > > diff --git a/drivers/mfd/cros_ec_dev.c b/drivers/mfd/cros_ec_dev.c > > index 607383b67cf1..11b791c28f84 100644 > > --- a/drivers/mfd/cros_ec_dev.c > > +++ b/drivers/mfd/cros_ec_dev.c > > @@ -15,7 +15,7 @@ > > #include <linux/slab.h> > > #include <linux/uaccess.h> > > > > -#include "cros_ec_dev.h" > > +#include <uapi/linux/cros_ec_chardev.h> > > > > #define DRV_NAME "cros-ec-dev" > > > > diff --git a/drivers/platform/chrome/Kconfig b/drivers/platform/chrome/Kconfig > > index 9417b982ad92..3a9ad001838a 100644 > > --- a/drivers/platform/chrome/Kconfig > > +++ b/drivers/platform/chrome/Kconfig > > @@ -147,6 +147,17 @@ config CROS_KBD_LED_BACKLIGHT > > To compile this driver as a module, choose M here: the > > module will be called cros_kbd_led_backlight. > > > > +config CROS_EC_CHARDEV > > + tristate "ChromeOS EC miscdevice" > > + depends on MFD_CROS_EC_CHARDEV > > + default MFD_CROS_EC_CHARDEV > > + help > > + This driver adds file operations support to talk with the > > + ChromeOS EC from userspace via a character device. > > + > > + To compile this driver as a module, choose M here: the > > + module will be called cros_ec_chardev. > > + > > config CROS_EC_LIGHTBAR > > tristate "Chromebook Pixel's lightbar support" > > depends on MFD_CROS_EC_CHARDEV > > diff --git a/drivers/platform/chrome/Makefile b/drivers/platform/chrome/Makefile > > index ebb57e21923b..d47a7e1097ee 100644 > > --- a/drivers/platform/chrome/Makefile > > +++ b/drivers/platform/chrome/Makefile > > @@ -16,6 +16,7 @@ cros_ec_lpcs-$(CONFIG_CROS_EC_LPC_MEC) += cros_ec_lpc_mec.o > > obj-$(CONFIG_CROS_EC_LPC) += cros_ec_lpcs.o > > obj-$(CONFIG_CROS_EC_PROTO) += cros_ec_proto.o cros_ec_trace.o > > obj-$(CONFIG_CROS_KBD_LED_BACKLIGHT) += cros_kbd_led_backlight.o > > +obj-$(CONFIG_CROS_EC_CHARDEV) += cros_ec_chardev.o > > obj-$(CONFIG_CROS_EC_LIGHTBAR) += cros_ec_lightbar.o > > obj-$(CONFIG_CROS_EC_VBC) += cros_ec_vbc.o > > obj-$(CONFIG_CROS_EC_DEBUGFS) += cros_ec_debugfs.o > > diff --git a/drivers/platform/chrome/cros_ec_chardev.c b/drivers/platform/chrome/cros_ec_chardev.c > > new file mode 100644 > > index 000000000000..1a0a27080026 > > --- /dev/null > > +++ b/drivers/platform/chrome/cros_ec_chardev.c > > @@ -0,0 +1,279 @@ > > +// SPDX-License-Identifier: GPL-2.0+ > > +/* > > + * Miscellaneous character driver for ChromeOS Embedded Controller > > + * > > + * Copyright 2019 Google LLC > > + */ > > + > > +#include <linux/init.h> > > +#include <linux/device.h> > > +#include <linux/fs.h> > > +#include <linux/list.h> > > +#include <linux/mfd/cros_ec.h> > > +#include <linux/mfd/cros_ec_commands.h> > > +#include <linux/miscdevice.h> > > +#include <linux/module.h> > > +#include <linux/platform_device.h> > > +#include <linux/slab.h> > > +#include <linux/spinlock.h> > > +#include <linux/types.h> > > +#include <linux/uaccess.h> > > + > > +#include <uapi/linux/cros_ec_chardev.h> > > + > > +#define DRV_NAME "cros-ec-chardev" > > + > > +static LIST_HEAD(chardev_devices); > > +static DEFINE_SPINLOCK(chardev_lock); > > + > > +struct chardev_data { > > + struct list_head list; > > + struct cros_ec_dev *ec_dev; > > + struct miscdevice misc; > > +}; > > + > > +static int ec_get_version(struct cros_ec_dev *ec, char *str, int maxlen) > > +{ > > + static const char * const current_image_name[] = { > > + "unknown", "read-only", "read-write", "invalid", > > + }; > > + struct ec_response_get_version *resp; > > + struct cros_ec_command *msg; > > + int ret; > > + > > + msg = kzalloc(sizeof(*msg) + sizeof(*resp), GFP_KERNEL); > > + if (!msg) > > + return -ENOMEM; > > + > > + msg->command = EC_CMD_GET_VERSION + ec->cmd_offset; > > + msg->insize = sizeof(*resp); > > + > > + ret = cros_ec_cmd_xfer_status(ec->ec_dev, msg); > > + if (ret < 0) { > > + snprintf(str, maxlen, > > + "Unknown EC version, returned error: %d\n", > > + msg->result); > > + goto exit; > > + } > > + > > + resp = (struct ec_response_get_version *)msg->data; > > + if (resp->current_image >= ARRAY_SIZE(current_image_name)) > > + resp->current_image = 3; /* invalid */ > > + > > + snprintf(str, maxlen, "%s\n%s\n%s\n", > > + resp->version_string_ro, > > + resp->version_string_rw, > > + current_image_name[resp->current_image]); > > + > > + ret = 0; > > +exit: > > + kfree(msg); > > + return ret; > > +} > > + > > +/* > > + * Device file ops > > + */ > > +static int cros_ec_chardev_open(struct inode *inode, struct file *filp) > > +{ > > + struct miscdevice *mdev = filp->private_data; > > + struct cros_ec_dev *ec_dev = dev_get_drvdata(mdev->parent); > > + > > + filp->private_data = ec_dev; > > + nonseekable_open(inode, filp); > > + > > + return 0; > > +} > > + > > +static ssize_t cros_ec_chardev_read(struct file *filp, char __user *buffer, > > + size_t length, loff_t *offset) > > +{ > > + char msg[sizeof(struct ec_response_get_version) + > > + sizeof(CROS_EC_DEV_VERSION)]; > > + struct cros_ec_dev *ec = filp->private_data; > > + size_t count; > > + int ret; > > + > > + if (*offset != 0) > > + return 0; > > + > > + ret = ec_get_version(ec, msg, sizeof(msg)); > > + if (ret) > > + return ret; > > + > > + count = min(length, strlen(msg)); > > + > > + if (copy_to_user(buffer, msg, count)) > > + return -EFAULT; > > + > > + *offset = count; > > + return count; > > +} > > + > > +/* > > + * Ioctls > > + */ > > +static long cros_ec_chardev_ioctl_xcmd(struct cros_ec_dev *ec, void __user *arg) > > +{ > > + struct cros_ec_command *s_cmd; > > + struct cros_ec_command u_cmd; > > + long ret; > > + > > + if (copy_from_user(&u_cmd, arg, sizeof(u_cmd))) > > + return -EFAULT; > > + > > + if (u_cmd.outsize > EC_MAX_MSG_BYTES || > > + u_cmd.insize > EC_MAX_MSG_BYTES) > > + return -EINVAL; > > + > > + s_cmd = kmalloc(sizeof(*s_cmd) + max(u_cmd.outsize, u_cmd.insize), > > + GFP_KERNEL); > > + if (!s_cmd) > > + return -ENOMEM; > > + > > + if (copy_from_user(s_cmd, arg, sizeof(*s_cmd) + u_cmd.outsize)) { > > + ret = -EFAULT; > > + goto exit; > > + } > > + > > + if (u_cmd.outsize != s_cmd->outsize || > > + u_cmd.insize != s_cmd->insize) { > > + ret = -EINVAL; > > + goto exit; > > + } > > + > > + s_cmd->command += ec->cmd_offset; > > + ret = cros_ec_cmd_xfer(ec->ec_dev, s_cmd); > > + /* Only copy data to userland if data was received. */ > > + if (ret < 0) > > + goto exit; > > + > > + if (copy_to_user(arg, s_cmd, sizeof(*s_cmd) + s_cmd->insize)) > > + ret = -EFAULT; > > +exit: > > + kfree(s_cmd); > > + return ret; > > +} > > + > > +static long cros_ec_chardev_ioctl_readmem(struct cros_ec_dev *ec, > > + void __user *arg) > > +{ > > + struct cros_ec_device *ec_dev = ec->ec_dev; > > + struct cros_ec_readmem s_mem = { }; > > + long num; > > + > > + /* Not every platform supports direct reads */ > > + if (!ec_dev->cmd_readmem) > > + return -ENOTTY; > > + > > + if (copy_from_user(&s_mem, arg, sizeof(s_mem))) > > + return -EFAULT; > > + > > + num = ec_dev->cmd_readmem(ec_dev, s_mem.offset, s_mem.bytes, > > + s_mem.buffer); > > + if (num <= 0) > > + return num; > > + > > + if (copy_to_user((void __user *)arg, &s_mem, sizeof(s_mem))) > > + return -EFAULT; > > + > > + return num; > > +} > > + > > +static long cros_ec_chardev_ioctl(struct file *filp, unsigned int cmd, > > + unsigned long arg) > > +{ > > + struct cros_ec_dev *ec = filp->private_data; > > + > > + if (_IOC_TYPE(cmd) != CROS_EC_DEV_IOC) > > + return -ENOTTY; > > + > > + switch (cmd) { > > + case CROS_EC_DEV_IOCXCMD: > > + return cros_ec_chardev_ioctl_xcmd(ec, (void __user *)arg); > > + case CROS_EC_DEV_IOCRDMEM: > > + return cros_ec_chardev_ioctl_readmem(ec, (void __user *)arg); > > + } > > + > > + return -ENOTTY; > > +} > > + > > +static const struct file_operations chardev_fops = { > > + .open = cros_ec_chardev_open, > > + .read = cros_ec_chardev_read, > > + .unlocked_ioctl = cros_ec_chardev_ioctl, > > +#ifdef CONFIG_COMPAT > > + .compat_ioctl = cros_ec_chardev_ioctl, > > +#endif > > +}; > > + > > +static int cros_ec_chardev_probe(struct platform_device *pdev) > > +{ > > + struct cros_ec_dev *ec_dev = dev_get_drvdata(pdev->dev.parent); > > + struct cros_ec_platform *ec_platform = dev_get_platdata(ec_dev->dev); > > + struct chardev_data *data; > > + int ret; > > + > > + /* Create a char device: we want to create it anew */ > > + data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); > > + if (!data) > > + return -ENOMEM; > > + > > + data->ec_dev = ec_dev; > > + data->misc.minor = MISC_DYNAMIC_MINOR; > > + data->misc.fops = &chardev_fops; > > + data->misc.name = ec_platform->ec_name; > > + data->misc.parent = pdev->dev.parent; > > + > > + ret = misc_register(&data->misc); > > + if (ret) > > + return ret; > > + > > + spin_lock(&chardev_lock); > > + list_add(&data->list, &chardev_devices); > > + spin_unlock(&chardev_lock); > > + > > + dev_info(&pdev->dev, "Created misc device /dev/%s\n", > > + data->misc.name); > > No need to be noisy, if all goes well, your code should be quiet. Ok, I'll remove on next version. > > + > > + return 0; > > +} > > + > > +static int cros_ec_chardev_remove(struct platform_device *pdev) > > +{ > > + struct cros_ec_dev *ec_dev = dev_get_drvdata(pdev->dev.parent); > > + struct chardev_data *data; > > + > > + list_for_each_entry(data, &chardev_devices, list) > > + if (data->ec_dev == ec_dev) > > + break; > > + > > + if (data->ec_dev != ec_dev) { > > + dev_err(&pdev->dev, > > + "remove called but miscdevice %s not found\n", > > + data->misc.name); > > + return -ENODEV; > > + } > > Why do you have this separate list of devices? You don't seem to need > it, you only iterate over it, why is it needed? > Right, my bad, I was carrying some code from an old version that is not needed at all now. I'll remove all the related code. > > + spin_lock(&chardev_lock); > > + list_del(&data->list); > > + spin_unlock(&chardev_lock); > > + misc_deregister(&data->misc); > > + > > + return 0; > > +} > > You also iterate over the list without the lock, so why even have the > lock? Are you sure the list, and the lock, is even needed? > Right, not needed. Removed on next version. Thanks, Enric > thanks, > > greg k-h ^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2019-06-10 7:27 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20190604152019.16100-1-enric.balletbo@collabora.com>
2019-06-04 15:20 ` [PATCH 03/10] mfd / platform: cros_ec: Miscellaneous character device to talk with the EC Enric Balletbo i Serra
2019-06-04 15:52 ` Greg Kroah-Hartman
2019-06-04 16:58 ` Ezequiel Garcia
2019-06-04 18:35 ` Greg Kroah-Hartman
2019-06-04 18:39 ` Guenter Roeck
2019-06-04 18:59 ` Greg Kroah-Hartman
2019-06-05 6:48 ` Lee Jones
2019-06-05 8:02 ` Greg Kroah-Hartman
2019-06-05 8:40 ` Lee Jones
2019-06-05 8:48 ` Greg Kroah-Hartman
2019-06-05 9:21 ` Lee Jones
2019-06-06 14:01 ` Ezequiel Garcia
2019-06-06 14:51 ` Greg Kroah-Hartman
2019-06-06 15:12 ` Ezequiel Garcia
2019-06-06 21:11 ` Randy Dunlap
2019-06-10 7:27 ` Lee Jones
2019-06-05 14:33 ` Enric Balletbo Serra
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).