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

KAMEZAWA Hiroyuki
2008-11-06T01:54:53Z

On Thu, 06 Nov 2008 12:43:07 +1100
Nigel Cunningham <ncunningham@crca.org.au> wrote:

> Hi.
>
> On Thu, 2008-11-06 at 10:17 +0900, KAMEZAWA Hiroyuki wrote:
> > On Thu, 6 Nov 2008 09:14:41 +0900
> > KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> wrote:
> >
> > > Ok, please consider "when memory hotplug happens."
> > >
> > > In general, it happens when
> > > 1. memory is inserted to slot.
> > > 2. the firmware notifes the system to enable already inserted memory.
> > >
> > > To trigger "1", you have to open cover of server/pc. Do you open pc while the system
> > > starts hibernation ? for usual people, no.
> > >
> > > To trigger "2", the user have special console to tell firmware "enable this memory".
> > > Such firmware console or users have to know "the system works well." And, more important,
> > > when the system is suspended, the firmware can't do hotplug because the kernel is sleeping.
> > > So, such firmware console or operator have to know the system status.
> > >
> > > Am I missing some ? Current linux can know PCI/USB hotplug while the system is suspended ?
> > >
> > *OFFTOPIC*
> >
> > I hear following answer from my friend.
> >
> > - hibernate the system
> > => plug USB memory
> > => wake up the system
> > => panic.
> > - hibernate the system
> > => unplug USB memory
> > => wake up the sytem
> > => panic.
>
> We currently check that the number of physical pages is the same when
> starting to load the image, so neither of these issues cause real
> problems.
>
Hmm? this doesn't come from lost of hotplug interrupt ?
the memory plugged while the system is sleeping can be recognized when the system wakes up ?

My point is the firmware/operator has to know "the system is sleeping or not" to do *any* hotplug.
(I'm not sure but removing a cpu while the system is under hibernation may cause panic, too.)
In my point of view, this is operator's problem, not hibernation's.

If you want to fix the small race really, please add(or export) some mutex or notifier. like

NOTIFY_HIBERNATION_START
NOTIFY_HIBERNATION_END
NOTIFY_HIBERNATION_RESUME

other pepole will make use of this.
I think __add_memory called by interrupt can be executed in some kernel thread.

Thanks,
-Kame