Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+17 −5
Original line number Original line Diff line number Diff line
@@ -448,6 +448,22 @@ static void _kfree_device_rcu(struct rcu_head *head)
	kfree_rcu(device_opp, rcu_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
 * _kfree_opp_rcu() - Free OPP RCU handler
 * @head:	RCU head
 * @head:	RCU head
@@ -481,11 +497,7 @@ static void _opp_remove(struct device_opp *dev_opp,
	list_del_rcu(&opp->node);
	list_del_rcu(&opp->node);
	call_srcu(&dev_opp->srcu_head.srcu, &opp->rcu_head, _kfree_opp_rcu);
	call_srcu(&dev_opp->srcu_head.srcu, &opp->rcu_head, _kfree_opp_rcu);


	if (list_empty(&dev_opp->opp_list)) {
	_remove_device_opp(dev_opp);
		list_del_rcu(&dev_opp->node);
		call_srcu(&dev_opp->srcu_head.srcu, &dev_opp->rcu_head,
			  _kfree_device_rcu);
	}
}
}


/**
/**