Message ID | 08070dbf56439c84b8c25837c2049ff8e8eafd6e.1363617402.git.viresh.kumar@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 18 March 2013 16:23, Viresh Kumar <viresh.kumar@linaro.org> wrote: > mmc uses workqueues for running mmc_rescan(). There is no real dependency of > scheduling these on the cpu which scheduled them. > > On a idle system, it is observed that and idle cpu wakes up many times just to > service this work. It would be better if we can schedule it on a cpu which isn't > idle to save on power. > > By idle cpu (from scheduler's perspective) we mean: > - Current task is idle task > - nr_running == 0 > - wake_list is empty > > This patch replaces the queue_delayed_work() with > queue_delayed_work_on_any_cpu() siblings. > > This routine would look for the closest (via scheduling domains) non-idle cpu > (non-idle from schedulers perspective). If the current cpu is not idle or all > cpus are idle, work will be scheduled on local cpu. > > Cc: Chris Ball <cjb@laptop.org> > Cc: linux-mmc@vger.kernel.org > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > --- > drivers/mmc/core/core.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c > index 9290bb5..adf331a 100644 > --- a/drivers/mmc/core/core.c > +++ b/drivers/mmc/core/core.c > @@ -85,7 +85,7 @@ MODULE_PARM_DESC( > static int mmc_schedule_delayed_work(struct delayed_work *work, > unsigned long delay) > { > - return queue_delayed_work(workqueue, work, delay); > + return queue_delayed_work_on_any_cpu(workqueue, work, delay); > } > > /* > -- > 1.7.12.rc2.18.g61b472e > > -- > To unsubscribe from this list: send the line "unsubscribe linux-mmc" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html Acked-by: Ulf Hansson <ulf.hansson@linaro.org> -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi, On Mon, Mar 18 2013, Viresh Kumar wrote: > mmc uses workqueues for running mmc_rescan(). There is no real dependency of > scheduling these on the cpu which scheduled them. > > On a idle system, it is observed that and idle cpu wakes up many times just to > service this work. It would be better if we can schedule it on a cpu which isn't > idle to save on power. > > By idle cpu (from scheduler's perspective) we mean: > - Current task is idle task > - nr_running == 0 > - wake_list is empty > > This patch replaces the queue_delayed_work() with > queue_delayed_work_on_any_cpu() siblings. > > This routine would look for the closest (via scheduling domains) non-idle cpu > (non-idle from schedulers perspective). If the current cpu is not idle or all > cpus are idle, work will be scheduled on local cpu. > > Cc: Chris Ball <cjb@laptop.org> > Cc: linux-mmc@vger.kernel.org > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > --- > drivers/mmc/core/core.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c > index 9290bb5..adf331a 100644 > --- a/drivers/mmc/core/core.c > +++ b/drivers/mmc/core/core.c > @@ -85,7 +85,7 @@ MODULE_PARM_DESC( > static int mmc_schedule_delayed_work(struct delayed_work *work, > unsigned long delay) > { > - return queue_delayed_work(workqueue, work, delay); > + return queue_delayed_work_on_any_cpu(workqueue, work, delay); > } > > /* Thanks, pushed to mmc-next for 3.10. - Chris.
Hi, On Mon, Mar 18 2013, Viresh Kumar wrote: > mmc uses workqueues for running mmc_rescan(). There is no real dependency of > scheduling these on the cpu which scheduled them. > > On a idle system, it is observed that and idle cpu wakes up many times just to > service this work. It would be better if we can schedule it on a cpu which isn't > idle to save on power. > > By idle cpu (from scheduler's perspective) we mean: > - Current task is idle task > - nr_running == 0 > - wake_list is empty > > This patch replaces the queue_delayed_work() with > queue_delayed_work_on_any_cpu() siblings. > > This routine would look for the closest (via scheduling domains) non-idle cpu > (non-idle from schedulers perspective). If the current cpu is not idle or all > cpus are idle, work will be scheduled on local cpu. > > Cc: Chris Ball <cjb@laptop.org> > Cc: linux-mmc@vger.kernel.org > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > --- > drivers/mmc/core/core.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c > index 9290bb5..adf331a 100644 > --- a/drivers/mmc/core/core.c > +++ b/drivers/mmc/core/core.c > @@ -85,7 +85,7 @@ MODULE_PARM_DESC( > static int mmc_schedule_delayed_work(struct delayed_work *work, > unsigned long delay) > { > - return queue_delayed_work(workqueue, work, delay); > + return queue_delayed_work_on_any_cpu(workqueue, work, delay); > } > > /* /home/cjb/git/mmc/drivers/mmc/core/core.c: In function ‘mmc_schedule_delayed_work’: /home/cjb/git/mmc/drivers/mmc/core/core.c:88:2: error: implicit declaration of function ‘queue_delayed_work_on_any_cpu’ [-Werror=implicit-function-declaration] I've dropped this patch for now. This function doesn't seem to be defined in linux-next either. - Chris.
On 22 March 2013 22:56, Chris Ball <cjb@laptop.org> wrote: > On Mon, Mar 18 2013, Viresh Kumar wrote: > > /home/cjb/git/mmc/drivers/mmc/core/core.c: In function ‘mmc_schedule_delayed_work’: > /home/cjb/git/mmc/drivers/mmc/core/core.c:88:2: error: implicit declaration of function ‘queue_delayed_work_on_any_cpu’ [-Werror=implicit-function-declaration] > > I've dropped this patch for now. This function doesn't seem to be > defined in linux-next either. Hi chris, This patch was part of a bigger patchset which also adds this API. I don't want you to apply this one but just Ack here. Probably Tejun or some scheduler maintainer will apply it later (if they like all patches). -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi, On Fri, Mar 22 2013, Viresh Kumar wrote: > On 22 March 2013 22:56, Chris Ball <cjb@laptop.org> wrote: >> On Mon, Mar 18 2013, Viresh Kumar wrote: >> >> /home/cjb/git/mmc/drivers/mmc/core/core.c: In function >> ‘mmc_schedule_delayed_work’: >> /home/cjb/git/mmc/drivers/mmc/core/core.c:88:2: error: implicit >> declaration of function ‘queue_delayed_work_on_any_cpu’ >> [-Werror=implicit-function-declaration] >> >> I've dropped this patch for now. This function doesn't seem to be >> defined in linux-next either. > > Hi chris, > > This patch was part of a bigger patchset which also adds this API. I > don't want you to > apply this one but just Ack here. Probably Tejun or some scheduler > maintainer will > apply it later (if they like all patches). Thanks, makes sense. For [5/7]: Acked-by: Chris Ball <cjb@laptop.org> - Chris.
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index 9290bb5..adf331a 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -85,7 +85,7 @@ MODULE_PARM_DESC( static int mmc_schedule_delayed_work(struct delayed_work *work, unsigned long delay) { - return queue_delayed_work(workqueue, work, delay); + return queue_delayed_work_on_any_cpu(workqueue, work, delay); } /*
mmc uses workqueues for running mmc_rescan(). There is no real dependency of scheduling these on the cpu which scheduled them. On a idle system, it is observed that and idle cpu wakes up many times just to service this work. It would be better if we can schedule it on a cpu which isn't idle to save on power. By idle cpu (from scheduler's perspective) we mean: - Current task is idle task - nr_running == 0 - wake_list is empty This patch replaces the queue_delayed_work() with queue_delayed_work_on_any_cpu() siblings. This routine would look for the closest (via scheduling domains) non-idle cpu (non-idle from schedulers perspective). If the current cpu is not idle or all cpus are idle, work will be scheduled on local cpu. Cc: Chris Ball <cjb@laptop.org> Cc: linux-mmc@vger.kernel.org Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> --- drivers/mmc/core/core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)