When CONFIG_PREEMPT is enabled, Linux will not be able to boot and warn: [ 4.127825] ------------[ cut here ]------------ [ 4.133376] WARNING: at init/main.c:699 do_one_initcall+0x150/0x158() [ 4.140738] initcall xen_init_events+0x0/0x10c returned with preemption imbalance This is because xen_percpu_init uses get_cpu but doesn''t have the corresponding put_cpu. Signed-off-by: Julien Grall <julien.grall@linaro.org> --- arch/arm/xen/enlighten.c | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c index f71c37e..dc9f284 100644 --- a/arch/arm/xen/enlighten.c +++ b/arch/arm/xen/enlighten.c @@ -170,6 +170,7 @@ static void __init xen_percpu_init(void *unused) per_cpu(xen_vcpu, cpu) = vcpup; enable_percpu_irq(xen_events_irq, 0); + put_cpu(); } static void xen_restart(char str, const char *cmd) -- 1.7.10.4
Stefano Stabellini
2013-Aug-02 17:18 UTC
Re: [PATCH] xen/arm: missing put_cpu in xen_percpu_init
On Mon, 29 Jul 2013, Julien Grall wrote:> When CONFIG_PREEMPT is enabled, Linux will not be able to boot and warn: > [ 4.127825] ------------[ cut here ]------------ > [ 4.133376] WARNING: at init/main.c:699 do_one_initcall+0x150/0x158() > [ 4.140738] initcall xen_init_events+0x0/0x10c returned with preemption imbalance > > This is because xen_percpu_init uses get_cpu but doesn''t have the corresponding > put_cpu. > > Signed-off-by: Julien Grall <julien.grall@linaro.org>Ops. Thanks for catching the bug. I''ll add this to my queue.> arch/arm/xen/enlighten.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c > index f71c37e..dc9f284 100644 > --- a/arch/arm/xen/enlighten.c > +++ b/arch/arm/xen/enlighten.c > @@ -170,6 +170,7 @@ static void __init xen_percpu_init(void *unused) > per_cpu(xen_vcpu, cpu) = vcpup; > > enable_percpu_irq(xen_events_irq, 0); > + put_cpu(); > } > > static void xen_restart(char str, const char *cmd) > -- > 1.7.10.4 >