linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/12] Secure Virtual Machine Enablement
@ 2019-05-21  4:49 Thiago Jung Bauermann
  2019-05-21  4:49 ` [PATCH 01/12] powerpc/pseries: Introduce option to build secure virtual machines Thiago Jung Bauermann
                   ` (12 more replies)
  0 siblings, 13 replies; 23+ messages in thread
From: Thiago Jung Bauermann @ 2019-05-21  4:49 UTC (permalink / raw)
  To: linuxppc-dev
  Cc: Anshuman Khandual, Alexey Kardashevskiy, Mike Anderson, Ram Pai,
	linux-kernel, Claudio Carvalho, Paul Mackerras,
	Christoph Hellwig, Thiago Jung Bauermann

This series enables Secure Virtual Machines (SVMs) on powerpc. SVMs use the
Protected Execution Facility (PEF) and request to be migrated to secure
memory during prom_init() so by default all of their memory is inaccessible
to the hypervisor. There is an Ultravisor call that the VM can use to
request certain pages to be made accessible to (or shared with) the
hypervisor.

The objective of these patches is to have the guest perform this request
for buffers that need to be accessed by the hypervisor such as the LPPACAs,
the SWIOTLB memory and the Debug Trace Log.

The patch set applies on top of Claudio Carvalho's "kvmppc: Paravirtualize KVM
to support ultravisor" series:

https://lore.kernel.org/linuxppc-dev/20190518142524.28528-1-cclaudio@linux.ibm.com/

I only need the following two patches from his series:

[RFC PATCH v2 02/10] KVM: PPC: Ultravisor: Introduce the MSR_S bit
[RFC PATCH v2 04/10] KVM: PPC: Ultravisor: Add generic ultravisor call handler

Patches 2 and 3 are posted as RFC because we are still finalizing the
details on how the ESM blob will be passed to the kernel. All other patches
are (hopefully) in upstreamable shape.

Unfortunately this series still doesn't enable the use of virtio devices in
the secure guest. This support depends on a discussion that is currently
ongoing with the virtio community:

https://lore.kernel.org/linuxppc-dev/87womn8inf.fsf@morokweng.localdomain/

This was the last time I posted this patch set:

https://lore.kernel.org/linuxppc-dev/20180824162535.22798-1-bauerman@linux.ibm.com/

At that time, it wasn't possible to launch a real secure guest because the
Ultravisor was still in very early development. Now there is a relatively
mature Ultravisor and I was able to test it using Claudio's patches in the
host kernel, booting normally using an initramfs for the root filesystem.

This is the command used to start up the guest with QEMU 4.0:

qemu-system-ppc64				\
	-nodefaults				\
	-cpu host				\
	-machine pseries,accel=kvm,kvm-type=HV,cap-htm=off,cap-cfpc=broken,cap-sbbc=broken,cap-ibs=broken \
	-display none				\
	-serial mon:stdio			\
	-smp 1					\
	-m 4G					\
	-kernel /home/bauermann/vmlinux		\
	-initrd /home/bauermann/fs_small.cpio	\
	-append 'debug'

Changelog since the RFC from August:

- Patch "powerpc/pseries: Introduce option to build secure virtual machines"
  - New patch.

- Patch "powerpc: Add support for adding an ESM blob to the zImage wrapper"
  - Patch from Benjamin Herrenschmidt, first posted here:
    https://lore.kernel.org/linuxppc-dev/20180531043417.25073-1-benh@kernel.crashing.org/
  - Made minor adjustments to some comments. Code is unchanged.

- Patch "powerpc/prom_init: Add the ESM call to prom_init"
  - New patch from Ram Pai and Michael Anderson.

- Patch "powerpc/pseries/svm: Add helpers for UV_SHARE_PAGE and UV_UNSHARE_PAGE"
  - New patch from Ram Pai.

- Patch "powerpc/pseries: Add and use LPPACA_SIZE constant"
  - Moved LPPACA_SIZE macro inside the CONFIG_PPC_PSERIES #ifdef.
  - Put sizeof() operand left of comparison operator in BUILD_BUG_ON()
    macro to appease a checkpatch warning.

- Patch "powerpc/pseries/svm: Use shared memory for LPPACA structures"
  - Moved definition of is_secure_guest() helper to this patch.
  - Changed shared_lppaca and shared_lppaca_size from globals to static
    variables inside alloc_shared_lppaca().
  - Changed shared_lppaca to hold virtual address instead of physical
    address.

- Patch "powerpc/pseries/svm: Use shared memory for Debug Trace Log (DTL)"
  - Add get_dtl_cache_ctor() macro. Suggested by Ram Pai.

- Patch "powerpc/pseries/svm: Export guest SVM status to user space via sysfs"
  - New patch from Ryan Grimm.

- Patch "powerpc/pseries/svm: Disable doorbells in SVM guests"
  - New patch from Sukadev Bhattiprolu.

- Patch "powerpc/pseries/iommu: Don't use dma_iommu_ops on secure guests"
  - New patch.

- Patch "powerpc/pseries/svm: Force SWIOTLB for secure guests"
  - New patch with code that was previously in other patches.

- Patch "powerpc/configs: Enable secure guest support in pseries and ppc64 defconfigs"
  - New patch from Ryan Grimm.

- Patch "powerpc/pseries/svm: Detect Secure Virtual Machine (SVM) platform"
  - Dropped this patch by moving its code to other patches.

- Patch "powerpc/svm: Select CONFIG_DMA_DIRECT_OPS and CONFIG_SWIOTLB"
  - No need to select CONFIG_DMA_DIRECT_OPS anymore. The CONFIG_SWIOTLB
    change was moved to another patch and this patch was dropped.

- Patch "powerpc/pseries/svm: Add memory conversion (shared/secure) helper functions"
  - Dropped patch since the helper functions were unnecessary wrappers
    around uv_share_page() and uv_unshare_page().

- Patch "powerpc/svm: Convert SWIOTLB buffers to shared memory"
  - Squashed into patch "powerpc/pseries/svm: Force SWIOTLB for secure
    guests"

- Patch "powerpc/svm: Don't release SWIOTLB buffers on secure guests"
  - Squashed into patch "powerpc/pseries/svm: Force SWIOTLB for secure
    guests"

- Patch "powerpc/svm: Use SWIOTLB DMA API for all virtio devices"
  - Dropped patch. Enablement of virtio will use a difference approach.

- Patch "powerpc/svm: Force the use of bounce buffers"
  - Squashed into patch "powerpc/pseries/svm: Force SWIOTLB for secure
    guests"
  - Added comment explaining why it's necessary.to force use of SWIOTLB.
    Suggested by Christoph Hellwig.

- Patch "powerpc/svm: Increase SWIOTLB buffer size"
  - Dropped patch.


Anshuman Khandual (3):
  powerpc/pseries/svm: Use shared memory for LPPACA structures
  powerpc/pseries/svm: Use shared memory for Debug Trace Log (DTL)
  powerpc/pseries/svm: Force SWIOTLB for secure guests

Benjamin Herrenschmidt (1):
  powerpc: Add support for adding an ESM blob to the zImage wrapper

Ram Pai (2):
  powerpc/prom_init: Add the ESM call to prom_init
  powerpc/pseries/svm: Add helpers for UV_SHARE_PAGE and UV_UNSHARE_PAGE

Ryan Grimm (2):
  powerpc/pseries/svm: Export guest SVM status to user space via sysfs
  powerpc/configs: Enable secure guest support in pseries and ppc64
    defconfigs

Sukadev Bhattiprolu (1):
  powerpc/pseries/svm: Disable doorbells in SVM guests

Thiago Jung Bauermann (3):
  powerpc/pseries: Introduce option to build secure virtual machines
  powerpc/pseries: Add and use LPPACA_SIZE constant
  powerpc/pseries/iommu: Don't use dma_iommu_ops on secure guests

 .../admin-guide/kernel-parameters.txt         |   5 +
 arch/powerpc/boot/main.c                      |  41 ++++++
 arch/powerpc/boot/ops.h                       |   2 +
 arch/powerpc/boot/wrapper                     |  24 +++-
 arch/powerpc/boot/zImage.lds.S                |   8 ++
 arch/powerpc/configs/ppc64_defconfig          |   1 +
 arch/powerpc/configs/pseries_defconfig        |   1 +
 arch/powerpc/include/asm/mem_encrypt.h        |  19 +++
 arch/powerpc/include/asm/svm.h                |  31 +++++
 arch/powerpc/include/asm/ultravisor-api.h     |   3 +
 arch/powerpc/include/asm/ultravisor.h         |  16 ++-
 arch/powerpc/kernel/Makefile                  |   4 +-
 arch/powerpc/kernel/paca.c                    |  52 +++++++-
 arch/powerpc/kernel/prom_init.c               | 124 ++++++++++++++++++
 arch/powerpc/kernel/sysfs.c                   |  29 ++++
 arch/powerpc/platforms/pseries/Kconfig        |  17 +++
 arch/powerpc/platforms/pseries/Makefile       |   1 +
 arch/powerpc/platforms/pseries/iommu.c        |   6 +-
 arch/powerpc/platforms/pseries/setup.c        |   5 +-
 arch/powerpc/platforms/pseries/smp.c          |   3 +-
 arch/powerpc/platforms/pseries/svm.c          |  85 ++++++++++++
 21 files changed, 464 insertions(+), 13 deletions(-)
 create mode 100644 arch/powerpc/include/asm/mem_encrypt.h
 create mode 100644 arch/powerpc/include/asm/svm.h
 create mode 100644 arch/powerpc/platforms/pseries/svm.c


^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2019-07-01  3:15 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-21  4:49 [PATCH 00/12] Secure Virtual Machine Enablement Thiago Jung Bauermann
2019-05-21  4:49 ` [PATCH 01/12] powerpc/pseries: Introduce option to build secure virtual machines Thiago Jung Bauermann
2019-05-21  4:49 ` [RFC PATCH 02/12] powerpc: Add support for adding an ESM blob to the zImage wrapper Thiago Jung Bauermann
2019-05-21  5:13   ` Christoph Hellwig
2019-05-21 15:09     ` Ram Pai
2019-05-21 23:15     ` Paul Mackerras
2019-05-21  4:49 ` [RFC PATCH 03/12] powerpc/prom_init: Add the ESM call to prom_init Thiago Jung Bauermann
2019-06-26  7:44   ` Alexey Kardashevskiy
2019-06-28 22:33     ` Thiago Jung Bauermann
2019-07-01  3:13       ` Alexey Kardashevskiy
2019-05-21  4:49 ` [PATCH 04/12] powerpc/pseries/svm: Add helpers for UV_SHARE_PAGE and UV_UNSHARE_PAGE Thiago Jung Bauermann
2019-05-21  4:49 ` [PATCH 05/12] powerpc/pseries: Add and use LPPACA_SIZE constant Thiago Jung Bauermann
2019-05-21  4:49 ` [PATCH 06/12] powerpc/pseries/svm: Use shared memory for LPPACA structures Thiago Jung Bauermann
2019-05-21  4:49 ` [PATCH 07/12] powerpc/pseries/svm: Use shared memory for Debug Trace Log (DTL) Thiago Jung Bauermann
2019-05-21  4:49 ` [PATCH 08/12] powerpc/pseries/svm: Export guest SVM status to user space via sysfs Thiago Jung Bauermann
2019-05-21  4:49 ` [PATCH 09/12] powerpc/pseries/svm: Disable doorbells in SVM guests Thiago Jung Bauermann
2019-05-21  4:49 ` [PATCH 10/12] powerpc/pseries/iommu: Don't use dma_iommu_ops on secure guests Thiago Jung Bauermann
2019-05-21  4:49 ` [PATCH 11/12] powerpc/pseries/svm: Force SWIOTLB for " Thiago Jung Bauermann
2019-05-21  5:15   ` Christoph Hellwig
2019-05-23  5:15     ` Thiago Jung Bauermann
2019-05-21  4:49 ` [PATCH 12/12] powerpc/configs: Enable secure guest support in pseries and ppc64 defconfigs Thiago Jung Bauermann
2019-06-07 14:47   ` [RFC PATCH 1/1] powerpc/pseries/svm: Unshare all pages before kexecing a new kernel Ram Pai
2019-06-01 17:11 ` [PATCH 00/12] Secure Virtual Machine Enablement Thiago Jung Bauermann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).