xen: cpupool: fix shutdown with cpupools with different schedulers
PATCH 1/1 xen: cpupool: fix shutdown with cpupools with different schedulers
trying to shutdown the host when a cpupool exists, has pCPUs, and has a scheduler different than the Xen's default one, produces this:
root@Zhaman:~# xl cpupool-cpu-remove Pool-0 8 root@Zhaman:~# xl cpupool-create name=\"Pool-1\" sched=\"credit2\" Using config file "command line" cpupool name: Pool-1 scheduler: credit2 number of cpus: 0 root@Zhaman:~# xl cpupool-cpu-add Pool-1 8 root@Zhaman:~# shutdown -h now
(XEN) ----[ Xen-4.6-unstable x86_64 debug=y Not tainted ]----
(XEN) CPU: 0
(XEN) RIP: e008:[<ffff82d080133bdf>] kill_timer+0x56/0x298
(XEN) RFLAGS: 0000000000010002 CONTEXT: hypervisor
... ... ...
(XEN) Xen call trace:
(XEN) [<ffff82d080133bdf>] kill_timer+0x56/0x298 (XEN) [<ffff82d08012233f>] csched_free_pdata+0x9b/0xcf (XEN) [<ffff82d08012c30c>] cpu_schedule_callback+0x64/0x8b (XEN) [<ffff82d08011bc7a>] notifier_call_chain+0x67/0x87 (XEN) [<ffff82d08010153e>] cpu_down+0xd9/0x12c (XEN) [<ffff82d080101744>] disable_nonboot_cpus+0x93/0x138 (XEN) [<ffff82d0801aa6e7>] enter_state_helper+0xbd/0x365 (XEN) [<ffff82d0801061e5>] continue_hypercall_tasklet_handler+0x4a/0xb1 (XEN) [<ffff82d080132387>] do_tasklet_work+0x78/0xab (XEN) [<ffff82d0801326bd>] do_tasklet+0x5e/0x8a (XEN) [<ffff82d0801646d2>] idle_loop+0x56/0x6b
... ... ...
(XEN) ****************************************
(XEN) Panic on CPU 0:
(XEN) FATAL PAGE FAULT
(XEN) [error_code=0000]
(XEN) Faulting linear address: 0000000000000041
(XEN) ****************************************
The fix is, when tearing down a pCPU, call the free_pdata() hook from the scheduler of the cpupool the pCPU belongs to, not always the one from the default scheduler.
---
Cc: Juergen Gross <[email protected]>
Cc: George Dunlap <[email protected]>
Cc: Jan Beulich <[email protected]>
Cc: Tim Deegan <[email protected]>
Cc: Keir Fraser <[email protected]>
--- xen/common/schedule.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
xen/common/schedule.c +2 -1
@@ -1303,9 +1303,10 @@ static int cpu_schedule_up(unsigned int cpu)static void cpu_schedule_down (unsigned int cpu) {struct schedule_data *sd = &per_cpu (schedule_data, cpu); +struct scheduler *sched =per_cpu (scheduler, cpu);if ( sd->sched_priv !=NULL ) -SCHED_OP (&ops, free_pdata, sd->sched_priv, cpu); +SCHED_OP (sched, free_pdata, sd->sched_priv, cpu);kill_timer (&sd->s_timer); }
Quoted 38 lines · Dario Faggioli
trying to shutdown the host when a cpupool exists, has pCPUs, and has a scheduler different than the Xen's default one, produces this:
root@Zhaman:~# xl cpupool-cpu-remove Pool-0 8 root@Zhaman:~# xl cpupool-create name=\"Pool-1\" sched=\"credit2\" Using config file "command line" cpupool name: Pool-1 scheduler: credit2 number of cpus: 0 root@Zhaman:~# xl cpupool-cpu-add Pool-1 8 root@Zhaman:~# shutdown -h now(XEN) ----[ Xen-4.6-unstable
x86_64debug=y Not tainted ]----
(XEN) CPU: 0
(XEN) RIP: e008:[<ffff82d080133bdf>]kill_timer+0x56/0x298
(XEN) RFLAGS: 0000000000010002 CONTEXT: hypervisor
... ... ...
(XEN) Xen call trace:(XEN) [<ffff82d080133bdf>] kill_timer+0x56/0x298 (XEN) [<ffff82d08012233f>] csched_free_pdata+0x9b/0xcf (XEN) [<ffff82d08012c30c>] cpu_schedule_callback+0x64/0x8b (XEN) [<ffff82d08011bc7a>] notifier_call_chain+0x67/0x87 (XEN) [<ffff82d08010153e>] cpu_down+0xd9/0x12c (XEN) [<ffff82d080101744>] disable_nonboot_cpus+0x93/0x138 (XEN) [<ffff82d0801aa6e7>] enter_state_helper+0xbd/0x365 (XEN) [<ffff82d0801061e5>] continue_hypercall_tasklet_handler+0x4a/0xb1 (XEN) [<ffff82d080132387>] do_tasklet_work+0x78/0xab (XEN) [<ffff82d0801326bd>] do_tasklet+0x5e/0x8a (XEN) [<ffff82d0801646d2>] idle_loop+0x56/0x6b... ... ...
(XEN) ****************************************
(XEN) Panic on CPU 0:
(XEN) FATAL PAGE FAULT
(XEN) [error_code=0000]
(XEN) Faulting linear address: 0000000000000041
(XEN) ****************************************
Quoted 5 lines
The fix is, when tearing down a pCPU, call the
free_pdata()hook from the scheduler of the cpupool the pCPU belongs to, not always the one from the default scheduler.Signed-off-by Dario Faggioli <[email protected]>
Quoted 34 lines
---
Cc: Juergen Gross <[email protected]>
Cc: George Dunlap <[email protected]>
Cc: Jan Beulich <[email protected]>
Cc: Tim Deegan <[email protected]>
Cc: Keir Fraser <[email protected]>--- xen/common/schedule.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)xen/common/schedule.c +2
-1@@ -1303,9 +1303,10 @@ static int cpu_schedule_up(unsigned int cpu)static void cpu_schedule_down (unsigned int cpu) {struct schedule_data *sd = &per_cpu (schedule_data, cpu); +struct scheduler *sched =per_cpu (scheduler, cpu);if ( sd->sched_priv !=NULL ) -SCHED_OP (&ops, free_pdata, sd->sched_priv, cpu); +SCHED_OP (sched, free_pdata, sd->sched_priv, cpu);kill_timer (&sd->s_timer); }_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xen.org/xen-devel
Quoted 38 lines · Dario Faggioli
trying to shutdown the host when a cpupool exists, has pCPUs, and has a scheduler different than the Xen's default one, produces this:
root@Zhaman:~# xl cpupool-cpu-remove Pool-0 8 root@Zhaman:~# xl cpupool-create name=\"Pool-1\" sched=\"credit2\" Using config file "command line" cpupool name: Pool-1 scheduler: credit2 number of cpus: 0 root@Zhaman:~# xl cpupool-cpu-add Pool-1 8 root@Zhaman:~# shutdown -h now(XEN) ----[ Xen-4.6-unstable
x86_64debug=y Not tainted ]----
(XEN) CPU: 0
(XEN) RIP: e008:[<ffff82d080133bdf>]kill_timer+0x56/0x298
(XEN) RFLAGS: 0000000000010002 CONTEXT: hypervisor
... ... ...
(XEN) Xen call trace:(XEN) [<ffff82d080133bdf>] kill_timer+0x56/0x298 (XEN) [<ffff82d08012233f>] csched_free_pdata+0x9b/0xcf (XEN) [<ffff82d08012c30c>] cpu_schedule_callback+0x64/0x8b (XEN) [<ffff82d08011bc7a>] notifier_call_chain+0x67/0x87 (XEN) [<ffff82d08010153e>] cpu_down+0xd9/0x12c (XEN) [<ffff82d080101744>] disable_nonboot_cpus+0x93/0x138 (XEN) [<ffff82d0801aa6e7>] enter_state_helper+0xbd/0x365 (XEN) [<ffff82d0801061e5>] continue_hypercall_tasklet_handler+0x4a/0xb1 (XEN) [<ffff82d080132387>] do_tasklet_work+0x78/0xab (XEN) [<ffff82d0801326bd>] do_tasklet+0x5e/0x8a (XEN) [<ffff82d0801646d2>] idle_loop+0x56/0x6b... ... ...
(XEN) **************************************** (XEN) Panic on CPU 0:
(XEN) FATAL PAGE FAULT
(XEN) [error_code=0000]
(XEN) Faulting linear address: 0000000000000041 (XEN) ****************************************
Quoted 5 lines
The fix is, when tearing down a pCPU, call the
free_pdata()hook from the scheduler of the cpupool the pCPU belongs to, not always the one from the default scheduler.Signed-off-by Dario Faggioli <[email protected]>