--- linux/kernel/sched.c.orig2 +++ linux/kernel/sched.c @@ -4926,9 +4926,11 @@ EXPORT_SYMBOL(__might_sleep); #define BUILD_LOCK_OPS(op, locktype) \ void __sched op##_lock(locktype *lock) \ { \ + unsigned long count = 0; \ for (;;) { \ if (likely(_raw_##op##_trylock(lock))) \ break; \ + count++; \ preempt_disable(); \ touch_preempt_timing(); \ preempt_enable(); \ @@ -4937,16 +4939,19 @@ void __sched op##_lock(locktype *lock) cpu_relax(); \ } \ preempt_disable(); \ + __trace((unsigned long)op##_lock, count); \ } \ \ EXPORT_SYMBOL(op##_lock); \ \ void __sched __##op##_lock_irqsave(locktype *lock, unsigned long *flags)\ { \ + unsigned long count = 0; \ for (;;) { \ local_irq_save(*flags); \ if (likely(_raw_##op##_trylock(lock))) \ break; \ + count++; \ local_irq_restore(*flags); \ \ preempt_disable(); \ @@ -4957,6 +4962,7 @@ void __sched __##op##_lock_irqsave(lockt (lock)->break_lock = 1; \ cpu_relax(); \ } \ + __trace((unsigned long)__##op##_lock_irqsave, count); \ preempt_disable(); \ } \ \