[PATCH v6 0/6] PM QoS: implement the OMAP low level constraints management code
Paul Walmsley
paul at pwsan.com
Mon Jan 16 15:04:58 EST 2012
Hi
On Mon, 16 Jan 2012, Jean Pihet wrote:
> Speaking of the locking, currently a spinlock is used and it could be
> replaced by a more efficient mutex. This is ok at the condition that
> this code is not called from interrupt context?
>
> Kevin,
> Do you know if the per-device constraint code can be called from
> interrupt context?
It can't be. It uses a mutex itself. So a mutex is what we want. Take a
look at drivers/base/power/qos.c:dev_pm_qos_update_request() (included
below)
- Paul
/**
* dev_pm_qos_update_request - modifies an existing qos request
* @req : handle to list element holding a dev_pm_qos request to use
* @new_value: defines the qos request
*
* Updates an existing dev PM qos request along with updating the
* target value.
*
* Attempts are made to make this code callable on hot code paths.
*
* Returns 1 if the aggregated constraint value has changed,
* 0 if the aggregated constraint value has not changed,
* -EINVAL in case of wrong parameters, -ENODEV if the device has been
* removed from the system
*/
int dev_pm_qos_update_request(struct dev_pm_qos_request *req,
s32 new_value)
{
int ret = 0;
if (!req) /*guard against callers passing in null */
return -EINVAL;
if (WARN(!dev_pm_qos_request_active(req),
"%s() called for unknown object\n", __func__))
return -EINVAL;
mutex_lock(&dev_pm_qos_mtx);
if (req->dev->power.constraints) {
if (new_value != req->node.prio)
ret = apply_constraint(req, PM_QOS_UPDATE_REQ,
new_value);
} else {
/* Return if the device has been removed */
ret = -ENODEV;
}
mutex_unlock(&dev_pm_qos_mtx);
return ret;
}
More information about the linux-arm-kernel
mailing list