>From 71caae9fe1faef31c696a1510cb379ef6f30904d Mon Sep 17 00:00:00 2001
From: Vishwesh M Rudramuni <[email protected]>
Date: Tue, 16 Nov 2010 22:26:16 +0530
Subject: [PATCH] temporary cpu hotplug

This is a temporary patch to fix the cpu hotplug patch
to put the non bsp processor to a deep c-state.

Signed-off-by: Vishwesh M Rudramuni <[email protected]>

---
 arch/x86/include/asm/processor.h |   28 ++++++++++++++++++++++------
 1 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index 7e5c6a6..c9fcfed 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -21,6 +21,7 @@ struct mm_struct;
 #include <asm/msr.h>
 #include <asm/desc_defs.h>
 #include <asm/nops.h>
+#include <asm/mrst.h>
 
 #include <linux/personality.h>
 #include <linux/cpumask.h>
@@ -30,6 +31,7 @@ struct mm_struct;
 #include <linux/init.h>
 #include <linux/err.h>
 
+#define C6_DATA_HINTS  0x52
 #define HBP_NUM 4
 /*
  * Default implementation of macro that returns current
@@ -777,13 +779,27 @@ extern unsigned long              idle_nomwait;
  */
 static inline void wbinvd_halt(void)
 {
-       mb();
-       /* check for clflush to determine if wbinvd is legal */
-       if (cpu_has_clflush)
-               asm volatile("cli; wbinvd; 1: hlt; jmp 1b" : : : "memory");
-       else
+       if ((__mrst_cpu_chip == MRST_CPU_CHIP_LINCROFT) ||
+               (__mrst_cpu_chip == MRST_CPU_CHIP_PENWELL)) {
+               /* flush cache */
+               wbinvd();
+
+               /* Here we are doing a forced mwait to make the thread 1
+                * enter a C6 state. Forcefully clean up the thread info
+                * polling flags so that monitor succeeds.
+                */
                while (1)
-                       halt();
+                       mwait_idle_with_hints(C6_DATA_HINTS, 0x1);
+       } else {
+               mb();
+               /* check for clflush to determine if wbinvd is legal */
+               if (cpu_has_clflush)
+                       asm volatile(\
+                       "cli; wbinvd; 1: hlt; jmp 1b" : : : "memory");
+               else
+                       while (1)
+                               halt();
+       }
 }
 
 extern void enable_sep_cpu(void);
-- 
1.5.4.5

_______________________________________________
MeeGo-kernel mailing list
[email protected]
http://lists.meego.com/listinfo/meego-kernel

Reply via email to