KVM: s390: store the breaking-event address on pgm interrupts
authorDavid Hildenbrand <[email protected]>
Wed, 25 Mar 2015 12:12:32 +0000 (13:12 +0100)
committerChristian Borntraeger <[email protected]>
Tue, 31 Mar 2015 11:49:08 +0000 (13:49 +0200)
If the PER-3 facility is installed, the breaking-event address is to be
stored in the low core.

There is no facility bit for PER-3 in stfl(e) and Linux always uses the
value at address 272 no matter if PER-3 is available or not.
We can't hide its existence from the guest. All program interrupts
injected via the SIE automatically store this information if the PER-3
facility is available in the hypervisor. Also the itdb contains the
address automatically.

As there is no switch to turn this mechanism off, let's simply make it
consistent and also store the breaking event address in case of manual
program interrupt injection.

Reviewed-by: Jens Freimann <[email protected]>
Signed-off-by: David Hildenbrand <[email protected]>
Reviewed-by: Christian Borntraeger <[email protected]>
Signed-off-by: Christian Borntraeger <[email protected]>
Acked-by: Cornelia Huck <[email protected]>
arch/s390/kvm/interrupt.c

index 2afec6006defbf4a29c2d404c0f211928c7202dc..2361b8ed0a5041dc807988bd55b5469d8ffee280 100644 (file)
@@ -585,6 +585,8 @@ static int __must_check __deliver_prog(struct kvm_vcpu *vcpu)
                kvm_s390_rewind_psw(vcpu, ilc);
 
        rc |= put_guest_lc(vcpu, ilc, (u16 *) __LC_PGM_ILC);
+       rc |= put_guest_lc(vcpu, vcpu->arch.sie_block->gbea,
+                                (u64 *) __LC_LAST_BREAK);
        rc |= put_guest_lc(vcpu, pgm_info.code,
                           (u16 *)__LC_PGM_INT_CODE);
        rc |= write_guest_lc(vcpu, __LC_PGM_OLD_PSW,