50f89d
commit c3d8dc45c9df199b8334599a6cbd98c9950dba62
50f89d
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
50f89d
Date:   Thu Oct 11 15:18:40 2018 -0300
50f89d
50f89d
    x86: Fix Haswell strong flags (BZ#23709)
50f89d
    
50f89d
    Th commit 'Disable TSX on some Haswell processors.' (2702856bf4) changed the
50f89d
    default flags for Haswell models.  Previously, new models were handled by the
50f89d
    default switch path, which assumed a Core i3/i5/i7 if AVX is available. After
50f89d
    the patch, Haswell models (0x3f, 0x3c, 0x45, 0x46) do not set the flags
50f89d
    Fast_Rep_String, Fast_Unaligned_Load, Fast_Unaligned_Copy, and
50f89d
    Prefer_PMINUB_for_stringop (only the TSX one).
50f89d
    
50f89d
    This patch fixes it by disentangle the TSX flag handling from the memory
50f89d
    optimization ones.  The strstr case cited on patch now selects the
50f89d
    __strstr_sse2_unaligned as expected for the Haswell cpu.
50f89d
    
50f89d
    Checked on x86_64-linux-gnu.
50f89d
    
50f89d
            [BZ #23709]
50f89d
            * sysdeps/x86/cpu-features.c (init_cpu_features): Set TSX bits
50f89d
            independently of other flags.
50f89d
50f89d
diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c
50f89d
index ea0b64fdb962a934..4695ac80d4148327 100644
50f89d
--- a/sysdeps/x86/cpu-features.c
50f89d
+++ b/sysdeps/x86/cpu-features.c
50f89d
@@ -316,7 +316,13 @@ init_cpu_features (struct cpu_features *cpu_features)
50f89d
 		    | bit_arch_Fast_Unaligned_Copy
50f89d
 		    | bit_arch_Prefer_PMINUB_for_stringop);
50f89d
 	      break;
50f89d
+	    }
50f89d
 
50f89d
+	 /* Disable TSX on some Haswell processors to avoid TSX on kernels that
50f89d
+	    weren't updated with the latest microcode package (which disables
50f89d
+	    broken feature by default).  */
50f89d
+	 switch (model)
50f89d
+	    {
50f89d
 	    case 0x3f:
50f89d
 	      /* Xeon E7 v3 with stepping >= 4 has working TSX.  */
50f89d
 	      if (stepping >= 4)