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