* [PATCH 2/2] Export not_critical_when_idle feature in workqueue and use it in ondemand
@ 2007-03-16 22:09 Venkatesh Pallipadi
0 siblings, 0 replies; 3+ messages in thread
From: Venkatesh Pallipadi @ 2007-03-16 22:09 UTC (permalink / raw)
To: Andrew Morton, Dave Jones, tglx; +Cc: linux-kernel
Add a new not_critical_when_idle parameter to queue_delayed_work_on(). This
parameter 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 parameter in cpufreq ondemand governor.
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Index: linux-2.6.20/kernel/workqueue.c
===================================================================
--- linux-2.6.20.orig/kernel/workqueue.c 2007-03-16 14:51:00.000000000 -0700
+++ linux-2.6.20/kernel/workqueue.c 2007-03-16 14:51:21.000000000 -0700
@@ -271,11 +271,13 @@
* @wq: workqueue to use
* @dwork: work to queue
* @delay: number of jiffies to wait before queueing
+ * @not_critical_when_idle: 1 indicates work is not critical when CPU is idle
*
* Returns 0 if @work was already on a queue, non-zero otherwise.
*/
int queue_delayed_work_on(int cpu, struct workqueue_struct *wq,
- struct delayed_work *dwork, unsigned long delay)
+ struct delayed_work *dwork, unsigned long delay,
+ int not_critical_when_idle)
{
int ret = 0;
struct timer_list *timer = &dwork->timer;
@@ -290,7 +292,7 @@
timer->expires = jiffies + delay;
timer->data = (unsigned long)dwork;
timer->function = delayed_work_timer_fn;
- add_timer_on(timer, cpu, 0);
+ add_timer_on(timer, cpu, not_critical_when_idle);
ret = 1;
}
return ret;
@@ -614,7 +616,7 @@
int schedule_delayed_work_on(int cpu,
struct delayed_work *dwork, unsigned long delay)
{
- return queue_delayed_work_on(cpu, keventd_wq, dwork, delay);
+ return queue_delayed_work_on(cpu, keventd_wq, dwork, delay, 0);
}
EXPORT_SYMBOL(schedule_delayed_work_on);
Index: linux-2.6.20/drivers/cpufreq/cpufreq_ondemand.c
===================================================================
--- linux-2.6.20.orig/drivers/cpufreq/cpufreq_ondemand.c 2007-03-16 14:51:00.000000000 -0700
+++ linux-2.6.20/drivers/cpufreq/cpufreq_ondemand.c 2007-03-16 14:51:21.000000000 -0700
@@ -457,7 +457,7 @@
dbs_info->freq_lo,
CPUFREQ_RELATION_H);
}
- queue_delayed_work_on(cpu, kondemand_wq, &dbs_info->work, delay);
+ queue_delayed_work_on(cpu, kondemand_wq, &dbs_info->work, delay, 1);
unlock_policy_rwsem_write(cpu);
}
@@ -472,7 +472,7 @@
dbs_info->sample_type = DBS_NORMAL_SAMPLE;
INIT_DELAYED_WORK(&dbs_info->work, do_dbs_timer);
queue_delayed_work_on(dbs_info->cpu, kondemand_wq, &dbs_info->work,
- delay);
+ delay, 1);
}
static inline void dbs_timer_exit(struct cpu_dbs_info_s *dbs_info)
Index: linux-2.6.20/include/linux/workqueue.h
===================================================================
--- linux-2.6.20.orig/include/linux/workqueue.h 2007-03-16 14:51:00.000000000 -0700
+++ linux-2.6.20/include/linux/workqueue.h 2007-03-16 14:51:21.000000000 -0700
@@ -170,7 +170,8 @@
extern int FASTCALL(queue_work(struct workqueue_struct *wq, struct work_struct *work));
extern int FASTCALL(queue_delayed_work(struct workqueue_struct *wq, struct delayed_work *work, unsigned long delay));
extern int queue_delayed_work_on(int cpu, struct workqueue_struct *wq,
- struct delayed_work *work, unsigned long delay);
+ struct delayed_work *work, unsigned long delay,
+ int not_critical_when_idle);
extern void FASTCALL(flush_workqueue(struct workqueue_struct *wq));
extern int FASTCALL(schedule_work(struct work_struct *work));
^ permalink raw reply [flat|nested] 3+ messages in thread
* RE: [PATCH 2/2] Export not_critical_when_idle feature in workqueue and use it in ondemand
[not found] <20070320145812.GB20671@redhat.com>
@ 2007-03-20 17:04 ` Pallipadi, Venkatesh
2007-03-20 17:16 ` Dave Jones
0 siblings, 1 reply; 3+ messages in thread
From: Pallipadi, Venkatesh @ 2007-03-20 17:04 UTC (permalink / raw)
To: Dave Jones; +Cc: Andrew Morton, tglx, linux-kernel
>-----Original Message-----
>From: Dave Jones [mailto:davej@redhat.com]
>Sent: Tuesday, March 20, 2007 7:58 AM
>To: Pallipadi, Venkatesh
>Cc: Andrew Morton; tglx@linutronix.de; linux-kernel
>Subject: Re: [PATCH 2/2] Export not_critical_when_idle feature
>in workqueue and use it in ondemand
>
>On Fri, Mar 16, 2007 at 03:09:03PM -0700, Venkatesh Pallipadi wrote:
> >
> >
> > Add a new not_critical_when_idle parameter to
>queue_delayed_work_on(). This
> > parameter 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 parameter in cpufreq ondemand governor.
> >
> > Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
>
>just for kicks (actually because I was seeing the negative effects
>of not having this diff) I threw this in the Fedora devel kernel.
>Got a few people reporting softlockups during shutdown.
>jpeg from one user attached..
>
Thanks for the report. I will take a look at this message.
Looks like, this error is either coming from rmmod or changing the
governor to default from ondemand during reboot. Does Fedora
use ondemand as a module and rmmod on reboot or is it builtin?
Thanks,
Venki
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 2/2] Export not_critical_when_idle feature in workqueue and use it in ondemand
2007-03-20 17:04 ` [PATCH 2/2] Export not_critical_when_idle feature in workqueue and use it in ondemand Pallipadi, Venkatesh
@ 2007-03-20 17:16 ` Dave Jones
0 siblings, 0 replies; 3+ messages in thread
From: Dave Jones @ 2007-03-20 17:16 UTC (permalink / raw)
To: Pallipadi, Venkatesh; +Cc: Andrew Morton, tglx, linux-kernel
On Tue, Mar 20, 2007 at 10:04:18AM -0700, Pallipadi, Venkatesh wrote:
> >just for kicks (actually because I was seeing the negative effects
> >of not having this diff) I threw this in the Fedora devel kernel.
> >Got a few people reporting softlockups during shutdown.
> >jpeg from one user attached..
>
> Thanks for the report. I will take a look at this message.
> Looks like, this error is either coming from rmmod or changing the
> governor to default from ondemand during reboot. Does Fedora
> use ondemand as a module and rmmod on reboot or is it builtin?
Yes, it's modular.
Dave
--
http://www.codemonkey.org.uk
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2007-03-20 17:16 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20070320145812.GB20671@redhat.com>
2007-03-20 17:04 ` [PATCH 2/2] Export not_critical_when_idle feature in workqueue and use it in ondemand Pallipadi, Venkatesh
2007-03-20 17:16 ` Dave Jones
2007-03-16 22:09 Venkatesh Pallipadi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox