aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/include/asm/kvm_host.h5
-rw-r--r--arch/s390/kvm/interrupt.c4
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
177struct kvm_s390_emerg_info {
178 __u16 code;
179};
180
177struct kvm_s390_interrupt_info { 181struct 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)