Loading arch/s390/include/asm/kvm_host.h +16 −1 Original line number Diff line number Diff line Loading @@ -107,6 +107,20 @@ struct esca_block { struct esca_entry cpu[KVM_S390_ESCA_CPU_SLOTS]; } __packed; /* * This struct is used to store some machine check info from lowcore * for machine checks that happen while the guest is running. * This info in host's lowcore might be overwritten by a second machine * check from host when host is in the machine check's high-level handling. * The size is 24 bytes. */ struct mcck_volatile_info { __u64 mcic; __u64 failing_storage_address; __u32 ext_damage_code; __u32 reserved; }; #define CPUSTAT_STOPPED 0x80000000 #define CPUSTAT_WAIT 0x10000000 #define CPUSTAT_ECALL_PEND 0x08000000 Loading Loading @@ -264,7 +278,8 @@ struct kvm_s390_itdb { struct sie_page { struct kvm_s390_sie_block sie_block; __u8 reserved200[1024]; /* 0x0200 */ struct mcck_volatile_info mcck_info; /* 0x0200 */ __u8 reserved218[1000]; /* 0x0218 */ struct kvm_s390_itdb itdb; /* 0x0600 */ __u8 reserved700[2304]; /* 0x0700 */ } __packed; Loading arch/s390/include/asm/nmi.h +7 −0 Original line number Diff line number Diff line Loading @@ -14,7 +14,14 @@ #include <linux/const.h> #include <linux/types.h> #define MCIC_SUBCLASS_MASK (1ULL<<63 | 1ULL<<62 | 1ULL<<61 | \ 1ULL<<59 | 1ULL<<58 | 1ULL<<56 | \ 1ULL<<55 | 1ULL<<54 | 1ULL<<53 | \ 1ULL<<52 | 1ULL<<47 | 1ULL<<46 | \ 1ULL<<45 | 1ULL<<44) #define MCCK_CODE_SYSTEM_DAMAGE _BITUL(63) #define MCCK_CODE_EXT_DAMAGE _BITUL(63 - 5) #define MCCK_CODE_CP _BITUL(63 - 9) #define MCCK_CODE_CPU_TIMER_VALID _BITUL(63 - 46) #define MCCK_CODE_PSW_MWP_VALID _BITUL(63 - 20) #define MCCK_CODE_PSW_IA_VALID _BITUL(63 - 23) Loading arch/s390/include/asm/processor.h +2 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #define CIF_FPU 4 /* restore FPU registers */ #define CIF_IGNORE_IRQ 5 /* ignore interrupt (for udelay) */ #define CIF_ENABLED_WAIT 6 /* in enabled wait state */ #define CIF_MCCK_GUEST 7 /* machine check happening in guest */ #define _CIF_MCCK_PENDING _BITUL(CIF_MCCK_PENDING) #define _CIF_ASCE_PRIMARY _BITUL(CIF_ASCE_PRIMARY) Loading @@ -28,6 +29,7 @@ #define _CIF_FPU _BITUL(CIF_FPU) #define _CIF_IGNORE_IRQ _BITUL(CIF_IGNORE_IRQ) #define _CIF_ENABLED_WAIT _BITUL(CIF_ENABLED_WAIT) #define _CIF_MCCK_GUEST _BITUL(CIF_MCCK_GUEST) #ifndef __ASSEMBLY__ Loading arch/s390/kernel/asm-offsets.c +3 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,9 @@ int main(void) OFFSET(__SF_BACKCHAIN, stack_frame, back_chain); OFFSET(__SF_GPRS, stack_frame, gprs); OFFSET(__SF_EMPTY, stack_frame, empty1); OFFSET(__SF_SIE_CONTROL, stack_frame, empty1[0]); OFFSET(__SF_SIE_SAVEAREA, stack_frame, empty1[1]); OFFSET(__SF_SIE_REASON, stack_frame, empty1[2]); BLANK(); /* timeval/timezone offsets for use by vdso */ OFFSET(__VDSO_UPD_COUNT, vdso_data, tb_update_count); Loading arch/s390/kernel/entry.S +12 −1 Original line number Diff line number Diff line Loading @@ -225,6 +225,7 @@ ENTRY(sie64a) jnz .Lsie_skip TSTMSK __LC_CPU_FLAGS,_CIF_FPU jo .Lsie_skip # exit if fp/vx regs changed .Lsie_entry: sie 0(%r14) .Lsie_skip: ni __SIE_PROG0C+3(%r14),0xfe # no longer in SIE Loading Loading @@ -1122,7 +1123,13 @@ cleanup_critical: .quad .Lsie_done .Lcleanup_sie: lg %r9,__SF_EMPTY(%r15) # get control block pointer cghi %r11,__LC_SAVE_AREA_ASYNC #Is this in normal interrupt? je 1f slg %r9,BASED(.Lsie_crit_mcck_start) clg %r9,BASED(.Lsie_crit_mcck_length) jh 1f oi __LC_CPU_FLAGS+7, _CIF_MCCK_GUEST 1: lg %r9,__SF_EMPTY(%r15) # get control block pointer ni __SIE_PROG0C+3(%r9),0xfe # no longer in SIE lctlg %c1,%c1,__LC_USER_ASCE # load primary asce larl %r9,sie_exit # skip forward to sie_exit Loading Loading @@ -1307,6 +1314,10 @@ cleanup_critical: .quad .Lsie_gmap .Lsie_critical_length: .quad .Lsie_done - .Lsie_gmap .Lsie_crit_mcck_start: .quad .Lsie_entry .Lsie_crit_mcck_length: .quad .Lsie_skip - .Lsie_entry #endif .section .rodata, "a" Loading Loading
arch/s390/include/asm/kvm_host.h +16 −1 Original line number Diff line number Diff line Loading @@ -107,6 +107,20 @@ struct esca_block { struct esca_entry cpu[KVM_S390_ESCA_CPU_SLOTS]; } __packed; /* * This struct is used to store some machine check info from lowcore * for machine checks that happen while the guest is running. * This info in host's lowcore might be overwritten by a second machine * check from host when host is in the machine check's high-level handling. * The size is 24 bytes. */ struct mcck_volatile_info { __u64 mcic; __u64 failing_storage_address; __u32 ext_damage_code; __u32 reserved; }; #define CPUSTAT_STOPPED 0x80000000 #define CPUSTAT_WAIT 0x10000000 #define CPUSTAT_ECALL_PEND 0x08000000 Loading Loading @@ -264,7 +278,8 @@ struct kvm_s390_itdb { struct sie_page { struct kvm_s390_sie_block sie_block; __u8 reserved200[1024]; /* 0x0200 */ struct mcck_volatile_info mcck_info; /* 0x0200 */ __u8 reserved218[1000]; /* 0x0218 */ struct kvm_s390_itdb itdb; /* 0x0600 */ __u8 reserved700[2304]; /* 0x0700 */ } __packed; Loading
arch/s390/include/asm/nmi.h +7 −0 Original line number Diff line number Diff line Loading @@ -14,7 +14,14 @@ #include <linux/const.h> #include <linux/types.h> #define MCIC_SUBCLASS_MASK (1ULL<<63 | 1ULL<<62 | 1ULL<<61 | \ 1ULL<<59 | 1ULL<<58 | 1ULL<<56 | \ 1ULL<<55 | 1ULL<<54 | 1ULL<<53 | \ 1ULL<<52 | 1ULL<<47 | 1ULL<<46 | \ 1ULL<<45 | 1ULL<<44) #define MCCK_CODE_SYSTEM_DAMAGE _BITUL(63) #define MCCK_CODE_EXT_DAMAGE _BITUL(63 - 5) #define MCCK_CODE_CP _BITUL(63 - 9) #define MCCK_CODE_CPU_TIMER_VALID _BITUL(63 - 46) #define MCCK_CODE_PSW_MWP_VALID _BITUL(63 - 20) #define MCCK_CODE_PSW_IA_VALID _BITUL(63 - 23) Loading
arch/s390/include/asm/processor.h +2 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #define CIF_FPU 4 /* restore FPU registers */ #define CIF_IGNORE_IRQ 5 /* ignore interrupt (for udelay) */ #define CIF_ENABLED_WAIT 6 /* in enabled wait state */ #define CIF_MCCK_GUEST 7 /* machine check happening in guest */ #define _CIF_MCCK_PENDING _BITUL(CIF_MCCK_PENDING) #define _CIF_ASCE_PRIMARY _BITUL(CIF_ASCE_PRIMARY) Loading @@ -28,6 +29,7 @@ #define _CIF_FPU _BITUL(CIF_FPU) #define _CIF_IGNORE_IRQ _BITUL(CIF_IGNORE_IRQ) #define _CIF_ENABLED_WAIT _BITUL(CIF_ENABLED_WAIT) #define _CIF_MCCK_GUEST _BITUL(CIF_MCCK_GUEST) #ifndef __ASSEMBLY__ Loading
arch/s390/kernel/asm-offsets.c +3 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,9 @@ int main(void) OFFSET(__SF_BACKCHAIN, stack_frame, back_chain); OFFSET(__SF_GPRS, stack_frame, gprs); OFFSET(__SF_EMPTY, stack_frame, empty1); OFFSET(__SF_SIE_CONTROL, stack_frame, empty1[0]); OFFSET(__SF_SIE_SAVEAREA, stack_frame, empty1[1]); OFFSET(__SF_SIE_REASON, stack_frame, empty1[2]); BLANK(); /* timeval/timezone offsets for use by vdso */ OFFSET(__VDSO_UPD_COUNT, vdso_data, tb_update_count); Loading
arch/s390/kernel/entry.S +12 −1 Original line number Diff line number Diff line Loading @@ -225,6 +225,7 @@ ENTRY(sie64a) jnz .Lsie_skip TSTMSK __LC_CPU_FLAGS,_CIF_FPU jo .Lsie_skip # exit if fp/vx regs changed .Lsie_entry: sie 0(%r14) .Lsie_skip: ni __SIE_PROG0C+3(%r14),0xfe # no longer in SIE Loading Loading @@ -1122,7 +1123,13 @@ cleanup_critical: .quad .Lsie_done .Lcleanup_sie: lg %r9,__SF_EMPTY(%r15) # get control block pointer cghi %r11,__LC_SAVE_AREA_ASYNC #Is this in normal interrupt? je 1f slg %r9,BASED(.Lsie_crit_mcck_start) clg %r9,BASED(.Lsie_crit_mcck_length) jh 1f oi __LC_CPU_FLAGS+7, _CIF_MCCK_GUEST 1: lg %r9,__SF_EMPTY(%r15) # get control block pointer ni __SIE_PROG0C+3(%r9),0xfe # no longer in SIE lctlg %c1,%c1,__LC_USER_ASCE # load primary asce larl %r9,sie_exit # skip forward to sie_exit Loading Loading @@ -1307,6 +1314,10 @@ cleanup_critical: .quad .Lsie_gmap .Lsie_critical_length: .quad .Lsie_done - .Lsie_gmap .Lsie_crit_mcck_start: .quad .Lsie_entry .Lsie_crit_mcck_length: .quad .Lsie_skip - .Lsie_entry #endif .section .rodata, "a" Loading