WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] cpuidle: Fix possible false judge caused

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] cpuidle: Fix possible false judge caused by type casting
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 15 May 2009 11:05:24 -0700
Delivery-date: Fri, 15 May 2009 11:05:52 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1242312403 -3600
# Node ID b7f4937d76d1d7e39f6b066f9f65bb4af693af1a
# Parent  3bac2fcfbafc16714ea301beb6a6cbe70692491e
cpuidle: Fix possible false judge caused by type casting

For timer_deadline == 0 or timer_deadline - now > largest u32
case, the expected_us (in u32 type) may become wrong.

Add a tunable option to ease conditional adjustment.

Signed-off-by: Wei Gang <gang.wei@xxxxxxxxx>
---
 xen/arch/x86/acpi/cpu_idle.c     |    1 +
 xen/arch/x86/acpi/cpuidle_menu.c |   12 +++++++++---
 2 files changed, 10 insertions(+), 3 deletions(-)

diff -r 3bac2fcfbafc -r b7f4937d76d1 xen/arch/x86/acpi/cpu_idle.c
--- a/xen/arch/x86/acpi/cpu_idle.c      Thu May 14 15:46:04 2009 +0100
+++ b/xen/arch/x86/acpi/cpu_idle.c      Thu May 14 15:46:43 2009 +0100
@@ -624,6 +624,7 @@ static int check_cx(struct acpi_processo
 }
 
 static unsigned int latency_factor = 2;
+integer_param("idle_latency_factor", latency_factor);
 
 static void set_cx(
     struct acpi_processor_power *acpi_power,
diff -r 3bac2fcfbafc -r b7f4937d76d1 xen/arch/x86/acpi/cpuidle_menu.c
--- a/xen/arch/x86/acpi/cpuidle_menu.c  Thu May 14 15:46:04 2009 +0100
+++ b/xen/arch/x86/acpi/cpuidle_menu.c  Thu May 14 15:46:43 2009 +0100
@@ -45,9 +45,15 @@ struct menu_device
 
 static DEFINE_PER_CPU(struct menu_device, menu_devices);
 
-static s_time_t get_sleep_length_ns(void)
+static unsigned int get_sleep_length_us(void)
 {
-    return per_cpu(timer_deadline, smp_processor_id()) - NOW();
+    s_time_t us = (per_cpu(timer_deadline, smp_processor_id()) - NOW()) / 1000;
+    /*
+     * while us < 0 or us > (u32)-1, return a large u32,
+     * choose (unsigned int)-2000 to avoid wrapping while added with exit
+     * latency because the latency should not larger than 2ms
+     */
+    return (us >> 32) ? (unsigned int)-2000 : (unsigned int)us;
 }
 
 static int menu_select(struct acpi_processor_power *power)
@@ -56,7 +62,7 @@ static int menu_select(struct acpi_proce
     int i;
 
     /* determine the expected residency time */
-    data->expected_us = (u32) get_sleep_length_ns() / 1000;
+    data->expected_us = get_sleep_length_us();
 
     /* find the deepest idle state that satisfies our constraints */
     for ( i = 2; i < power->count; i++ )

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] cpuidle: Fix possible false judge caused by type casting, Xen patchbot-unstable <=