All of lore.kernel.org
 help / color / mirror / Atom feed
From: Felipe Balbi <balbi@ti.com>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: Felipe Balbi <balbi@ti.com>, Greg KH <gregkh@linuxfoundation.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	Ingo Molnar <mingo@redhat.com>, <JBottomley@parallels.com>,
	<linux-scsi@vger.kernel.org>, <davem@davemloft.net>,
	<netdev@vger.kernel.org>,
	Doug Thompson <dougthompson@xmission.com>,
	<linux-edac@vger.kernel.org>, <rjw@sisk.pl>,
	<linux-pm@vger.kernel.org>
Subject: Re: SYSFS "errors"
Date: Mon, 18 Feb 2013 23:57:43 +0200	[thread overview]
Message-ID: <20130218215743.GA21192@arwen.pp.htv.fi> (raw)
In-Reply-To: <Pine.LNX.4.44L0.1302181644260.6790-100000@netrider.rowland.org>

[-- Attachment #1: Type: text/plain, Size: 5465 bytes --]

On Mon, Feb 18, 2013 at 04:48:06PM -0500, Alan Stern wrote:
> On Mon, 18 Feb 2013, Felipe Balbi wrote:
> 
> > Hi, On Mon, Feb 18, 2013 at 09:49:16AM -0800, Greg KH wrote:
> > > > Input/output error - /sys/devices/cpu/power/autosuspend_delay_ms
> > > 
> > > The issue with this file is, if the power.use_autosuspend flag is not
> > > set for the device, then it can't be read or written to.  This flag
> > > changes dynamically with the system state
> > > (__pm_runtime_use_autosuspend() can change it), so we can't just not
> > > show the file if the flag is not set properly, sorry.
> > > 
> > > So the "error" is correct here, as is the 0644 file value.
> > 
> > hmm... we could create the file at pm_runtime_enable() time and remove
> > it on pm_runtime_disable() time, no ? Addin Rafael to Cc
> 
> In theory this could be done, although the times would be when runtime 
> autosuspend is turned on or off, not when pm_runtime_enable is called.

Right, I got that after replying. Here's a patch I plan to test
tomorrow:

8<------------------------ cut here ----------------------------

From 2cdeeb483383490946cc98727a167843c40d7d27 Mon Sep 17 00:00:00 2001
From: Felipe Balbi <balbi@ti.com>
Date: Mon, 18 Feb 2013 21:20:28 +0200
Subject: [PATCH] base: power: create autosuspend_delay_ms from
 pm_runtime_use_autosuspend()

this patch moves the creation of autosuspend_delay_ms
sysfs file to pm_runtime_use_autosuspend() and, conversely,
its deletion to pm_runtime_dont_use_autosuspend.

The idea behind this patch is such that the file in
question is only readable after pm_runtime_use_autosuspend()
has been called for a particular device, so we might
as well move the creation of the file to that place.

Signed-off-by: Felipe Balbi <balbi@ti.com>
---
 drivers/base/power/power.h   |  4 ++++
 drivers/base/power/runtime.c |  6 ++++++
 drivers/base/power/sysfs.c   | 25 ++++++++++++++++++++++++-
 3 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/drivers/base/power/power.h b/drivers/base/power/power.h
index b16686a..3822b94 100644
--- a/drivers/base/power/power.h
+++ b/drivers/base/power/power.h
@@ -90,6 +90,8 @@ static inline void device_pm_init(struct device *dev)
 
 extern int dpm_sysfs_add(struct device *dev);
 extern void dpm_sysfs_remove(struct device *dev);
+extern int dpm_autosuspend_sysfs_add(struct device *dev);
+extern void dpm_autosuspend_sysfs_remove(struct device *dev);
 extern void rpm_sysfs_remove(struct device *dev);
 extern int wakeup_sysfs_add(struct device *dev);
 extern void wakeup_sysfs_remove(struct device *dev);
@@ -102,6 +104,8 @@ extern void pm_qos_sysfs_remove_flags(struct device *dev);
 
 static inline int dpm_sysfs_add(struct device *dev) { return 0; }
 static inline void dpm_sysfs_remove(struct device *dev) {}
+static inline int dpm_autosuspend_sysfs_add(struct device *dev) { return 0; }
+static inline void dpm_autosuspend_sysfs_remove(struct device *dev) {}
 static inline void rpm_sysfs_remove(struct device *dev) {}
 static inline int wakeup_sysfs_add(struct device *dev) { return 0; }
 static inline void wakeup_sysfs_remove(struct device *dev) {}
diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c
index 3148b10..a162ba5 100644
--- a/drivers/base/power/runtime.c
+++ b/drivers/base/power/runtime.c
@@ -1266,6 +1266,12 @@ void __pm_runtime_use_autosuspend(struct device *dev, bool use)
 	old_use = dev->power.use_autosuspend;
 	dev->power.use_autosuspend = use;
 	update_autosuspend(dev, old_delay, old_use);
+
+	if (use)
+		dpm_autosuspend_sysfs_add(dev);
+	else
+		dpm_autosuspend_sysfs_remove(dev);
+
 	spin_unlock_irq(&dev->power.lock);
 }
 EXPORT_SYMBOL_GPL(__pm_runtime_use_autosuspend);
diff --git a/drivers/base/power/sysfs.c b/drivers/base/power/sysfs.c
index 50d16e3..ef2a41c 100644
--- a/drivers/base/power/sysfs.c
+++ b/drivers/base/power/sysfs.c
@@ -609,15 +609,26 @@ static struct attribute *runtime_attrs[] = {
 	&dev_attr_control.attr,
 	&dev_attr_runtime_suspended_time.attr,
 	&dev_attr_runtime_active_time.attr,
-	&dev_attr_autosuspend_delay_ms.attr,
 #endif /* CONFIG_PM_RUNTIME */
 	NULL,
 };
+
 static struct attribute_group pm_runtime_attr_group = {
 	.name	= power_group_name,
 	.attrs	= runtime_attrs,
 };
 
+static struct attribute *runtime_autosuspend_attrs[] = {
+#ifdef CONFIG_PM_RUNTIME
+	&dev_attr_autosuspend_delay_ms.attr,
+#endif /* CONFIG_PM_RUNTIME */
+};
+
+static struct attribute_group pm_runtime_autosuspend_attr_group = {
+	.name	= power_group_name,
+	.attrs	= runtime_autosuspend_attrs,
+};
+
 static struct attribute *pm_qos_latency_attrs[] = {
 #ifdef CONFIG_PM_RUNTIME
 	&dev_attr_pm_qos_resume_latency_us.attr,
@@ -671,6 +682,12 @@ int dpm_sysfs_add(struct device *dev)
 	return rc;
 }
 
+int dpm_autosuspend_sysfs_add(struct device *dev)
+{
+	return sysfs_merge_group(&dev->kobj,
+			&pm_runtime_autosuspend_attr_group);
+}
+
 int wakeup_sysfs_add(struct device *dev)
 {
 	return sysfs_merge_group(&dev->kobj, &pm_wakeup_attr_group);
@@ -712,3 +729,9 @@ void dpm_sysfs_remove(struct device *dev)
 	sysfs_unmerge_group(&dev->kobj, &pm_wakeup_attr_group);
 	sysfs_remove_group(&dev->kobj, &pm_attr_group);
 }
+
+void dpm_autosuspend_sysfs_remove(struct device *dev)
+{
+	sysfs_unmerge_group(&dev->kobj,
+			&pm_runtime_autosuspend_attr_group);
+}
-- 
1.8.1.rc1.5.g7e0651a

-- 
balbi

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: Felipe Balbi <balbi@ti.com>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: Felipe Balbi <balbi@ti.com>, Greg KH <gregkh@linuxfoundation.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	Ingo Molnar <mingo@redhat.com>,
	JBottomley@parallels.com, linux-scsi@vger.kernel.org,
	davem@davemloft.net, netdev@vger.kernel.org,
	Doug Thompson <dougthompson@xmission.com>,
	linux-edac@vger.kernel.org, rjw@sisk.pl,
	linux-pm@vger.kernel.org
Subject: Re: SYSFS "errors"
Date: Mon, 18 Feb 2013 23:57:43 +0200	[thread overview]
Message-ID: <20130218215743.GA21192@arwen.pp.htv.fi> (raw)
In-Reply-To: <Pine.LNX.4.44L0.1302181644260.6790-100000@netrider.rowland.org>

[-- Attachment #1: Type: text/plain, Size: 5465 bytes --]

On Mon, Feb 18, 2013 at 04:48:06PM -0500, Alan Stern wrote:
> On Mon, 18 Feb 2013, Felipe Balbi wrote:
> 
> > Hi, On Mon, Feb 18, 2013 at 09:49:16AM -0800, Greg KH wrote:
> > > > Input/output error - /sys/devices/cpu/power/autosuspend_delay_ms
> > > 
> > > The issue with this file is, if the power.use_autosuspend flag is not
> > > set for the device, then it can't be read or written to.  This flag
> > > changes dynamically with the system state
> > > (__pm_runtime_use_autosuspend() can change it), so we can't just not
> > > show the file if the flag is not set properly, sorry.
> > > 
> > > So the "error" is correct here, as is the 0644 file value.
> > 
> > hmm... we could create the file at pm_runtime_enable() time and remove
> > it on pm_runtime_disable() time, no ? Addin Rafael to Cc
> 
> In theory this could be done, although the times would be when runtime 
> autosuspend is turned on or off, not when pm_runtime_enable is called.

Right, I got that after replying. Here's a patch I plan to test
tomorrow:

8<------------------------ cut here ----------------------------

From 2cdeeb483383490946cc98727a167843c40d7d27 Mon Sep 17 00:00:00 2001
From: Felipe Balbi <balbi@ti.com>
Date: Mon, 18 Feb 2013 21:20:28 +0200
Subject: [PATCH] base: power: create autosuspend_delay_ms from
 pm_runtime_use_autosuspend()

this patch moves the creation of autosuspend_delay_ms
sysfs file to pm_runtime_use_autosuspend() and, conversely,
its deletion to pm_runtime_dont_use_autosuspend.

The idea behind this patch is such that the file in
question is only readable after pm_runtime_use_autosuspend()
has been called for a particular device, so we might
as well move the creation of the file to that place.

Signed-off-by: Felipe Balbi <balbi@ti.com>
---
 drivers/base/power/power.h   |  4 ++++
 drivers/base/power/runtime.c |  6 ++++++
 drivers/base/power/sysfs.c   | 25 ++++++++++++++++++++++++-
 3 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/drivers/base/power/power.h b/drivers/base/power/power.h
index b16686a..3822b94 100644
--- a/drivers/base/power/power.h
+++ b/drivers/base/power/power.h
@@ -90,6 +90,8 @@ static inline void device_pm_init(struct device *dev)
 
 extern int dpm_sysfs_add(struct device *dev);
 extern void dpm_sysfs_remove(struct device *dev);
+extern int dpm_autosuspend_sysfs_add(struct device *dev);
+extern void dpm_autosuspend_sysfs_remove(struct device *dev);
 extern void rpm_sysfs_remove(struct device *dev);
 extern int wakeup_sysfs_add(struct device *dev);
 extern void wakeup_sysfs_remove(struct device *dev);
@@ -102,6 +104,8 @@ extern void pm_qos_sysfs_remove_flags(struct device *dev);
 
 static inline int dpm_sysfs_add(struct device *dev) { return 0; }
 static inline void dpm_sysfs_remove(struct device *dev) {}
+static inline int dpm_autosuspend_sysfs_add(struct device *dev) { return 0; }
+static inline void dpm_autosuspend_sysfs_remove(struct device *dev) {}
 static inline void rpm_sysfs_remove(struct device *dev) {}
 static inline int wakeup_sysfs_add(struct device *dev) { return 0; }
 static inline void wakeup_sysfs_remove(struct device *dev) {}
diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c
index 3148b10..a162ba5 100644
--- a/drivers/base/power/runtime.c
+++ b/drivers/base/power/runtime.c
@@ -1266,6 +1266,12 @@ void __pm_runtime_use_autosuspend(struct device *dev, bool use)
 	old_use = dev->power.use_autosuspend;
 	dev->power.use_autosuspend = use;
 	update_autosuspend(dev, old_delay, old_use);
+
+	if (use)
+		dpm_autosuspend_sysfs_add(dev);
+	else
+		dpm_autosuspend_sysfs_remove(dev);
+
 	spin_unlock_irq(&dev->power.lock);
 }
 EXPORT_SYMBOL_GPL(__pm_runtime_use_autosuspend);
diff --git a/drivers/base/power/sysfs.c b/drivers/base/power/sysfs.c
index 50d16e3..ef2a41c 100644
--- a/drivers/base/power/sysfs.c
+++ b/drivers/base/power/sysfs.c
@@ -609,15 +609,26 @@ static struct attribute *runtime_attrs[] = {
 	&dev_attr_control.attr,
 	&dev_attr_runtime_suspended_time.attr,
 	&dev_attr_runtime_active_time.attr,
-	&dev_attr_autosuspend_delay_ms.attr,
 #endif /* CONFIG_PM_RUNTIME */
 	NULL,
 };
+
 static struct attribute_group pm_runtime_attr_group = {
 	.name	= power_group_name,
 	.attrs	= runtime_attrs,
 };
 
+static struct attribute *runtime_autosuspend_attrs[] = {
+#ifdef CONFIG_PM_RUNTIME
+	&dev_attr_autosuspend_delay_ms.attr,
+#endif /* CONFIG_PM_RUNTIME */
+};
+
+static struct attribute_group pm_runtime_autosuspend_attr_group = {
+	.name	= power_group_name,
+	.attrs	= runtime_autosuspend_attrs,
+};
+
 static struct attribute *pm_qos_latency_attrs[] = {
 #ifdef CONFIG_PM_RUNTIME
 	&dev_attr_pm_qos_resume_latency_us.attr,
@@ -671,6 +682,12 @@ int dpm_sysfs_add(struct device *dev)
 	return rc;
 }
 
+int dpm_autosuspend_sysfs_add(struct device *dev)
+{
+	return sysfs_merge_group(&dev->kobj,
+			&pm_runtime_autosuspend_attr_group);
+}
+
 int wakeup_sysfs_add(struct device *dev)
 {
 	return sysfs_merge_group(&dev->kobj, &pm_wakeup_attr_group);
@@ -712,3 +729,9 @@ void dpm_sysfs_remove(struct device *dev)
 	sysfs_unmerge_group(&dev->kobj, &pm_wakeup_attr_group);
 	sysfs_remove_group(&dev->kobj, &pm_attr_group);
 }
+
+void dpm_autosuspend_sysfs_remove(struct device *dev)
+{
+	sysfs_unmerge_group(&dev->kobj,
+			&pm_runtime_autosuspend_attr_group);
+}
-- 
1.8.1.rc1.5.g7e0651a

-- 
balbi

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

  reply	other threads:[~2013-02-18 21:59 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-18 15:33 SYSFS "errors" Felipe Balbi
2013-02-18 15:50 ` Greg KH
2013-02-18 15:52   ` Felipe Balbi
2013-02-18 17:13     ` Greg KH
2013-02-18 17:27       ` Felipe Balbi
2013-02-18 17:45         ` Borislav Petkov
2013-02-18 18:47           ` Felipe Balbi
2013-02-18 19:40             ` Borislav Petkov
2013-02-18 20:04               ` Felipe Balbi
2013-02-18 17:49         ` Greg KH
2013-02-18 18:46           ` Felipe Balbi
2013-02-18 18:46             ` Felipe Balbi
2013-02-18 19:46             ` Mauro Carvalho Chehab
2013-02-18 19:46               ` Mauro Carvalho Chehab
2013-02-18 20:05               ` Felipe Balbi
2013-02-18 20:05                 ` Felipe Balbi
2013-02-18 21:47                 ` Mauro Carvalho Chehab
2013-02-18 21:47                   ` Mauro Carvalho Chehab
2013-02-18 21:54                   ` Greg KH
2013-02-18 22:13                     ` Borislav Petkov
2013-02-18 22:26                       ` Greg KH
2013-02-18 22:44                         ` Borislav Petkov
2013-02-19 10:03                           ` Mauro Carvalho Chehab
2013-02-19 10:11                             ` Felipe Balbi
2013-02-19 10:11                               ` Felipe Balbi
2013-02-19 11:11                               ` Mauro Carvalho Chehab
2013-02-19 11:11                                 ` Mauro Carvalho Chehab
2013-02-19 11:43                                 ` Borislav Petkov
2013-02-19 12:16                                   ` Mauro Carvalho Chehab
2013-02-19 12:35                                     ` Borislav Petkov
2013-02-19 12:46                                       ` Mauro Carvalho Chehab
2013-02-19 13:06                                         ` Borislav Petkov
2013-02-19 13:15                                           ` Felipe Balbi
2013-02-19 13:15                                             ` Felipe Balbi
2013-02-19 13:28                                             ` Borislav Petkov
2013-02-19 13:38                                               ` Felipe Balbi
2013-02-19 13:38                                                 ` Felipe Balbi
2013-02-19 13:50                                                 ` Mauro Carvalho Chehab
2013-02-19 13:50                                                   ` Mauro Carvalho Chehab
2013-02-19 13:55                                                   ` Borislav Petkov
2013-02-19 13:50                                                 ` Borislav Petkov
2013-02-19 13:58                                                   ` Hannes Reinecke
2013-02-19 14:10                                                     ` Borislav Petkov
2013-02-19 14:14                                                     ` Mauro Carvalho Chehab
2013-02-19 14:19                                                       ` Felipe Balbi
2013-02-19 14:19                                                         ` Felipe Balbi
2013-02-19 14:35                                                   ` Mauro Carvalho Chehab
2013-02-19 14:50                                                     ` Borislav Petkov
2013-02-19 14:53                                                     ` Felipe Balbi
2013-02-19 14:53                                                       ` Felipe Balbi
2013-02-19 13:42                                           ` Mauro Carvalho Chehab
2013-02-18 21:48             ` Alan Stern
2013-02-18 21:48               ` Alan Stern
2013-02-18 21:57               ` Felipe Balbi [this message]
2013-02-18 21:57                 ` Felipe Balbi
2013-02-19  7:41           ` Alexander Stein
2013-02-19 10:12             ` Felipe Balbi

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=20130218215743.GA21192@arwen.pp.htv.fi \
    --to=balbi@ti.com \
    --cc=JBottomley@parallels.com \
    --cc=davem@davemloft.net \
    --cc=dougthompson@xmission.com \
    --cc=fweisbec@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-edac@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=rjw@sisk.pl \
    --cc=rostedt@goodmis.org \
    --cc=stern@rowland.harvard.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.