All of lore.kernel.org
 help / color / mirror / Atom feed
From: Adrian Bunk <bunk@stusta.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>, Len Brown <lenb@kernel.org>,
	david@lang.hm, Andrew Morton <akpm@linux-foundation.org>,
	linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org,
	Pavel Machek <pavel@ucw.cz>,
	Stefan Richter <stefanr@s5r6.in-berlin.de>
Subject: [2.6 patch] SOFTWARE_SUSPEND: handle HOTPLUG_CPU automatically
Date: Sat, 28 Jul 2007 06:52:47 +0200	[thread overview]
Message-ID: <20070728045247.GF15129@stusta.de> (raw)
In-Reply-To: <alpine.LFD.0.999.0707271545220.3442@woody.linux-foundation.org>

On Fri, Jul 27, 2007 at 03:57:39PM -0700, Linus Torvalds wrote:
> 
> 
> On Sat, 28 Jul 2007, Adrian Bunk wrote:
> > 
> > The dependency of SUSPEND_SMP on HOTPLUG_CPU is quite unintuitive, so 
> > what about something like the patch below?
> 
> Yeah, this looks reasonable.
> 
> May I suggest another level of indirection, though:
> 
> > +config SUSPEND_SMP_POSSIBLE
> > +	bool
> > +	depends on (X86 && !X86_VOYAGER) || (PPC64 && (PPC_PSERIES || PPC_PMAC))
> > +	depends on SMP
> > +	default y
> 
> How about making this a bit more split up, and do it as
> 
> 	# SMP suspend is possible on ..
> 	config SUSPEND_SMP_POSSIBLE
> 		bool
> 		depends on (X86 && !X86_VOYAGER) || (PPC64 && (PPC_PSERIES || PPC_PMAC))
> 		default y
> 
> 	# UP suspend is possible on ..
> 	config SUSPEND_UP_POSSIBLE
> 		bool
> 		depends on X86 || PPC64_SWSUSP || FRV || PPC32
> 		default y 

Sounds good.

> 	# Can we suspend?
> 	config SUSPEND_POSSIBLE
> 		bool
> 		depends on (SMP && SUSPEND_SMP_POSSIBLE) || (SUSPEND_UP_POSSIBLE && !SMP)
> 		default y

IMHO not required:

config SOFTWARE_SUSPEND
	bool "Software Suspend (Hibernation)"
	depends on PM && SWAP
	depends on SUSPEND_UP_POSSIBLE || SUSPEND_SMP_POSSIBLE

> and then we have just a
> 
> 	config SOFTWARE_SUSPEND
> 		bool "Software Suspend (Hibernation)"
> 		depends on PM && SWAP
> 		depends on SUSPEND_POSSIBLE
> 
> 	config SUSPEND_SMP
> 		bool
> 		depends on SOFTWARE_SUSPEND && SMP
> 		select HOTPLUG_CPU
> 		default y
> 
> and now each of the config options looks pretty simple and describe one 
> thing.
> 
> [ For extra bonus points: the SUSPEND_POSSIBLE thing is still pretty 
>   complicated, and it might actually be a better idea to make it a 
>   per-arch config option, and just make the x86/arch say
> 
> 	config SUSPEND_POSSIBLE
> 		bool
> 		depends on !(X86_VOYAGER && SMP)
> 		default y

This would give you "trying to assign nonexistent symbol SUSPEND_POSSIBLE"
kconfig warnings on architectures without SUSPEND_POSSIBLE.

(And you missed the UP case in your example.)

>   instead: since SUSPEND_POSSIBLE is always true on x86 regardless of SMP 
>   or not, just not on X86_VOYAGER. Then, each architecture can have its 
>   own private rules for whether that architecture has SUSPEND_POSSIBLE or 
>   not, so on ppc, it might look like
> 
> 	config SUSPEND_POSSIBLE
> 		bool
> 		depends on (PPC64 && (PPC_PSERIES || PPC_PMAC)) || PPC_SWSUSP
> 		bool y
> 
>   or something, but the point is, now the complexity is a per-architecture 
>   thing, so other architectures simply don't have to care any more! ]
> 
> And the user only ever sees one single question: the one for 
> "SOFTWARE_SUSPEND". All the others would directly flow either from the 
> architecture choice, or from that.
> 
> Anybody willing to rewrite it that way?

Patch below.

> 			Linus

cu
Adrian


<--  snip  -->


An implementation detail of the suspend code that is not intuitive for 
the user is the HOTPLUG_CPU dependency of SOFTWARE_SUSPEND if SMP.

This patch handles the dependency of SOFTWARE_SUSPEND on HOTPLUG_CPU 
automatically without the user requiring to know about it.

Thanks to Stefan Richter and Linus Torvalds for valuable feedback.

Signed-off-by: Adrian Bunk <bunk@stusta.de>

---

 arch/i386/Kconfig    |   16 +++++++++++-----
 arch/powerpc/Kconfig |   11 +++++++++--
 arch/x86_64/Kconfig  |   19 ++++++++++++-------
 kernel/power/Kconfig |   23 +++++++++++++++++------
 4 files changed, 49 insertions(+), 20 deletions(-)

commit bb14e6721dc4e1a97efbfa5398d6021b321af52d
Author: Adrian Bunk <bunk@stusta.de>
Date:   Sat Jul 28 06:47:03 2007 +0200

    asdf

diff --git a/arch/i386/Kconfig b/arch/i386/Kconfig
index abb582b..eb00a12 100644
--- a/arch/i386/Kconfig
+++ b/arch/i386/Kconfig
@@ -903,13 +903,19 @@ config PHYSICAL_ALIGN
 
 	  Don't change this unless you know what you are doing.
 
-config HOTPLUG_CPU
-	bool "Support for suspend on SMP and hot-pluggable CPUs (EXPERIMENTAL)"
+config HOTPLUG_CPU_POSSIBLE
+	bool
 	depends on SMP && HOTPLUG && EXPERIMENTAL && !X86_VOYAGER
+	select SUSPEND_SMP_POSSIBLE
+	default y
+
+config HOTPLUG_CPU
+	bool "Support for hot-pluggable CPUs (EXPERIMENTAL)" if !SUSPEND_SMP
+	depends on HOTPLUG_CPU_POSSIBLE
+	default y if SUSPEND_SMP
 	---help---
-	  Say Y here to experiment with turning CPUs off and on, and to
-	  enable suspend on SMP systems. CPUs can be controlled through
-	  /sys/devices/system/cpu.
+	  Say Y here to experiment with turning CPUs off and on.
+	  CPUs can be controlled through /sys/devices/system/cpu.
 
 config COMPAT_VDSO
 	bool "Compat VDSO support"
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 00099ef..950be0b 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -192,9 +192,16 @@ config IOMMU_VMERGE
 	  from *_map_sg(). Say Y if you know the drivers you are using are
 	  properly handling this case.
 
-config HOTPLUG_CPU
-	bool "Support for enabling/disabling CPUs"
+config HOTPLUG_CPU_POSSIBLE
+	bool
 	depends on SMP && HOTPLUG && EXPERIMENTAL && (PPC_PSERIES || PPC_PMAC)
+	select SUSPEND_SMP_POSSIBLE if PPC64
+	default y
+
+config HOTPLUG_CPU
+	bool "Support for enabling/disabling CPUs (EXPERIMENTAL)" if !SUSPEND_SMP
+	depends on HOTPLUG_CPU_POSSIBLE
+	default y if SUSPEND_SMP
 	---help---
 	  Say Y here to be able to disable and re-enable individual
 	  CPUs at runtime on SMP machines.
diff --git a/arch/x86_64/Kconfig b/arch/x86_64/Kconfig
index 45f82ae..810ed4b 100644
--- a/arch/x86_64/Kconfig
+++ b/arch/x86_64/Kconfig
@@ -443,16 +443,21 @@ config PHYSICAL_ALIGN
 	hex
 	default "0x200000"
 
-config HOTPLUG_CPU
-	bool "Support for suspend on SMP and hot-pluggable CPUs (EXPERIMENTAL)"
+config HOTPLUG_CPU_POSSIBLE
+	bool
 	depends on SMP && HOTPLUG && EXPERIMENTAL
+	select SUSPEND_SMP_POSSIBLE
+	default y
+
+config HOTPLUG_CPU
+	bool "Support for hot-pluggable CPUs (EXPERIMENTAL)" if !SUSPEND_SMP
+	depends on HOTPLUG_CPU_POSSIBLE
+	default y if SUSPEND_SMP
 	help
-		Say Y here to experiment with turning CPUs off and on.  CPUs
-		can be controlled through /sys/devices/system/cpu/cpu#.
-		This is also required for suspend/hibernation on SMP systems.
+	  Say Y here to experiment with turning CPUs off and on.
+	  CPUs can be controlled through /sys/devices/system/cpu/cpu#.
 
-		Say N if you want to disable CPU hotplug and don't need to
-		suspend.
+	  If unsure, say N.
 
 config ARCH_ENABLE_MEMORY_HOTPLUG
 	def_bool y
diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig
index c1a106d..c7f74ba 100644
--- a/kernel/power/Kconfig
+++ b/kernel/power/Kconfig
@@ -72,9 +72,25 @@ config PM_TRACE
 	CAUTION: this option will cause your machine's real-time clock to be
 	set to an invalid time after a resume.
 
+config SUSPEND_UP_POSSIBLE
+	bool
+	depends on FRV || PPC32 || PPC64_SWSUSP || X86
+	depends on !SMP
+	default y
+
+# select'ed from arch/<arch>/Kconfig if supported
+config SUSPEND_SMP_POSSIBLE
+	bool
+
+config SUSPEND_SMP
+	bool
+	depends on SUSPEND_SMP_POSSIBLE && SOFTWARE_SUSPEND
+	default y
+
 config SOFTWARE_SUSPEND
 	bool "Software Suspend (Hibernation)"
-	depends on PM && SWAP && (((X86 || PPC64_SWSUSP) && (!SMP || SUSPEND_SMP)) || ((FRV || PPC32) && !SMP))
+	depends on PM && SWAP
+	depends on SUSPEND_UP_POSSIBLE || SUSPEND_SMP_POSSIBLE
 	---help---
 	  Enable the suspend to disk (STD) functionality, which is usually
 	  called "hibernation" in user interfaces.  STD checkpoints the
@@ -132,11 +148,6 @@ config PM_STD_PARTITION
 	  suspended image to. It will simply pick the first available swap 
 	  device.
 
-config SUSPEND_SMP
-	bool
-	depends on HOTPLUG_CPU && (X86 || PPC64) && PM
-	default y
-
 config APM_EMULATION
 	tristate "Advanced Power Management Emulation"
 	depends on PM && SYS_SUPPORTS_APM_EMULATION

  reply	other threads:[~2007-07-28  4:52 UTC|newest]

Thread overview: 146+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-25 16:38 [GIT PATCH] ACPI patches for 2.6.23-rc1 Len Brown
2007-07-25 16:49 ` Tino Keitel
2007-07-25 19:44   ` Len Brown
2007-07-25 18:48 ` Linus Torvalds
2007-07-25 22:51   ` Len Brown
2007-07-26  2:20     ` david
2007-07-26  4:26       ` Len Brown
2007-07-26  5:00         ` david
2007-07-26  6:55         ` Linus Torvalds
2007-07-26 17:45           ` Len Brown
2007-07-26 18:01             ` Linus Torvalds
2007-07-26 18:02             ` david
2007-07-26 18:16               ` Linus Torvalds
2007-07-26 18:27                 ` Jeff Garzik
2007-07-26 18:18               ` Len Brown
2007-07-26 19:17             ` CONFIG_SUSPEND? (was: Re: [GIT PATCH] ACPI patches for 2.6.23-rc1) Rafael J. Wysocki
2007-07-26 19:57               ` Linus Torvalds
2007-07-26 20:48                 ` Rafael J. Wysocki
2007-07-26 20:55                   ` Linus Torvalds
2007-07-27 22:25                     ` [2.6 patch] let SUSPEND select HOTPLUG_CPU Adrian Bunk
2007-07-27 22:47                       ` Stefan Richter
2007-07-27 23:03                         ` Adrian Bunk
2007-07-28  8:42                           ` Stefan Richter
2007-07-30 21:18                           ` Pavel Machek
2007-07-28 14:44                         ` Sergio Monteiro Basto
2007-07-27 22:57                       ` Linus Torvalds
2007-07-28  4:52                         ` Adrian Bunk [this message]
2007-07-28  9:07                           ` [2.6 patch] SOFTWARE_SUSPEND: handle HOTPLUG_CPU automatically Stefan Richter
2007-07-28 18:30                       ` [2.6 patch] let SUSPEND select HOTPLUG_CPU Rafael J. Wysocki
2007-07-28  7:30                     ` CONFIG_SUSPEND? (was: Re: [GIT PATCH] ACPI patches for 2.6.23-rc1) Len Brown
2007-07-28  7:33                       ` [PATCH] ACPI: restore CONFIG_ACPI_SLEEP Len Brown
2007-07-28 16:25                       ` CONFIG_SUSPEND? (was: Re: [GIT PATCH] ACPI patches for 2.6.23-rc1) Linus Torvalds
2007-07-28 16:55                         ` Linus Torvalds
2007-07-28 18:29                           ` Rafael J. Wysocki
2007-07-28 18:31                             ` Linus Torvalds
2007-07-29 10:20                               ` [PATCH 0/2] Introduce CONFIG_HIBERNATION and CONFIG_SUSPEND (was: CONFIG_SUSPEND?) Rafael J. Wysocki
2007-07-29 10:21                                 ` [PATCH 1/2] Replace CONFIG_SOFTWARE_SUSPEND with CONFIG_HIBERNATION Rafael J. Wysocki
2007-07-29 10:21                                 ` Rafael J. Wysocki
2007-07-29 12:38                                 ` [PATCH 2/2] Introduce CONFIG_SUSPEND Rafael J. Wysocki
2007-07-29 12:38                                 ` Rafael J. Wysocki
2007-07-29 20:40                                   ` Adrian Bunk
2007-07-29 20:40                                   ` Adrian Bunk
2007-07-29 20:40                                     ` Adrian Bunk
2007-07-29 21:17                                     ` Rafael J. Wysocki
2007-07-29 21:17                                       ` Rafael J. Wysocki
2007-07-29 21:18                                       ` Adrian Bunk
2007-07-29 21:18                                         ` Adrian Bunk
2007-07-29 21:36                                         ` Rafael J. Wysocki
2007-07-29 21:36                                           ` Rafael J. Wysocki
2007-07-29 21:30                                           ` Richard Hughes
2007-07-29 21:30                                           ` Richard Hughes
2007-07-29 22:22                                             ` Rafael J. Wysocki
2007-07-30 21:26                                               ` Pavel Machek
2007-07-30 21:26                                               ` Pavel Machek
2007-07-29 22:22                                             ` Rafael J. Wysocki
2007-07-30  2:47                                             ` Kyle Moffett
2007-07-30  2:47                                             ` Kyle Moffett
2007-07-29 21:36                                         ` Rafael J. Wysocki
2007-07-29 21:18                                       ` Adrian Bunk
2007-07-29 21:17                                     ` Rafael J. Wysocki
2007-07-29 21:23                                 ` [PATCH 0/2] Introduce CONFIG_HIBERNATION and CONFIG_SUSPEND (updated) Rafael J. Wysocki
2007-07-29 21:23                                 ` Rafael J. Wysocki
2007-07-29 21:24                                   ` [PATCH 1/2] Replace CONFIG_SOFTWARE_SUSPEND with CONFIG_HIBERNATION (updated) Rafael J. Wysocki
2007-07-29 21:24                                   ` Rafael J. Wysocki
2007-07-29 21:27                                   ` [PATCH 2/2] Introduce CONFIG_SUSPEND (updated) Rafael J. Wysocki
2007-07-31  4:59                                     ` Len Brown
2007-07-31  4:59                                       ` Len Brown
2007-07-31  9:15                                       ` Rafael J. Wysocki
2007-07-31  9:16                                         ` [linux-pm] " Oliver Neukum
2007-07-31 10:01                                           ` Rafael J. Wysocki
2007-07-31 10:01                                           ` [linux-pm] " Rafael J. Wysocki
2007-07-31  9:16                                         ` Oliver Neukum
2007-07-31  9:15                                       ` Rafael J. Wysocki
2007-07-29 21:27                                   ` Rafael J. Wysocki
2007-07-30  0:21                                   ` [PATCH 0/2] Introduce CONFIG_HIBERNATION and " Linus Torvalds
2007-07-30  0:21                                     ` Linus Torvalds
2007-07-30  7:25                                     ` Rafael J. Wysocki
2007-07-30  7:25                                     ` Rafael J. Wysocki
2007-07-31  3:54                                     ` Len Brown
2007-07-31  3:54                                     ` Len Brown
2007-07-31  3:54                                     ` [PATCH] create CONFIG_SUSPEND_UP_POSSIBLE Len Brown
2007-07-31  3:54                                     ` Len Brown
2007-07-31  6:38                                       ` Pavel Machek
2007-07-31  6:38                                       ` Pavel Machek
2007-07-31  9:33                                         ` Rafael J. Wysocki
2007-07-31  9:33                                         ` Rafael J. Wysocki
2007-08-03 19:23                                         ` Len Brown
2007-08-03 19:23                                         ` Len Brown
2007-08-05 18:36                                           ` Pavel Machek
2007-08-05 18:36                                           ` Pavel Machek
2007-08-01  3:27                                     ` [PATCH] ACPI: delete CONFIG_ACPI_PROCFS_SLEEP (again) Len Brown
2007-08-01  3:27                                       ` Len Brown
2007-08-01 10:24                                       ` Rafael J. Wysocki
2007-08-01 10:24                                       ` Rafael J. Wysocki
2007-07-29 10:20                               ` [PATCH 0/2] Introduce CONFIG_HIBERNATION and CONFIG_SUSPEND (was: CONFIG_SUSPEND?) Rafael J. Wysocki
2007-07-31  3:53                           ` CONFIG_SUSPEND? (was: Re: [GIT PATCH] ACPI patches for 2.6.23-rc1) Len Brown
2007-07-31  4:09                             ` david
2007-07-31  6:33                               ` Pavel Machek
2007-07-26 10:07         ` [GIT PATCH] ACPI patches for 2.6.23-rc1 Gabriel C
2007-07-26 18:05           ` Len Brown
2007-07-26 18:18             ` Linus Torvalds
2007-07-26 18:38             ` Gabriel C
2007-07-26 18:53             ` defconfig , ACPI=n compile error Gabriel C
2007-07-26  7:02     ` [GIT PATCH] ACPI patches for 2.6.23-rc1 Linus Torvalds
2007-07-27  6:26 ` Jan Dittmer
2007-07-27 16:25   ` Thomas Renninger
2007-07-27 23:07     ` Adrian Bunk
2007-07-27 23:07       ` Adrian Bunk
2007-07-27 23:41       ` Andreas Schwab
2007-07-27 23:41         ` Andreas Schwab
     [not found]       ` <617E1C2C70743745A92448908E030B2A0209BB9D@scsmsx411.amr.corp.intel.com>
2007-07-28  1:39         ` scripts/mod/file2alias.c cross compile problem Adrian Bunk
2007-07-28  1:39           ` Adrian Bunk
2007-08-02 15:09           ` Thomas Renninger
2007-08-02 15:09             ` Thomas Renninger
2007-08-02 16:25             ` Luck, Tony
2007-08-02 16:25               ` Luck, Tony
2007-08-02 16:25               ` Luck, Tony
2007-08-02 16:36               ` Andreas Schwab
2007-08-02 16:36                 ` Andreas Schwab
2007-08-02 16:36                 ` Andreas Schwab
2007-08-02 17:40                 ` Luck, Tony
2007-08-02 17:40                   ` Luck, Tony
2007-08-02 17:40                   ` Luck, Tony
2007-08-02 18:09                   ` Sam Ravnborg
2007-08-02 18:09                     ` Sam Ravnborg
2007-08-02 19:15                     ` Adrian Bunk
2007-08-02 19:15                       ` Adrian Bunk
2007-08-02 19:24                       ` Sam Ravnborg
2007-08-02 19:24                         ` Sam Ravnborg
2007-08-02 19:39                         ` Al Viro
2007-08-02 19:39                           ` Al Viro
2007-08-02 22:08               ` Rusty Russell
2007-08-02 22:08                 ` Rusty Russell
2007-08-02 23:03                 ` Adrian Bunk
2007-08-02 23:03                   ` Adrian Bunk
2007-08-16 14:27                 ` Thomas Renninger
2007-08-16 14:27                   ` Thomas Renninger
2007-08-16 16:26                   ` Luck, Tony
2007-08-16 16:26                     ` Luck, Tony
2007-08-16 16:26                     ` Luck, Tony
2007-08-16 17:03                     ` Thomas Renninger
2007-08-16 17:03                       ` Thomas Renninger
2007-07-27 23:50   ` [GIT PATCH] ACPI patches for 2.6.23-rc1 Andreas Schwab
2007-07-27 23:50     ` Andreas Schwab
2007-07-28  7:58     ` Jan Dittmer
2007-08-01  1:34       ` Yasha Okshtein

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=20070728045247.GF15129@stusta.de \
    --to=bunk@stusta.de \
    --cc=akpm@linux-foundation.org \
    --cc=david@lang.hm \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pavel@ucw.cz \
    --cc=rjw@sisk.pl \
    --cc=stefanr@s5r6.in-berlin.de \
    --cc=torvalds@linux-foundation.org \
    /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.