KVM: PPC: Implement mtsr instruction emulation
The Book3S_32 specifications allows for two instructions to modify segment registers: mtsrin and mtsr. Most normal operating systems use mtsrin, because it allows to define which segment it wants to change using a register. But since I was trying to run an embedded guest, it turned out to be using mtsr with hardcoded values. So let's also emulate mtsr. It's a valid instruction after all. Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
committed by
Avi Kivity
parent
e425a6de1a
commit
71db408936
@@ -28,6 +28,7 @@
|
|||||||
#define OP_31_XOP_MFMSR 83
|
#define OP_31_XOP_MFMSR 83
|
||||||
#define OP_31_XOP_MTMSR 146
|
#define OP_31_XOP_MTMSR 146
|
||||||
#define OP_31_XOP_MTMSRD 178
|
#define OP_31_XOP_MTMSRD 178
|
||||||
|
#define OP_31_XOP_MTSR 210
|
||||||
#define OP_31_XOP_MTSRIN 242
|
#define OP_31_XOP_MTSRIN 242
|
||||||
#define OP_31_XOP_TLBIEL 274
|
#define OP_31_XOP_TLBIEL 274
|
||||||
#define OP_31_XOP_TLBIE 306
|
#define OP_31_XOP_TLBIE 306
|
||||||
@@ -101,6 +102,11 @@ int kvmppc_core_emulate_op(struct kvm_run *run, struct kvm_vcpu *vcpu,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case OP_31_XOP_MTSR:
|
||||||
|
vcpu->arch.mmu.mtsrin(vcpu,
|
||||||
|
(inst >> 16) & 0xf,
|
||||||
|
kvmppc_get_gpr(vcpu, get_rs(inst)));
|
||||||
|
break;
|
||||||
case OP_31_XOP_MTSRIN:
|
case OP_31_XOP_MTSRIN:
|
||||||
vcpu->arch.mmu.mtsrin(vcpu,
|
vcpu->arch.mmu.mtsrin(vcpu,
|
||||||
(kvmppc_get_gpr(vcpu, get_rb(inst)) >> 28) & 0xf,
|
(kvmppc_get_gpr(vcpu, get_rb(inst)) >> 28) & 0xf,
|
||||||
|
Reference in New Issue
Block a user