Skip to contentSkip to conversation

emulator: inc/dec can have lock prefix

PATCH Applied Gleb Natapov 3 participants 5 messages Jul 13, 2010 – Jul 14, 2010

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

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
index 255473f..b38bd8b 100644
@@ -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.

#1 lore raw
Quoted 11 lines · Gleb Natapov

Mark inc (0xfe/0 0xff/0) and dec (0xfe/1 0xff/1) as lock prefix capable.

arch/x86/kvm/emulate.c +0 -0
index 255473f..b38bd8b 100644
@@ -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
#2 lore raw
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.

arch/x86/kvm/emulate.c +1 -1
index 255473f..b38bd8b 100644
@@ -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.

#3 lore raw
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