diff options
author | Arjan van de Ven <arjan@linux.intel.com> | 2011-01-04 19:38:20 -0800 |
---|---|---|
committer | Arjan van de Ven <arjan@linux.intel.com> | 2011-01-04 19:38:20 -0800 |
commit | bf327e7a4e7a54b00eea3e5d2637eb50bb8fc9fe (patch) | |
tree | fad85944898f317fb77857cfd161973124d80cd7 | |
parent | 73b76ce57fcd6c103e12234b5d1d3f3a1952383a (diff) | |
download | powertop-bf327e7a4e7a54b00eea3e5d2637eb50bb8fc9fe.tar.gz |
refresh the patches to 2.6.37 final
-rw-r--r-- | TODO | 2 | ||||
-rw-r--r-- | patches/0001-tracing-Make-timer-tracing-actually-useful.patch | 64 | ||||
-rw-r--r-- | patches/0001-workqueue-Add-basic-tracepoints-to-track-workqueue-e.patch | 129 | ||||
-rw-r--r-- | patches/linux-2.6.37-ahci-alpm-accounting.patch (renamed from patches/linux-2.6.37-rc1-ahci-alpm-accounting.patch) | 12 | ||||
-rw-r--r-- | patches/linux-2.6.37-vfs-dirty-inode.patch (renamed from patches/linux-2.6.37-rc3-vfs-dirty-inode.patch) | 35 |
5 files changed, 23 insertions, 219 deletions
@@ -6,11 +6,11 @@ Needed prior to beta -- growth in memory seems to not be there.. it's just exit leaks... yawn. -* htmlize UTF8 mu Needed between beta and 2.0 final ---------------------------------- * MUST use the 2.6.38 new stable tracepoints where available +* htmlize UTF8 mu * more translations / strings * end user documentation * investigate tick_sched_timer and why it wakes up diff --git a/patches/0001-tracing-Make-timer-tracing-actually-useful.patch b/patches/0001-tracing-Make-timer-tracing-actually-useful.patch deleted file mode 100644 index 1d8e21b..0000000 --- a/patches/0001-tracing-Make-timer-tracing-actually-useful.patch +++ /dev/null @@ -1,64 +0,0 @@ -From fe9633af11395d339880417439a1931bb9e7e493 Mon Sep 17 00:00:00 2001 -From: Arjan van de Ven <arjan@linux.intel.com> -Date: Wed, 18 Aug 2010 15:28:59 -0400 -Subject: [PATCH] tracing: Make timer tracing actually useful - -PowerTOP would like to be able to trace timers. -Unfortunately, the current timer tracing is not very useful, the actual -timer function is not recorded in the trace at the start of timer execution. - -Although this is recorded for timer "start" time (when it gets armed), this -is not useful; most timers get started early, and a tracer like PowerTOP -will never see this event, but will only see the actual running of the timer. - -This patch just adds the function to the timer tracing; I've verified with -PowerTOP that now it can get useful information about timers. - -Signed-off-by: Arjan van de Ven <arjan@linux.intel.com> ---- - include/trace/events/timer.h | 8 ++++++-- - 1 files changed, 6 insertions(+), 2 deletions(-) - -diff --git a/include/trace/events/timer.h b/include/trace/events/timer.h -index c624126..94511c8 100644 ---- a/include/trace/events/timer.h -+++ b/include/trace/events/timer.h -@@ -81,14 +81,16 @@ TRACE_EVENT(timer_expire_entry, - TP_STRUCT__entry( - __field( void *, timer ) - __field( unsigned long, now ) -+ __field( void *, function ) - ), - - TP_fast_assign( - __entry->timer = timer; - __entry->now = jiffies; -+ __entry->function = timer->function; - ), - -- TP_printk("timer=%p now=%lu", __entry->timer, __entry->now) -+ TP_printk("timer=%p function=%pf now=%lu", __entry->timer, __entry->function,__entry->now) - ); - - /** -@@ -200,14 +202,16 @@ TRACE_EVENT(hrtimer_expire_entry, - TP_STRUCT__entry( - __field( void *, hrtimer ) - __field( s64, now ) -+ __field( void *, function ) - ), - - TP_fast_assign( - __entry->hrtimer = hrtimer; - __entry->now = now->tv64; -+ __entry->function = hrtimer->function; - ), - -- TP_printk("hrtimer=%p now=%llu", __entry->hrtimer, -+ TP_printk("hrtimer=%p function=%pf now=%llu", __entry->hrtimer, __entry->function, - (unsigned long long)ktime_to_ns((ktime_t) { .tv64 = __entry->now })) - ); - --- -1.6.1.3 - diff --git a/patches/0001-workqueue-Add-basic-tracepoints-to-track-workqueue-e.patch b/patches/0001-workqueue-Add-basic-tracepoints-to-track-workqueue-e.patch deleted file mode 100644 index 11db56b..0000000 --- a/patches/0001-workqueue-Add-basic-tracepoints-to-track-workqueue-e.patch +++ /dev/null @@ -1,129 +0,0 @@ -From 1fd789ef484066ed5583c94dc03ef066cc1c0d94 Mon Sep 17 00:00:00 2001 -From: Arjan van de Ven <arjan@linux.intel.com> -Date: Sat, 21 Aug 2010 13:07:26 -0700 -Subject: [PATCH] workqueue: Add basic tracepoints to track workqueue execution - -With the introduction of the new unified work queue thread pools, -we lost one feature: It's no longer possible to know which worker -is causing the CPU to wake out of idle. The result is that PowerTOP -now reports a lot of "kworker/a:b" instead of more readable results. - -This patch adds a pair of tracepoints to the new workqueue code, -similar in style to the timer/hrtimer tracepoints. - -With this pair of tracepoints, the next PowerTOP can correctly -report which work item caused the wakeup (and how long it took): - -Interrupt (43) i915 time 3.51ms wakeups 141 -Work ieee80211_iface_work time 0.81ms wakeups 29 -Work do_dbs_timer time 0.55ms wakeups 24 -Process Xorg time 21.36ms wakeups 4 -Timer sched_rt_period_timer time 0.01ms wakeups 1 - -Signed-off-by: Arjan van de Ven <arjan@linux.intel.com> ---- - include/trace/events/workqueue.h | 63 ++++++++++++++++++++++++++++++++++++++ - kernel/workqueue.c | 9 +++++ - 2 files changed, 72 insertions(+), 0 deletions(-) - create mode 100644 include/trace/events/workqueue.h - -diff --git a/include/trace/events/workqueue.h b/include/trace/events/workqueue.h -new file mode 100644 -index 0000000..4fd2bd1 ---- /dev/null -+++ b/include/trace/events/workqueue.h -@@ -0,0 +1,63 @@ -+#undef TRACE_SYSTEM -+#define TRACE_SYSTEM workqueue -+ -+#if !defined(_TRACE_WORKQUEUE_H) || defined(TRACE_HEADER_MULTI_READ) -+#define _TRACE_WORKQUEUE_H -+ -+#include <linux/tracepoint.h> -+#include <linux/workqueue.h> -+ -+/** -+ * workqueue_execute_start - called immediately before the workqueue callback -+ * @work: pointer to struct work_struct -+ * -+ * Allows to track workqueue execution. -+ */ -+TRACE_EVENT(workqueue_execute_start, -+ -+ TP_PROTO(struct work_struct *work), -+ -+ TP_ARGS(work), -+ -+ TP_STRUCT__entry( -+ __field( void *, work ) -+ __field( void *, function) -+ ), -+ -+ TP_fast_assign( -+ __entry->work = work; -+ __entry->function = work->func; -+ ), -+ -+ TP_printk("work struct %p: function %pf", __entry->work, __entry->function) -+); -+ -+/** -+ * workqueue_execute_end - called immediately before the workqueue callback -+ * @work: pointer to struct work_struct -+ * -+ * Allows to track workqueue execution. -+ */ -+TRACE_EVENT(workqueue_execute_end, -+ -+ TP_PROTO(struct work_struct *work), -+ -+ TP_ARGS(work), -+ -+ TP_STRUCT__entry( -+ __field( void *, work ) -+ ), -+ -+ TP_fast_assign( -+ __entry->work = work; -+ ), -+ -+ TP_printk("work struct %p", __entry->work) -+); -+ -+ -+#endif /* _TRACE_WORKQUEUE_H */ -+ -+/* This part must be outside protection */ -+#include <trace/define_trace.h> -+ -diff --git a/kernel/workqueue.c b/kernel/workqueue.c -index 2994a0e..8bd600c 100644 ---- a/kernel/workqueue.c -+++ b/kernel/workqueue.c -@@ -35,6 +35,9 @@ - #include <linux/lockdep.h> - #include <linux/idr.h> - -+#define CREATE_TRACE_POINTS -+#include <trace/events/workqueue.h> -+ - #include "workqueue_sched.h" - - enum { -@@ -1790,7 +1793,13 @@ static void process_one_work(struct worker *worker, struct work_struct *work) - work_clear_pending(work); - lock_map_acquire(&cwq->wq->lockdep_map); - lock_map_acquire(&lockdep_map); -+ trace_workqueue_execute_start(work); - f(work); -+ /* -+ * While we must be careful to not use "work" after this, the trace -+ * point will only record its address. -+ */ -+ trace_workqueue_execute_end(work); - lock_map_release(&lockdep_map); - lock_map_release(&cwq->wq->lockdep_map); - --- -1.7.1.1 - diff --git a/patches/linux-2.6.37-rc1-ahci-alpm-accounting.patch b/patches/linux-2.6.37-ahci-alpm-accounting.patch index bd451e2..dbe897d 100644 --- a/patches/linux-2.6.37-rc1-ahci-alpm-accounting.patch +++ b/patches/linux-2.6.37-ahci-alpm-accounting.patch @@ -33,10 +33,10 @@ Signed-off-by: Arjan van de Ven <arjan@linux.intel.com> drivers/ata/libahci.c | 187 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 200 insertions(+), 2 deletions(-) -Index: linux.trees.git/drivers/ata/ahci.h +Index: linux-2.6.37/drivers/ata/ahci.h =================================================================== ---- linux.trees.git.orig/drivers/ata/ahci.h -+++ linux.trees.git/drivers/ata/ahci.h +--- linux-2.6.37.orig/drivers/ata/ahci.h ++++ linux-2.6.37/drivers/ata/ahci.h @@ -262,6 +262,13 @@ struct ahci_em_priv { unsigned long led_state; }; @@ -66,10 +66,10 @@ Index: linux.trees.git/drivers/ata/ahci.h }; struct ahci_host_priv { -Index: linux.trees.git/drivers/ata/libahci.c +Index: linux-2.6.37/drivers/ata/libahci.c =================================================================== ---- linux.trees.git.orig/drivers/ata/libahci.c -+++ linux.trees.git/drivers/ata/libahci.c +--- linux-2.6.37.orig/drivers/ata/libahci.c ++++ linux-2.6.37/drivers/ata/libahci.c @@ -58,6 +58,17 @@ MODULE_PARM_DESC(ignore_sss, "Ignore sta static int ahci_set_lpm(struct ata_link *link, enum ata_lpm_policy policy, diff --git a/patches/linux-2.6.37-rc3-vfs-dirty-inode.patch b/patches/linux-2.6.37-vfs-dirty-inode.patch index 9f430c4..c218291 100644 --- a/patches/linux-2.6.37-rc3-vfs-dirty-inode.patch +++ b/patches/linux-2.6.37-vfs-dirty-inode.patch @@ -22,13 +22,13 @@ Signed-of-by: Arjan van de Ven <arjan@linux.intel.com> fs/fs-writeback.c | 3 +++ include/linux/fs.h | 12 ++++++++++++ include/trace/events/writeback.h | 28 ++++++++++++++++++++++++++++ - 3 files changed, 43 insertions(+), 0 deletions(-) + 3 files changed, 43 insertions(+) -diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c -index 3d06ccc..62e33cc 100644 ---- a/fs/fs-writeback.c -+++ b/fs/fs-writeback.c -@@ -952,6 +952,9 @@ void __mark_inode_dirty(struct inode *inode, int flags) +Index: linux-2.6.37/fs/fs-writeback.c +=================================================================== +--- linux-2.6.37.orig/fs/fs-writeback.c ++++ linux-2.6.37/fs/fs-writeback.c +@@ -952,6 +952,9 @@ void __mark_inode_dirty(struct inode *in if ((inode->i_state & flags) == flags) return; @@ -38,11 +38,11 @@ index 3d06ccc..62e33cc 100644 if (unlikely(block_dump)) block_dump___mark_inode_dirty(inode); -diff --git a/include/linux/fs.h b/include/linux/fs.h -index c9e06cc..25935e1 100644 ---- a/include/linux/fs.h -+++ b/include/linux/fs.h -@@ -1676,6 +1676,18 @@ struct super_operations { +Index: linux-2.6.37/include/linux/fs.h +=================================================================== +--- linux-2.6.37.orig/include/linux/fs.h ++++ linux-2.6.37/include/linux/fs.h +@@ -1677,6 +1677,18 @@ struct super_operations { #define I_DIRTY (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES) @@ -61,11 +61,11 @@ index c9e06cc..25935e1 100644 extern void __mark_inode_dirty(struct inode *, int); static inline void mark_inode_dirty(struct inode *inode) { -diff --git a/include/trace/events/writeback.h b/include/trace/events/writeback.h -index 89a2b2d..5c80875 100644 ---- a/include/trace/events/writeback.h -+++ b/include/trace/events/writeback.h -@@ -186,6 +186,34 @@ DEFINE_EVENT(writeback_congest_waited_template, writeback_wait_iff_congested, +Index: linux-2.6.37/include/trace/events/writeback.h +=================================================================== +--- linux-2.6.37.orig/include/trace/events/writeback.h ++++ linux-2.6.37/include/trace/events/writeback.h +@@ -186,6 +186,34 @@ DEFINE_EVENT(writeback_congest_waited_te TP_ARGS(usec_timeout, usec_delayed) ); @@ -100,6 +100,3 @@ index 89a2b2d..5c80875 100644 #endif /* _TRACE_WRITEBACK_H */ /* This part must be outside protection */ --- -1.7.2.3 - |