Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c8ca97ca authored by Bharat Bhushan's avatar Bharat Bhushan Committed by Alexander Graf
Browse files

KVM: PPC: BOOKE : Emulate rfdi instruction



This patch adds "rfdi" instruction emulation which is required for
guest debug hander on BOOKE-HV

Signed-off-by: default avatarBharat Bhushan <Bharat.Bhushan@freescale.com>
Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
parent 9fee7563
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -139,6 +139,7 @@ enum kvm_exit_types {
	EMULATED_TLBWE_EXITS,
	EMULATED_TLBWE_EXITS,
	EMULATED_RFI_EXITS,
	EMULATED_RFI_EXITS,
	EMULATED_RFCI_EXITS,
	EMULATED_RFCI_EXITS,
	EMULATED_RFDI_EXITS,
	DEC_EXITS,
	DEC_EXITS,
	EXT_INTR_EXITS,
	EXT_INTR_EXITS,
	HALT_WAKEUP,
	HALT_WAKEUP,
+13 −0
Original line number Original line Diff line number Diff line
@@ -25,6 +25,7 @@


#define OP_19_XOP_RFI     50
#define OP_19_XOP_RFI     50
#define OP_19_XOP_RFCI    51
#define OP_19_XOP_RFCI    51
#define OP_19_XOP_RFDI    39


#define OP_31_XOP_MFMSR   83
#define OP_31_XOP_MFMSR   83
#define OP_31_XOP_WRTEE   131
#define OP_31_XOP_WRTEE   131
@@ -37,6 +38,12 @@ static void kvmppc_emul_rfi(struct kvm_vcpu *vcpu)
	kvmppc_set_msr(vcpu, vcpu->arch.shared->srr1);
	kvmppc_set_msr(vcpu, vcpu->arch.shared->srr1);
}
}


static void kvmppc_emul_rfdi(struct kvm_vcpu *vcpu)
{
	vcpu->arch.pc = vcpu->arch.dsrr0;
	kvmppc_set_msr(vcpu, vcpu->arch.dsrr1);
}

static void kvmppc_emul_rfci(struct kvm_vcpu *vcpu)
static void kvmppc_emul_rfci(struct kvm_vcpu *vcpu)
{
{
	vcpu->arch.pc = vcpu->arch.csrr0;
	vcpu->arch.pc = vcpu->arch.csrr0;
@@ -65,6 +72,12 @@ int kvmppc_booke_emulate_op(struct kvm_run *run, struct kvm_vcpu *vcpu,
			*advance = 0;
			*advance = 0;
			break;
			break;


		case OP_19_XOP_RFDI:
			kvmppc_emul_rfdi(vcpu);
			kvmppc_set_exit_type(vcpu, EMULATED_RFDI_EXITS);
			*advance = 0;
			break;

		default:
		default:
			emulated = EMULATE_FAIL;
			emulated = EMULATE_FAIL;
			break;
			break;