Re: [KVMTOOL][PATCH] Handle KVM_EXIT_SYSTEM_EVENT on any VCPU

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Sep 2, 2015 at 11:50 AM, Mark Rutland <mark.rutland@xxxxxxx> wrote:
>
> When VCPU #0 exits (e.g. due to KVM_EXIT_SYSTEM_EVENT), it sends
> SIGKVMEXIT to all other VCPUs, waits for them to exit, then tears down
> any remaining context. The signalling of SIGKVMEXIT is critical to
> forcing VCPUs to shut down in response to a system event (e.g. PSCI
> SYSTEM_OFF).
>
> VCPUs other that VCPU #0 simply exit in kvm_cpu_thread without forcing
> other CPUs to shut down. Thus if a system event is taken on a VCPU other
> than VCPU #0, the remaining CPUs are left online. This results in KVM
> tool not exiting as expected when a system event is taken on a VCPU
> other than VCPU #0 (as may happen if the guest panics).
>
> Fix this by signalling SIGKVMEXIT to VCPU #0 when a system event is
> taken on other CPUs, so that it may tear things down as usual.
>
> Signed-off-by: Mark Rutland <mark.rutland@xxxxxxx>
> Cc: Will Deacon <will.deacon@xxxxxxx>
> Cc: Marc Zyngier <marc.zyngier@xxxxxxx>
> ---
>  kvm-cpu.c | 15 +++++++++++----
>  1 file changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/kvm-cpu.c b/kvm-cpu.c
> index 5d90664..f47e3db 100644
> --- a/kvm-cpu.c
> +++ b/kvm-cpu.c
> @@ -166,13 +166,20 @@ int kvm_cpu__start(struct kvm_cpu *cpu)
>                          * treat all system events as shutdown request.
>                          */
>                         switch (cpu->kvm_run->system_event.type) {
> -                       case KVM_SYSTEM_EVENT_RESET:
> -                               /* Fall through for now */
> -                       case KVM_SYSTEM_EVENT_SHUTDOWN:
> -                               goto exit_kvm;
>                         default:
>                                 pr_warning("unknown system event type %d",
>                                            cpu->kvm_run->system_event.type);
> +                               /* fall through for now */
> +                       case KVM_SYSTEM_EVENT_RESET:
> +                               /* Fall through for now */
> +                       case KVM_SYSTEM_EVENT_SHUTDOWN:
> +                               /*
> +                                * Ensure that VCPU #0 tears everything down if
> +                                * the event was taken on a different VCPU.
> +                                */
> +                               if (cpu->cpu_id != 0)
> +                                       pthread_kill(cpu->kvm->cpus[0]->thread,
> +                                                    SIGKVMEXIT);

Could we use kvm_cpu__reboot() instead ?

That sends SIGKVMEXIT to all the VCPUs, and is used by the other
paths which trigger a reboot/shutdown.

Suzuki
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux