Lines Matching full:qos
2 * Devices PM QoS constraints management
12 * per-device PM QoS dependencies. It provides infrastructure for registration
15 * Dependents on a QoS value : register requests
16 * Watchers of QoS value : get notified when target QoS value changes
18 * This QoS design is best effort based. Dependents register their QoS needs.
19 * Watchers register to keep track of the current QoS needs of the system.
50 * __dev_pm_qos_flags - Check PM QoS flags for a given device.
51 * @dev: Device to check the PM QoS flags for.
58 struct dev_pm_qos *qos = dev->power.qos; in __dev_pm_qos_flags() local
64 if (IS_ERR_OR_NULL(qos)) in __dev_pm_qos_flags()
67 pqf = &qos->flags; in __dev_pm_qos_flags()
79 * dev_pm_qos_flags - Check PM QoS flags for a given device (locked).
80 * @dev: Device to check the PM QoS flags for.
97 * __dev_pm_qos_read_value - Get PM QoS constraint for a given device.
98 * @dev: Device to get the PM QoS constraint value for.
110 * dev_pm_qos_read_value - Get PM QoS constraint for a given device (locked).
111 * @dev: Device to get the PM QoS constraint value for.
126 * apply_constraint - Add/modify/remove device PM QoS request.
129 * @value: Value to assign to the QoS request.
131 * Internal function to update the constraints list using the PM QoS core
137 struct dev_pm_qos *qos = req->dev->power.qos; in apply_constraint() local
145 ret = pm_qos_update_target(&qos->resume_latency, in apply_constraint()
149 ret = pm_qos_update_target(&qos->latency_tolerance, in apply_constraint()
152 value = pm_qos_read_value(&qos->latency_tolerance); in apply_constraint()
157 ret = pm_qos_update_flags(&qos->flags, &req->data.flr, in apply_constraint()
176 struct dev_pm_qos *qos; in dev_pm_qos_constraints_allocate() local
180 qos = kzalloc(sizeof(*qos), GFP_KERNEL); in dev_pm_qos_constraints_allocate()
181 if (!qos) in dev_pm_qos_constraints_allocate()
186 kfree(qos); in dev_pm_qos_constraints_allocate()
191 c = &qos->resume_latency; in dev_pm_qos_constraints_allocate()
199 c = &qos->latency_tolerance; in dev_pm_qos_constraints_allocate()
206 INIT_LIST_HEAD(&qos->flags.list); in dev_pm_qos_constraints_allocate()
209 dev->power.qos = qos; in dev_pm_qos_constraints_allocate()
226 struct dev_pm_qos *qos; in dev_pm_qos_constraints_destroy() local
234 * If the device's PM QoS resume latency limit or PM QoS flags have been in dev_pm_qos_constraints_destroy()
245 qos = dev->power.qos; in dev_pm_qos_constraints_destroy()
246 if (!qos) in dev_pm_qos_constraints_destroy()
250 c = &qos->resume_latency; in dev_pm_qos_constraints_destroy()
259 c = &qos->latency_tolerance; in dev_pm_qos_constraints_destroy()
264 f = &qos->flags; in dev_pm_qos_constraints_destroy()
271 dev->power.qos = ERR_PTR(-ENODEV); in dev_pm_qos_constraints_destroy()
274 kfree(qos->resume_latency.notifiers); in dev_pm_qos_constraints_destroy()
275 kfree(qos); in dev_pm_qos_constraints_destroy()
303 if (IS_ERR(dev->power.qos)) in __dev_pm_qos_add_request()
305 else if (!dev->power.qos) in __dev_pm_qos_add_request()
318 * dev_pm_qos_add_request - inserts new qos request into the list
322 * @value: defines the qos request
325 * requested qos performance characteristics. It recomputes the aggregate
326 * QoS expectations of parameters and initializes the dev_pm_qos_request
352 * __dev_pm_qos_update_request - Modify an existing device PM QoS request.
353 * @req : PM QoS request to modify.
369 if (IS_ERR_OR_NULL(req->dev->power.qos)) in __dev_pm_qos_update_request()
393 * dev_pm_qos_update_request - modifies an existing qos request
395 * @new_value: defines the qos request
397 * Updates an existing dev PM qos request along with updating the
432 if (IS_ERR_OR_NULL(req->dev->power.qos)) in __dev_pm_qos_remove_request()
443 * dev_pm_qos_remove_request - modifies an existing qos request
446 * Will remove pm qos request from the list of constraints and
470 * of per-device PM QoS constraints
487 if (IS_ERR(dev->power.qos)) in dev_pm_qos_add_notifier()
489 else if (!dev->power.qos) in dev_pm_qos_add_notifier()
493 ret = blocking_notifier_chain_register(dev->power.qos->resume_latency.notifiers, in dev_pm_qos_add_notifier()
503 * of per-device PM QoS constraints
519 if (!IS_ERR_OR_NULL(dev->power.qos)) in dev_pm_qos_remove_notifier()
520 retval = blocking_notifier_chain_unregister(dev->power.qos->resume_latency.notifiers, in dev_pm_qos_remove_notifier()
529 * dev_pm_qos_add_ancestor_request - Add PM QoS request for device's ancestor.
573 req = dev->power.qos->resume_latency_req; in __dev_pm_qos_drop_user_request()
574 dev->power.qos->resume_latency_req = NULL; in __dev_pm_qos_drop_user_request()
577 req = dev->power.qos->latency_tolerance_req; in __dev_pm_qos_drop_user_request()
578 dev->power.qos->latency_tolerance_req = NULL; in __dev_pm_qos_drop_user_request()
581 req = dev->power.qos->flags_req; in __dev_pm_qos_drop_user_request()
582 dev->power.qos->flags_req = NULL; in __dev_pm_qos_drop_user_request()
598 * dev_pm_qos_expose_latency_limit - Expose PM QoS latency limit to user space.
599 * @dev: Device whose PM QoS latency limit is to be exposed to user space.
624 if (IS_ERR_OR_NULL(dev->power.qos)) in dev_pm_qos_expose_latency_limit()
626 else if (dev->power.qos->resume_latency_req) in dev_pm_qos_expose_latency_limit()
635 dev->power.qos->resume_latency_req = req; in dev_pm_qos_expose_latency_limit()
651 if (!IS_ERR_OR_NULL(dev->power.qos) && dev->power.qos->resume_latency_req) in __dev_pm_qos_hide_latency_limit()
656 * dev_pm_qos_hide_latency_limit - Hide PM QoS latency limit from user space.
657 * @dev: Device whose PM QoS latency limit is to be hidden from user space.
674 * dev_pm_qos_expose_flags - Expose PM QoS flags of a device to user space.
675 * @dev: Device whose PM QoS flags are to be exposed to user space.
701 if (IS_ERR_OR_NULL(dev->power.qos)) in dev_pm_qos_expose_flags()
703 else if (dev->power.qos->flags_req) in dev_pm_qos_expose_flags()
712 dev->power.qos->flags_req = req; in dev_pm_qos_expose_flags()
729 if (!IS_ERR_OR_NULL(dev->power.qos) && dev->power.qos->flags_req) in __dev_pm_qos_hide_flags()
734 * dev_pm_qos_hide_flags - Hide PM QoS flags of a device from user space.
735 * @dev: Device whose PM QoS flags are to be hidden from user space.
754 * dev_pm_qos_update_flags - Update PM QoS flags request owned by user space.
755 * @dev: Device to update the PM QoS flags request for.
767 if (IS_ERR_OR_NULL(dev->power.qos) || !dev->power.qos->flags_req) { in dev_pm_qos_update_flags()
778 ret = __dev_pm_qos_update_request(dev->power.qos->flags_req, value); in dev_pm_qos_update_flags()
795 ret = IS_ERR_OR_NULL(dev->power.qos) in dev_pm_qos_get_user_latency_tolerance()
796 || !dev->power.qos->latency_tolerance_req ? in dev_pm_qos_get_user_latency_tolerance()
798 dev->power.qos->latency_tolerance_req->data.pnode.prio; in dev_pm_qos_get_user_latency_tolerance()
814 if (IS_ERR_OR_NULL(dev->power.qos) in dev_pm_qos_update_user_latency_tolerance()
815 || !dev->power.qos->latency_tolerance_req) { in dev_pm_qos_update_user_latency_tolerance()
835 dev->power.qos->latency_tolerance_req = req; in dev_pm_qos_update_user_latency_tolerance()
841 ret = __dev_pm_qos_update_request(dev->power.qos->latency_tolerance_req, val); in dev_pm_qos_update_user_latency_tolerance()