diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2022-12-15 11:12:21 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2022-12-15 11:12:21 -0800 | 
| commit | 8fa590bf344816c925810331eea8387627bbeb40 (patch) | |
| tree | 86f3fe04b175e172ef2cd9089ba1b8a0f71434f1 /arch/s390/include/asm | |
| parent | 057b40f43ce429a02e793adf3cfbf2446a19a38e (diff) | |
| parent | 549a715b98a13c6d05452be3ad37e980087bb081 (diff) | |
| download | linux-8fa590bf344816c925810331eea8387627bbeb40.tar.bz2 | |
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
Pull kvm updates from Paolo Bonzini:
 "ARM64:
   - Enable the per-vcpu dirty-ring tracking mechanism, together with an
     option to keep the good old dirty log around for pages that are
     dirtied by something other than a vcpu.
   - Switch to the relaxed parallel fault handling, using RCU to delay
     page table reclaim and giving better performance under load.
   - Relax the MTE ABI, allowing a VMM to use the MAP_SHARED mapping
     option, which multi-process VMMs such as crosvm rely on (see merge
     commit 382b5b87a97d: "Fix a number of issues with MTE, such as
     races on the tags being initialised vs the PG_mte_tagged flag as
     well as the lack of support for VM_SHARED when KVM is involved.
     Patches from Catalin Marinas and Peter Collingbourne").
   - Merge the pKVM shadow vcpu state tracking that allows the
     hypervisor to have its own view of a vcpu, keeping that state
     private.
   - Add support for the PMUv3p5 architecture revision, bringing support
     for 64bit counters on systems that support it, and fix the
     no-quite-compliant CHAIN-ed counter support for the machines that
     actually exist out there.
   - Fix a handful of minor issues around 52bit VA/PA support (64kB
     pages only) as a prefix of the oncoming support for 4kB and 16kB
     pages.
   - Pick a small set of documentation and spelling fixes, because no
     good merge window would be complete without those.
  s390:
   - Second batch of the lazy destroy patches
   - First batch of KVM changes for kernel virtual != physical address
     support
   - Removal of a unused function
  x86:
   - Allow compiling out SMM support
   - Cleanup and documentation of SMM state save area format
   - Preserve interrupt shadow in SMM state save area
   - Respond to generic signals during slow page faults
   - Fixes and optimizations for the non-executable huge page errata
     fix.
   - Reprogram all performance counters on PMU filter change
   - Cleanups to Hyper-V emulation and tests
   - Process Hyper-V TLB flushes from a nested guest (i.e. from a L2
     guest running on top of a L1 Hyper-V hypervisor)
   - Advertise several new Intel features
   - x86 Xen-for-KVM:
      - Allow the Xen runstate information to cross a page boundary
      - Allow XEN_RUNSTATE_UPDATE flag behaviour to be configured
      - Add support for 32-bit guests in SCHEDOP_poll
   - Notable x86 fixes and cleanups:
      - One-off fixes for various emulation flows (SGX, VMXON, NRIPS=0).
      - Reinstate IBPB on emulated VM-Exit that was incorrectly dropped
        a few years back when eliminating unnecessary barriers when
        switching between vmcs01 and vmcs02.
      - Clean up vmread_error_trampoline() to make it more obvious that
        params must be passed on the stack, even for x86-64.
      - Let userspace set all supported bits in MSR_IA32_FEAT_CTL
        irrespective of the current guest CPUID.
      - Fudge around a race with TSC refinement that results in KVM
        incorrectly thinking a guest needs TSC scaling when running on a
        CPU with a constant TSC, but no hardware-enumerated TSC
        frequency.
      - Advertise (on AMD) that the SMM_CTL MSR is not supported
      - Remove unnecessary exports
  Generic:
   - Support for responding to signals during page faults; introduces
     new FOLL_INTERRUPTIBLE flag that was reviewed by mm folks
  Selftests:
   - Fix an inverted check in the access tracking perf test, and restore
     support for asserting that there aren't too many idle pages when
     running on bare metal.
   - Fix build errors that occur in certain setups (unsure exactly what
     is unique about the problematic setup) due to glibc overriding
     static_assert() to a variant that requires a custom message.
   - Introduce actual atomics for clear/set_bit() in selftests
   - Add support for pinning vCPUs in dirty_log_perf_test.
   - Rename the so called "perf_util" framework to "memstress".
   - Add a lightweight psuedo RNG for guest use, and use it to randomize
     the access pattern and write vs. read percentage in the memstress
     tests.
   - Add a common ucall implementation; code dedup and pre-work for
     running SEV (and beyond) guests in selftests.
   - Provide a common constructor and arch hook, which will eventually
     be used by x86 to automatically select the right hypercall (AMD vs.
     Intel).
   - A bunch of added/enabled/fixed selftests for ARM64, covering
     memslots, breakpoints, stage-2 faults and access tracking.
   - x86-specific selftest changes:
      - Clean up x86's page table management.
      - Clean up and enhance the "smaller maxphyaddr" test, and add a
        related test to cover generic emulation failure.
      - Clean up the nEPT support checks.
      - Add X86_PROPERTY_* framework to retrieve multi-bit CPUID values.
      - Fix an ordering issue in the AMX test introduced by recent
        conversions to use kvm_cpu_has(), and harden the code to guard
        against similar bugs in the future. Anything that tiggers
        caching of KVM's supported CPUID, kvm_cpu_has() in this case,
        effectively hides opt-in XSAVE features if the caching occurs
        before the test opts in via prctl().
  Documentation:
   - Remove deleted ioctls from documentation
   - Clean up the docs for the x86 MSR filter.
   - Various fixes"
* tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (361 commits)
  KVM: x86: Add proper ReST tables for userspace MSR exits/flags
  KVM: selftests: Allocate ucall pool from MEM_REGION_DATA
  KVM: arm64: selftests: Align VA space allocator with TTBR0
  KVM: arm64: Fix benign bug with incorrect use of VA_BITS
  KVM: arm64: PMU: Fix period computation for 64bit counters with 32bit overflow
  KVM: x86: Advertise that the SMM_CTL MSR is not supported
  KVM: x86: remove unnecessary exports
  KVM: selftests: Fix spelling mistake "probabalistic" -> "probabilistic"
  tools: KVM: selftests: Convert clear/set_bit() to actual atomics
  tools: Drop "atomic_" prefix from atomic test_and_set_bit()
  tools: Drop conflicting non-atomic test_and_{clear,set}_bit() helpers
  KVM: selftests: Use non-atomic clear/set bit helpers in KVM tests
  perf tools: Use dedicated non-atomic clear/set bit helpers
  tools: Take @bit as an "unsigned long" in {clear,set}_bit() helpers
  KVM: arm64: selftests: Enable single-step without a "full" ucall()
  KVM: x86: fix APICv/x2AVIC disabled when vm reboot by itself
  KVM: Remove stale comment about KVM_REQ_UNHALT
  KVM: Add missing arch for KVM_CREATE_DEVICE and KVM_{SET,GET}_DEVICE_ATTR
  KVM: Reference to kvm_userspace_memory_region in doc and comments
  KVM: Delete all references to removed KVM_SET_MEMORY_ALIAS ioctl
  ...
Diffstat (limited to 'arch/s390/include/asm')
| -rw-r--r-- | arch/s390/include/asm/kvm_host.h | 14 | ||||
| -rw-r--r-- | arch/s390/include/asm/mem_encrypt.h | 4 | ||||
| -rw-r--r-- | arch/s390/include/asm/stacktrace.h | 1 | ||||
| -rw-r--r-- | arch/s390/include/asm/uv.h | 10 | 
4 files changed, 24 insertions, 5 deletions
| diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h index b1e98a9ed152..d67ce719d16a 100644 --- a/arch/s390/include/asm/kvm_host.h +++ b/arch/s390/include/asm/kvm_host.h @@ -142,8 +142,7 @@ struct mcck_volatile_info {  			   CR14_EXTERNAL_DAMAGE_SUBMASK)  #define SIDAD_SIZE_MASK		0xff -#define sida_origin(sie_block) \ -	((sie_block)->sidad & PAGE_MASK) +#define sida_addr(sie_block) phys_to_virt((sie_block)->sidad & PAGE_MASK)  #define sida_size(sie_block) \  	((((sie_block)->sidad & SIDAD_SIZE_MASK) + 1) * PAGE_SIZE) @@ -276,6 +275,7 @@ struct kvm_s390_sie_block {  #define ECB3_AES 0x04  #define ECB3_RI  0x01  	__u8    ecb3;			/* 0x0063 */ +#define ESCA_SCAOL_MASK ~0x3fU  	__u32	scaol;			/* 0x0064 */  	__u8	sdf;			/* 0x0068 */  	__u8    epdx;			/* 0x0069 */ @@ -942,6 +942,8 @@ struct kvm_s390_pv {  	unsigned long stor_base;  	void *stor_var;  	bool dumping; +	void *set_aside; +	struct list_head need_cleanup;  	struct mmu_notifier mmu_notifier;  }; @@ -1017,7 +1019,13 @@ void kvm_arch_crypto_clear_masks(struct kvm *kvm);  void kvm_arch_crypto_set_masks(struct kvm *kvm, unsigned long *apm,  			       unsigned long *aqm, unsigned long *adm); -extern int sie64a(struct kvm_s390_sie_block *, u64 *); +int __sie64a(phys_addr_t sie_block_phys, struct kvm_s390_sie_block *sie_block, u64 *rsa); + +static inline int sie64a(struct kvm_s390_sie_block *sie_block, u64 *rsa) +{ +	return __sie64a(virt_to_phys(sie_block), sie_block, rsa); +} +  extern char sie_exit;  extern int kvm_s390_gisc_register(struct kvm *kvm, u32 gisc); diff --git a/arch/s390/include/asm/mem_encrypt.h b/arch/s390/include/asm/mem_encrypt.h index 08a8b96606d7..b85e13505a0f 100644 --- a/arch/s390/include/asm/mem_encrypt.h +++ b/arch/s390/include/asm/mem_encrypt.h @@ -4,8 +4,8 @@  #ifndef __ASSEMBLY__ -int set_memory_encrypted(unsigned long addr, int numpages); -int set_memory_decrypted(unsigned long addr, int numpages); +int set_memory_encrypted(unsigned long vaddr, int numpages); +int set_memory_decrypted(unsigned long vaddr, int numpages);  #endif	/* __ASSEMBLY__ */ diff --git a/arch/s390/include/asm/stacktrace.h b/arch/s390/include/asm/stacktrace.h index b23c658dce77..1802be5abb5d 100644 --- a/arch/s390/include/asm/stacktrace.h +++ b/arch/s390/include/asm/stacktrace.h @@ -46,6 +46,7 @@ struct stack_frame {  			unsigned long sie_savearea;  			unsigned long sie_reason;  			unsigned long sie_flags; +			unsigned long sie_control_block_phys;  		};  	};  	unsigned long gprs[10]; diff --git a/arch/s390/include/asm/uv.h b/arch/s390/include/asm/uv.h index be3ef9dd6972..28a9ad57b6f1 100644 --- a/arch/s390/include/asm/uv.h +++ b/arch/s390/include/asm/uv.h @@ -34,6 +34,7 @@  #define UVC_CMD_INIT_UV			0x000f  #define UVC_CMD_CREATE_SEC_CONF		0x0100  #define UVC_CMD_DESTROY_SEC_CONF	0x0101 +#define UVC_CMD_DESTROY_SEC_CONF_FAST	0x0102  #define UVC_CMD_CREATE_SEC_CPU		0x0120  #define UVC_CMD_DESTROY_SEC_CPU		0x0121  #define UVC_CMD_CONV_TO_SEC_STOR	0x0200 @@ -81,6 +82,7 @@ enum uv_cmds_inst {  	BIT_UVC_CMD_UNSHARE_ALL = 20,  	BIT_UVC_CMD_PIN_PAGE_SHARED = 21,  	BIT_UVC_CMD_UNPIN_PAGE_SHARED = 22, +	BIT_UVC_CMD_DESTROY_SEC_CONF_FAST = 23,  	BIT_UVC_CMD_DUMP_INIT = 24,  	BIT_UVC_CMD_DUMP_CONFIG_STOR_STATE = 25,  	BIT_UVC_CMD_DUMP_CPU = 26, @@ -230,6 +232,14 @@ struct uv_cb_nodata {  	u64 reserved20[4];  } __packed __aligned(8); +/* Destroy Configuration Fast */ +struct uv_cb_destroy_fast { +	struct uv_cb_header header; +	u64 reserved08[2]; +	u64 handle; +	u64 reserved20[5]; +} __packed __aligned(8); +  /* Set Shared Access */  struct uv_cb_share {  	struct uv_cb_header header; |