KVM: s390: inject PER i-fetch events on applicable icpts
In case we have to emuluate an instruction or part of it (instruction, partial instruction, operation exception), we have to inject a PER instruction-fetching event for that instruction, if hardware told us to do so. In case we retry an instruction, we must not inject the PER event. Please note that we don't filter the events properly yet, so guest debugging will be visible for the guest. Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
This commit is contained in:

committad av
Christian Borntraeger

förälder
196f20ca52
incheckning
5ffe466cd3
@@ -439,6 +439,23 @@ exit_required:
|
||||
#define guest_per_enabled(vcpu) \
|
||||
(vcpu->arch.sie_block->gpsw.mask & PSW_MASK_PER)
|
||||
|
||||
int kvm_s390_handle_per_ifetch_icpt(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
const u8 ilen = kvm_s390_get_ilen(vcpu);
|
||||
struct kvm_s390_pgm_info pgm_info = {
|
||||
.code = PGM_PER,
|
||||
.per_code = PER_EVENT_IFETCH >> 24,
|
||||
.per_address = __rewind_psw(vcpu->arch.sie_block->gpsw, ilen),
|
||||
};
|
||||
|
||||
/*
|
||||
* The PSW points to the next instruction, therefore the intercepted
|
||||
* instruction generated a PER i-fetch event. PER address therefore
|
||||
* points at the previous PSW address (could be an EXECUTE function).
|
||||
*/
|
||||
return kvm_s390_inject_prog_irq(vcpu, &pgm_info);
|
||||
}
|
||||
|
||||
static void filter_guest_per_event(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
u32 perc = vcpu->arch.sie_block->perc << 24;
|
||||
|
Referens i nytt ärende
Block a user