Messages in this thread |  | | Subject | Re: [PATCH v1] platform/chrome: cros_ec_debugfs: conditionally create uptime node | From | Enric Balletbo i Serra <> | Date | Thu, 9 Jul 2020 09:25:15 +0200 |
| |
Hi Eizan,
Thank you for your patch
On 8/7/20 6:53, Eizan Miyamoto wrote: > Before creating an 'uptime' node in debugfs, this change adds a check to > see if a EC_CMD_GET_UPTIME_INFO command can be successfully run. > > If the uptime node is created, userspace programs may periodically poll > it (e.g., timberslide), causing commands to be sent to the EC each time. > If the EC doesn't support EC_CMD_GET_UPTIME_INFO, an error will be > emitted in the EC console, producing noise. >
A similar patch with the same purpose sent by Gwendal was already accepted and queued for 5.9. See [1].
Thanks, Enric
[1] https://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux.git/commit/?h=for-next&id=d378cdd0113878e3860f954d16dd3e91defb1492
> Signed-off-by: Eizan Miyamoto <eizan@chromium.org> > --- > > drivers/platform/chrome/cros_ec_debugfs.c | 35 +++++++++++++++++------ > 1 file changed, 26 insertions(+), 9 deletions(-) > > diff --git a/drivers/platform/chrome/cros_ec_debugfs.c b/drivers/platform/chrome/cros_ec_debugfs.c > index ecfada00e6c51..8708fe12f8ca8 100644 > --- a/drivers/platform/chrome/cros_ec_debugfs.c > +++ b/drivers/platform/chrome/cros_ec_debugfs.c > @@ -242,17 +242,14 @@ static ssize_t cros_ec_pdinfo_read(struct file *file, > read_buf, p - read_buf); > } > > -static ssize_t cros_ec_uptime_read(struct file *file, char __user *user_buf, > - size_t count, loff_t *ppos) > +static int cros_ec_get_uptime(struct cros_ec_device *ec_dev, > + uint32_t *uptime) > { > - struct cros_ec_debugfs *debug_info = file->private_data; > - struct cros_ec_device *ec_dev = debug_info->ec->ec_dev; > struct { > struct cros_ec_command cmd; > struct ec_response_uptime_info resp; > } __packed msg = {}; > struct ec_response_uptime_info *resp; > - char read_buf[32]; > int ret; > > resp = (struct ec_response_uptime_info *)&msg.resp; > @@ -264,8 +261,24 @@ static ssize_t cros_ec_uptime_read(struct file *file, char __user *user_buf, > if (ret < 0) > return ret; > > - ret = scnprintf(read_buf, sizeof(read_buf), "%u\n", > - resp->time_since_ec_boot_ms); > + *uptime = resp->time_since_ec_boot_ms; > + return 0; > +} > + > +static ssize_t cros_ec_uptime_read(struct file *file, char __user *user_buf, > + size_t count, loff_t *ppos) > +{ > + struct cros_ec_debugfs *debug_info = file->private_data; > + struct cros_ec_device *ec_dev = debug_info->ec->ec_dev; > + char read_buf[32]; > + int ret; > + uint32_t uptime; > + > + ret = cros_ec_get_uptime(ec_dev, &uptime); > + if (ret < 0) > + return ret; > + > + ret = scnprintf(read_buf, sizeof(read_buf), "%u\n", uptime); > > return simple_read_from_buffer(user_buf, count, ppos, read_buf, ret); > } > @@ -425,6 +438,7 @@ static int cros_ec_debugfs_probe(struct platform_device *pd) > const char *name = ec_platform->ec_name; > struct cros_ec_debugfs *debug_info; > int ret; > + uint32_t uptime; > > debug_info = devm_kzalloc(ec->dev, sizeof(*debug_info), GFP_KERNEL); > if (!debug_info) > @@ -444,8 +458,11 @@ static int cros_ec_debugfs_probe(struct platform_device *pd) > debugfs_create_file("pdinfo", 0444, debug_info->dir, debug_info, > &cros_ec_pdinfo_fops); > > - debugfs_create_file("uptime", 0444, debug_info->dir, debug_info, > - &cros_ec_uptime_fops); > + if (cros_ec_get_uptime(debug_info->ec->ec_dev, &uptime) >= 0) > + debugfs_create_file("uptime", 0444, debug_info->dir, debug_info, > + &cros_ec_uptime_fops); > + else > + dev_dbg(ec->dev, "EC does not provide uptime"); > > debugfs_create_x32("last_resume_result", 0444, debug_info->dir, > &ec->ec_dev->last_resume_result); >
|  |