1. 31 Jul, 2014 2 commits
    • Greg Kroah-Hartman's avatar
      Linux 3.10.51 · 10a62249
      Greg Kroah-Hartman authored
      10a62249
    • Linus Torvalds's avatar
      Fix gcc-4.9.0 miscompilation of load_balance() in scheduler · e1d8240b
      Linus Torvalds authored
      commit 2062afb4f804afef61cbe62a30cac9a46e58e067 upstream.
      
      Michel Dänzer and a couple of other people reported inexplicable random
      oopses in the scheduler, and the cause turns out to be gcc mis-compiling
      the load_balance() function when debugging is enabled.  The gcc bug
      apparently goes back to gcc-4.5, but slight optimization changes means
      that it now showed up as a problem in 4.9.0 and 4.9.1.
      
      The instruction scheduling problem causes gcc to schedule a spill
      operation to before the stack frame has been created, which in turn can
      corrupt the spilled value if an interrupt comes in.  There may be other
      effects of this bug too, but that's the code generation problem seen in
      Michel's case.
      
      This is fixed in current gcc HEAD, but the workaround as suggested by
      Markus Trippelsdorf is pretty simple: use -fno-var-tracking-assignments
      when compiling the kernel, which disables the gcc code that causes the
      problem.  This can result in slightly worse debug information for
      variable accesses, but that is infinitely preferable to actual code
      generation problems.
      
      Doing this unconditionally (not just for CONFIG_DEBUG_INFO) also allows
      non-debug builds to verify that the debug build would be identical: we
      can do
      
          export GCC_COMPARE_DEBUG=1
      
      to make gcc internally verify that the result of the build is
      independent of the "-g" flag (it will make the compiler build everything
      twice, toggling the debug flag, and compare the results).
      
      Without the "-fno-var-tracking-assignments" option, the build would fail
      (even with 4.8.3 that didn't show the actual stack frame bug) with a gcc
      compare failure.
      
      See also gcc bugzilla:
      
        https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61801Reported-by: default avatarMichel Dänzer <michel@daenzer.net>
      Suggested-by: default avatarMarkus Trippelsdorf <markus@trippelsdorf.de>
      Cc: Jakub Jelinek <jakub@redhat.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e1d8240b
  2. 28 Jul, 2014 1 commit
  3. 17 Jul, 2014 1 commit
  4. 09 Jul, 2014 1 commit
  5. 07 Jul, 2014 1 commit
  6. 01 Jul, 2014 1 commit
  7. 26 Jun, 2014 1 commit
  8. 16 Jun, 2014 1 commit
  9. 11 Jun, 2014 1 commit
  10. 07 Jun, 2014 1 commit
  11. 31 May, 2014 1 commit
  12. 13 May, 2014 1 commit
  13. 06 May, 2014 1 commit
  14. 27 Apr, 2014 1 commit
  15. 14 Apr, 2014 1 commit
  16. 03 Apr, 2014 1 commit
  17. 31 Mar, 2014 1 commit
  18. 24 Mar, 2014 1 commit
  19. 07 Mar, 2014 1 commit
  20. 22 Feb, 2014 1 commit
  21. 20 Feb, 2014 1 commit
  22. 13 Feb, 2014 1 commit
  23. 06 Feb, 2014 1 commit
  24. 25 Jan, 2014 1 commit
  25. 15 Jan, 2014 1 commit
  26. 09 Jan, 2014 1 commit
  27. 20 Dec, 2013 1 commit
  28. 12 Dec, 2013 1 commit
  29. 08 Dec, 2013 1 commit
  30. 04 Dec, 2013 1 commit
  31. 29 Nov, 2013 1 commit
  32. 20 Nov, 2013 1 commit
  33. 13 Nov, 2013 1 commit
  34. 04 Nov, 2013 1 commit
  35. 18 Oct, 2013 1 commit
  36. 13 Oct, 2013 1 commit
  37. 05 Oct, 2013 1 commit
  38. 01 Oct, 2013 1 commit
  39. 27 Sep, 2013 1 commit