Commit d020283dc694c9ec31b410f522252f7a8397e67d

Authored by Venkatesh Pallipadi
Committed by Rafael J. Wysocki
1 parent 379e0be812

PM / QoS: CPU C-state breakage with PM Qos change

Looks like change "PM QoS: Move and rename the implementation files"
merged during the 3.2 development cycle made PM QoS depend on
CONFIG_PM which depends on (PM_SLEEP || PM_RUNTIME).

That breaks CPU C-states with kernels not having these CONFIGs, causing CPUs
to spend time in Polling loop idle instead of going into deep C-states,
consuming way way more power. This is with either acpi idle or intel idle
enabled.

Either CONFIG_PM should be enabled with any pm_qos users or
the !CONFIG_PM pm_qos_request() should return sane defaults not to break
the existing users. Here's is the patch for the latter option.

[rjw: Modified the changelog slightly.]

Signed-off-by: Venkatesh Pallipadi <venki@google.com>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Cc: stable@vger.kernel.org

Showing 1 changed file with 13 additions and 1 deletions Side-by-side Diff

include/linux/pm_qos.h
... ... @@ -110,7 +110,19 @@
110 110 { return; }
111 111  
112 112 static inline int pm_qos_request(int pm_qos_class)
113   - { return 0; }
  113 +{
  114 + switch (pm_qos_class) {
  115 + case PM_QOS_CPU_DMA_LATENCY:
  116 + return PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE;
  117 + case PM_QOS_NETWORK_LATENCY:
  118 + return PM_QOS_NETWORK_LAT_DEFAULT_VALUE;
  119 + case PM_QOS_NETWORK_THROUGHPUT:
  120 + return PM_QOS_NETWORK_THROUGHPUT_DEFAULT_VALUE;
  121 + default:
  122 + return PM_QOS_DEFAULT_VALUE;
  123 + }
  124 +}
  125 +
114 126 static inline int pm_qos_add_notifier(int pm_qos_class,
115 127 struct notifier_block *notifier)
116 128 { return 0; }