diff options
Diffstat (limited to 'arch/s390')
-rw-r--r-- | arch/s390/include/asm/kvm_host.h | 5 | ||||
-rw-r--r-- | arch/s390/kvm/interrupt.c | 4 |
2 files changed, 9 insertions, 0 deletions
diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h index e5d082c4f3aa..00ff00dfb24c 100644 --- a/arch/s390/include/asm/kvm_host.h +++ b/arch/s390/include/asm/kvm_host.h | |||
@@ -174,6 +174,10 @@ struct kvm_s390_prefix_info { | |||
174 | __u32 address; | 174 | __u32 address; |
175 | }; | 175 | }; |
176 | 176 | ||
177 | struct kvm_s390_emerg_info { | ||
178 | __u16 code; | ||
179 | }; | ||
180 | |||
177 | struct kvm_s390_interrupt_info { | 181 | struct kvm_s390_interrupt_info { |
178 | struct list_head list; | 182 | struct list_head list; |
179 | u64 type; | 183 | u64 type; |
@@ -181,6 +185,7 @@ struct kvm_s390_interrupt_info { | |||
181 | struct kvm_s390_io_info io; | 185 | struct kvm_s390_io_info io; |
182 | struct kvm_s390_ext_info ext; | 186 | struct kvm_s390_ext_info ext; |
183 | struct kvm_s390_pgm_info pgm; | 187 | struct kvm_s390_pgm_info pgm; |
188 | struct kvm_s390_emerg_info emerg; | ||
184 | struct kvm_s390_prefix_info prefix; | 189 | struct kvm_s390_prefix_info prefix; |
185 | }; | 190 | }; |
186 | }; | 191 | }; |
diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c index 35c21bf910c5..c9aeb4b4d0b8 100644 --- a/arch/s390/kvm/interrupt.c +++ b/arch/s390/kvm/interrupt.c | |||
@@ -128,6 +128,10 @@ static void __do_deliver_interrupt(struct kvm_vcpu *vcpu, | |||
128 | if (rc == -EFAULT) | 128 | if (rc == -EFAULT) |
129 | exception = 1; | 129 | exception = 1; |
130 | 130 | ||
131 | rc = put_guest_u16(vcpu, __LC_CPU_ADDRESS, inti->emerg.code); | ||
132 | if (rc == -EFAULT) | ||
133 | exception = 1; | ||
134 | |||
131 | rc = copy_to_guest(vcpu, __LC_EXT_OLD_PSW, | 135 | rc = copy_to_guest(vcpu, __LC_EXT_OLD_PSW, |
132 | &vcpu->arch.sie_block->gpsw, sizeof(psw_t)); | 136 | &vcpu->arch.sie_block->gpsw, sizeof(psw_t)); |
133 | if (rc == -EFAULT) | 137 | if (rc == -EFAULT) |