mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
KVM: PPC: Book3S HV: Fix mask size for emulated msgsndp
According to ISAv3.1 and ISAv3.0b, the msgsndp is described to split RB in: msgtype <- (RB) 32:36 payload <- (RB) 37:63 t <- (RB) 57:63 The current way of getting 'msgtype', and 't' is missing their MSB: msgtype: ((arg >> 27) & 0xf) : Gets (RB) 33:36, missing bit 32 t: (arg &= 0x3f) : Gets (RB) 58:63, missing bit 57 Fixes this by applying the correct mask. Signed-off-by: Leonardo Bras <leobras.c@gmail.com> Acked-by: Paul Mackerras <paulus@ozlabs.org> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20201208215707.31149-1-leobras.c@gmail.com
This commit is contained in:
parent
a300bf8c5f
commit
87fb4978ef
@ -1241,9 +1241,9 @@ static int kvmppc_emulate_doorbell_instr(struct kvm_vcpu *vcpu)
|
||||
switch (get_xop(inst)) {
|
||||
case OP_31_XOP_MSGSNDP:
|
||||
arg = kvmppc_get_gpr(vcpu, rb);
|
||||
if (((arg >> 27) & 0xf) != PPC_DBELL_SERVER)
|
||||
if (((arg >> 27) & 0x1f) != PPC_DBELL_SERVER)
|
||||
break;
|
||||
arg &= 0x3f;
|
||||
arg &= 0x7f;
|
||||
if (arg >= kvm->arch.emul_smt_mode)
|
||||
break;
|
||||
tvcpu = kvmppc_find_vcpu(kvm, vcpu->vcpu_id - thr + arg);
|
||||
@ -1256,7 +1256,7 @@ static int kvmppc_emulate_doorbell_instr(struct kvm_vcpu *vcpu)
|
||||
break;
|
||||
case OP_31_XOP_MSGCLRP:
|
||||
arg = kvmppc_get_gpr(vcpu, rb);
|
||||
if (((arg >> 27) & 0xf) != PPC_DBELL_SERVER)
|
||||
if (((arg >> 27) & 0x1f) != PPC_DBELL_SERVER)
|
||||
break;
|
||||
vcpu->arch.vcore->dpdes = 0;
|
||||
vcpu->arch.doorbell_request = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user