1. 18 4月, 2013 2 次提交
    • T
      posix-timers: Remove unused variable · d2054b2c
      Thomas Gleixner 提交于
      Remove the unused variable *node introduced by commit 5ed67f05 (posix
      timers: Allocate timer id per process)
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Cc: Pavel Emelyanov <xemul@parallels.com>
      d2054b2c
    • P
      posix timers: Allocate timer id per process (v2) · 5ed67f05
      Pavel Emelyanov 提交于
      Currently kernel generates IDs for posix timers in a global manner --
      there's a kernel-wide IDR tree from which IDs are created. This makes
      it impossible to recreate a timer with a desired ID (in particular
      this is done by the CRIU checkpoint-restore project) -- since these
      IDs are global it may happen, that at the time we recreate a timer, the
      ID we want for it is already busy by some other timer.
      
      In order to address this, replace the IDR tree with a global hash
      table for timers and makes timer IDs unique per signal_struct (to
      which timers are linked anyway). With this, two timers belonging to
      different processes may have equal IDs and we can recreate either of
      them with the ID we want.
      Signed-off-by: NPavel Emelyanov <xemul@parallels.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Michael Kerrisk <mtk.manpages@gmail.com>
      Cc: Matthew Helsley <matt.helsley@gmail.com>
      Link: http://lkml.kernel.org/r/513D9FF5.9010004@parallels.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      5ed67f05
  2. 23 3月, 2013 2 次提交
  3. 28 2月, 2013 1 次提交
  4. 22 2月, 2013 1 次提交
    • T
      posix-timer: Don't call idr_find() with out-of-range ID · e182bb38
      Tejun Heo 提交于
      When idr_find() was fed a negative ID, it used to look up the ID
      ignoring the sign bit before recent ("idr: remove MAX_IDR_MASK and
      move left MAX_IDR_* into idr.c") patch. Now a negative ID triggers
      a WARN_ON_ONCE().
      
      __lock_timer() feeds timer_id from userland directly to idr_find()
      without sanitizing it which can trigger the above malfunctions.  Add a
      range check on @timer_id before invoking idr_find() in __lock_timer().
      
      While timer_t is defined as int by all archs at the moment, Andrew
      worries that it may be defined as a larger type later on.  Make the
      test cover larger integers too so that it at least is guaranteed to
      not return the wrong timer.
      
      Note that WARN_ON_ONCE() in idr_find() on id < 0 is transitional
      precaution while moving away from ignoring MSB.  Once it's gone we can
      remove the guard as long as timer_t isn't larger than int.
      
      Signed-off-by: Tejun Heo <tj@kernel.org>nnn
      Reported-by: NSasha Levin <sasha.levin@oracle.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: stable@vger.kernel.org
      Link: http://lkml.kernel.org/r/20130220232412.GL3570@htj.dyndns.orgSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
      e182bb38
  5. 16 1月, 2013 1 次提交
  6. 31 10月, 2011 1 次提交
  7. 24 5月, 2011 1 次提交
    • E
      posix-timers: RCU conversion · 8af08871
      Eric Dumazet 提交于
      Ben Nagy reported a scalability problem with KVM/QEMU that hit very hard
      a single spinlock (idr_lock) in posix-timers code, on its 48 core
      machine.
      
      Even on a 16 cpu machine (2x4x2), a single test can show 98% of cpu time
      used in ticket_spin_lock, from lock_timer
      
      Ref: http://www.spinics.net/lists/kvm/msg51526.html
      
      Switching to RCU is quite easy, IDR being already RCU ready. idr_lock
      should be locked only for an insert/delete, not a lookup.
      
      Benchmark on a 2x4x2 machine, 16 processes calling timer_gettime().
      
      Before :
      
      real    1m18.669s
      user    0m1.346s
      sys     1m17.180s
      
      After :
      
      real    0m3.296s
      user    0m1.366s
      sys     0m1.926s
      Reported-by: NBen Nagy <ben@iagu.net>
      Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
      Tested-by: NBen Nagy <ben@iagu.net>
      Cc: Oleg Nesterov <oleg@redhat.com>
      Cc: Avi Kivity <avi@redhat.com>
      Cc: John Stultz <johnstul@us.ibm.com>
      Cc: Richard Cochran <richard.cochran@omicron.at>
      Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      8af08871
  8. 23 5月, 2011 1 次提交
  9. 31 3月, 2011 1 次提交
  10. 22 2月, 2011 1 次提交
  11. 02 2月, 2011 22 次提交
  12. 21 10月, 2010 1 次提交
  13. 23 7月, 2010 1 次提交
  14. 28 5月, 2010 1 次提交
  15. 05 2月, 2010 1 次提交
  16. 22 8月, 2009 1 次提交
    • J
      time: Introduce CLOCK_REALTIME_COARSE · da15cfda
      john stultz 提交于
      After talking with some application writers who want very fast, but not
      fine-grained timestamps, I decided to try to implement new clock_ids
      to clock_gettime(): CLOCK_REALTIME_COARSE and CLOCK_MONOTONIC_COARSE
      which returns the time at the last tick. This is very fast as we don't
      have to access any hardware (which can be very painful if you're using
      something like the acpi_pm clocksource), and we can even use the vdso
      clock_gettime() method to avoid the syscall. The only trade off is you
      only get low-res tick grained time resolution.
      
      This isn't a new idea, I know Ingo has a patch in the -rt tree that made
      the vsyscall gettimeofday() return coarse grained time when the
      vsyscall64 sysctrl was set to 2. However this affects all applications
      on a system.
      
      With this method, applications can choose the proper speed/granularity
      trade-off for themselves.
      Signed-off-by: NJohn Stultz <johnstul@us.ibm.com>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: nikolag@ca.ibm.com
      Cc: Darren Hart <dvhltc@us.ibm.com>
      Cc: arjan@infradead.org
      Cc: jonathan@jonmasters.org
      LKML-Reference: <1250734414.6897.5.camel@localhost.localdomain>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      da15cfda
  17. 04 8月, 2009 1 次提交