|
@@ -27,13 +27,13 @@ static int diag_release_pages(struct kvm_vcpu *vcpu)
|
|
|
|
|
|
start = vcpu->run->s.regs.gprs[(vcpu->arch.sie_block->ipa & 0xf0) >> 4];
|
|
start = vcpu->run->s.regs.gprs[(vcpu->arch.sie_block->ipa & 0xf0) >> 4];
|
|
end = vcpu->run->s.regs.gprs[vcpu->arch.sie_block->ipa & 0xf] + 4096;
|
|
end = vcpu->run->s.regs.gprs[vcpu->arch.sie_block->ipa & 0xf] + 4096;
|
|
|
|
+ vcpu->stat.diagnose_10++;
|
|
|
|
|
|
if (start & ~PAGE_MASK || end & ~PAGE_MASK || start >= end
|
|
if (start & ~PAGE_MASK || end & ~PAGE_MASK || start >= end
|
|
|| start < 2 * PAGE_SIZE)
|
|
|| start < 2 * PAGE_SIZE)
|
|
return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
|
|
return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
|
|
|
|
|
|
VCPU_EVENT(vcpu, 5, "diag release pages %lX %lX", start, end);
|
|
VCPU_EVENT(vcpu, 5, "diag release pages %lX %lX", start, end);
|
|
- vcpu->stat.diagnose_10++;
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
* We checked for start >= end above, so lets check for the
|
|
* We checked for start >= end above, so lets check for the
|
|
@@ -75,6 +75,7 @@ static int __diag_page_ref_service(struct kvm_vcpu *vcpu)
|
|
u16 rx = (vcpu->arch.sie_block->ipa & 0xf0) >> 4;
|
|
u16 rx = (vcpu->arch.sie_block->ipa & 0xf0) >> 4;
|
|
u16 ry = (vcpu->arch.sie_block->ipa & 0x0f);
|
|
u16 ry = (vcpu->arch.sie_block->ipa & 0x0f);
|
|
|
|
|
|
|
|
+ vcpu->stat.diagnose_258++;
|
|
if (vcpu->run->s.regs.gprs[rx] & 7)
|
|
if (vcpu->run->s.regs.gprs[rx] & 7)
|
|
return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
|
|
return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
|
|
rc = read_guest(vcpu, vcpu->run->s.regs.gprs[rx], rx, &parm, sizeof(parm));
|
|
rc = read_guest(vcpu, vcpu->run->s.regs.gprs[rx], rx, &parm, sizeof(parm));
|
|
@@ -175,6 +176,7 @@ static int __diag_ipl_functions(struct kvm_vcpu *vcpu)
|
|
unsigned long subcode = vcpu->run->s.regs.gprs[reg] & 0xffff;
|
|
unsigned long subcode = vcpu->run->s.regs.gprs[reg] & 0xffff;
|
|
|
|
|
|
VCPU_EVENT(vcpu, 5, "diag ipl functions, subcode %lx", subcode);
|
|
VCPU_EVENT(vcpu, 5, "diag ipl functions, subcode %lx", subcode);
|
|
|
|
+ vcpu->stat.diagnose_308++;
|
|
switch (subcode) {
|
|
switch (subcode) {
|
|
case 3:
|
|
case 3:
|
|
vcpu->run->s390_reset_flags = KVM_S390_RESET_CLEAR;
|
|
vcpu->run->s390_reset_flags = KVM_S390_RESET_CLEAR;
|
|
@@ -202,6 +204,7 @@ static int __diag_virtio_hypercall(struct kvm_vcpu *vcpu)
|
|
{
|
|
{
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
|
|
+ vcpu->stat.diagnose_500++;
|
|
/* No virtio-ccw notification? Get out quickly. */
|
|
/* No virtio-ccw notification? Get out quickly. */
|
|
if (!vcpu->kvm->arch.css_support ||
|
|
if (!vcpu->kvm->arch.css_support ||
|
|
(vcpu->run->s.regs.gprs[1] != KVM_S390_VIRTIO_CCW_NOTIFY))
|
|
(vcpu->run->s.regs.gprs[1] != KVM_S390_VIRTIO_CCW_NOTIFY))
|