Loading Documentation/virt/kvm/api.rst +17 −2 Original line number Diff line number Diff line Loading @@ -7855,7 +7855,7 @@ where 0xff represents CPUs 0-7 in cluster 0. :Architectures: s390 :Parameters: none With this capability enabled, all illegal instructions 0x0000 (2 bytes) will With this capability enabled, the illegal instruction 0x0000 (2 bytes) will be intercepted and forwarded to user space. User space can use this mechanism e.g. to realize 2-byte software breakpoints. The kernel will not inject an operating exception for these instructions, user space has Loading Loading @@ -8727,7 +8727,7 @@ given VM. When this capability is enabled, KVM resets the VCPU when setting MP_STATE_INIT_RECEIVED through IOCTL. The original MP_STATE is preserved. 7.43 KVM_CAP_ARM_CACHEABLE_PFNMAP_SUPPORTED 7.44 KVM_CAP_ARM_CACHEABLE_PFNMAP_SUPPORTED ------------------------------------------- :Architectures: arm64 Loading @@ -8750,6 +8750,21 @@ When this capability is enabled, KVM may exit to userspace for SEAs taken to EL2 resulting from a guest access. See ``KVM_EXIT_ARM_SEA`` for more information. 7.46 KVM_CAP_S390_USER_OPEREXEC ------------------------------- :Architectures: s390 :Parameters: none When this capability is enabled KVM forwards all operation exceptions that it doesn't handle itself to user space. This also includes the 0x0000 instructions managed by KVM_CAP_S390_USER_INSTR0. This is helpful if user space wants to emulate instructions which are not (yet) implemented in hardware. This capability can be enabled dynamically even if VCPUs were already created and are running. 8. Other capabilities. ====================== Loading arch/s390/include/asm/kvm_host.h +4 −4 Original line number Diff line number Diff line Loading @@ -146,6 +146,7 @@ struct kvm_vcpu_stat { u64 instruction_diagnose_500; u64 instruction_diagnose_other; u64 pfault_sync; u64 signal_exits; }; #define PGM_OPERATION 0x01 Loading Loading @@ -632,9 +633,7 @@ struct kvm_s390_pv { }; struct kvm_arch { void *sca; int use_esca; rwlock_t sca_lock; struct esca_block *sca; debug_info_t *dbf; struct kvm_s390_float_interrupt float_int; struct kvm_device *flic; Loading @@ -650,6 +649,7 @@ struct kvm_arch{ int user_sigp; int user_stsi; int user_instr0; int user_operexec; struct s390_io_adapter *adapters[MAX_S390_IO_ADAPTERS]; wait_queue_head_t ipte_wq; int ipte_lock_count; Loading arch/s390/include/asm/stacktrace.h +1 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,7 @@ struct stack_frame { unsigned long sie_flags; unsigned long sie_control_block_phys; unsigned long sie_guest_asce; unsigned long sie_irq; }; }; unsigned long gprs[10]; Loading arch/s390/kernel/asm-offsets.c +1 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ int main(void) OFFSET(__SF_SIE_FLAGS, stack_frame, sie_flags); OFFSET(__SF_SIE_CONTROL_PHYS, stack_frame, sie_control_block_phys); OFFSET(__SF_SIE_GUEST_ASCE, stack_frame, sie_guest_asce); OFFSET(__SF_SIE_IRQ, stack_frame, sie_irq); DEFINE(STACK_FRAME_OVERHEAD, sizeof(struct stack_frame)); BLANK(); OFFSET(__SFUSER_BACKCHAIN, stack_frame_user, back_chain); Loading arch/s390/kernel/entry.S +2 −0 Original line number Diff line number Diff line Loading @@ -189,6 +189,7 @@ SYM_FUNC_START(__sie64a) mvc __SF_SIE_FLAGS(8,%r15),__TI_flags(%r14) # copy thread flags lmg %r0,%r13,0(%r4) # load guest gprs 0-13 mvi __TI_sie(%r14),1 stosm __SF_SIE_IRQ(%r15),0x03 # enable interrupts lctlg %c1,%c1,__SF_SIE_GUEST_ASCE(%r15) # load primary asce lg %r14,__SF_SIE_CONTROL(%r15) # get control block pointer oi __SIE_PROG0C+3(%r14),1 # we are going into SIE now Loading @@ -212,6 +213,7 @@ SYM_FUNC_START(__sie64a) lg %r14,__LC_CURRENT(%r14) mvi __TI_sie(%r14),0 SYM_INNER_LABEL(sie_exit, SYM_L_GLOBAL) stnsm __SF_SIE_IRQ(%r15),0xfc # disable interrupts lg %r14,__SF_SIE_SAVEAREA(%r15) # load guest register save area stmg %r0,%r13,0(%r14) # save guest gprs 0-13 xgr %r0,%r0 # clear guest registers to Loading Loading
Documentation/virt/kvm/api.rst +17 −2 Original line number Diff line number Diff line Loading @@ -7855,7 +7855,7 @@ where 0xff represents CPUs 0-7 in cluster 0. :Architectures: s390 :Parameters: none With this capability enabled, all illegal instructions 0x0000 (2 bytes) will With this capability enabled, the illegal instruction 0x0000 (2 bytes) will be intercepted and forwarded to user space. User space can use this mechanism e.g. to realize 2-byte software breakpoints. The kernel will not inject an operating exception for these instructions, user space has Loading Loading @@ -8727,7 +8727,7 @@ given VM. When this capability is enabled, KVM resets the VCPU when setting MP_STATE_INIT_RECEIVED through IOCTL. The original MP_STATE is preserved. 7.43 KVM_CAP_ARM_CACHEABLE_PFNMAP_SUPPORTED 7.44 KVM_CAP_ARM_CACHEABLE_PFNMAP_SUPPORTED ------------------------------------------- :Architectures: arm64 Loading @@ -8750,6 +8750,21 @@ When this capability is enabled, KVM may exit to userspace for SEAs taken to EL2 resulting from a guest access. See ``KVM_EXIT_ARM_SEA`` for more information. 7.46 KVM_CAP_S390_USER_OPEREXEC ------------------------------- :Architectures: s390 :Parameters: none When this capability is enabled KVM forwards all operation exceptions that it doesn't handle itself to user space. This also includes the 0x0000 instructions managed by KVM_CAP_S390_USER_INSTR0. This is helpful if user space wants to emulate instructions which are not (yet) implemented in hardware. This capability can be enabled dynamically even if VCPUs were already created and are running. 8. Other capabilities. ====================== Loading
arch/s390/include/asm/kvm_host.h +4 −4 Original line number Diff line number Diff line Loading @@ -146,6 +146,7 @@ struct kvm_vcpu_stat { u64 instruction_diagnose_500; u64 instruction_diagnose_other; u64 pfault_sync; u64 signal_exits; }; #define PGM_OPERATION 0x01 Loading Loading @@ -632,9 +633,7 @@ struct kvm_s390_pv { }; struct kvm_arch { void *sca; int use_esca; rwlock_t sca_lock; struct esca_block *sca; debug_info_t *dbf; struct kvm_s390_float_interrupt float_int; struct kvm_device *flic; Loading @@ -650,6 +649,7 @@ struct kvm_arch{ int user_sigp; int user_stsi; int user_instr0; int user_operexec; struct s390_io_adapter *adapters[MAX_S390_IO_ADAPTERS]; wait_queue_head_t ipte_wq; int ipte_lock_count; Loading
arch/s390/include/asm/stacktrace.h +1 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,7 @@ struct stack_frame { unsigned long sie_flags; unsigned long sie_control_block_phys; unsigned long sie_guest_asce; unsigned long sie_irq; }; }; unsigned long gprs[10]; Loading
arch/s390/kernel/asm-offsets.c +1 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ int main(void) OFFSET(__SF_SIE_FLAGS, stack_frame, sie_flags); OFFSET(__SF_SIE_CONTROL_PHYS, stack_frame, sie_control_block_phys); OFFSET(__SF_SIE_GUEST_ASCE, stack_frame, sie_guest_asce); OFFSET(__SF_SIE_IRQ, stack_frame, sie_irq); DEFINE(STACK_FRAME_OVERHEAD, sizeof(struct stack_frame)); BLANK(); OFFSET(__SFUSER_BACKCHAIN, stack_frame_user, back_chain); Loading
arch/s390/kernel/entry.S +2 −0 Original line number Diff line number Diff line Loading @@ -189,6 +189,7 @@ SYM_FUNC_START(__sie64a) mvc __SF_SIE_FLAGS(8,%r15),__TI_flags(%r14) # copy thread flags lmg %r0,%r13,0(%r4) # load guest gprs 0-13 mvi __TI_sie(%r14),1 stosm __SF_SIE_IRQ(%r15),0x03 # enable interrupts lctlg %c1,%c1,__SF_SIE_GUEST_ASCE(%r15) # load primary asce lg %r14,__SF_SIE_CONTROL(%r15) # get control block pointer oi __SIE_PROG0C+3(%r14),1 # we are going into SIE now Loading @@ -212,6 +213,7 @@ SYM_FUNC_START(__sie64a) lg %r14,__LC_CURRENT(%r14) mvi __TI_sie(%r14),0 SYM_INNER_LABEL(sie_exit, SYM_L_GLOBAL) stnsm __SF_SIE_IRQ(%r15),0xfc # disable interrupts lg %r14,__SF_SIE_SAVEAREA(%r15) # load guest register save area stmg %r0,%r13,0(%r14) # save guest gprs 0-13 xgr %r0,%r0 # clear guest registers to Loading