diff mbox

target-i386: key sfence availability on CPUID_SSE, not CPUID_SSE2

Message ID 1463389979-16348-1-git-send-email-pbonzini@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Paolo Bonzini May 16, 2016, 9:12 a.m. UTC
sfence was introduced before lfence and mfence.  This fixes Linux
2.4's measurement of checksumming speeds for the pIII_sse
algorithm:

md: linear personality registered as nr 1
md: raid0 personality registered as nr 2
md: raid1 personality registered as nr 3
md: raid5 personality registered as nr 4
raid5: measuring checksumming speed
   8regs     :   384.400 MB/sec
   32regs    :   259.200 MB/sec
invalid operand: 0000
CPU:    0
EIP:    0010:[<c0240b2a>]    Not tainted
EFLAGS: 00000246
eax: c15d8000   ebx: 00000000   ecx: 00000000   edx: c15d5000
esi: 8005003b   edi: 00000004   ebp: 00000000   esp: c15bdf50
ds: 0018   es: 0018   ss: 0018
Process swapper (pid: 1, stackpage=c15bd000)
Stack: 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000
       00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000
       00000000 00000206 c0241c6c 00001000 c15d4000 c15d7000 c15d4000
c15d4000
Call Trace:    [<c0241c6c>] [<c0105000>] [<c0241db4>] [<c010503b>]
[<c0105000>]
  [<c0107416>] [<c0105030>]

Code: 0f ae f8 0f 10 04 24 0f 10 4c 24 10 0f 10 54 24 20 0f 10 5c
 <0>Kernel panic: Attempted to kill init!

Reported-by: Stefan Weil <sw@weilnetz.de>
Fixes: 121f3157887f92268a3d6169e2d4601f9292020b
Cc: qemu-stable@nongnu.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 target-i386/translate.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Stefan Weil May 16, 2016, 9:54 a.m. UTC | #1
Am 16.05.2016 um 11:12 schrieb Paolo Bonzini:
> sfence was introduced before lfence and mfence.  This fixes Linux
> 2.4's measurement of checksumming speeds for the pIII_sse
> algorithm:
> 
> md: linear personality registered as nr 1
> md: raid0 personality registered as nr 2
> md: raid1 personality registered as nr 3
> md: raid5 personality registered as nr 4
> raid5: measuring checksumming speed
>    8regs     :   384.400 MB/sec
>    32regs    :   259.200 MB/sec
> invalid operand: 0000


It works now again. Thanks for the fast fix.
I think we'll need a 2.6.1 soon, maybe after solving the VGA regression.

Tested-by: Stefan Weil <sw@weilnetz.de>
Richard Henderson May 16, 2016, 3:14 p.m. UTC | #2
On 05/16/2016 02:12 AM, Paolo Bonzini wrote:
> sfence was introduced before lfence and mfence.  This fixes Linux
> 2.4's measurement of checksumming speeds for the pIII_sse
> algorithm:
>
> md: linear personality registered as nr 1
> md: raid0 personality registered as nr 2
> md: raid1 personality registered as nr 3
> md: raid5 personality registered as nr 4
> raid5: measuring checksumming speed
>    8regs     :   384.400 MB/sec
>    32regs    :   259.200 MB/sec
> invalid operand: 0000
> CPU:    0
> EIP:    0010:[<c0240b2a>]    Not tainted
> EFLAGS: 00000246
> eax: c15d8000   ebx: 00000000   ecx: 00000000   edx: c15d5000
> esi: 8005003b   edi: 00000004   ebp: 00000000   esp: c15bdf50
> ds: 0018   es: 0018   ss: 0018
> Process swapper (pid: 1, stackpage=c15bd000)
> Stack: 00000000 00000000 00000000 00000000 00000000 00000000 00000000
> 00000000
>        00000000 00000000 00000000 00000000 00000000 00000000 00000000
> 00000000
>        00000000 00000206 c0241c6c 00001000 c15d4000 c15d7000 c15d4000
> c15d4000
> Call Trace:    [<c0241c6c>] [<c0105000>] [<c0241db4>] [<c010503b>]
> [<c0105000>]
>   [<c0107416>] [<c0105030>]
>
> Code: 0f ae f8 0f 10 04 24 0f 10 4c 24 10 0f 10 54 24 20 0f 10 5c
>  <0>Kernel panic: Attempted to kill init!
>
> Reported-by: Stefan Weil <sw@weilnetz.de>
> Fixes: 121f3157887f92268a3d6169e2d4601f9292020b
> Cc: qemu-stable@nongnu.org
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  target-i386/translate.c | 5 +++++
>  1 file changed, 5 insertions(+)

Reviewed-by: Richard Henderson <rth@twiddle.net>


r~
diff mbox

Patch

diff --git a/target-i386/translate.c b/target-i386/translate.c
index 1a1214d..69760b4 100644
--- a/target-i386/translate.c
+++ b/target-i386/translate.c
@@ -8002,6 +8002,11 @@  static target_ulong disas_insn(CPUX86State *env, DisasContext *s,
             }
             /* fallthru */
         case 0xf9 ... 0xff: /* sfence */
+            if (!(s->cpuid_features & CPUID_SSE)
+                || (prefixes & PREFIX_LOCK)) {
+                goto illegal_op;
+            }
+            break;
         case 0xe8 ... 0xef: /* lfence */
         case 0xf0 ... 0xf7: /* mfence */
             if (!(s->cpuid_features & CPUID_SSE2)