mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 19:00:25 +00:00
KVM: s390: protvirt: Handle SE notification interceptions
Since there is no interception for load control and load psw instruction in the protected mode, we need a new way to get notified whenever we can inject an IRQ right after the guest has just enabled the possibility for receiving them. The new interception codes solve that problem by providing a notification for changes to IRQ enablement relevant bits in CRs 0, 6 and 14, as well a the machine check mask bit in the PSW. No special handling is needed for these interception codes, the KVM pre-run code will consult all necessary CRs and PSW bits and inject IRQs the guest is enabled for. Signed-off-by: Janosch Frank <frankja@linux.ibm.com> Reviewed-by: David Hildenbrand <david@redhat.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> [borntraeger@de.ibm.com: patch merging, splitting, fixing] Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
This commit is contained in:
parent
1274800792
commit
49710db081
2 changed files with 12 additions and 1 deletions
|
@ -215,6 +215,8 @@ struct kvm_s390_sie_block {
|
|||
#define ICPT_PARTEXEC 0x38
|
||||
#define ICPT_IOINST 0x40
|
||||
#define ICPT_KSS 0x5c
|
||||
#define ICPT_MCHKREQ 0x60
|
||||
#define ICPT_INT_ENABLE 0x64
|
||||
__u8 icptcode; /* 0x0050 */
|
||||
__u8 icptstatus; /* 0x0051 */
|
||||
__u16 ihcpu; /* 0x0052 */
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
/*
|
||||
* in-kernel handling for sie intercepts
|
||||
*
|
||||
* Copyright IBM Corp. 2008, 2014
|
||||
* Copyright IBM Corp. 2008, 2020
|
||||
*
|
||||
* Author(s): Carsten Otte <cotte@de.ibm.com>
|
||||
* Christian Borntraeger <borntraeger@de.ibm.com>
|
||||
|
@ -480,6 +480,15 @@ int kvm_handle_sie_intercept(struct kvm_vcpu *vcpu)
|
|||
case ICPT_KSS:
|
||||
rc = kvm_s390_skey_check_enable(vcpu);
|
||||
break;
|
||||
case ICPT_MCHKREQ:
|
||||
case ICPT_INT_ENABLE:
|
||||
/*
|
||||
* PSW bit 13 or a CR (0, 6, 14) changed and we might
|
||||
* now be able to deliver interrupts. The pre-run code
|
||||
* will take care of this.
|
||||
*/
|
||||
rc = 0;
|
||||
break;
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue