Skip to content

RFC KVM: s390: Add support for protected VMs

Janosch Frank kvm linux-s390 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 RFC Latest37 patches 160 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/37DOCUMENTATION: protvirt: Protected virtual machine introductionDocumentation/virtual/kvm/s390-pv.txt+23 -03 replies
2/37s390/protvirt: introduce host side setupDocumentation/admin-guide/kernel-parameters.txt arch/s390/boot/Makefile arch/s390/boot/uv.c +5 more+126 -915 replies
3/37s390/protvirt: add ultravisor initializationarch/s390/include/asm/uv.h arch/s390/kernel/setup.c arch/s390/kernel/uv.c+72 -06 replies
4/37KVM: s390: protvirt: Add initial lifecycle handlingarch/s390/include/asm/kvm_host.h arch/s390/include/asm/uv.h arch/s390/kvm/Makefile +4 more+622 -417 replies
5/37s390: KVM: Export PV handle to gmaparch/s390/include/asm/gmap.h arch/s390/kvm/pv.c+2 -01 reply
6/37s390: UV: Add import and export to UV libraryarch/s390/include/asm/uv.h+51 -010 replies
7/37KVM: s390: protvirt: Secure memory is not mergeablearch/s390/include/asm/gmap.h arch/s390/kvm/kvm-s390.c arch/s390/mm/gmap.c+25 -1014 replies
8/37KVM: s390: add missing include in gmap.harch/s390/include/asm/gmap.h+1 -02 replies
9/37KVM: s390: protvirt: Implement on-demand pinningarch/s390/include/asm/gmap.h arch/s390/include/asm/uv.h arch/s390/kernel/uv.c +2 more+72 -818 replies
10/37s390: add (non)secure page access exceptions handlersarch/s390/kernel/pgm_check.S arch/s390/mm/fault.c+66 -20 replies
11/37DOCUMENTATION: protvirt: Interrupt injectionDocumentation/virtual/kvm/s390-pv.txt+27 -04 replies
12/37KVM: s390: protvirt: Handle SE notification interceptionsarch/s390/include/asm/kvm_host.h arch/s390/kvm/intercept.c+20 -05 replies
13/37KVM: s390: protvirt: Add interruption injection controlsarch/s390/include/asm/kvm_host.h+21 -47 replies
14/37KVM: s390: protvirt: Implement interruption injectionarch/s390/include/asm/kvm_host.h arch/s390/kvm/interrupt.c+149 -434 replies
15/37KVM: s390: protvirt: Add machine-check interruption injection controlsarch/s390/include/asm/kvm_host.h+24 -92 replies
16/37KVM: s390: protvirt: Implement machine-check interruption injectionarch/s390/kvm/interrupt.c+8 -01 reply
17/37DOCUMENTATION: protvirt: Instruction emulationDocumentation/virtual/kvm/s390-pv.txt+47 -06 replies
18/37KVM: s390: protvirt: Handle spec exception loopsarch/s390/kvm/intercept.c+7 -01 reply
19/37KVM: s390: protvirt: Add new gprs location handlingarch/s390/include/asm/kvm_host.h arch/s390/kvm/kvm-s390.c+14 -19 replies
20/37KVM: S390: protvirt: Introduce instruction data area bounce bufferarch/s390/include/asm/kvm_host.h arch/s390/kvm/kvm-s390.c arch/s390/kvm/pv.c+44 -16 replies
21/37KVM: S390: protvirt: Instruction emulationarch/s390/include/asm/kvm_host.h arch/s390/kvm/intercept.c+25 -03 replies
22/37KVM: s390: protvirt: Add SCLP handlingarch/s390/kvm/intercept.c arch/s390/kvm/kvm-s390.c+27 -00 replies
23/37KVM: s390: protvirt: Make sure prefix is always protectedarch/s390/kvm/kvm-s390.c+9 -06 replies
24/37KVM: s390: protvirt: Write sthyi data to instruction data areaarch/s390/kvm/intercept.c+10 -54 replies
25/37KVM: s390: protvirt: STSI handlingarch/s390/kvm/priv.c+7 -21 reply
26/37KVM: s390: protvirt: Only sync fmt4 registersarch/s390/kvm/kvm-s390.c+82 -562 replies
27/37KVM: s390: protvirt: SIGP handlingarch/s390/kvm/intercept.c+2 -12 replies
28/37KVM: s390: protvirt: Add program exception injectionarch/s390/kvm/interrupt.c+18 -00 replies
29/37KVM: s390: protvirt: Sync pv statearch/s390/include/uapi/asm/kvm.h arch/s390/kvm/kvm-s390.c+10 -22 replies
30/37DOCUMENTATION: protvirt: Diag 308 IPLDocumentation/virtual/kvm/s390-pv-boot.txt+62 -06 replies
31/37KVM: s390: protvirt: Add diag 308 subcode 8 - 10 handlingarch/s390/kvm/diag.c arch/s390/kvm/kvm-s390.c+11 -04 replies
32/37KVM: s390: protvirt: UV calls diag308 0, 1arch/s390/include/asm/uv.h arch/s390/kvm/diag.c arch/s390/kvm/kvm-s390.c +3 more+69 -04 replies
33/37KVM: s390: Introduce VCPU reset IOCTLarch/s390/kvm/kvm-s390.c include/uapi/linux/kvm.h+59 -03 replies
34/37KVM: s390: protvirt: Report CPU state to Ultravisorarch/s390/kvm/kvm-s390.c+4 -10 replies
35/37KVM: s390: Fix cpu reset local IRQ clearingarch/s390/kvm/kvm-s390.c+2 -02 replies
36/37KVM: s390: protvirt: Support cmd 5 operation statearch/s390/include/asm/uv.h arch/s390/kvm/kvm-s390.c include/uapi/linux/kvm.h+6 -05 replies
37/37KVM: s390: protvirt: Add UV debug tracearch/s390/kvm/kvm-s390.c arch/s390/kvm/kvm-s390.h arch/s390/kvm/pv.c+34 -10 replies

Reviews trailers per patch

9 of 37 patches have a Reviewed-by or Acked-by.

PatchChristian BorntraegerDavid HildenbrandThomas Huth
1/37A-b
2/37R-b
3/37R-b
4/37
5/37
6/37R-b
7/37R-b R-b R-b
8/37R-b
9/37
10/37
11/37
12/37
13/37
14/37
15/37
16/37
17/37
18/37R-b
19/37
20/37
21/37
22/37
23/37
24/37R-b
25/37
26/37
27/37R-b
28/37
29/37
30/37
31/37
32/37
33/37
34/37
35/37
36/37
37/37

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 3 reviewers.

Read the v1 thread

Cover letter [RFC 00/37] KVM: s390: Add support for protected VMs

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.

All patches are in the protvirt branch of the korg s390 kvm git.

Claudio will present the technology at his presentation at KVM Forum 2019.

Christian Borntraeger (1):
KVM: s390: protvirt: Add SCLP handling

Claudio Imbrenda (2):
KVM: s390: add missing include in gmap.h
KVM: s390: protvirt: Implement on-demand pinning

Janosch Frank (27):
DOCUMENTATION: protvirt: Protected virtual machine introduction
KVM: s390: protvirt: Add initial lifecycle handling
s390: KVM: Export PV handle to gmap
s390: UV: Add import and export to UV library
KVM: s390: protvirt: Secure memory is not mergeable
DOCUMENTATION: protvirt: Interrupt injection
KVM: s390: protvirt: Handle SE notification interceptions
DOCUMENTATION: 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: Instruction emulation
KVM: s390: protvirt: Make sure prefix is always protected
KVM: s390: protvirt: Write sthyi data to instruction data area
KVM: s390: protvirt: STSI handling
KVM: s390: protvirt: Only sync fmt4 registers
KVM: s390: protvirt: SIGP handling
KVM: s390: protvirt: Add program exception injection
KVM: s390: protvirt: Sync pv state
DOCUMENTATION: protvirt: Diag 308 IPL
KVM: s390: protvirt: Add diag 308 subcode 8 - 10 handling
KVM: s390: protvirt: UV calls diag308 0, 1
KVM: s390: Introduce VCPU reset IOCTL
KVM: s390: protvirt: Report CPU state to Ultravisor
KVM: s390: Fix cpu reset local IRQ clearing
KVM: s390: protvirt: Support cmd 5 operation state
KVM: s390: protvirt: Add UV debug trace

Michael Mueller (4):
KVM: s390: protvirt: Add interruption injection controls
KVM: s390: protvirt: Implement interruption injection
KVM: s390: protvirt: Add machine-check interruption injection controls
KVM: s390: protvirt: Implement machine-check interruption injection

Vasily Gorbik (3):
s390/protvirt: introduce host side setup s390/protvirt: add ultravisor initialization
s390: add (non)secure page access exceptions handlers

 .../admin-guide/kernel-parameters.txt         |   5 +
 Documentation/virtual/kvm/s390-pv-boot.txt    |  62 +++
 Documentation/virtual/kvm/s390-pv.txt         |  97 ++++
 arch/s390/boot/Makefile                       |   2 +-
 arch/s390/boot/uv.c                           |  20 +-
 arch/s390/include/asm/gmap.h                  |   4 +
 arch/s390/include/asm/kvm_host.h              | 103 +++-
 arch/s390/include/asm/uv.h                    | 255 +++++++++-
 arch/s390/include/uapi/asm/kvm.h              |   5 +-
 arch/s390/kernel/Makefile                     |   1 +
 arch/s390/kernel/pgm_check.S                  |   4 +-
 arch/s390/kernel/setup.c                      |   7 +-
 arch/s390/kernel/uv.c                         | 121 +++++
 arch/s390/kvm/Kconfig                         |   9 +
 arch/s390/kvm/Makefile                        |   2 +-
 arch/s390/kvm/diag.c                          |   7 +
 arch/s390/kvm/intercept.c                     |  91 +++-
 arch/s390/kvm/interrupt.c                     | 208 ++++++--
 arch/s390/kvm/kvm-s390.c                      | 476 +++++++++++++++---
 arch/s390/kvm/kvm-s390.h                      |  58 +++
 arch/s390/kvm/priv.c                          |   9 +-
 arch/s390/kvm/pv.c                            | 317 ++++++++++++
 arch/s390/mm/fault.c                          |  64 +++
 arch/s390/mm/gmap.c                           |  28 +-
 include/uapi/linux/kvm.h                      |  42 ++
 25 files changed, 1848 insertions(+), 149 deletions(-)
 create mode 100644 Documentation/virtual/kvm/s390-pv-boot.txt
 create mode 100644 Documentation/virtual/kvm/s390-pv.txt
 create mode 100644 arch/s390/kernel/uv.c
 create mode 100644 arch/s390/kvm/pv.c
Signature · 1 line
2.20.1