← Back to team overview

kernel-packages team mailing list archive

[Bug 1410741] [NEW] VDSO clock function may be miss-optimised leading to hangs on SMP systems

 

Public bug reported:

commit 1ddf0b1b11aa8a90cef6706e935fc31c75c406ba
Author: Andy Lutomirski <luto@xxxxxxxxxxxxxx>
Date:   Sun Dec 21 08:57:46 2014 -0800

    x86, vdso: Use asm volatile in __getcpu

    In Linux 3.18 and below, GCC hoists the lsl instructions in the
    pvclock code all the way to the beginning of __vdso_clock_gettime,
    slowing the non-paravirt case significantly.  For unknown reasons,
    presumably related to the removal of a branch, the performance issue
    is gone as of

    e76b027e6408 x86,vdso: Use LSL unconditionally for vgetcpu

    but I don't trust GCC enough to expect the problem to stay fixed.

    There should be no correctness issue, because the __getcpu calls in
    __vdso_vlock_gettime were never necessary in the first place.

    Note to stable maintainers: In 3.18 and below, depending on
    configuration, gcc 4.9.2 generates code like this:

         9c3:       44 0f 03 e8             lsl    %ax,%r13d
         9c7:       45 89 eb                mov    %r13d,%r11d
         9ca:       0f 03 d8                lsl    %ax,%ebx

    This patch won't apply as is to any released kernel, but I'll send a
    trivial backported version if needed.

    Fixes: 51c19b4f5927 x86: vdso: pvclock gettime support
    Cc: stable@xxxxxxxxxxxxxxx # 3.8+
    Cc: Marcelo Tosatti <mtosatti@xxxxxxxxxx>
    Acked-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>
    Signed-off-by: Andy Lutomirski <luto@xxxxxxxxxxxxxx>

===
break-fix: 51c19b4f5927f5a646e93d69f73c7e89ea14e737 1ddf0b1b11aa8a90cef6706e935fc31c75c406ba

** Affects: linux (Ubuntu)
     Importance: Undecided
     Assignee: Andy Whitcroft (apw)
         Status: Triaged

** Affects: linux (Ubuntu Trusty)
     Importance: Undecided
         Status: New

** Affects: linux (Ubuntu Utopic)
     Importance: Undecided
         Status: New

** Affects: linux (Ubuntu Vivid)
     Importance: Undecided
     Assignee: Andy Whitcroft (apw)
         Status: Triaged


** Tags: kernel-bug-break-fix

** Changed in: linux (Ubuntu)
       Status: New => Triaged

** Changed in: linux (Ubuntu)
     Assignee: (unassigned) => Andy Whitcroft (apw)

** Changed in: linux (Ubuntu)
    Milestone: None => ubuntu-15.02

** Also affects: linux (Ubuntu Vivid)
   Importance: Undecided
     Assignee: Andy Whitcroft (apw)
       Status: Triaged

** Also affects: linux (Ubuntu Utopic)
   Importance: Undecided
       Status: New

** Also affects: linux (Ubuntu Trusty)
   Importance: Undecided
       Status: New

** Description changed:

  commit 1ddf0b1b11aa8a90cef6706e935fc31c75c406ba
  Author: Andy Lutomirski <luto@xxxxxxxxxxxxxx>
  Date:   Sun Dec 21 08:57:46 2014 -0800
  
-     x86, vdso: Use asm volatile in __getcpu
-     
-     In Linux 3.18 and below, GCC hoists the lsl instructions in the
-     pvclock code all the way to the beginning of __vdso_clock_gettime,
-     slowing the non-paravirt case significantly.  For unknown reasons,
-     presumably related to the removal of a branch, the performance issue
-     is gone as of
-     
-     e76b027e6408 x86,vdso: Use LSL unconditionally for vgetcpu
-     
-     but I don't trust GCC enough to expect the problem to stay fixed.
-     
-     There should be no correctness issue, because the __getcpu calls in
-     __vdso_vlock_gettime were never necessary in the first place.
-     
-     Note to stable maintainers: In 3.18 and below, depending on
-     configuration, gcc 4.9.2 generates code like this:
-     
-          9c3:       44 0f 03 e8             lsl    %ax,%r13d
-          9c7:       45 89 eb                mov    %r13d,%r11d
-          9ca:       0f 03 d8                lsl    %ax,%ebx
-     
-     This patch won't apply as is to any released kernel, but I'll send a
-     trivial backported version if needed.
-     
-     Fixes: 51c19b4f5927 x86: vdso: pvclock gettime support
-     Cc: stable@xxxxxxxxxxxxxxx # 3.8+
-     Cc: Marcelo Tosatti <mtosatti@xxxxxxxxxx>
-     Acked-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>
-     Signed-off-by: Andy Lutomirski <luto@xxxxxxxxxxxxxx>
+     x86, vdso: Use asm volatile in __getcpu
+ 
+     In Linux 3.18 and below, GCC hoists the lsl instructions in the
+     pvclock code all the way to the beginning of __vdso_clock_gettime,
+     slowing the non-paravirt case significantly.  For unknown reasons,
+     presumably related to the removal of a branch, the performance issue
+     is gone as of
+ 
+     e76b027e6408 x86,vdso: Use LSL unconditionally for vgetcpu
+ 
+     but I don't trust GCC enough to expect the problem to stay fixed.
+ 
+     There should be no correctness issue, because the __getcpu calls in
+     __vdso_vlock_gettime were never necessary in the first place.
+ 
+     Note to stable maintainers: In 3.18 and below, depending on
+     configuration, gcc 4.9.2 generates code like this:
+ 
+          9c3:       44 0f 03 e8             lsl    %ax,%r13d
+          9c7:       45 89 eb                mov    %r13d,%r11d
+          9ca:       0f 03 d8                lsl    %ax,%ebx
+ 
+     This patch won't apply as is to any released kernel, but I'll send a
+     trivial backported version if needed.
+ 
+     Fixes: 51c19b4f5927 x86: vdso: pvclock gettime support
+     Cc: stable@xxxxxxxxxxxxxxx # 3.8+
+     Cc: Marcelo Tosatti <mtosatti@xxxxxxxxxx>
+     Acked-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>
+     Signed-off-by: Andy Lutomirski <luto@xxxxxxxxxxxxxx>
+ 
+ ===
+ break-fix: 51c19b4f5927f5a646e93d69f73c7e89ea14e737 1ddf0b1b11aa8a90cef6706e935fc31c75c406ba

** Tags added: kernel-bug-break-fix

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to linux in Ubuntu.
https://bugs.launchpad.net/bugs/1410741

Title:
  VDSO clock function may be miss-optimised leading to hangs on SMP
  systems

Status in linux package in Ubuntu:
  Triaged
Status in linux source package in Trusty:
  New
Status in linux source package in Utopic:
  New
Status in linux source package in Vivid:
  Triaged

Bug description:
  commit 1ddf0b1b11aa8a90cef6706e935fc31c75c406ba
  Author: Andy Lutomirski <luto@xxxxxxxxxxxxxx>
  Date:   Sun Dec 21 08:57:46 2014 -0800

      x86, vdso: Use asm volatile in __getcpu

      In Linux 3.18 and below, GCC hoists the lsl instructions in the
      pvclock code all the way to the beginning of __vdso_clock_gettime,
      slowing the non-paravirt case significantly.  For unknown reasons,
      presumably related to the removal of a branch, the performance issue
      is gone as of

      e76b027e6408 x86,vdso: Use LSL unconditionally for vgetcpu

      but I don't trust GCC enough to expect the problem to stay fixed.

      There should be no correctness issue, because the __getcpu calls in
      __vdso_vlock_gettime were never necessary in the first place.

      Note to stable maintainers: In 3.18 and below, depending on
      configuration, gcc 4.9.2 generates code like this:

           9c3:       44 0f 03 e8             lsl    %ax,%r13d
           9c7:       45 89 eb                mov    %r13d,%r11d
           9ca:       0f 03 d8                lsl    %ax,%ebx

      This patch won't apply as is to any released kernel, but I'll send a
      trivial backported version if needed.

      Fixes: 51c19b4f5927 x86: vdso: pvclock gettime support
      Cc: stable@xxxxxxxxxxxxxxx # 3.8+
      Cc: Marcelo Tosatti <mtosatti@xxxxxxxxxx>
      Acked-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>
      Signed-off-by: Andy Lutomirski <luto@xxxxxxxxxxxxxx>

  ===
  break-fix: 51c19b4f5927f5a646e93d69f73c7e89ea14e737 1ddf0b1b11aa8a90cef6706e935fc31c75c406ba

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1410741/+subscriptions


Follow ups

References