Paolo, an early pull request containing mostly the protected virtualization guest support. Some remarks: 1.To avoid conflicts I would rather add this early. We do have in KVM common code: - a new capability KVM_CAP_S390_PROTECTED = 180 - a new ioctl KVM_S390_PV_COMMAND = _IOWR(KVMIO, 0xc5, struct kvm_pv_cmd) - data structures for KVM_S390_PV_COMMAND - new MEMOP ioctl subfunctions - new files under Documentation - additions to api.rst 4.125 KVM_S390_PV_COMMAND 2. There is an mm patch in Andrews mm tree which is needed for full functionality. The patch is not necessary to build KVM or to run non protected KVM though. So this can go independently. 3. I created a topic branch for the non-kvm s390x parts that I merged in. Vasily, Heiko or myself will pull that into the s390 tree if there will be a conflict. The following changes since commit 11a48a5a18c63fd7621bb050228cebf13566e4d8: Linux 5.6-rc2 (2020-02-16 13:16:59 -0800) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux.git tags/kvm-s390-next-5.7-1 for you to fetch changes up to cc674ef252f4750bdcea1560ff491081bb960954: KVM: s390: introduce module parameter kvm.use_gisa (2020-02-27 19:47:13 +0100) ---------------------------------------------------------------- KVM: s390: Features and Enhancements for 5.7 part1 1. Allow to disable gisa 2. protected virtual machines Protected VMs (PVM) are KVM VMs, where KVM can't access the VM's state like guest memory and guest registers anymore. Instead the PVMs are mostly managed by a new entity called Ultravisor (UV), which provides an API, so KVM and the PV can request management actions. PVMs are encrypted at rest and protected from hypervisor access while running. They switch from a normal operation into protected mode, so we can still use the standard boot process to load a encrypted blob and then move it into protected mode. Rebooting is only possible by passing through the unprotected/normal mode and switching to protected again. One mm related patch will go via Andrews mm tree ( mm/gup/writeback: add callbacks for inaccessible pages) ---------------------------------------------------------------- Christian Borntraeger (5): Merge branch 'pvbase' of git://git.kernel.org/.../kvms390/linux into HEAD KVM: s390/mm: Make pages accessible before destroying the guest KVM: s390: protvirt: Add SCLP interrupt handling KVM: s390: protvirt: do not inject interrupts after start KVM: s390: protvirt: introduce and enable KVM_CAP_S390_PROTECTED Claudio Imbrenda (2): s390/mm: provide memory management functions for protected KVM guests KVM: s390/mm: handle guest unpin events Janosch Frank (24): s390/protvirt: Add sysfs firmware interface for Ultravisor information KVM: s390: protvirt: Add UV debug trace KVM: s390: add new variants of UV CALL KVM: s390: protvirt: Add initial vm and cpu lifecycle handling KVM: s390: protvirt: Secure memory is not mergeable KVM: s390: protvirt: Handle SE notification interceptions KVM: s390: protvirt: Instruction emulation KVM: s390: protvirt: Handle spec exception loops KVM: s390: protvirt: Add new gprs location handling KVM: S390: protvirt: Introduce instruction data area bounce buffer KVM: s390: protvirt: handle secure guest prefix pages KVM: s390: protvirt: Write sthyi data to instruction data area KVM: s390: protvirt: STSI handling KVM: s390: protvirt: disallow one_reg KVM: s390: protvirt: Do only reset registers that are accessible KVM: s390: protvirt: Only sync fmt4 registers KVM: s390: protvirt: Add program exception injection KVM: s390: protvirt: UV calls in support of diag308 0, 1 KVM: s390: protvirt: Report CPU state to Ultravisor KVM: s390: protvirt: Support cmd 5 operation state KVM: s390: protvirt: Mask PSW interrupt bits for interception 104 and 112 KVM: s390: protvirt: Add UV cpu reset calls DOCUMENTATION: Protected virtual machine introduction and IPL KVM: s390: protvirt: Add KVM api documentation Michael Mueller (2): KVM: s390: protvirt: Implement interrupt injection KVM: s390: introduce module parameter kvm.use_gisa Ulrich Weigand (1): KVM: s390/interrupt: do not pin adapter interrupt pages Vasily Gorbik (3): s390/protvirt: introduce host side setup s390/protvirt: add ultravisor initialization s390/mm: add (non)secure page access exceptions handlers Documentation/admin-guide/kernel-parameters.txt | 5 + Documentation/virt/kvm/api.rst | 65 ++- Documentation/virt/kvm/devices/s390_flic.rst | 11 +- Documentation/virt/kvm/index.rst | 2 + Documentation/virt/kvm/s390-pv-boot.rst | 84 ++++ Documentation/virt/kvm/s390-pv.rst | 116 +++++ MAINTAINERS | 1 + arch/s390/boot/Makefile | 2 +- arch/s390/boot/uv.c | 20 + arch/s390/include/asm/gmap.h | 6 + arch/s390/include/asm/kvm_host.h | 113 ++++- arch/s390/include/asm/mmu.h | 2 + arch/s390/include/asm/mmu_context.h | 1 + arch/s390/include/asm/page.h | 5 + arch/s390/include/asm/pgtable.h | 35 +- arch/s390/include/asm/uv.h | 251 ++++++++++- arch/s390/kernel/Makefile | 1 + arch/s390/kernel/entry.h | 2 + arch/s390/kernel/pgm_check.S | 4 +- arch/s390/kernel/setup.c | 9 +- arch/s390/kernel/uv.c | 414 +++++++++++++++++ arch/s390/kvm/Makefile | 2 +- arch/s390/kvm/diag.c | 6 +- arch/s390/kvm/intercept.c | 122 ++++- arch/s390/kvm/interrupt.c | 399 ++++++++++------- arch/s390/kvm/kvm-s390.c | 567 +++++++++++++++++++++--- arch/s390/kvm/kvm-s390.h | 51 ++- arch/s390/kvm/priv.c | 13 +- arch/s390/kvm/pv.c | 303 +++++++++++++ arch/s390/mm/fault.c | 78 ++++ arch/s390/mm/gmap.c | 65 ++- include/uapi/linux/kvm.h | 43 +- 32 files changed, 2488 insertions(+), 310 deletions(-) create mode 100644 Documentation/virt/kvm/s390-pv-boot.rst create mode 100644 Documentation/virt/kvm/s390-pv.rst create mode 100644 arch/s390/kernel/uv.c create mode 100644 arch/s390/kvm/pv.c