Commit 3bac42ca authored by Viresh Kumar's avatar Viresh Kumar Committed by Rafael J. Wysocki

PM / OPP: Create _remove_device_opp() for freeing dev_opp

This will be used from multiple places later. Lets create a separate
routine for that.
Reviewed-by: default avatarStephen Boyd <sboyd@codeaurora.org>
Reviewed-by: default avatarBartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 737002b5
......@@ -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);
}
/**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment