[PATCH v6 0/6] PM QoS: implement the OMAP low level constraints management code

Jean Pihet jean.pihet at newoldbits.com
Mon Jan 16 15:22:09 EST 2012


Hi Paul,

On Mon, Jan 16, 2012 at 9:04 PM, Paul Walmsley <paul at pwsan.com> wrote:
> 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)
Ok thanks for checking, I should have done it before asking ;-|

Jean

>
>
> - 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