|
@@ -19,6 +19,7 @@
|
|
|
#include <linux/tick.h>
|
|
|
#include <linux/sched.h>
|
|
|
#include <linux/math64.h>
|
|
|
+#include <linux/cpu.h>
|
|
|
|
|
|
/*
|
|
|
* Please note when changing the tuning values:
|
|
@@ -280,17 +281,23 @@ again:
|
|
|
static int menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev)
|
|
|
{
|
|
|
struct menu_device *data = this_cpu_ptr(&menu_devices);
|
|
|
+ struct device *device = get_cpu_device(dev->cpu);
|
|
|
int latency_req = pm_qos_request(PM_QOS_CPU_DMA_LATENCY);
|
|
|
int i;
|
|
|
unsigned int interactivity_req;
|
|
|
unsigned int expected_interval;
|
|
|
unsigned long nr_iowaiters, cpu_load;
|
|
|
+ int resume_latency = dev_pm_qos_read_value(device);
|
|
|
|
|
|
if (data->needs_update) {
|
|
|
menu_update(drv, dev);
|
|
|
data->needs_update = 0;
|
|
|
}
|
|
|
|
|
|
+ /* resume_latency is 0 means no restriction */
|
|
|
+ if (resume_latency && resume_latency < latency_req)
|
|
|
+ latency_req = resume_latency;
|
|
|
+
|
|
|
/* Special case when user has set very strict latency requirement */
|
|
|
if (unlikely(latency_req == 0))
|
|
|
return 0;
|