From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeremy Fitzhardinge Subject: Re: pv 2.6.31 (kernel.org) and save/migrate fails, domU BUG Date: Wed, 25 Nov 2009 11:28:20 -0800 Message-ID: <4B0D8554.3010103@goop.org> References: <20091108154153.GM1434@reaktio.net> <693ea516-aa5b-4f82-ad48-1bd51cfa3480@default> <20091108172747.GR1434@reaktio.net> <20091110100806.GE16033@reaktio.net> <4AFC9BFF.9030707@goop.org> <1259072824.7590.389.camel@zakaz.uk.xensource.com> <1259158328.7590.539.camel@zakaz.uk.xensource.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1259158328.7590.539.camel@zakaz.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Ian Campbell Cc: "Rafael J. Wysocki" , Dan Magenheimer , "Xen-Devel (E-mail)" , Thomas Gleixner List-Id: xen-devel@lists.xenproject.org On 11/25/09 06:12, Ian Campbell wrote: > tick_resume() is never called on secondary processors. Presumably this > is because they are offlined for suspend on native and so this is > normally taken care of in the CPU onlining path. Under Xen we keep all > CPUs online over a suspend. > > This patch papers over the issue for me but I will investigate a more > generic, less hacky, way of doing to the same. > > tick_suspend is also only called on the boot CPU which I presume should > be fixed too. > Yep. I wonder how it ever worked? There's been a fair amount of change in the PM code, so that could have changed things. I don't know if there's a deep reason for not calling tick_resume() on all processors. Rafael, tglx: suspend/resume under Xen doesn't need to hot unplug all the CPUs, so we don't; the hypervisor can manage the context save/restore for all CPUs. Is there a deep reason why timekeeping_resume() can't call the CLOCK_EVT_NOTIFY_RESUME notifier on all online CPUs? > void xen_arch_resume(void) > { > - /* nothing */ > + smp_call_function_many(cpu_online_mask, xen_vcpu_notify_restore, > + (void *)CLOCK_EVT_NOTIFY_RESUME, 1); > } > This is equivalent to smp_call_function(). J