Add a new deferrable delayed work init
authorVenki Pallipadi <venkatesh.pallipadi@intel.com>
Tue, 8 May 2007 07:27:47 +0000 (00:27 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Tue, 8 May 2007 18:15:05 +0000 (11:15 -0700)
Add a new deferrable delayed work init.  This can be used to schedule work
that are 'unimportant' when CPU is idle and can be called later, when CPU
eventually comes out of idle.

Use this init in cpufreq ondemand governor.

Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Cc: Dave Jones <davej@codemonkey.org.uk>
Cc: Oleg Nesterov <oleg@tv-sign.ru>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/cpufreq/cpufreq_ondemand.c
include/linux/workqueue.h

index 8d053f500fc25907d9f1d6f1691297199ecaa62a..8532bb79e5fc52dfc8d45ac3aba16b3f6ecd796f 100644 (file)
@@ -470,7 +470,7 @@ static inline void dbs_timer_init(struct cpu_dbs_info_s *dbs_info)
        dbs_info->enable = 1;
        ondemand_powersave_bias_init();
        dbs_info->sample_type = DBS_NORMAL_SAMPLE;
-       INIT_DELAYED_WORK(&dbs_info->work, do_dbs_timer);
+       INIT_DELAYED_WORK_DEFERRABLE(&dbs_info->work, do_dbs_timer);
        queue_delayed_work_on(dbs_info->cpu, kondemand_wq, &dbs_info->work,
                              delay);
 }
index b8abfc74d038384092d1089337a51bf0aa6023ec..f16ba1e0687d8d14e8e1ecd345e4d7648f8920d3 100644 (file)
@@ -121,6 +121,12 @@ struct execute_work {
                init_timer(&(_work)->timer);                    \
        } while (0)
 
+#define INIT_DELAYED_WORK_DEFERRABLE(_work, _func)                     \
+       do {                                                    \
+               INIT_WORK(&(_work)->work, (_func));             \
+               init_timer_deferrable(&(_work)->timer);         \
+       } while (0)
+
 /**
  * work_pending - Find out whether a work item is currently pending
  * @work: The work item in question