Most of the QEMU changes for PV are related to the new IPL type with subcodes 8 - 10 and the execution of the necessary Ultravisor calls to IPL secure guests. Note that we can only boot into secure mode from normal mode, i.e. stfle 161 is not active in secure mode.
The other changes related to data gathering for emulation and disabling addressing checks in secure mode, as well as CPU resets. While working on this I sprinkled in some cleanups, as we sometimes significantly increase line count of some functions and they got unreadable. Janosch Frank (15): s390x: Cleanup cpu resets s390x: Beautify diag308 handling s390x: protvirt: Add diag308 subcodes 8 - 10 Header sync protvirt s390x: protvirt: Sync PV state s390x: protvirt: Support unpack facility s390x: protvirt: Handle diag 308 subcodes 0,1,3,4 s390x: protvirt: KVM intercept changes s390x: protvirt: SCLP interpretation s390x: protvirt: Add new VCPU reset functions RFC: s390x: Exit on vcpu reset error s390x: protvirt: Set guest IPL PSW s390x: protvirt: Move diag 308 data over SIDAD s390x: protvirt: Disable address checks for PV guest IO emulation s390x: protvirt: Handle SIGP store status correctly hw/s390x/Makefile.objs | 1 + hw/s390x/ipl.c | 81 +++++++++++++++++- hw/s390x/ipl.h | 35 ++++++++ hw/s390x/pv.c | 123 +++++++++++++++++++++++++++ hw/s390x/pv.h | 27 ++++++ hw/s390x/s390-virtio-ccw.c | 79 ++++++++++++++--- hw/s390x/sclp.c | 16 ++++ include/hw/s390x/sclp.h | 2 + linux-headers/asm-s390/kvm.h | 4 +- linux-headers/linux/kvm.h | 43 ++++++++++ target/s390x/cpu.c | 127 ++++++++++++++-------------- target/s390x/cpu.h | 1 + target/s390x/cpu_features_def.inc.h | 1 + target/s390x/diag.c | 108 +++++++++++++++++------ target/s390x/ioinst.c | 46 ++++++---- target/s390x/kvm-stub.c | 10 ++- target/s390x/kvm.c | 58 +++++++++++-- target/s390x/kvm_s390x.h | 4 +- target/s390x/sigp.c | 7 +- 19 files changed, 640 insertions(+), 133 deletions(-) create mode 100644 hw/s390x/pv.c create mode 100644 hw/s390x/pv.h -- 2.20.1