From 694711b81f5b3f61b490bdd0d89c51556007461c Mon Sep 17 00:00:00 2001 From: "Rafael J. Wysocki" Date: Tue, 12 Jul 2011 00:40:03 +0200 Subject: [PATCH] --- yaml --- r: 256947 b: refs/heads/master c: 56375fd420f851944960bd53dbb08d674f4d9406 h: refs/heads/master i: 256945: c2758789be62fec95a950f07a42d4ef15f7d82a8 256943: ed319dbd63d35d3e193bf96ae931a10e085c0424 v: v3 --- [refs] | 2 +- trunk/drivers/base/power/domain.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 179bb0d0b392..7645d91bcbe8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4ecd6e651dd25ebbf0cc53c68162c0ab08641725 +refs/heads/master: 56375fd420f851944960bd53dbb08d674f4d9406 diff --git a/trunk/drivers/base/power/domain.c b/trunk/drivers/base/power/domain.c index b6e29ffbb70d..c3e4e2934e16 100644 --- a/trunk/drivers/base/power/domain.c +++ b/trunk/drivers/base/power/domain.c @@ -212,6 +212,19 @@ static bool genpd_abort_poweroff(struct generic_pm_domain *genpd) return genpd->status == GPD_STATE_ACTIVE || genpd->resume_count > 0; } +/** + * genpd_queue_power_off_work - Queue up the execution of pm_genpd_poweroff(). + * @genpd: PM domait to power off. + * + * Queue up the execution of pm_genpd_poweroff() unless it's already been done + * before. + */ +static void genpd_queue_power_off_work(struct generic_pm_domain *genpd) +{ + if (!work_pending(&genpd->power_off_work)) + queue_work(pm_wq, &genpd->power_off_work); +} + /** * pm_genpd_poweroff - Remove power from a given PM domain. * @genpd: PM domain to power down. @@ -304,7 +317,7 @@ static int pm_genpd_poweroff(struct generic_pm_domain *genpd) if (parent) { genpd_sd_counter_dec(parent); if (parent->sd_count == 0) - queue_work(pm_wq, &parent->power_off_work); + genpd_queue_power_off_work(parent); genpd_release_lock(parent); }