static int handle_store_cpu_address(struct kvm_vcpu *vcpu) { u64 useraddr; int rc; vcpu->stat.instruction_stap++; useraddr = kvm_s390_get_base_disp_s(vcpu); if (useraddr & 1) { kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION); goto out; } rc = put_guest_u16(vcpu, useraddr, vcpu->vcpu_id); if (rc == -EFAULT) { kvm_s390_inject_program_int(vcpu, PGM_ADDRESSING); goto out; } VCPU_EVENT(vcpu, 5, "storing cpu address to %llx", useraddr); trace_kvm_s390_handle_stap(vcpu, useraddr); out: return 0; }
static int handle_store_cpu_address(struct kvm_vcpu *vcpu) { u64 useraddr; vcpu->stat.instruction_stap++; if (vcpu->arch.sie_block->gpsw.mask & PSW_MASK_PSTATE) return kvm_s390_inject_program_int(vcpu, PGM_PRIVILEGED_OP); useraddr = kvm_s390_get_base_disp_s(vcpu); if (useraddr & 1) return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION); if (put_guest(vcpu, vcpu->vcpu_id, (u16 __user *)useraddr)) return kvm_s390_inject_program_int(vcpu, PGM_ADDRESSING); VCPU_EVENT(vcpu, 5, "storing cpu address to %llx", useraddr); trace_kvm_s390_handle_stap(vcpu, useraddr); return 0; }