From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Chen Yu <yu.c.chen@intel.com>
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>,
Len Brown <len.brown@intel.com>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH][v2] PM / sysfs: Expose suspend resume driver flags in sysfs
Date: Thu, 22 Oct 2020 11:17:07 +0200 [thread overview]
Message-ID: <20201022091707.GA1485535@kroah.com> (raw)
In-Reply-To: <20201022085244.1860-1-yu.c.chen@intel.com>
On Thu, Oct 22, 2020 at 04:52:44PM +0800, Chen Yu wrote:
> Currently there are 4 driver flags to control system suspend/resume
> behavior: DPM_FLAG_NO_DIRECT_COMPLETE, DPM_FLAG_SMART_PREPARE,
> DPM_FLAG_SMART_SUSPEND and DPM_FLAG_MAY_SKIP_RESUME. Make these flags
> visible in sysfs as read-only to get a brief understanding of the
> expected behavior of each device during suspend/resume, so as to
> facilitate suspend/resume debugging/tuning.
>
> For example:
> /sys/devices/pci0000:00/0000:00:15.1/power/driver_flags:4
> (DPM_FLAG_SMART_SUSPEND)
>
> /sys/devices/pci0000:00/0000:00:07.3/power/driver_flags:5
> (DPM_FLAG_NO_DIRECT_COMPLETE | DPM_FLAG_SMART_SUSPEND)
>
> Acked-by: Len Brown <len.brown@intel.com>
> Signed-off-by: Chen Yu <yu.c.chen@intel.com>
> ---
> v2: Adding description in Documentation/ABI/testing/sysfs-devices-power
> according to Greg's suggestion.
> --
> Documentation/ABI/testing/sysfs-devices-power | 11 +++++++
> drivers/base/power/sysfs.c | 29 ++++++++++++++++++-
> 2 files changed, 39 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/ABI/testing/sysfs-devices-power b/Documentation/ABI/testing/sysfs-devices-power
> index 1763e64dd152..8ea68639ab3a 100644
> --- a/Documentation/ABI/testing/sysfs-devices-power
> +++ b/Documentation/ABI/testing/sysfs-devices-power
> @@ -269,3 +269,14 @@ Description:
> the current runtime PM status of the device, which may be
> "suspended", "suspending", "resuming", "active", "error" (fatal
> error), or "unsupported" (runtime PM is disabled).
> +
> +What: /sys/devices/.../power/driver_flags
> +Date: October 2020
> +Contact: Chen Yu <yu.c.chen@intel.com>
> +Description:
> + The /sys/devices/.../driver_flags attribute contains the driver
> + flags to control system suspend/resume. The flag is a combination
> + of DPM_FLAG_NO_DIRECT_COMPLETE, DPM_FLAG_SMART_PREPARE,
> + DPM_FLAG_SMART_SUSPEND and DPM_FLAG_MAY_SKIP_RESUME, or 0 if the
> + driver has not set any flag. This attribute is read-only. If
> + CONFIG_PM_ADVANCED_DEBUG is not set this attribute is empty.
You are now exporting random internal kernel values to userspace, so
they are now going to become a userspace API value that you must ensure
works for the next 20+ years.
Are you _SURE_ you want to do this? What is this velue being exported
going to show you? Who is going to use it? For what?
And if you are going to export it to userspace, you need to actually
give userspace the values so that it knows what they are, by moving them
to a uapi file.
And if you do that, you need to name them a lot better...
> diff --git a/drivers/base/power/sysfs.c b/drivers/base/power/sysfs.c
> index a1474fb67db9..48313a1040a5 100644
> --- a/drivers/base/power/sysfs.c
> +++ b/drivers/base/power/sysfs.c
> @@ -607,6 +607,13 @@ static ssize_t async_store(struct device *dev, struct device_attribute *attr,
>
> static DEVICE_ATTR_RW(async);
>
> +static ssize_t driver_flags_show(struct device *dev,
> + struct device_attribute *attr, char *buf)
> +{
> + return sysfs_emit(buf, "%x\n", dev->power.driver_flags);
> +}
> +static DEVICE_ATTR_RO(driver_flags);
> +
> #endif /* CONFIG_PM_SLEEP */
> #endif /* CONFIG_PM_ADVANCED_DEBUG */
>
> @@ -691,6 +698,20 @@ static const struct attribute_group pm_qos_flags_attr_group = {
> .attrs = pm_qos_flags_attrs,
> };
>
> +static struct attribute *pm_driver_flags_attrs[] = {
> +#ifdef CONFIG_PM_ADVANCED_DEBUG
> +#ifdef CONFIG_PM_SLEEP
> + &dev_attr_driver_flags.attr,
> +#endif
> +#endif
As this is for debugging only, why is it in sysfs and not debugfs?
> + NULL,
> +};
> +
> +static const struct attribute_group pm_driver_flags_attr_group = {
> + .name = power_group_name,
> + .attrs = pm_driver_flags_attrs,
> +};
> +
> int dpm_sysfs_add(struct device *dev)
> {
> int rc;
> @@ -719,11 +740,17 @@ int dpm_sysfs_add(struct device *dev)
> if (rc)
> goto err_wakeup;
> }
> - rc = pm_wakeup_source_sysfs_add(dev);
> + rc = sysfs_merge_group(&dev->kobj, &pm_driver_flags_attr_group);
Ick, really? Why not make it part of the other attribute group? Why
make it a stand-alone one? This feels like extra uneeded work if you
really are going to do this.
thanks,
greg k-h
next prev parent reply other threads:[~2020-10-22 9:16 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-22 8:52 [PATCH][v2] PM / sysfs: Expose suspend resume driver flags in sysfs Chen Yu
2020-10-22 9:17 ` Greg Kroah-Hartman [this message]
2020-10-22 18:43 ` Chen Yu
2020-10-22 13:36 ` Andy Shevchenko
2020-10-22 18:53 ` Chen Yu
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=20201022091707.GA1485535@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=andriy.shevchenko@linux.intel.com \
--cc=len.brown@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=rjw@rjwysocki.net \
--cc=yu.c.chen@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox