powerdk: update wakelock tracepoint
authorGerman Monroy <german.monroy@intel.com>
Tue, 10 Apr 2012 22:23:15 +0000 (15:23 -0700)
committerbuildbot <buildbot@intel.com>
Thu, 19 Apr 2012 02:20:36 +0000 (19:20 -0700)
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 <min.yeol.lim@intel.com>
Signed-off-by: German Monroy <german.monroy@intel.com>
Reviewed-on: http://android.intel.com:8080/42990
Reviewed-by: Zhang, Dongxing <dongxing.zhang@intel.com>
Reviewed-by: Kanigeri, Hari K <hari.k.kanigeri@intel.com>
Tested-by: Ng, Cheon-woei <cheon-woei.ng@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
include/trace/events/wakelock.h
kernel/power/wakelock.c

index 1e729c7..635edea 100644 (file)
@@ -4,43 +4,39 @@
 #if !defined(_TRACE_WAKELOCK_H) || defined(TRACE_HEADER_MULTI_READ)
 #define _TRACE_WAKELOCK_H
 
-#include <linux/ktime.h>
 #include <linux/tracepoint.h>
 #include <linux/wakelock.h>
 
-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 */
 
index d8aa156..0341014 100644 (file)
@@ -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);