lkml.org 
[lkml]   [2009]   [Nov]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: [PATCH] Allow memory hotplug and hibernation in the same kernel
Date
On Friday 13 November 2009, Andi Kleen wrote:
> Allow memory hotplug and hibernation in the same kernel
>
> Memory hotplug and hibernation was excluded in Kconfig. This is obviously
> a problem for distribution kernels who want to support both in the same
> image.
>
> After some discussions with Rafael and others the only problem is
> with parallel memory hotadd or removal while a hibernation operation
> is in process. It was also working for s390 before.
>
> This patch removes the Kconfig level exclusion, and simply
> makes the memory add / remove functions grab the pm_mutex
> to exclude against hibernation.
>
> This is a 2.6.32 candidate.
>
> Cc: gerald.schaefer@de.ibm.com
> Cc: rjw@sisk.pl
>
> Signed-off-by: Andi Kleen <ak@linux.intel.com>
>
> ---
> include/linux/suspend.h | 21 +++++++++++++++++++--
> mm/Kconfig | 5 +----
> mm/memory_hotplug.c | 21 +++++++++++++++++----
> 3 files changed, 37 insertions(+), 10 deletions(-)
>
> Index: linux-2.6.32-rc6-ak/include/linux/suspend.h
> ===================================================================
> --- linux-2.6.32-rc6-ak.orig/include/linux/suspend.h
> +++ linux-2.6.32-rc6-ak/include/linux/suspend.h
> @@ -301,6 +301,8 @@ static inline int unregister_pm_notifier
> #define pm_notifier(fn, pri) do { (void)(fn); } while (0)
> #endif /* !CONFIG_PM_SLEEP */
>
> +extern struct mutex pm_mutex;
> +
> #ifndef CONFIG_HIBERNATION
> static inline void register_nosave_region(unsigned long b, unsigned long e)
> {
> @@ -308,8 +310,23 @@ static inline void register_nosave_regio
> static inline void register_nosave_region_late(unsigned long b, unsigned long e)
> {
> }
> -#endif
>
> -extern struct mutex pm_mutex;
> +static inline void lock_hibernation(void) {}
> +static inline void unlock_hibernation(void) {}
> +
> +#else
> +
> +/* Let some subsystems like memory hotadd exclude hibernation */
> +
> +static inline void lock_hibernation(void)
> +{
> + mutex_lock(&pm_mutex);
> +}
> +
> +static inline void unlock_hibernation(void)
> +{
> + mutex_unlock(&pm_mutex);
> +}

This also is going to affect suspend to RAM, which kind of makes sense BTW,
so I'd not put it under the #ifdef. Also, the names should reflect the fact
that suspend is affected too. What about block|unblock_system_sleep()?

> +#endif
>
> #endif /* _LINUX_SUSPEND_H */

The rest of the patch is fine by me.

Thanks,
Rafael


\
 
 \ /
  Last update: 2009-11-13 21:17    [W:1.050 / U:0.140 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site