Message ID | 1467657315-19975-9-git-send-email-james.hogan@imgtec.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hello. On 7/4/2016 9:35 PM, James Hogan wrote: > When KVM emulates the RDHWR instruction, decode the instruction more > strictly. The rs field (bits 25:21) should be zero, as should bits 10:9. > Bits 8:6 is the register select field in MIPSr6, so we aren't strict > about those bits (no other operations should use that encoding space). > > Signed-off-by: James Hogan <james.hogan@imgtec.com> > Cc: Paolo Bonzini <pbonzini@redhat.com> > Cc: Radim Krčmář <rkrcmar@redhat.com> > Cc: Ralf Baechle <ralf@linux-mips.org> > Cc: linux-mips@linux-mips.org > Cc: kvm@vger.kernel.org > --- > arch/mips/kvm/emulate.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/arch/mips/kvm/emulate.c b/arch/mips/kvm/emulate.c > index 62e6a7b313ae..be18dfe9ecaa 100644 > --- a/arch/mips/kvm/emulate.c > +++ b/arch/mips/kvm/emulate.c > @@ -2357,7 +2357,9 @@ enum emulation_result kvm_mips_handle_ri(u32 cause, u32 *opc, > } > > if (inst.r_format.opcode == spec3_op && > - inst.r_format.func == rdhwr_op) { > + inst.r_format.func == rdhwr_op && > + inst.r_format.rs == 0 && > + (inst.r_format.re >> 3) == 0) { Inner parens not necessary here. [...] MBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 05/07/2016 13:16, Sergei Shtylyov wrote: >> if (inst.r_format.opcode == spec3_op && >> - inst.r_format.func == rdhwr_op) { >> + inst.r_format.func == rdhwr_op && >> + inst.r_format.rs == 0 && >> + (inst.r_format.re >> 3) == 0) { > > Inner parens not necessary here. They are nicer though. Paolo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, Jul 05, 2016 at 02:16:48PM +0300, Sergei Shtylyov wrote: > > When KVM emulates the RDHWR instruction, decode the instruction more > > strictly. The rs field (bits 25:21) should be zero, as should bits 10:9. > > Bits 8:6 is the register select field in MIPSr6, so we aren't strict > > about those bits (no other operations should use that encoding space). > > > > Signed-off-by: James Hogan <james.hogan@imgtec.com> > > Cc: Paolo Bonzini <pbonzini@redhat.com> > > Cc: Radim Krčmář <rkrcmar@redhat.com> > > Cc: Ralf Baechle <ralf@linux-mips.org> > > Cc: linux-mips@linux-mips.org > > Cc: kvm@vger.kernel.org > > --- > > arch/mips/kvm/emulate.c | 4 +++- > > 1 file changed, 3 insertions(+), 1 deletion(-) > > > > diff --git a/arch/mips/kvm/emulate.c b/arch/mips/kvm/emulate.c > > index 62e6a7b313ae..be18dfe9ecaa 100644 > > --- a/arch/mips/kvm/emulate.c > > +++ b/arch/mips/kvm/emulate.c > > @@ -2357,7 +2357,9 @@ enum emulation_result kvm_mips_handle_ri(u32 cause, u32 *opc, > > } > > > > if (inst.r_format.opcode == spec3_op && > > - inst.r_format.func == rdhwr_op) { > > + inst.r_format.func == rdhwr_op && > > + inst.r_format.rs == 0 && > > + (inst.r_format.re >> 3) == 0) { > > Inner parens not necessary here. While I often strip unnecessary parens from patches I apply my guideline for leaving them in is that nobody should need to know all C operator priorities by heart. Ralf -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 07/05/2016 03:39 PM, Paolo Bonzini wrote: >>> if (inst.r_format.opcode == spec3_op && >>> - inst.r_format.func == rdhwr_op) { >>> + inst.r_format.func == rdhwr_op && >>> + inst.r_format.rs == 0 && >>> + (inst.r_format.re >> 3) == 0) { >> >> Inner parens not necessary here. > > They are nicer though. I wouldn't say so... > Paolo MBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/mips/kvm/emulate.c b/arch/mips/kvm/emulate.c index 62e6a7b313ae..be18dfe9ecaa 100644 --- a/arch/mips/kvm/emulate.c +++ b/arch/mips/kvm/emulate.c @@ -2357,7 +2357,9 @@ enum emulation_result kvm_mips_handle_ri(u32 cause, u32 *opc, } if (inst.r_format.opcode == spec3_op && - inst.r_format.func == rdhwr_op) { + inst.r_format.func == rdhwr_op && + inst.r_format.rs == 0 && + (inst.r_format.re >> 3) == 0) { int usermode = !KVM_GUEST_KERNEL_MODE(vcpu); int rd = inst.r_format.rd; int rt = inst.r_format.rt;
When KVM emulates the RDHWR instruction, decode the instruction more strictly. The rs field (bits 25:21) should be zero, as should bits 10:9. Bits 8:6 is the register select field in MIPSr6, so we aren't strict about those bits (no other operations should use that encoding space). Signed-off-by: James Hogan <james.hogan@imgtec.com> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Radim Krčmář <rkrcmar@redhat.com> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: linux-mips@linux-mips.org Cc: kvm@vger.kernel.org --- arch/mips/kvm/emulate.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)