|
@@ -1187,6 +1187,9 @@ static unsigned long long irtl_2_usec(unsigned long long irtl)
|
|
|
{
|
|
|
unsigned long long ns;
|
|
|
|
|
|
+ if (!irtl)
|
|
|
+ return 0;
|
|
|
+
|
|
|
ns = irtl_ns_units[(irtl >> 10) & 0x3];
|
|
|
|
|
|
return div64_u64((irtl & 0x3FF) * ns, 1000);
|
|
@@ -1200,43 +1203,39 @@ static unsigned long long irtl_2_usec(unsigned long long irtl)
|
|
|
static void bxt_idle_state_table_update(void)
|
|
|
{
|
|
|
unsigned long long msr;
|
|
|
+ unsigned int usec;
|
|
|
|
|
|
rdmsrl(MSR_PKGC6_IRTL, msr);
|
|
|
- if (msr) {
|
|
|
- unsigned int usec = irtl_2_usec(msr);
|
|
|
-
|
|
|
+ usec = irtl_2_usec(msr);
|
|
|
+ if (usec) {
|
|
|
bxt_cstates[2].exit_latency = usec;
|
|
|
bxt_cstates[2].target_residency = usec;
|
|
|
}
|
|
|
|
|
|
rdmsrl(MSR_PKGC7_IRTL, msr);
|
|
|
- if (msr) {
|
|
|
- unsigned int usec = irtl_2_usec(msr);
|
|
|
-
|
|
|
+ usec = irtl_2_usec(msr);
|
|
|
+ if (usec) {
|
|
|
bxt_cstates[3].exit_latency = usec;
|
|
|
bxt_cstates[3].target_residency = usec;
|
|
|
}
|
|
|
|
|
|
rdmsrl(MSR_PKGC8_IRTL, msr);
|
|
|
- if (msr) {
|
|
|
- unsigned int usec = irtl_2_usec(msr);
|
|
|
-
|
|
|
+ usec = irtl_2_usec(msr);
|
|
|
+ if (usec) {
|
|
|
bxt_cstates[4].exit_latency = usec;
|
|
|
bxt_cstates[4].target_residency = usec;
|
|
|
}
|
|
|
|
|
|
rdmsrl(MSR_PKGC9_IRTL, msr);
|
|
|
- if (msr) {
|
|
|
- unsigned int usec = irtl_2_usec(msr);
|
|
|
-
|
|
|
+ usec = irtl_2_usec(msr);
|
|
|
+ if (usec) {
|
|
|
bxt_cstates[5].exit_latency = usec;
|
|
|
bxt_cstates[5].target_residency = usec;
|
|
|
}
|
|
|
|
|
|
rdmsrl(MSR_PKGC10_IRTL, msr);
|
|
|
- if (msr) {
|
|
|
- unsigned int usec = irtl_2_usec(msr);
|
|
|
-
|
|
|
+ usec = irtl_2_usec(msr);
|
|
|
+ if (usec) {
|
|
|
bxt_cstates[6].exit_latency = usec;
|
|
|
bxt_cstates[6].target_residency = usec;
|
|
|
}
|