PM / OPP: Create _remove_device_opp() for freeing dev_opp
authorViresh Kumar <viresh.kumar@linaro.org>
Wed, 29 Jul 2015 10:52:59 +0000 (16:22 +0530)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 7 Aug 2015 01:04:22 +0000 (03:04 +0200)
This will be used from multiple places later. Lets create a separate
routine for that.

Reviewed-by: Stephen Boyd <sboyd@codeaurora.org>
Reviewed-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/base/power/opp.c

index 8c3fd57975fb015bb2830d86729e8cfeb1d6eecc..7895fdd64192097e49803d2b3505ed3db1c74be3 100644 (file)
@@ -448,6 +448,22 @@ static void _kfree_device_rcu(struct rcu_head *head)
        kfree_rcu(device_opp, rcu_head);
 }
 
+/**
+ * _remove_device_opp() - Removes a device OPP table
+ * @dev_opp: device OPP table to be removed.
+ *
+ * Removes/frees device OPP table it it doesn't contain any OPPs.
+ */
+static void _remove_device_opp(struct device_opp *dev_opp)
+{
+       if (!list_empty(&dev_opp->opp_list))
+               return;
+
+       list_del_rcu(&dev_opp->node);
+       call_srcu(&dev_opp->srcu_head.srcu, &dev_opp->rcu_head,
+                 _kfree_device_rcu);
+}
+
 /**
  * _kfree_opp_rcu() - Free OPP RCU handler
  * @head:      RCU head
@@ -481,11 +497,7 @@ static void _opp_remove(struct device_opp *dev_opp,
        list_del_rcu(&opp->node);
        call_srcu(&dev_opp->srcu_head.srcu, &opp->rcu_head, _kfree_opp_rcu);
 
-       if (list_empty(&dev_opp->opp_list)) {
-               list_del_rcu(&dev_opp->node);
-               call_srcu(&dev_opp->srcu_head.srcu, &dev_opp->rcu_head,
-                         _kfree_device_rcu);
-       }
+       _remove_device_opp(dev_opp);
 }
 
 /**