emulator: inc/dec can have lock prefix
PATCH 1/1 emulator: inc/dec can have lock prefix
Mark inc (0xfe/0 0xff/0) and dec (0xfe/1 0xff/1) as lock prefix capable.
arch/x86/kvm/emulate.c +2 -2
@@ -345,10 +345,10 @@ static u32 group_table[] = { DstMem | SrcNone | ModRM, DstMem | SrcNone | ModRM, 0, 0, 0, 0, [Group4*8 ] = - ByteOp | DstMem | SrcNone | ModRM, ByteOp | DstMem | SrcNone | ModRM, + ByteOp | DstMem | SrcNone | ModRM | Lock, ByteOp | DstMem | SrcNone | ModRM | Lock, 0, 0, 0, 0, 0, 0, [Group5*8 ] = - DstMem | SrcNone | ModRM, DstMem | SrcNone | ModRM, + DstMem | SrcNone | ModRM | Lock, DstMem | SrcNone | ModRM | Lock, SrcMem | ModRM | Stack,0 , SrcMem | ModRM | Stack, SrcMemFAddr | ModRM | ImplicitOps, SrcMem | ModRM | Stack, 0,
--
Gleb.
Quoted 11 lines · Gleb Natapov
Mark inc (0xfe/0 0xff/0) and dec (0xfe/1 0xff/1) as lock prefix capable.
Signed-off-by Gleb Natapov<[email protected]>arch/x86/kvm/emulate.c +0
-0@@ -345,10 +345,10 @@ static u32 group_table[] = { DstMem | SrcNone | ModRM, DstMem | SrcNone | ModRM, 0, 0, 0, 0,
arch/x86/kvm/emulate.c static u32 group_table[] = { · line 354
Quoted 10 lines
arch/x86/kvm/emulate.c +2
-2[Group4*8 ] = - ByteOp | DstMem | SrcNone | ModRM, ByteOp | DstMem | SrcNone | ModRM, + ByteOp | DstMem | SrcNone | ModRM | Lock, ByteOp | DstMem | SrcNone | ModRM | Lock, 0, 0, 0, 0, 0, 0, [Group5*8 ] = - DstMem | SrcNone | ModRM, DstMem | SrcNone | ModRM, + DstMem | SrcNone | ModRM | Lock, DstMem | SrcNone | ModRM | Lock, SrcMem | ModRM | Stack,0 , SrcMem | ModRM | Stack, SrcMemFAddr | ModRM | ImplicitOps, SrcMem | ModRM | Stack, 0,
Right. Please post a regression test as well (kvm/test/x86/emulator.c).
Did this occur on a real workload?
Signature · 1 line
error compiling committee.c: too many arguments to function
Quoted 15 lines · Avi Kivity
Quoted 14 lines · Gleb Natapov
Mark inc (0xfe/0 0xff/0) and dec (0xfe/1 0xff/1) as lock prefix capable.
Signed-off-by Gleb Natapov<[email protected]>arch/x86/kvm/emulate.c +1
-1@@ -345,10 +345,10 @@ static u32 group_table[] = { DstMem | SrcNone | ModRM, DstMem | SrcNone | ModRM, 0, 0, 0, 0, [Group4*8 ] = - ByteOp | DstMem | SrcNone | ModRM, ByteOp | DstMem | SrcNone | ModRM, + ByteOp | DstMem | SrcNone | ModRM | Lock, ByteOp | DstMem | SrcNone | ModRM | Lock, 0, 0, 0, 0, 0, 0,
Quoted 9 lines
arch/x86/kvm/emulate.c static u32 group_table[] = { · line 354
Quoted 6 lines
arch/x86/kvm/emulate.c +1
-1[Group5*8 ] = - DstMem | SrcNone | ModRM, DstMem | SrcNone | ModRM, + DstMem | SrcNone | ModRM | Lock, DstMem | SrcNone | ModRM | Lock, SrcMem | ModRM | Stack,0 , SrcMem | ModRM | Stack, SrcMemFAddr | ModRM | ImplicitOps, SrcMem | ModRM | Stack, 0,Right. Please post a regression test as well (
kvm/test/x86/emulator.c).
OK.
Quoted 2 lines
Did this occur on a real workload?
Yes, RHEL6 guest on RHEL6 host without ept.
--
Gleb.
Quoted 7 lines · Gleb Natapov
Quoted 4 lines
Did this occur on a real workload?
Yes, RHEL6 guest on RHEL6 host without ept.
Ah, I wondered what load would use lock inc/dec on a pagetable or mmio, but that doesn't need to happen, all it takes is 'inc lock' on a recycled pagetable.
Signature · 1 line
error compiling committee.c: too many arguments to function
Marcelo Tosatti
AppliedQuoted 3 lines · Gleb Natapov
Mark inc (0xfe/0 0xff/0) and dec (0xfe/1 0xff/1) as lock prefix capable.
Signed-off-by Gleb Natapov <[email protected]>
Applied, thanks.