| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
 Re: [Xen-devel] [PATCH v2] x86: Use deep C states for off-lined CPUs
 Jan was objecting to moving it in this patch because it is not directly 
related to the functionality that the patch was addressing. Or was it 
because it wasn't properly done?
 
-boris
On 03/04/12 10:09, Liu, Jinsong wrote:
 
Fine to me.
BTW, seems another patch moving mwait_ptr declaration and related code into 
if(FFH) is slightly better? It's FFH staff anyway.
Thanks,
Jinsong
Boris Ostrovsky wrote:
 
# HG changeset patch
# User Boris Ostrovsky<boris.ostrovsky@xxxxxxx>
# Date 1330642361 -3600
# Node ID 99df5c6b2964ceaa73651d7bc02fb1ae820f7691
# Parent  a7bacdc5449a2f7bb9c35b2a1334b463fe9f29a9
x86: Use deep C states for off-lined CPUs
Currently when a core is taken off-line it is placed in C1 state
(unless MONITOR/MWAIT is used). This patch allows a core to go to
deeper C states resulting in significantly higher power savings.
Signed-off-by: Boris Ostrovsky<boris.ostrovsky@xxxxxxx>
diff -r a7bacdc5449a -r 99df5c6b2964 xen/arch/x86/acpi/cpu_idle.c
--- a/xen/arch/x86/acpi/cpu_idle.c      Mon Feb 27 17:05:18 2012 +0000
+++ b/xen/arch/x86/acpi/cpu_idle.c      Thu Mar 01 23:52:41 2012 +0100
@@ -566,6 +566,7 @@ static void acpi_dead_idle(void)
      struct acpi_processor_power *power;
      struct acpi_processor_cx *cx;
      void *mwait_ptr;
+    struct cpuinfo_x86 *c =¤t_cpu_data;
      if ( (power = processor_powers[smp_processor_id()]) == NULL )
          goto default_halt;
@@ -601,6 +602,23 @@ static void acpi_dead_idle(void)
              mb();
              __mwait(cx->address, 0);
          }
+    }
+    else if ( c->x86_vendor == X86_VENDOR_AMD&&
+              cx->entry_method == ACPI_CSTATE_EM_SYSIO )
+    {
+        /* Intel prefers not to use SYSIO */
+
+        /* Avoid references to shared data after the cache flush */
+        u32 address = cx->address;
+        u32 pmtmr_ioport_local = pmtmr_ioport;
+
+        wbinvd();
+
+        while ( 1 )
+        {
+            inb(address);
+            inl(pmtmr_ioport_local);
+        }
      }
  default_halt:
 
 
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
 
 |