]> git.proxmox.com Git - mirror_qemu.git/commit - target/s390x/diag.c
s390x: refactor reset/reipl handling
authorDavid Hildenbrand <david@redhat.com>
Tue, 24 Apr 2018 10:18:59 +0000 (12:18 +0200)
committerCornelia Huck <cohuck@redhat.com>
Mon, 14 May 2018 15:10:02 +0000 (17:10 +0200)
commita30fb811cbe940020a498d2cdac9326cac38b4d9
treef4284495670fe38f7923834ce42012bc56c35e9c
parent838fb84f83c84f00d15b1bede5e080b495644458
s390x: refactor reset/reipl handling

Calling pause_all_vcpus()/resume_all_vcpus() from a VCPU thread might
not be the best idea. As pause_all_vcpus() temporarily drops the qemu
mutex, two parallel calls to pause_all_vcpus() can be active at a time,
resulting in a deadlock. (either by two VCPUs or by the main thread and a
VCPU)

Let's handle it via the main loop instead, as suggested by Paolo. If we
would have two parallel reset requests by two different VCPUs at the
same time, the last one would win.

We use the existing ipl device to handle it. The nice side effect is
that we can get rid of reipl_requested.

This change implies that all reset handling now goes via the common
path, so "no-reboot" handling is now active for all kinds of reboots.

Let's execute any CPU initialization code on the target CPU using
run_on_cpu.

Signed-off-by: David Hildenbrand <david@redhat.com>
Message-Id: <20180424101859.10239-1-david@redhat.com>
Acked-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
hw/s390x/ipl.c
hw/s390x/ipl.h
hw/s390x/s390-virtio-ccw.c
include/hw/s390x/s390-virtio-ccw.h
target/s390x/cpu.h
target/s390x/diag.c
target/s390x/internal.h
target/s390x/kvm.c