From: German Monroy Date: Tue, 10 Apr 2012 22:23:15 +0000 (-0700) Subject: powerdk: update wakelock tracepoint X-Git-Tag: 2.1b_release~972 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c733d42326da1c62c2de4cc3151fa290dd2217c1;p=platform%2Fkernel%2Fkernel-mfld-blackbay.git powerdk: update wakelock tracepoint BZ 31198 Fix from Lim Min Yeol that: 1. Moves trace function inside spinlock because wakelock pointer could get invalidated during a tracing event 2. Polishes output Change-Id: I3f4f7a0560f5a4494e3d85a7e1bd76ed77fba44e Signed-off-by: Lim Min Yeol Signed-off-by: German Monroy Reviewed-on: http://android.intel.com:8080/42990 Reviewed-by: Zhang, Dongxing Reviewed-by: Kanigeri, Hari K Tested-by: Ng, Cheon-woei Reviewed-by: buildbot Tested-by: buildbot --- diff --git a/include/trace/events/wakelock.h b/include/trace/events/wakelock.h index 1e729c7..635edea 100644 --- a/include/trace/events/wakelock.h +++ b/include/trace/events/wakelock.h @@ -4,43 +4,39 @@ #if !defined(_TRACE_WAKELOCK_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_WAKELOCK_H -#include #include #include -TRACE_EVENT(wake_lock, +DECLARE_EVENT_CLASS(wake_lock_template, TP_PROTO(struct wake_lock *lock), TP_ARGS(lock), TP_STRUCT__entry( - __field( void *, lock ) + __string(name, lock->name) + __field(unsigned long, expires) + __field(int, flags) ), TP_fast_assign( - __entry->lock = lock; + __assign_str(name, lock->name); + __entry->expires = lock->expires; + __entry->flags = lock->flags; ), - TP_printk("timer=%p", __entry->lock) + TP_printk("name=%s, flags=%d, expires=%lu", + __get_str(name), + __entry->flags, + __entry->expires) ); -TRACE_EVENT(wake_unlock, - - TP_PROTO(struct wake_lock *lock), - - TP_ARGS(lock), - - TP_STRUCT__entry( - __field( void *, lock ) - ), - - TP_fast_assign( - __entry->lock = lock; - ), - - TP_printk("timer=%p", __entry->lock) -); +DEFINE_EVENT(wake_lock_template, wake_lock, + TP_PROTO(struct wake_lock *lock), + TP_ARGS(lock)); +DEFINE_EVENT(wake_lock_template, wake_unlock, + TP_PROTO(struct wake_lock *lock), + TP_ARGS(lock)); #endif /* _TRACE_WAKELOCK_H */ diff --git a/kernel/power/wakelock.c b/kernel/power/wakelock.c index d8aa156..0341014 100644 --- a/kernel/power/wakelock.c +++ b/kernel/power/wakelock.c @@ -491,22 +491,19 @@ static void wake_lock_internal( queue_work(suspend_work_queue, &suspend_work); } } + trace_wake_lock(lock); spin_unlock_irqrestore(&list_lock, irqflags); } void wake_lock(struct wake_lock *lock) { wake_lock_internal(lock, 0, 0); - - trace_wake_lock(lock); } EXPORT_SYMBOL(wake_lock); void wake_lock_timeout(struct wake_lock *lock, long timeout) { wake_lock_internal(lock, timeout, 1); - - trace_wake_lock(lock); } EXPORT_SYMBOL(wake_lock_timeout); @@ -514,10 +511,8 @@ void wake_unlock(struct wake_lock *lock) { int type; unsigned long irqflags; - - trace_wake_unlock(lock); - spin_lock_irqsave(&list_lock, irqflags); + trace_wake_unlock(lock); type = lock->flags & WAKE_LOCK_TYPE_MASK; #ifdef CONFIG_WAKELOCK_STAT wake_unlock_stat_locked(lock, 0);