Commit e0c26d47 authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

Merge tag 'kvm-s390-next-6.19-1' of...

Merge tag 'kvm-s390-next-6.19-1' of https://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux into HEAD

- SCA rework
- VIRT_XFER_TO_GUEST_WORK support
- Operation exception forwarding support
- Cleanups
parents f58e70cc 2bd1337a
Loading
Loading
Loading
Loading
+17 −2
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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.
======================

+4 −4
Original line number Diff line number Diff line
@@ -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
@@ -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;
@@ -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;
+1 −0
Original line number Diff line number Diff line
@@ -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];
+1 −0
Original line number Diff line number Diff line
@@ -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);
+2 −0
Original line number Diff line number Diff line
@@ -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
@@ -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