Re: [linux-pm] [PATCH] hibernation should work ok with memoryhotplug

From: KAMEZAWA Hiroyuki
Date: Tue Nov 04 2008 - 19:39:27 EST


On Tue, 04 Nov 2008 08:59:05 -0800
Dave Hansen <dave@xxxxxxxxxxxxxxxxxx> wrote:

> On Tue, 2008-11-04 at 17:34 +0100, Rafael J. Wysocki wrote:
> > Now, I need to do one more thing, which is to check how much memory has to be
> > freed before creating the image. For this purpose I need to lock memory
> > hotplug temporarily, count pages to free and unlock it. What interface should
> > I use for this purpose?
> >
> > [I'll also need to lock memory hotplug temporarily during resume.]
>
> We currently don't have any big switch to disable memory hotplug, like
> lock_memory_hotplug() or something. :)
>
> If you are simply scanning and counting pages, I think the best thing to
> use would be the zone_span_seq*() seqlock stuff. Do your count inside
> the seqlock's while loop. That covers detecting a zone changing while
> it is being scanned.
>
> The other case to detect is when a new zone gets added. These are
> really rare. Rare enough that we actually use a stop_machine() call in
> build_all_zonelists() to do it. All you would have to do is detect when
> one of these calls gets made. I think that's a good application for a
> new seq_lock.
>
> I've attached an utterly untested patch that should do the trick.
> Yasunori and KAME should probably take a look at it since the node
> addition code is theirs.
>

Hmm ? I think there is no real requirement for doing hibernation while
memory is under hotplug.

Assume following.
- memory hotplug can be triggerred by
1. interrupt from system.
2. "probe" interface in sysfs.
- ONLINE/OFFLINE is only trigerred by sysfs interface.

I believe we can't block "1", but "1" cannot be raised while hibernation.
(If it happens, it's mistake of the firmware.)

"probe" interface can be triggered from userland. Then it may be worth to be
blocked. How about to add device_pm_lock() to following place ?

- /sys/device/system/memory/probe
- ONLINE
- OFFLINE



off-topic:
BTW, I hear hibernation can be done by kexec + kexec-tools.
If so, boot option for disabling memory hotplug is enough for us, isn't it ?
Or there is long way to make use of it in real world ?

Thanks,
-Kame
















> -- Dave
>

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/