This series contains: - properly implement local external interrupts for TCG - factor out KVM SIGP handling code into common code - implement missing SIGP orders for TCG handled by the kernel for KVM (including STOP and RESTART interrupts) - make TCG use the new SIGP code - experimental SMP support for s390x TCG - refactor STFL(E) implementation for TCG - bunch of cleanups
Basically all SIGP instructions are fully supported. Thanks to Aurelien Jarno for the initital prototype and showcasing that supporting experimental SMP code can be implemented quite easily. TCG SMP on s390x - what works? - "-smp X,maxcpus=X" with both, single and multi threaded TCG - "-smp ... -device qemu-s390-cpu,id=cpuX,core-id=X" - system_powerdown, system_reset, shutdown, reboot, NMI - online/offline of CPUs from inside the guest TCG SMP on s390x - what does not work? - Floating interrupts all target CPU 0. Don't offline it. - CPU hotplug after the machine/main loop has been fully setup -- the new CPU comes up, answers and sends emergency signals, but suddenly the VM gets stuck. This is strange, as ordinary online/offline works just fine. -- can be triggered by "cpu-add 1" + "system_reset". The system will hang when trying to online CPUs. (note: in Linux code they are fully up and running and already executed code) -- also if hotplugging with "-S", before anything has run. This is strange, as "-device qemu-s390-cpu" works just fine. -- does not seem to be related to CPU setup/reset code, I checked that -- seems to be related to some TCG internals (as broken for single and multi threaded TCG). -- common code seems to be somehow broken, not sure if this is even expected to work (e.g. for single threaded TCG, hotplugged CPUs will never get set "cpu->created = true". But doesn't seem to be related to this) Based on: https://github.com/cohuck/qemu.git s390-next Available on: g...@github.com:davidhildenbrand/qemu.git s390x-queue David Hildenbrand (27): s390x: raise CPU hotplug irq after really hotplugged s390x/cpumodel: fix max STFL(E) bit number target/s390x: get rid of next_core_id s390x: introduce and use S390_MAX_CPUS s390/tcg: turn INTERRUPT_EXT into a mask s390x/tcg: injection of emergency signals and extarnal calls s390x/tcg: STOPPED cpus can never wake up s390x/tcg: a CPU cannot switch state due to an interrupt target/s390x: factor out handling of WAIT PSW into handle_wait() s390x/kvm: pass ipb directly into handle_sigp() s390x/kvm: generalize SIGP stop and restart interrupt injection s390x/kvm: factor out storing of CPU status target/s390x: proper cpu->be convertion in s390_store_status() s390x/kvm: factor out storing of adtl CPU status s390x/kvm: drop two debug prints s390x/kvm: factor out SIGP code into sigp.c s390x/kvm: factor out actual handling of STOP interrupts s390x/tcg: implement SIGP SENSE RUNNING STATUS s390x/tcg: implement SIGP SENSE s390x/tcg: implement SIGP EXTERNAL CALL s390x/tcg: implement SIGP EMERGENCY SIGNAL s390x/tcg: implement SIGP CONDITIONAL EMERGENCY SIGNAL s390x/tcg: implement STOP and RESET interrupts for TCG s390x/tcg: flush the tlb on SIGP SET PREFIX s390x/tcg: switch to new SIGP handling code s390x/tcg: unlock NMI s390x/tcg: refactor stfl(e) to use s390_get_feat_block() hw/s390x/s390-virtio-ccw.c | 17 +- target/s390x/Makefile.objs | 1 + target/s390x/cpu-qom.h | 2 - target/s390x/cpu.c | 40 ++-- target/s390x/cpu.h | 36 +++- target/s390x/cpu_features.c | 2 +- target/s390x/cpu_models.c | 2 + target/s390x/excp_helper.c | 98 ++++++--- target/s390x/helper.c | 115 ++++++++-- target/s390x/helper.h | 4 +- target/s390x/internal.h | 15 ++ target/s390x/interrupt.c | 70 +++++- target/s390x/kvm-stub.c | 13 +- target/s390x/kvm.c | 470 +++-------------------------------------- target/s390x/kvm_s390x.h | 3 +- target/s390x/misc_helper.c | 114 ++++------ target/s390x/sigp.c | 504 ++++++++++++++++++++++++++++++++++++++++++++ target/s390x/trace-events | 4 +- target/s390x/translate.c | 6 +- 19 files changed, 896 insertions(+), 620 deletions(-) create mode 100644 target/s390x/sigp.c -- 2.13.5