From: Juergen Gross <jgr...@suse.com> Instead of freeing percpu areas during suspend and allocating them again when resuming keep them. Only free an area in case a cpu didn't come up again when resuming.
It should be noted that there is a potential change in behaviour as the percpu areas are no longer zeroed out during suspend/resume. While I have checked the called cpu notifier hooks to cope with that there might be some well hidden dependency on the previous behaviour. OTOH a component not registering itself for cpu down/up and expecting to see a zeroed percpu variable after suspend/resume is kind of broken already. And the opposite case, where a component is not registered to be called for cpu down/up and is not expecting a percpu variable suddenly to be zero due to suspend/resume is much more probable, especially as the suspend/resume functionality seems not to be tested that often. Signed-off-by: Juergen Gross <jgr...@suse.com> Reviewed-by: Dario Faggioli <dfaggi...@suse.com> --- xen/arch/arm/percpu.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/xen/arch/arm/percpu.c b/xen/arch/arm/percpu.c index 25442c48fe..0642705544 100644 --- a/xen/arch/arm/percpu.c +++ b/xen/arch/arm/percpu.c @@ -58,10 +58,13 @@ static int cpu_percpu_callback( switch ( action ) { case CPU_UP_PREPARE: + if ( system_state != SYS_STATE_resume ) rc = init_percpu_area(cpu); break; case CPU_UP_CANCELED: case CPU_DEAD: + case CPU_RESUME_FAILED: + if ( system_state != SYS_STATE_suspend ) free_percpu_area(cpu); break; default: -- 2.37.1