linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* linux-next: build failure after merge of the final tree (pm tree related)
@ 2012-10-24  3:44 Stephen Rothwell
  2012-10-24  3:58 ` Song, Youquan
  2012-10-24 21:40 ` Rafael J. Wysocki
  0 siblings, 2 replies; 16+ messages in thread
From: Stephen Rothwell @ 2012-10-24  3:44 UTC (permalink / raw)
  To: Rafael J. Wysocki; +Cc: linux-next, linux-kernel, Youquan Song, Rik van Riel

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

Hi all,

After merging the final tree, today's linux-next build (powerpc
allnoconfig) failed like this:

In file included from arch/powerpc/kernel/idle.c:27:0:
include/linux/tick.h: In function 'menu_hrtimer_cancel':
include/linux/tick.h:148:48: error: 'return' with a value, in function returning void [-Werror]

Several of these :-(

Caused by commit 25d77b76d7ae ("cpuidle: Quickly notice prediction
failure for repeat mode") from the pm tree.  This build has
CONFIG_CPU_IDLE_GOV_MENU turned off.  For changes that are obviously
affected by CONFIG options, please test build with the CONFIG option on
and off.

I have applied the following patch for today:

From: Stephen Rothwell <sfr@canb.auug.org.au>
Date: Wed, 24 Oct 2012 14:40:47 +1100
Subject: [PATCH] cpuidle: fix up but return type for inline function

Fixes this error when CONFIG_CPU_IDLE_GOV_MENU is not enabled:

In file included from arch/powerpc/kernel/idle.c:27:0:
include/linux/tick.h: In function 'menu_hrtimer_cancel':
include/linux/tick.h:148:48: error: 'return' with a value, in function returning void [-Werror]

Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
---
 include/linux/tick.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/tick.h b/include/linux/tick.h
index 8867424..40d123e 100644
--- a/include/linux/tick.h
+++ b/include/linux/tick.h
@@ -145,7 +145,7 @@ static inline u64 get_cpu_iowait_time_us(int cpu, u64 *unused) { return -1; }
 # ifdef CONFIG_CPU_IDLE_GOV_MENU
 extern void menu_hrtimer_cancel(void);
 # else
-static inline void menu_hrtimer_cancel(void) { return -1; }
+static inline void menu_hrtimer_cancel(void) { }
 # endif /* CONFIG_CPU_IDLE_GOV_MENU */
 
 #endif
-- 
1.7.10.280.gaa39

-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au

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

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* RE: linux-next: build failure after merge of the final tree (pm tree related)
  2012-10-24  3:44 linux-next: build failure after merge of the final tree (pm tree related) Stephen Rothwell
@ 2012-10-24  3:58 ` Song, Youquan
  2012-10-24 21:40 ` Rafael J. Wysocki
  1 sibling, 0 replies; 16+ messages in thread
From: Song, Youquan @ 2012-10-24  3:58 UTC (permalink / raw)
  To: Stephen Rothwell, Rafael J. Wysocki
  Cc: linux-next, linux-kernel, Rik van Riel, Song, Youquan, Wu, Fengguang

Yes. We already do the patch to fix the warning yesterday after get the information from Fengguang's "0-DAY kernel build testing".  But do not refresh linux-next so quickly.
Thanks for the information and patch, Stephen!

-Youquan

-----Original Message-----
From: Stephen Rothwell [mailto:sfr@canb.auug.org.au] 
Sent: Wednesday, October 24, 2012 11:44 AM
To: Rafael J. Wysocki
Cc: linux-next@vger.kernel.org; linux-kernel@vger.kernel.org; Song, Youquan; Rik van Riel
Subject: linux-next: build failure after merge of the final tree (pm tree related)

Hi all,

After merging the final tree, today's linux-next build (powerpc
allnoconfig) failed like this:

In file included from arch/powerpc/kernel/idle.c:27:0:
include/linux/tick.h: In function 'menu_hrtimer_cancel':
include/linux/tick.h:148:48: error: 'return' with a value, in function returning void [-Werror]

Several of these :-(

Caused by commit 25d77b76d7ae ("cpuidle: Quickly notice prediction failure for repeat mode") from the pm tree.  This build has CONFIG_CPU_IDLE_GOV_MENU turned off.  For changes that are obviously affected by CONFIG options, please test build with the CONFIG option on and off.

I have applied the following patch for today:

From: Stephen Rothwell <sfr@canb.auug.org.au>
Date: Wed, 24 Oct 2012 14:40:47 +1100
Subject: [PATCH] cpuidle: fix up but return type for inline function

Fixes this error when CONFIG_CPU_IDLE_GOV_MENU is not enabled:

In file included from arch/powerpc/kernel/idle.c:27:0:
include/linux/tick.h: In function 'menu_hrtimer_cancel':
include/linux/tick.h:148:48: error: 'return' with a value, in function returning void [-Werror]

Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
---
 include/linux/tick.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/tick.h b/include/linux/tick.h index 8867424..40d123e 100644
--- a/include/linux/tick.h
+++ b/include/linux/tick.h
@@ -145,7 +145,7 @@ static inline u64 get_cpu_iowait_time_us(int cpu, u64 *unused) { return -1; }  # ifdef CONFIG_CPU_IDLE_GOV_MENU  extern void menu_hrtimer_cancel(void);  # else -static inline void menu_hrtimer_cancel(void) { return -1; }
+static inline void menu_hrtimer_cancel(void) { }
 # endif /* CONFIG_CPU_IDLE_GOV_MENU */
 
 #endif
--
1.7.10.280.gaa39

--
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: linux-next: build failure after merge of the final tree (pm tree related)
  2012-10-24  3:44 linux-next: build failure after merge of the final tree (pm tree related) Stephen Rothwell
  2012-10-24  3:58 ` Song, Youquan
@ 2012-10-24 21:40 ` Rafael J. Wysocki
  1 sibling, 0 replies; 16+ messages in thread
From: Rafael J. Wysocki @ 2012-10-24 21:40 UTC (permalink / raw)
  To: Stephen Rothwell; +Cc: linux-next, linux-kernel, Youquan Song, Rik van Riel

On Wednesday 24 of October 2012 14:44:00 Stephen Rothwell wrote:
> Hi all,
> 
> After merging the final tree, today's linux-next build (powerpc
> allnoconfig) failed like this:
> 
> In file included from arch/powerpc/kernel/idle.c:27:0:
> include/linux/tick.h: In function 'menu_hrtimer_cancel':
> include/linux/tick.h:148:48: error: 'return' with a value, in function returning void [-Werror]
> 
> Several of these :-(

Sorry for the breakage, it shoule be fixed now.

Thanks,
Rafael


> Caused by commit 25d77b76d7ae ("cpuidle: Quickly notice prediction
> failure for repeat mode") from the pm tree.  This build has
> CONFIG_CPU_IDLE_GOV_MENU turned off.  For changes that are obviously
> affected by CONFIG options, please test build with the CONFIG option on
> and off.
> 
> I have applied the following patch for today:
> 
> From: Stephen Rothwell <sfr@canb.auug.org.au>
> Date: Wed, 24 Oct 2012 14:40:47 +1100
> Subject: [PATCH] cpuidle: fix up but return type for inline function
> 
> Fixes this error when CONFIG_CPU_IDLE_GOV_MENU is not enabled:
> 
> In file included from arch/powerpc/kernel/idle.c:27:0:
> include/linux/tick.h: In function 'menu_hrtimer_cancel':
> include/linux/tick.h:148:48: error: 'return' with a value, in function returning void [-Werror]
> 
> Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
> ---
>  include/linux/tick.h |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/include/linux/tick.h b/include/linux/tick.h
> index 8867424..40d123e 100644
> --- a/include/linux/tick.h
> +++ b/include/linux/tick.h
> @@ -145,7 +145,7 @@ static inline u64 get_cpu_iowait_time_us(int cpu, u64 *unused) { return -1; }
>  # ifdef CONFIG_CPU_IDLE_GOV_MENU
>  extern void menu_hrtimer_cancel(void);
>  # else
> -static inline void menu_hrtimer_cancel(void) { return -1; }
> +static inline void menu_hrtimer_cancel(void) { }
>  # endif /* CONFIG_CPU_IDLE_GOV_MENU */
>  
>  #endif
> 
-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: linux-next: build failure after merge of the final tree (pm tree related)
  2011-12-22  5:28 Stephen Rothwell
@ 2011-12-23  0:32 ` Rafael J. Wysocki
  0 siblings, 0 replies; 16+ messages in thread
From: Rafael J. Wysocki @ 2011-12-23  0:32 UTC (permalink / raw)
  To: Stephen Rothwell; +Cc: linux-next, linux-kernel

On Thursday, December 22, 2011, Stephen Rothwell wrote:
> Hi ,
> 
> After merging the final tree, today's linux-next build (powerpc
> allnoconfig) failed like this:
> 
> drivers/base/bus.o: In function `dev_pm_qos_add_ancestor_request':
> bus.c:(.text+0x4c0): multiple definition of `dev_pm_qos_add_ancestor_request'
> drivers/base/core.o:core.c:(.text+0x8ec): first defined here
> drivers/base/dd.o: In function `dev_pm_qos_add_ancestor_request':
> dd.c:(.text+0x418): multiple definition of `dev_pm_qos_add_ancestor_request'
> drivers/base/core.o:core.c:(.text+0x8ec): first defined here
> kernel/sysctl_binary.o: In function `dev_pm_qos_add_ancestor_request':
> sysctl_binary.c:(.text+0x124): multiple definition of `dev_pm_qos_add_ancestor_request'
> 
> Caused by commit 513dcbda6199 ("PM / QoS: Introduce
> dev_pm_qos_add_ancestor_request()") from the pm tree.
> 
> Please build with and without config options that protect new code ... :-(

My bad, sorry.

This issue should be fixed in my linux-next branch now.

Thanks,
Rafael

^ permalink raw reply	[flat|nested] 16+ messages in thread

* linux-next: build failure after merge of the final tree (pm tree related)
@ 2011-12-22  5:28 Stephen Rothwell
  2011-12-23  0:32 ` Rafael J. Wysocki
  0 siblings, 1 reply; 16+ messages in thread
From: Stephen Rothwell @ 2011-12-22  5:28 UTC (permalink / raw)
  To: Rafael J. Wysocki; +Cc: linux-next, linux-kernel

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

Hi ,

After merging the final tree, today's linux-next build (powerpc
allnoconfig) failed like this:

drivers/base/bus.o: In function `dev_pm_qos_add_ancestor_request':
bus.c:(.text+0x4c0): multiple definition of `dev_pm_qos_add_ancestor_request'
drivers/base/core.o:core.c:(.text+0x8ec): first defined here
drivers/base/dd.o: In function `dev_pm_qos_add_ancestor_request':
dd.c:(.text+0x418): multiple definition of `dev_pm_qos_add_ancestor_request'
drivers/base/core.o:core.c:(.text+0x8ec): first defined here
kernel/sysctl_binary.o: In function `dev_pm_qos_add_ancestor_request':
sysctl_binary.c:(.text+0x124): multiple definition of `dev_pm_qos_add_ancestor_request'

Caused by commit 513dcbda6199 ("PM / QoS: Introduce
dev_pm_qos_add_ancestor_request()") from the pm tree.

Please build with and without config options that protect new code ... :-(

I applied this patch for today:

From: Stephen Rothwell <sfr@canb.auug.org.au>
Date: Thu, 22 Dec 2011 16:22:27 +1100
Subject: [PATCH] PM / QoS: fix build problem with new
 dev_pm_qos_add_ancestor_request api

Fixes these errors:

drivers/base/bus.o: In function `dev_pm_qos_add_ancestor_request':
bus.c:(.text+0x4c0): multiple definition of `dev_pm_qos_add_ancestor_request'
drivers/base/core.o:core.c:(.text+0x8ec): first defined here
drivers/base/dd.o: In function `dev_pm_qos_add_ancestor_request':
dd.c:(.text+0x418): multiple definition of `dev_pm_qos_add_ancestor_request'
drivers/base/core.o:core.c:(.text+0x8ec): first defined here
kernel/sysctl_binary.o: In function `dev_pm_qos_add_ancestor_request':
sysctl_binary.c:(.text+0x124): multiple definition of `dev_pm_qos_add_ancestor_request'

Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
---
 include/linux/pm_qos.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h
index b4d67e5..e5bbcba 100644
--- a/include/linux/pm_qos.h
+++ b/include/linux/pm_qos.h
@@ -155,7 +155,7 @@ static inline void dev_pm_qos_constraints_destroy(struct device *dev)
 {
 	dev->power.power_state = PMSG_INVALID;
 }
-int dev_pm_qos_add_ancestor_request(struct device *dev,
+static inline int dev_pm_qos_add_ancestor_request(struct device *dev,
 				    struct dev_pm_qos_request *req, s32 value)
 			{ return 0; }
 #endif
-- 
1.7.8.197.g73c6b

-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

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

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: linux-next: build failure after merge of the final tree (pm tree related)
  2011-11-24  6:32     ` Tejun Heo
@ 2011-11-24 10:15       ` Rafael J. Wysocki
  0 siblings, 0 replies; 16+ messages in thread
From: Rafael J. Wysocki @ 2011-11-24 10:15 UTC (permalink / raw)
  To: Tejun Heo; +Cc: Stephen Rothwell, linux-next, linux-kernel

On Thursday, November 24, 2011, Tejun Heo wrote:
> Hello,
> 
> On Wed, Nov 23, 2011 at 10:19 PM, Stephen Rothwell <sfr@canb.auug.org.au> wrote:
> >> > Subject: [PATCH] freezer: fix more fallout from the thaw_process rename
> >> >
> >> > Commit 944e192db53c "freezer: rename thaw_process() to __thaw_task()
> >> > and simplify the implementation" did not create a !CONFIG_FREEZER version
> >> > of __thaw_task().
> >> >
> >> > Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
> >>
> >> I've applied your patch to linux-pm/pm-freezer and merged it into
> >> linux-pm/linux-next.
> 
> Ah.. that's my bad. I was actually looking at that diff and somehow it
> just slipped my mind. Rafael, can you please apply Stephen's patch on
> top of pm-freezer?

Sure, I will do that later today.

Thanks,
Rafael

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: linux-next: build failure after merge of the final tree (pm tree related)
  2011-11-24  6:19   ` Stephen Rothwell
@ 2011-11-24  6:32     ` Tejun Heo
  2011-11-24 10:15       ` Rafael J. Wysocki
  0 siblings, 1 reply; 16+ messages in thread
From: Tejun Heo @ 2011-11-24  6:32 UTC (permalink / raw)
  To: Stephen Rothwell; +Cc: Rafael J. Wysocki, linux-next, linux-kernel

Hello,

On Wed, Nov 23, 2011 at 10:19 PM, Stephen Rothwell <sfr@canb.auug.org.au> wrote:
>> > Subject: [PATCH] freezer: fix more fallout from the thaw_process rename
>> >
>> > Commit 944e192db53c "freezer: rename thaw_process() to __thaw_task()
>> > and simplify the implementation" did not create a !CONFIG_FREEZER version
>> > of __thaw_task().
>> >
>> > Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
>>
>> I've applied your patch to linux-pm/pm-freezer and merged it into
>> linux-pm/linux-next.

Ah.. that's my bad. I was actually looking at that diff and somehow it
just slipped my mind. Rafael, can you please apply Stephen's patch on
top of pm-freezer?

Thank you.

-- 
tejun

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: linux-next: build failure after merge of the final tree (pm tree related)
  2011-11-14 23:12 ` Rafael J. Wysocki
@ 2011-11-24  6:19   ` Stephen Rothwell
  2011-11-24  6:32     ` Tejun Heo
  0 siblings, 1 reply; 16+ messages in thread
From: Stephen Rothwell @ 2011-11-24  6:19 UTC (permalink / raw)
  To: Rafael J. Wysocki; +Cc: linux-next, linux-kernel, Tejun Heo

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

Hi Rafael,

On Tue, 15 Nov 2011 00:12:56 +0100 "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
>
> On Monday, November 14, 2011, Stephen Rothwell wrote:
> > 
> > After merging the final tree, today's linux-next build (powerpc
> > allnoconfig) failed like this:
> > 
> > mm/oom_kill.c: In function 'select_bad_process':
> > mm/oom_kill.c:326:5: error: implicit declaration of function '__thaw_task' [-Werror=implicit-function-declaration]
> > 
> > Caused by commit 23527e313ca5 ("PM / Freezer: Fix fallout of thaw_process()
> > -> __thaw_task() rename").  __thaw_task() is only declared id
> > CONFIG_FREEZER is set.  Commit 944e192db53c ("freezer: rename thaw_process()
> > to __thaw_task() and simplify the implementation") removed the second
> > declaration of thaw_process() without replacing it ...
> > 
> > I have added this patch for today:
> > 
> > From: Stephen Rothwell <sfr@canb.auug.org.au>
> > Date: Mon, 14 Nov 2011 14:19:32 +1100
> > Subject: [PATCH] freezer: fix more fallout from the thaw_process rename
> > 
> > Commit 944e192db53c "freezer: rename thaw_process() to __thaw_task()
> > and simplify the implementation" did not create a !CONFIG_FREEZER version
> > of __thaw_task().
> > 
> > Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
> 
> I've applied your patch to linux-pm/pm-freezer and merged it into
> linux-pm/linux-next.
> 
> Thanks,
> Rafael
> 
> > ---
> >  include/linux/freezer.h |    1 +
> >  1 files changed, 1 insertions(+), 0 deletions(-)
> > 
> > diff --git a/include/linux/freezer.h b/include/linux/freezer.h
> > index cc779bb..a9dccc6 100644
> > --- a/include/linux/freezer.h
> > +++ b/include/linux/freezer.h
> > @@ -166,6 +166,7 @@ static inline bool set_freezable_with_signal(void)
> >  #else /* !CONFIG_FREEZER */
> >  static inline bool frozen(struct task_struct *p) { return false; }
> >  static inline bool freezing(struct task_struct *p) { return false; }
> > +static inline void __thaw_task(struct task_struct *t) {}
> >  
> >  static inline bool __refrigerator(bool check_kthr_stop) { return false; }
> >  static inline int freeze_processes(void) { return -ENOSYS; }
> > 
> 

This is back today, so I have applied the above patch again.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

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

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: linux-next: build failure after merge of the final tree (pm tree related)
  2011-11-14  3:24 Stephen Rothwell
@ 2011-11-14 23:12 ` Rafael J. Wysocki
  2011-11-24  6:19   ` Stephen Rothwell
  0 siblings, 1 reply; 16+ messages in thread
From: Rafael J. Wysocki @ 2011-11-14 23:12 UTC (permalink / raw)
  To: Stephen Rothwell; +Cc: linux-next, linux-kernel, Tejun Heo

On Monday, November 14, 2011, Stephen Rothwell wrote:
> Hi Rafael,
> 
> After merging the final tree, today's linux-next build (powerpc
> allnoconfig) failed like this:
> 
> mm/oom_kill.c: In function 'select_bad_process':
> mm/oom_kill.c:326:5: error: implicit declaration of function '__thaw_task' [-Werror=implicit-function-declaration]
> 
> Caused by commit 23527e313ca5 ("PM / Freezer: Fix fallout of thaw_process()
> -> __thaw_task() rename").  __thaw_task() is only declared id
> CONFIG_FREEZER is set.  Commit 944e192db53c ("freezer: rename thaw_process()
> to __thaw_task() and simplify the implementation") removed the second
> declaration of thaw_process() without replacing it ...
> 
> I have added this patch for today:
> 
> From: Stephen Rothwell <sfr@canb.auug.org.au>
> Date: Mon, 14 Nov 2011 14:19:32 +1100
> Subject: [PATCH] freezer: fix more fallout from the thaw_process rename
> 
> Commit 944e192db53c "freezer: rename thaw_process() to __thaw_task()
> and simplify the implementation" did not create a !CONFIG_FREEZER version
> of __thaw_task().
> 
> Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>

I've applied your patch to linux-pm/pm-freezer and merged it into
linux-pm/linux-next.

Thanks,
Rafael


> ---
>  include/linux/freezer.h |    1 +
>  1 files changed, 1 insertions(+), 0 deletions(-)
> 
> diff --git a/include/linux/freezer.h b/include/linux/freezer.h
> index cc779bb..a9dccc6 100644
> --- a/include/linux/freezer.h
> +++ b/include/linux/freezer.h
> @@ -166,6 +166,7 @@ static inline bool set_freezable_with_signal(void)
>  #else /* !CONFIG_FREEZER */
>  static inline bool frozen(struct task_struct *p) { return false; }
>  static inline bool freezing(struct task_struct *p) { return false; }
> +static inline void __thaw_task(struct task_struct *t) {}
>  
>  static inline bool __refrigerator(bool check_kthr_stop) { return false; }
>  static inline int freeze_processes(void) { return -ENOSYS; }
> 


^ permalink raw reply	[flat|nested] 16+ messages in thread

* linux-next: build failure after merge of the final tree (pm tree related)
@ 2011-11-14  3:24 Stephen Rothwell
  2011-11-14 23:12 ` Rafael J. Wysocki
  0 siblings, 1 reply; 16+ messages in thread
From: Stephen Rothwell @ 2011-11-14  3:24 UTC (permalink / raw)
  To: Rafael J. Wysocki; +Cc: linux-next, linux-kernel, Tejun Heo

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

Hi Rafael,

After merging the final tree, today's linux-next build (powerpc
allnoconfig) failed like this:

mm/oom_kill.c: In function 'select_bad_process':
mm/oom_kill.c:326:5: error: implicit declaration of function '__thaw_task' [-Werror=implicit-function-declaration]

Caused by commit 23527e313ca5 ("PM / Freezer: Fix fallout of thaw_process()
-> __thaw_task() rename").  __thaw_task() is only declared id
CONFIG_FREEZER is set.  Commit 944e192db53c ("freezer: rename thaw_process()
to __thaw_task() and simplify the implementation") removed the second
declaration of thaw_process() without replacing it ...

I have added this patch for today:

From: Stephen Rothwell <sfr@canb.auug.org.au>
Date: Mon, 14 Nov 2011 14:19:32 +1100
Subject: [PATCH] freezer: fix more fallout from the thaw_process rename

Commit 944e192db53c "freezer: rename thaw_process() to __thaw_task()
and simplify the implementation" did not create a !CONFIG_FREEZER version
of __thaw_task().

Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
---
 include/linux/freezer.h |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/include/linux/freezer.h b/include/linux/freezer.h
index cc779bb..a9dccc6 100644
--- a/include/linux/freezer.h
+++ b/include/linux/freezer.h
@@ -166,6 +166,7 @@ static inline bool set_freezable_with_signal(void)
 #else /* !CONFIG_FREEZER */
 static inline bool frozen(struct task_struct *p) { return false; }
 static inline bool freezing(struct task_struct *p) { return false; }
+static inline void __thaw_task(struct task_struct *t) {}
 
 static inline bool __refrigerator(bool check_kthr_stop) { return false; }
 static inline int freeze_processes(void) { return -ENOSYS; }
-- 
1.7.7.2

-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

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

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: linux-next: build failure after merge of the final tree (pm tree related)
  2011-08-19 21:58   ` Rafael J. Wysocki
@ 2011-08-20  7:50     ` Pihet-XID, Jean
  0 siblings, 0 replies; 16+ messages in thread
From: Pihet-XID, Jean @ 2011-08-20  7:50 UTC (permalink / raw)
  To: Rafael J. Wysocki; +Cc: Stephen Rothwell, linux-next, linux-kernel

Rafael,

2011/8/19 Rafael J. Wysocki <rjw@sisk.pl>:
> On Friday, August 19, 2011, Pihet-XID, Jean wrote:
>> Hi Stephen, Rafael,
>>
>> On Fri, Aug 19, 2011 at 5:03 AM, Stephen Rothwell <sfr@canb.auug.org.au> wrote:
>> > Hi all,
>> >
>> > After merging the final tree, today's linux-next build (powerpc
>> > allnoconfig) failed like this:
>> >
>> > In file included from include/linux/netdevice.h:34:0,
>> >                 from include/linux/icmpv6.h:173,
>> >                 from include/linux/ipv6.h:220,
>> >                 from include/net/ipv6.h:16,
>> >                 from include/linux/sunrpc/clnt.h:25,
>> >                 from include/linux/nfs_fs.h:50,
>> >                 from init/do_mounts.c:20:
>> > include/linux/pm_qos.h: In function 'dev_pm_qos_add_request':
>> > include/linux/pm_qos.h:123:6: warning: 'return' with no value, in function returning non-void
>> > include/linux/pm_qos.h: In function 'dev_pm_qos_update_request':
>> > include/linux/pm_qos.h:126:6: warning: 'return' with no value, in function returning non-void
>> > include/linux/pm_qos.h: In function 'dev_pm_qos_remove_request':
>> > include/linux/pm_qos.h:128:6: warning: 'return' with no value, in function returning non-void
>> >
>> > Caused by commit b6d5b88750dc ("PM QoS: Implement per-device PM QoS
>> > constraints").
>> I am really sorry about this. This build failure is indeed due to my
>> patch which has stubs for the !PM case.
>> Here is an updated patch (attached), the only change is in the stubs.
>>
>> >
>> > Please, please compile test with CONFIG options that your patch depends
>> > on switched on and switched off - in this case CONFIG_PM.
>> Well, it is not as easy as it seems. As the patch set describes, I am
>> build testing for x86 and OMAP. At the moment due to config
>> dependencies it is _impossible_ to disable PM in the OMAP config.
>>
>> Also I cannot build test every platform out there.
>> Do you have a procedure for build testing?
>>
>> >
>> > I have reverted that commit (and the followinf commit 57afcf09649c ("PM
>> > QoS: Add global notification mechanism for device constraints")) for
>> > today.
>> Can we have the updated version merged in?
>
> Merged and pushed back.
Thanks a lot! Sorry for the noise.

Regards,
Jean

>
> Thanks,
> Rafael
>

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: linux-next: build failure after merge of the final tree (pm tree related)
  2011-08-19  8:14 ` Pihet-XID, Jean
  2011-08-19 13:39   ` Stephen Rothwell
@ 2011-08-19 21:58   ` Rafael J. Wysocki
  2011-08-20  7:50     ` Pihet-XID, Jean
  1 sibling, 1 reply; 16+ messages in thread
From: Rafael J. Wysocki @ 2011-08-19 21:58 UTC (permalink / raw)
  To: Pihet-XID, Jean; +Cc: Stephen Rothwell, linux-next, linux-kernel

On Friday, August 19, 2011, Pihet-XID, Jean wrote:
> Hi Stephen, Rafael,
> 
> On Fri, Aug 19, 2011 at 5:03 AM, Stephen Rothwell <sfr@canb.auug.org.au> wrote:
> > Hi all,
> >
> > After merging the final tree, today's linux-next build (powerpc
> > allnoconfig) failed like this:
> >
> > In file included from include/linux/netdevice.h:34:0,
> >                 from include/linux/icmpv6.h:173,
> >                 from include/linux/ipv6.h:220,
> >                 from include/net/ipv6.h:16,
> >                 from include/linux/sunrpc/clnt.h:25,
> >                 from include/linux/nfs_fs.h:50,
> >                 from init/do_mounts.c:20:
> > include/linux/pm_qos.h: In function 'dev_pm_qos_add_request':
> > include/linux/pm_qos.h:123:6: warning: 'return' with no value, in function returning non-void
> > include/linux/pm_qos.h: In function 'dev_pm_qos_update_request':
> > include/linux/pm_qos.h:126:6: warning: 'return' with no value, in function returning non-void
> > include/linux/pm_qos.h: In function 'dev_pm_qos_remove_request':
> > include/linux/pm_qos.h:128:6: warning: 'return' with no value, in function returning non-void
> >
> > Caused by commit b6d5b88750dc ("PM QoS: Implement per-device PM QoS
> > constraints").
> I am really sorry about this. This build failure is indeed due to my
> patch which has stubs for the !PM case.
> Here is an updated patch (attached), the only change is in the stubs.
> 
> >
> > Please, please compile test with CONFIG options that your patch depends
> > on switched on and switched off - in this case CONFIG_PM.
> Well, it is not as easy as it seems. As the patch set describes, I am
> build testing for x86 and OMAP. At the moment due to config
> dependencies it is _impossible_ to disable PM in the OMAP config.
> 
> Also I cannot build test every platform out there.
> Do you have a procedure for build testing?
> 
> >
> > I have reverted that commit (and the followinf commit 57afcf09649c ("PM
> > QoS: Add global notification mechanism for device constraints")) for
> > today.
> Can we have the updated version merged in?

Merged and pushed back.

Thanks,
Rafael

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: linux-next: build failure after merge of the final tree (pm tree related)
  2011-08-19 13:39   ` Stephen Rothwell
@ 2011-08-19 20:33     ` Randy Dunlap
  0 siblings, 0 replies; 16+ messages in thread
From: Randy Dunlap @ 2011-08-19 20:33 UTC (permalink / raw)
  To: Stephen Rothwell
  Cc: Pihet-XID, Jean, Rafael J. Wysocki, linux-next, linux-kernel

On Fri, 19 Aug 2011 23:39:50 +1000 Stephen Rothwell wrote:

> Hi, 
> 
> On Fri, 19 Aug 2011 10:14:11 +0200 "Pihet-XID, Jean" <j-pihet@ti.com> wrote:
> >
> > Well, it is not as easy as it seems. As the patch set describes, I am
> > build testing for x86 and OMAP. At the moment due to config
> > dependencies it is _impossible_ to disable PM in the OMAP config.
> > 
> > Also I cannot build test every platform out there.
> > Do you have a procedure for build testing?
> 
> I do not expect developers (or even maintainers) to build for every
> architecture/platform  - that is partly what linux-next is for (see
> http://kisskb.ellerman.id.au/linux-next ).  It is good to see you at
> least thought about the !PM case.  Can't it be turned off in x86?

Sure it can.  For mainline -rc and 3.x releases, I am trying to build
an almost-allmodconfig kernel (x86_64 only) with one major option
disabled.  The $major option that is disabled is one of each of the
following:
  BLOCK HOTPLUG INET INPUT MAGIC_SYSRQ NET PCI PM PROC_FS SMP SYSCTL SYSFS

There used to be several build errors for HOTPLUG or MAGIC_SYSRQ disabled,
but those aren't finding problems lately like they used to.  I could probably
drop them.


> I am a bit sensitive about these sort of build errors as I see it happen
> way to often that a developer make a typo in the !CONFIG_XXX stubs.


---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: linux-next: build failure after merge of the final tree (pm tree related)
  2011-08-19  8:14 ` Pihet-XID, Jean
@ 2011-08-19 13:39   ` Stephen Rothwell
  2011-08-19 20:33     ` Randy Dunlap
  2011-08-19 21:58   ` Rafael J. Wysocki
  1 sibling, 1 reply; 16+ messages in thread
From: Stephen Rothwell @ 2011-08-19 13:39 UTC (permalink / raw)
  To: Pihet-XID, Jean; +Cc: Rafael J. Wysocki, linux-next, linux-kernel

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

Hi, 

On Fri, 19 Aug 2011 10:14:11 +0200 "Pihet-XID, Jean" <j-pihet@ti.com> wrote:
>
> Well, it is not as easy as it seems. As the patch set describes, I am
> build testing for x86 and OMAP. At the moment due to config
> dependencies it is _impossible_ to disable PM in the OMAP config.
> 
> Also I cannot build test every platform out there.
> Do you have a procedure for build testing?

I do not expect developers (or even maintainers) to build for every
architecture/platform  - that is partly what linux-next is for (see
http://kisskb.ellerman.id.au/linux-next ).  It is good to see you at
least thought about the !PM case.  Can't it be turned off in x86?

I am a bit sensitive about these sort of build errors as I see it happen
way to often that a developer make a typo in the !CONFIG_XXX stubs.
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

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

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: linux-next: build failure after merge of the final tree (pm tree related)
  2011-08-19  3:03 Stephen Rothwell
@ 2011-08-19  8:14 ` Pihet-XID, Jean
  2011-08-19 13:39   ` Stephen Rothwell
  2011-08-19 21:58   ` Rafael J. Wysocki
  0 siblings, 2 replies; 16+ messages in thread
From: Pihet-XID, Jean @ 2011-08-19  8:14 UTC (permalink / raw)
  To: Stephen Rothwell, Rafael J. Wysocki; +Cc: linux-next, linux-kernel

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

Hi Stephen, Rafael,

On Fri, Aug 19, 2011 at 5:03 AM, Stephen Rothwell <sfr@canb.auug.org.au> wrote:
> Hi all,
>
> After merging the final tree, today's linux-next build (powerpc
> allnoconfig) failed like this:
>
> In file included from include/linux/netdevice.h:34:0,
>                 from include/linux/icmpv6.h:173,
>                 from include/linux/ipv6.h:220,
>                 from include/net/ipv6.h:16,
>                 from include/linux/sunrpc/clnt.h:25,
>                 from include/linux/nfs_fs.h:50,
>                 from init/do_mounts.c:20:
> include/linux/pm_qos.h: In function 'dev_pm_qos_add_request':
> include/linux/pm_qos.h:123:6: warning: 'return' with no value, in function returning non-void
> include/linux/pm_qos.h: In function 'dev_pm_qos_update_request':
> include/linux/pm_qos.h:126:6: warning: 'return' with no value, in function returning non-void
> include/linux/pm_qos.h: In function 'dev_pm_qos_remove_request':
> include/linux/pm_qos.h:128:6: warning: 'return' with no value, in function returning non-void
>
> Caused by commit b6d5b88750dc ("PM QoS: Implement per-device PM QoS
> constraints").
I am really sorry about this. This build failure is indeed due to my
patch which has stubs for the !PM case.
Here is an updated patch (attached), the only change is in the stubs.

>
> Please, please compile test with CONFIG options that your patch depends
> on switched on and switched off - in this case CONFIG_PM.
Well, it is not as easy as it seems. As the patch set describes, I am
build testing for x86 and OMAP. At the moment due to config
dependencies it is _impossible_ to disable PM in the OMAP config.

Also I cannot build test every platform out there.
Do you have a procedure for build testing?

>
> I have reverted that commit (and the followinf commit 57afcf09649c ("PM
> QoS: Add global notification mechanism for device constraints")) for
> today.
Can we have the updated version merged in?
Meanwhile I am trying a build with a non PM config.

Kind regards,
Jean

>
> --
> Cheers,
> Stephen Rothwell                    sfr@canb.auug.org.au
> http://www.canb.auug.org.au/~sfr/
>

[-- Attachment #2: 0006-PM-QoS-implement-the-per-device-PM-QoS-constraints.patch --]
[-- Type: text/x-patch, Size: 16989 bytes --]

From a75badc8e0126bc55a8b16510c7beb60fa313f89 Mon Sep 17 00:00:00 2001
From: Jean Pihet <j-pihet@ti.com>
Date: Mon, 8 Aug 2011 16:16:39 +0200
Subject: [PATCH 6/7] PM QoS: implement the per-device PM QoS constraints

Implement the per-device PM QoS constraints by creating a device
PM QoS API, which calls the PM QoS constraints management core code.

The per-device latency constraints data strctures are stored
in the device dev_pm_info struct.

The device PM code calls the init and destroy of the per-device constraints
data struct in order to support the dynamic insertion and removal of the
devices in the system.

To minimize the data usage by the per-device constraints, the data struct
is only allocated at the first call to dev_pm_qos_add_request.
The data is later free'd when the device is removed from the system.
A global mutex protects the constraints users from the data being
allocated and free'd.

Signed-off-by: Jean Pihet <j-pihet@ti.com>
---
 drivers/base/power/Makefile |    4 +-
 drivers/base/power/main.c   |    3 +
 drivers/base/power/qos.c    |  339 +++++++++++++++++++++++++++++++++++++++++++
 include/linux/pm.h          |    9 +
 include/linux/pm_qos.h      |   42 ++++++
 5 files changed, 395 insertions(+), 2 deletions(-)
 create mode 100644 drivers/base/power/qos.c

diff --git a/drivers/base/power/Makefile b/drivers/base/power/Makefile
index 2639ae7..b707447 100644
--- a/drivers/base/power/Makefile
+++ b/drivers/base/power/Makefile
@@ -1,4 +1,4 @@
-obj-$(CONFIG_PM)	+= sysfs.o generic_ops.o
+obj-$(CONFIG_PM)	+= sysfs.o generic_ops.o qos.o
 obj-$(CONFIG_PM_SLEEP)	+= main.o wakeup.o
 obj-$(CONFIG_PM_RUNTIME)	+= runtime.o
 obj-$(CONFIG_PM_TRACE_RTC)	+= trace.o
@@ -6,4 +6,4 @@ obj-$(CONFIG_PM_OPP)	+= opp.o
 obj-$(CONFIG_PM_GENERIC_DOMAINS)	+=  domain.o
 obj-$(CONFIG_HAVE_CLK)	+= clock_ops.o
 
-ccflags-$(CONFIG_DEBUG_DRIVER) := -DDEBUG
\ No newline at end of file
+ccflags-$(CONFIG_DEBUG_DRIVER) := -DDEBUG
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index a854591..956443f 100644
--- a/drivers/base/power/main.c
+++ b/drivers/base/power/main.c
@@ -22,6 +22,7 @@
 #include <linux/mutex.h>
 #include <linux/pm.h>
 #include <linux/pm_runtime.h>
+#include <linux/pm_qos.h>
 #include <linux/resume-trace.h>
 #include <linux/interrupt.h>
 #include <linux/sched.h>
@@ -97,6 +98,7 @@ void device_pm_add(struct device *dev)
 			dev_name(dev->parent));
 	list_add_tail(&dev->power.entry, &dpm_list);
 	mutex_unlock(&dpm_list_mtx);
+	dev_pm_qos_constraints_init(dev);
 }
 
 /**
@@ -107,6 +109,7 @@ void device_pm_remove(struct device *dev)
 {
 	pr_debug("PM: Removing info for %s:%s\n",
 		 dev->bus ? dev->bus->name : "No Bus", dev_name(dev));
+	dev_pm_qos_constraints_destroy(dev);
 	complete_all(&dev->power.completion);
 	mutex_lock(&dpm_list_mtx);
 	list_del_init(&dev->power.entry);
diff --git a/drivers/base/power/qos.c b/drivers/base/power/qos.c
new file mode 100644
index 0000000..9c0a00d
--- /dev/null
+++ b/drivers/base/power/qos.c
@@ -0,0 +1,339 @@
+/*
+ * Devices PM QoS constraints management
+ *
+ * Copyright (C) 2011 Texas Instruments, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ *
+ * This module exposes the interface to kernel space for specifying
+ * per-device PM QoS dependencies. It provides infrastructure for registration
+ * of:
+ *
+ * Dependents on a QoS value : register requests
+ * Watchers of QoS value : get notified when target QoS value changes
+ *
+ * This QoS design is best effort based. Dependents register their QoS needs.
+ * Watchers register to keep track of the current QoS needs of the system.
+ *
+ * Note about the per-device constraint data struct allocation:
+ * . The per-device constraints data struct ptr is tored into the device
+ *    dev_pm_info.
+ * . To minimize the data usage by the per-device constraints, the data struct
+ *   is only allocated at the first call to dev_pm_qos_add_request.
+ * . The data is later free'd when the device is removed from the system.
+ * . The constraints_state variable from dev_pm_info tracks the data struct
+ *    allocation state:
+ *    DEV_PM_QOS_NO_DEVICE: No device present or device removed, no data
+ *     allocated,
+ *    DEV_PM_QOS_DEVICE_PRESENT: Device present, data not allocated and will be
+ *     allocated at the first call to dev_pm_qos_add_request,
+ *    DEV_PM_QOS_ALLOCATED: Device present, data allocated. The per-device
+ *     PM QoS constraints framework is operational and constraints can be
+ *     added, updated or removed using the dev_pm_qos_* API.
+ *  . A global mutex protects the constraints users from the data being
+ *     allocated and free'd.
+ */
+
+#include <linux/pm_qos.h>
+#include <linux/spinlock.h>
+#include <linux/slab.h>
+#include <linux/device.h>
+#include <linux/mutex.h>
+
+
+static DEFINE_MUTEX(dev_pm_qos_mtx);
+
+/*
+ * dev_pm_qos_constraints_allocate
+ * @dev: device to allocate data for
+ *
+ * Called at the first call to add_request, for constraint data allocation
+ * Must be called with the dev_pm_qos_mtx mutex held
+ */
+static int dev_pm_qos_constraints_allocate(struct device *dev)
+{
+	struct pm_qos_constraints *c;
+	struct blocking_notifier_head *n;
+
+	c = kzalloc(sizeof(*c), GFP_KERNEL);
+	if (!c)
+		return -ENOMEM;
+
+	n = kzalloc(sizeof(*n), GFP_KERNEL);
+	if (!n) {
+		kfree(c);
+		return -ENOMEM;
+	}
+	BLOCKING_INIT_NOTIFIER_HEAD(n);
+
+	dev->power.constraints = c;
+	plist_head_init(&dev->power.constraints->list);
+	dev->power.constraints->target_value = PM_QOS_DEV_LAT_DEFAULT_VALUE;
+	dev->power.constraints->default_value =	PM_QOS_DEV_LAT_DEFAULT_VALUE;
+	dev->power.constraints->type = PM_QOS_MIN;
+	dev->power.constraints->notifiers = n;
+	dev->power.constraints_state = DEV_PM_QOS_ALLOCATED;
+
+	return 0;
+}
+
+/**
+ * dev_pm_qos_constraints_init
+ * @dev: target device
+ *
+ * Called from the device PM subsystem at device insertion
+ */
+void dev_pm_qos_constraints_init(struct device *dev)
+{
+	mutex_lock(&dev_pm_qos_mtx);
+	dev->power.constraints_state = DEV_PM_QOS_DEVICE_PRESENT;
+	mutex_unlock(&dev_pm_qos_mtx);
+}
+
+/**
+ * dev_pm_qos_constraints_destroy
+ * @dev: target device
+ *
+ * Called from the device PM subsystem at device removal
+ */
+void dev_pm_qos_constraints_destroy(struct device *dev)
+{
+	struct dev_pm_qos_request *req, *tmp;
+
+	mutex_lock(&dev_pm_qos_mtx);
+
+	if (dev->power.constraints_state == DEV_PM_QOS_ALLOCATED) {
+		/* Flush the constraints list for the device */
+		plist_for_each_entry_safe(req, tmp,
+					  &dev->power.constraints->list,
+					  node) {
+			/*
+			 * Update constraints list and call the per-device
+			 * callbacks if needed
+			 */
+			pm_qos_update_target(req->dev->power.constraints,
+					   &req->node, PM_QOS_REMOVE_REQ,
+					   PM_QOS_DEFAULT_VALUE);
+			memset(req, 0, sizeof(*req));
+		}
+
+		kfree(dev->power.constraints->notifiers);
+		kfree(dev->power.constraints);
+		dev->power.constraints = NULL;
+	}
+	dev->power.constraints_state = DEV_PM_QOS_NO_DEVICE;
+
+	mutex_unlock(&dev_pm_qos_mtx);
+}
+
+/**
+ * dev_pm_qos_add_request - inserts new qos request into the list
+ * @dev: target device for the constraint
+ * @req: pointer to a preallocated handle
+ * @value: defines the qos request
+ *
+ * This function inserts a new entry in the device constraints list of
+ * requested qos performance characteristics. It recomputes the aggregate
+ * QoS expectations of parameters and initializes the dev_pm_qos_request
+ * handle.  Caller needs to save this handle for later use in updates and
+ * removal.
+ *
+ * Returns 1 if the aggregated constraint value has changed,
+ * 0 if the aggregated constraint value has not changed,
+ * -EINVAL in case of wrong parameters, -ENODEV if the device has been
+ * removed from the system
+ */
+int dev_pm_qos_add_request(struct device *dev, struct dev_pm_qos_request *req,
+			    s32 value)
+{
+	int ret = 0;
+
+	if (!dev || !req) /*guard against callers passing in null */
+		return -EINVAL;
+
+	if (dev_pm_qos_request_active(req)) {
+		WARN(1, KERN_ERR "dev_pm_qos_add_request() called for already "
+			"added request\n");
+		return -EINVAL;
+	}
+
+	mutex_lock(&dev_pm_qos_mtx);
+	req->dev = dev;
+
+	/* Return if the device has been removed */
+	if (req->dev->power.constraints_state == DEV_PM_QOS_NO_DEVICE) {
+		ret = -ENODEV;
+		goto out;
+	}
+
+	/*
+	 * Allocate the constraints data on the first call to add_request,
+	 * i.e. only if the data is not already allocated and if the device has
+	 * not been removed
+	 */
+	if (dev->power.constraints_state == DEV_PM_QOS_DEVICE_PRESENT)
+		ret = dev_pm_qos_constraints_allocate(dev);
+
+	if (!ret)
+		ret = pm_qos_update_target(dev->power.constraints, &req->node,
+					   PM_QOS_ADD_REQ, value);
+
+out:
+	mutex_unlock(&dev_pm_qos_mtx);
+	return ret;
+}
+EXPORT_SYMBOL_GPL(dev_pm_qos_add_request);
+
+/**
+ * dev_pm_qos_update_request - modifies an existing qos request
+ * @req : handle to list element holding a dev_pm_qos request to use
+ * @new_value: defines the qos request
+ *
+ * Updates an existing dev PM qos request along with updating the
+ * target value.
+ *
+ * Attempts are made to make this code callable on hot code paths.
+ *
+ * Returns 1 if the aggregated constraint value has changed,
+ * 0 if the aggregated constraint value has not changed,
+ * -EINVAL in case of wrong parameters, -ENODEV if the device has been
+ * removed from the system
+ */
+int dev_pm_qos_update_request(struct dev_pm_qos_request *req,
+			      s32 new_value)
+{
+	int ret = 0;
+
+	if (!req) /*guard against callers passing in null */
+		return -EINVAL;
+
+	if (!dev_pm_qos_request_active(req)) {
+		WARN(1, KERN_ERR "dev_pm_qos_update_request() called for "
+			"unknown object\n");
+		return -EINVAL;
+	}
+
+	mutex_lock(&dev_pm_qos_mtx);
+
+	if (req->dev->power.constraints_state == DEV_PM_QOS_ALLOCATED) {
+		if (new_value != req->node.prio)
+			ret = pm_qos_update_target(req->dev->power.constraints,
+						   &req->node,
+						   PM_QOS_UPDATE_REQ,
+						   new_value);
+	} else {
+		/* Return if the device has been removed */
+		ret = -ENODEV;
+	}
+
+	mutex_unlock(&dev_pm_qos_mtx);
+	return ret;
+}
+EXPORT_SYMBOL_GPL(dev_pm_qos_update_request);
+
+/**
+ * dev_pm_qos_remove_request - modifies an existing qos request
+ * @req: handle to request list element
+ *
+ * Will remove pm qos request from the list of constraints and
+ * recompute the current target value. Call this on slow code paths.
+ *
+ * Returns 1 if the aggregated constraint value has changed,
+ * 0 if the aggregated constraint value has not changed,
+ * -EINVAL in case of wrong parameters, -ENODEV if the device has been
+ * removed from the system
+ */
+int dev_pm_qos_remove_request(struct dev_pm_qos_request *req)
+{
+	int ret = 0;
+
+	if (!req) /*guard against callers passing in null */
+		return -EINVAL;
+
+	if (!dev_pm_qos_request_active(req)) {
+		WARN(1, KERN_ERR "dev_pm_qos_remove_request() called for "
+			"unknown object\n");
+		return -EINVAL;
+	}
+
+	mutex_lock(&dev_pm_qos_mtx);
+
+	if (req->dev->power.constraints_state == DEV_PM_QOS_ALLOCATED) {
+		ret = pm_qos_update_target(req->dev->power.constraints,
+					   &req->node, PM_QOS_REMOVE_REQ,
+					   PM_QOS_DEFAULT_VALUE);
+		memset(req, 0, sizeof(*req));
+	} else {
+		/* Return if the device has been removed */
+		ret = -ENODEV;
+	}
+
+	mutex_unlock(&dev_pm_qos_mtx);
+	return ret;
+}
+EXPORT_SYMBOL_GPL(dev_pm_qos_remove_request);
+
+/**
+ * dev_pm_qos_add_notifier - sets notification entry for changes to target value
+ * of per-device PM QoS constraints
+ *
+ * @dev: target device for the constraint
+ * @notifier: notifier block managed by caller.
+ *
+ * Will register the notifier into a notification chain that gets called
+ * upon changes to the target value for the device.
+ */
+int dev_pm_qos_add_notifier(struct device *dev, struct notifier_block *notifier)
+{
+	int retval = 0;
+
+	mutex_lock(&dev_pm_qos_mtx);
+
+	/* Silently return if the device has been removed */
+	if (dev->power.constraints_state != DEV_PM_QOS_ALLOCATED)
+		goto out;
+
+	retval = blocking_notifier_chain_register(
+			dev->power.constraints->notifiers,
+			notifier);
+
+out:
+	mutex_unlock(&dev_pm_qos_mtx);
+	return retval;
+}
+EXPORT_SYMBOL_GPL(dev_pm_qos_add_notifier);
+
+/**
+ * dev_pm_qos_remove_notifier - deletes notification for changes to target value
+ * of per-device PM QoS constraints
+ *
+ * @dev: target device for the constraint
+ * @notifier: notifier block to be removed.
+ *
+ * Will remove the notifier from the notification chain that gets called
+ * upon changes to the target value.
+ */
+int dev_pm_qos_remove_notifier(struct device *dev,
+			       struct notifier_block *notifier)
+{
+	int retval = 0;
+
+	mutex_lock(&dev_pm_qos_mtx);
+
+	/* Silently return if the device has been removed */
+	if (dev->power.constraints_state != DEV_PM_QOS_ALLOCATED)
+		goto out;
+
+	retval = blocking_notifier_chain_unregister(
+			dev->power.constraints->notifiers,
+			notifier);
+
+out:
+	mutex_unlock(&dev_pm_qos_mtx);
+	return retval;
+}
+EXPORT_SYMBOL_GPL(dev_pm_qos_remove_notifier);
+
diff --git a/include/linux/pm.h b/include/linux/pm.h
index f7c84c9..7a48951 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -421,6 +421,13 @@ enum rpm_request {
 
 struct wakeup_source;
 
+/* Per-device PM QoS constraints data struct state */
+enum dev_pm_qos_state {
+	DEV_PM_QOS_NO_DEVICE,		/* No device present */
+	DEV_PM_QOS_DEVICE_PRESENT,	/* Device present, data not allocated */
+	DEV_PM_QOS_ALLOCATED,		/* Device present, data allocated */
+};
+
 struct dev_pm_info {
 	pm_message_t		power_state;
 	unsigned int		can_wakeup:1;
@@ -463,6 +470,8 @@ struct dev_pm_info {
 	unsigned long		accounting_timestamp;
 #endif
 	void			*subsys_data;  /* Owned by the subsystem. */
+	struct pm_qos_constraints *constraints;
+	enum dev_pm_qos_state	constraints_state;
 };
 
 extern void update_pm_runtime_accounting(struct device *dev);
diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h
index 84aa150..f75f74d 100644
--- a/include/linux/pm_qos.h
+++ b/include/linux/pm_qos.h
@@ -19,12 +19,18 @@
 #define PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE	(2000 * USEC_PER_SEC)
 #define PM_QOS_NETWORK_LAT_DEFAULT_VALUE	(2000 * USEC_PER_SEC)
 #define PM_QOS_NETWORK_THROUGHPUT_DEFAULT_VALUE	0
+#define PM_QOS_DEV_LAT_DEFAULT_VALUE		0
 
 struct pm_qos_request {
 	struct plist_node node;
 	int pm_qos_class;
 };
 
+struct dev_pm_qos_request {
+	struct plist_node node;
+	struct device *dev;
+};
+
 enum pm_qos_type {
 	PM_QOS_UNITIALIZED,
 	PM_QOS_MAX,		/* return the largest value */
@@ -51,6 +57,11 @@ enum pm_qos_req_action {
 	PM_QOS_REMOVE_REQ	/* Remove an existing request */
 };
 
+static inline int dev_pm_qos_request_active(struct dev_pm_qos_request *req)
+{
+	return req->dev != 0;
+}
+
 #ifdef CONFIG_PM
 int pm_qos_update_target(struct pm_qos_constraints *c, struct plist_node *node,
 			 enum pm_qos_req_action action, int value);
@@ -64,6 +75,17 @@ int pm_qos_request(int pm_qos_class);
 int pm_qos_add_notifier(int pm_qos_class, struct notifier_block *notifier);
 int pm_qos_remove_notifier(int pm_qos_class, struct notifier_block *notifier);
 int pm_qos_request_active(struct pm_qos_request *req);
+
+int dev_pm_qos_add_request(struct device *dev, struct dev_pm_qos_request *req,
+			   s32 value);
+int dev_pm_qos_update_request(struct dev_pm_qos_request *req, s32 new_value);
+int dev_pm_qos_remove_request(struct dev_pm_qos_request *req);
+int dev_pm_qos_add_notifier(struct device *dev,
+			    struct notifier_block *notifier);
+int dev_pm_qos_remove_notifier(struct device *dev,
+			       struct notifier_block *notifier);
+void dev_pm_qos_constraints_init(struct device *dev);
+void dev_pm_qos_constraints_destroy(struct device *dev);
 #else
 static inline int pm_qos_update_target(struct pm_qos_constraints *c,
 				       struct plist_node *node,
@@ -89,6 +111,26 @@ static inline int pm_qos_remove_notifier(int pm_qos_class,
 			{ return 0; }
 static inline int pm_qos_request_active(struct pm_qos_request *req)
 			{ return 0; }
+
+static inline int dev_pm_qos_add_request(struct device *dev,
+					 struct dev_pm_qos_request *req,
+					 s32 value)
+			{ return 0; }
+static inline int dev_pm_qos_update_request(struct dev_pm_qos_request *req,
+					    s32 new_value)
+			{ return 0; }
+static inline int dev_pm_qos_remove_request(struct dev_pm_qos_request *req)
+			{ return 0; }
+static inline int dev_pm_qos_add_notifier(struct device *dev,
+					  struct notifier_block *notifier)
+			{ return 0; }
+static inline int dev_pm_qos_remove_notifier(struct device *dev,
+					     struct notifier_block *notifier)
+			{ return 0; }
+static inline void dev_pm_qos_constraints_init(struct device *dev)
+			{ return; }
+static inline void dev_pm_qos_constraints_destroy(struct device *dev)
+			{ return; }
 #endif
 
 #endif
-- 
1.7.4.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* linux-next: build failure after merge of the final tree (pm tree related)
@ 2011-08-19  3:03 Stephen Rothwell
  2011-08-19  8:14 ` Pihet-XID, Jean
  0 siblings, 1 reply; 16+ messages in thread
From: Stephen Rothwell @ 2011-08-19  3:03 UTC (permalink / raw)
  To: Rafael J. Wysocki; +Cc: linux-next, linux-kernel, Jean Pihet

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

Hi all,

After merging the final tree, today's linux-next build (powerpc
allnoconfig) failed like this:

In file included from include/linux/netdevice.h:34:0,
                 from include/linux/icmpv6.h:173,
                 from include/linux/ipv6.h:220,
                 from include/net/ipv6.h:16,
                 from include/linux/sunrpc/clnt.h:25,
                 from include/linux/nfs_fs.h:50,
                 from init/do_mounts.c:20:
include/linux/pm_qos.h: In function 'dev_pm_qos_add_request':
include/linux/pm_qos.h:123:6: warning: 'return' with no value, in function returning non-void
include/linux/pm_qos.h: In function 'dev_pm_qos_update_request':
include/linux/pm_qos.h:126:6: warning: 'return' with no value, in function returning non-void
include/linux/pm_qos.h: In function 'dev_pm_qos_remove_request':
include/linux/pm_qos.h:128:6: warning: 'return' with no value, in function returning non-void

Caused by commit b6d5b88750dc ("PM QoS: Implement per-device PM QoS
constraints").

Please, please compile test with CONFIG options that your patch depends
on switched on and switched off - in this case CONFIG_PM.

I have reverted that commit (and the followinf commit 57afcf09649c ("PM
QoS: Add global notification mechanism for device constraints")) for
today.

-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

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

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2012-10-24 21:36 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-10-24  3:44 linux-next: build failure after merge of the final tree (pm tree related) Stephen Rothwell
2012-10-24  3:58 ` Song, Youquan
2012-10-24 21:40 ` Rafael J. Wysocki
  -- strict thread matches above, loose matches on Subject: below --
2011-12-22  5:28 Stephen Rothwell
2011-12-23  0:32 ` Rafael J. Wysocki
2011-11-14  3:24 Stephen Rothwell
2011-11-14 23:12 ` Rafael J. Wysocki
2011-11-24  6:19   ` Stephen Rothwell
2011-11-24  6:32     ` Tejun Heo
2011-11-24 10:15       ` Rafael J. Wysocki
2011-08-19  3:03 Stephen Rothwell
2011-08-19  8:14 ` Pihet-XID, Jean
2011-08-19 13:39   ` Stephen Rothwell
2011-08-19 20:33     ` Randy Dunlap
2011-08-19 21:58   ` Rafael J. Wysocki
2011-08-20  7:50     ` Pihet-XID, Jean

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).