summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShaibal Dutta <shaibal.dutta@broadcom.com>2014-01-31 15:44:58 -0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-02-15 11:31:55 -0800
commitbce6618a11ca4ca3cb5d6a2a1d43c00f8301d2b2 (patch)
tree0fe8caa0391f8fbfb467512d594d151bee9e90c6
parent2b1278cb651786648ba6dad285a6c0873c6788e1 (diff)
downloadop-kernel-dev-bce6618a11ca4ca3cb5d6a2a1d43c00f8301d2b2.zip
op-kernel-dev-bce6618a11ca4ca3cb5d6a2a1d43c00f8301d2b2.tar.gz
firmware: use power efficient workqueue for unloading and aborting fw load
Allow the scheduler to select the most appropriate CPU for running the firmware load timeout routine and delayed routine for firmware unload. This extends idle residency times and conserves power. This functionality is enabled when CONFIG_WQ_POWER_EFFICIENT is selected. Cc: Ming Lei <ming.lei@canonical.com> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Shaibal Dutta <shaibal.dutta@broadcom.com> [zoran.markovic@linaro.org: Rebased to latest kernel, added commit message. Fixed code alignment.] Signed-off-by: Zoran Markovic <zoran.markovic@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/base/firmware_class.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
index e5808eb..cb8b779 100644
--- a/drivers/base/firmware_class.c
+++ b/drivers/base/firmware_class.c
@@ -902,7 +902,8 @@ static int _request_firmware_load(struct firmware_priv *fw_priv,
dev_set_uevent_suppress(f_dev, false);
dev_dbg(f_dev, "firmware: requesting %s\n", buf->fw_id);
if (timeout != MAX_SCHEDULE_TIMEOUT)
- schedule_delayed_work(&fw_priv->timeout_work, timeout);
+ queue_delayed_work(system_power_efficient_wq,
+ &fw_priv->timeout_work, timeout);
kobject_uevent(&fw_priv->dev.kobj, KOBJ_ADD);
}
@@ -1574,8 +1575,8 @@ static void device_uncache_fw_images_work(struct work_struct *work)
*/
static void device_uncache_fw_images_delay(unsigned long delay)
{
- schedule_delayed_work(&fw_cache.work,
- msecs_to_jiffies(delay));
+ queue_delayed_work(system_power_efficient_wq, &fw_cache.work,
+ msecs_to_jiffies(delay));
}
static int fw_pm_notify(struct notifier_block *notify_block,
OpenPOWER on IntegriCloud