diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2009-01-22 03:50:44 -0500 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2009-01-22 04:02:07 -0500 |
commit | 336f6c322d87806ef93afad6308ac65083a865e5 (patch) | |
tree | 25726735e2a355556850dca27ce0b1413bf0e4f1 | |
parent | f3b8436ad9a8ad36b3c9fa1fe030c7f38e5d3d0b (diff) |
debugobjects: add and use INIT_WORK_ON_STACK
Impact: Fix debugobjects warning
debugobject enabled kernels spit out a warning in hpet code due to a
workqueue which is initialized on stack.
Add INIT_WORK_ON_STACK() which calls init_timer_on_stack() and use it
in hpet.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r-- | arch/x86/kernel/hpet.c | 3 | ||||
-rw-r--r-- | include/linux/workqueue.h | 6 |
2 files changed, 8 insertions, 1 deletions
diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c index cd759ad90690..64d5ad0b8add 100644 --- a/arch/x86/kernel/hpet.c +++ b/arch/x86/kernel/hpet.c | |||
@@ -628,11 +628,12 @@ static int hpet_cpuhp_notify(struct notifier_block *n, | |||
628 | 628 | ||
629 | switch (action & 0xf) { | 629 | switch (action & 0xf) { |
630 | case CPU_ONLINE: | 630 | case CPU_ONLINE: |
631 | INIT_DELAYED_WORK(&work.work, hpet_work); | 631 | INIT_DELAYED_WORK_ON_STACK(&work.work, hpet_work); |
632 | init_completion(&work.complete); | 632 | init_completion(&work.complete); |
633 | /* FIXME: add schedule_work_on() */ | 633 | /* FIXME: add schedule_work_on() */ |
634 | schedule_delayed_work_on(cpu, &work.work, 0); | 634 | schedule_delayed_work_on(cpu, &work.work, 0); |
635 | wait_for_completion(&work.complete); | 635 | wait_for_completion(&work.complete); |
636 | destroy_timer_on_stack(&work.work.timer); | ||
636 | break; | 637 | break; |
637 | case CPU_DEAD: | 638 | case CPU_DEAD: |
638 | if (hdev) { | 639 | if (hdev) { |
diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h index b36291130f22..20b59eb1facd 100644 --- a/include/linux/workqueue.h +++ b/include/linux/workqueue.h | |||
@@ -124,6 +124,12 @@ struct execute_work { | |||
124 | init_timer_deferrable(&(_work)->timer); \ | 124 | init_timer_deferrable(&(_work)->timer); \ |
125 | } while (0) | 125 | } while (0) |
126 | 126 | ||
127 | #define INIT_DELAYED_WORK_ON_STACK(_work, _func) \ | ||
128 | do { \ | ||
129 | INIT_WORK(&(_work)->work, (_func)); \ | ||
130 | init_timer_on_stack(&(_work)->timer); \ | ||
131 | } while (0) | ||
132 | |||
127 | /** | 133 | /** |
128 | * work_pending - Find out whether a work item is currently pending | 134 | * work_pending - Find out whether a work item is currently pending |
129 | * @work: The work item in question | 135 | * @work: The work item in question |