virtualization.lists.linux-foundation.org archive mirror
 help / color / mirror / Atom feed
From: Glauber de Oliveira Costa <gcosta@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: lguest@ozlabs.org, kvm-devel@lists.sourceforge.net, ak@suse.de,
	virtualization@lists.linux-foundation.org, chrisw@sous-sol.org,
	tglx@linutronix.de, anthony@codemonkey.ws,
	akpm@linux-foundation.org,
	Glauber de Oliveira Costa <gcosta@redhat.com>,
	mingo@elte.hu
Subject: [PATCH 6/24] Add debugreg/load_rsp native hooks
Date: Fri,  9 Nov 2007 16:42:47 -0200	[thread overview]
Message-ID: <11946338212915-git-send-email-gcosta@redhat.com> (raw)
In-Reply-To: <1194633815833-git-send-email-gcosta@redhat.com>

This patch adds native hooks for debugreg handling functions,
and for the native load_rsp0 function. The later also have its
call sites patched. There's some room for consolidation in the
processor*.h headers, and it is done, for paravirt related functions

Signed-off-by: Glauber de Oliveira Costa <gcosta@redhat.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Acked-by: Jeremy Fitzhardinge <jeremy@xensource.com>
---
 arch/x86/kernel/process_64.c   |    2 +-
 arch/x86/kernel/smpboot_64.c   |    2 +-
 include/asm-x86/msr.h          |   67 ------------------
 include/asm-x86/processor.h    |  146 ++++++++++++++++++++++++++++++++++++++++
 include/asm-x86/processor_32.h |  138 +-------------------------------------
 include/asm-x86/processor_64.h |   32 ++++-----
 6 files changed, 165 insertions(+), 222 deletions(-)

diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
index 6472f37..9647a10 100644
--- a/arch/x86/kernel/process_64.c
+++ b/arch/x86/kernel/process_64.c
@@ -589,7 +589,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
 	/*
 	 * Reload esp0, LDT and the page table pointer:
 	 */
-	tss->rsp0 = next->rsp0;
+	load_esp0(tss, next);
 
 	/* 
 	 * Switch DS and ES.
diff --git a/arch/x86/kernel/smpboot_64.c b/arch/x86/kernel/smpboot_64.c
index 17e54fa..8fb0f90 100644
--- a/arch/x86/kernel/smpboot_64.c
+++ b/arch/x86/kernel/smpboot_64.c
@@ -613,7 +613,7 @@ do_rest:
 	start_rip = setup_trampoline();
 
 	init_rsp = c_idle.idle->thread.rsp;
-	per_cpu(init_tss,cpu).rsp0 = init_rsp;
+	load_esp0(&per_cpu(init_tss, cpu), &c_idle.idle->thread);
 	initial_code = start_secondary;
 	clear_tsk_thread_flag(c_idle.idle, TIF_FORK);
 
diff --git a/include/asm-x86/msr.h b/include/asm-x86/msr.h
index ba4b314..48f73c7 100644
--- a/include/asm-x86/msr.h
+++ b/include/asm-x86/msr.h
@@ -253,73 +253,6 @@ static inline int wrmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h)
 			  : "=a" (low), "=d" (high) \
 			  : "c" (counter))
 
-static inline void cpuid(int op, unsigned int *eax, unsigned int *ebx,
-			 unsigned int *ecx, unsigned int *edx)
-{
-	__asm__("cpuid"
-		: "=a" (*eax),
-		  "=b" (*ebx),
-		  "=c" (*ecx),
-		  "=d" (*edx)
-		: "0" (op));
-}
-
-/* Some CPUID calls want 'count' to be placed in ecx */
-static inline void cpuid_count(int op, int count, int *eax, int *ebx, int *ecx,
-			       int *edx)
-{
-	__asm__("cpuid"
-		: "=a" (*eax),
-		  "=b" (*ebx),
-		  "=c" (*ecx),
-		  "=d" (*edx)
-		: "0" (op), "c" (count));
-}
-
-/*
- * CPUID functions returning a single datum
- */
-static inline unsigned int cpuid_eax(unsigned int op)
-{
-	unsigned int eax;
-
-	__asm__("cpuid"
-		: "=a" (eax)
-		: "0" (op)
-		: "bx", "cx", "dx");
-	return eax;
-}
-static inline unsigned int cpuid_ebx(unsigned int op)
-{
-	unsigned int eax, ebx;
-
-	__asm__("cpuid"
-		: "=a" (eax), "=b" (ebx)
-		: "0" (op)
-		: "cx", "dx" );
-	return ebx;
-}
-static inline unsigned int cpuid_ecx(unsigned int op)
-{
-	unsigned int eax, ecx;
-
-	__asm__("cpuid"
-		: "=a" (eax), "=c" (ecx)
-		: "0" (op)
-		: "bx", "dx" );
-	return ecx;
-}
-static inline unsigned int cpuid_edx(unsigned int op)
-{
-	unsigned int eax, edx;
-
-	__asm__("cpuid"
-		: "=a" (eax), "=d" (edx)
-		: "0" (op)
-		: "bx", "cx");
-	return edx;
-}
-
 #ifdef CONFIG_SMP
 void rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h);
 void wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h);
diff --git a/include/asm-x86/processor.h b/include/asm-x86/processor.h
index 46e1c04..a576a72 100644
--- a/include/asm-x86/processor.h
+++ b/include/asm-x86/processor.h
@@ -1,5 +1,151 @@
+#ifndef _X86_PROCESSOR_H_
+#define _X86_PROCESSOR_H_
+
+#include <linux/kernel.h>
+#include <asm/bug.h>
+
+static inline void native_cpuid(unsigned int *eax, unsigned int *ebx,
+				unsigned int *ecx, unsigned int *edx)
+{
+	/* ecx is often an input as well as an output. */
+	__asm__("cpuid"
+		: "=a" (*eax),
+		  "=b" (*ebx),
+		  "=c" (*ecx),
+		  "=d" (*edx)
+		: "0" (*eax), "2" (*ecx));
+}
+
+static inline unsigned long native_get_debugreg(int regno)
+{
+	unsigned long val = 0; 	/* Damn you, gcc! */
+
+	switch (regno) {
+	case 0:
+		asm volatile ("mov %%db0, %0" :"=r" (val)); break;
+	case 1:
+		asm volatile ("mov %%db1, %0" :"=r" (val)); break;
+	case 2:
+		asm volatile ("mov %%db2, %0" :"=r" (val)); break;
+	case 3:
+		asm volatile ("mov %%db3, %0" :"=r" (val)); break;
+	case 6:
+		asm volatile ("mov %%db6, %0" :"=r" (val)); break;
+	case 7:
+		asm volatile ("mov %%db7, %0" :"=r" (val)); break;
+	default:
+		WARN_ON(1);
+	}
+	return val;
+}
+
+static inline void native_set_debugreg(int regno, unsigned long value)
+{
+	switch (regno) {
+	case 0:
+		asm("mov %0,%%db0"	:  :"r" (value) : "memory");
+		break;
+	case 1:
+		asm("mov %0,%%db1"	:  :"r" (value) : "memory");
+		break;
+	case 2:
+		asm("mov %0,%%db2"	:  :"r" (value) : "memory");
+		break;
+	case 3:
+		asm("mov %0,%%db3"	:  :"r" (value) : "memory");
+		break;
+	case 6:
+		asm("mov %0,%%db6"	:  :"r" (value) : "memory");
+		break;
+	case 7:
+		asm("mov %0,%%db7"	:  :"r" (value) : "memory");
+		break;
+	default:
+		WARN_ON(1);
+	}
+}
+
 #ifdef CONFIG_X86_32
 # include "processor_32.h"
 #else
 # include "processor_64.h"
 #endif
+
+#ifdef CONFIG_PARAVIRT
+#include <asm/paravirt.h>
+#else
+#define paravirt_enabled() 0
+#define __cpuid native_cpuid
+#define SWAPGS	swapgs
+
+static inline void load_esp0(struct tss_struct *tss,
+			     struct thread_struct *thread)
+{
+	native_load_esp0(tss, thread);
+}
+
+/*
+ * These special macros can be used to get or set a debugging register
+ */
+#define get_debugreg(var, register)				\
+	(var) = native_get_debugreg(register)
+#define set_debugreg(value, register)				\
+	native_set_debugreg(register, value)
+
+#define set_iopl_mask native_set_iopl_mask
+#endif /* CONFIG_PARAVIRT */
+
+/*
+ * Generic CPUID function
+ * clear %ecx since some cpus (Cyrix MII) do not set or clear %ecx
+ * resulting in stale register contents being returned.
+ */
+static inline void cpuid(unsigned int op, unsigned int *eax, unsigned int *ebx,
+			 unsigned int *ecx, unsigned int *edx)
+{
+	*eax = op;
+	*ecx = 0;
+	__cpuid(eax, ebx, ecx, edx);
+}
+
+/* Some CPUID calls want 'count' to be placed in ecx */
+static inline void cpuid_count(int op, int count, unsigned *eax,
+			       unsigned *ebx, unsigned *ecx, unsigned *edx)
+{
+	*eax = op;
+	*ecx = count;
+	__cpuid(eax, ebx, ecx, edx);
+}
+
+/*
+ * CPUID functions returning a single datum
+ */
+static inline unsigned int cpuid_eax(unsigned int op)
+{
+	unsigned int eax, ebx, ecx, edx;
+
+	cpuid(op, &eax, &ebx, &ecx, &edx);
+	return eax;
+}
+static inline unsigned int cpuid_ebx(unsigned int op)
+{
+	unsigned int eax, ebx, ecx, edx;
+
+	cpuid(op, &eax, &ebx, &ecx, &edx);
+	return ebx;
+}
+static inline unsigned int cpuid_ecx(unsigned int op)
+{
+	unsigned int eax, ebx, ecx, edx;
+
+	cpuid(op, &eax, &ebx, &ecx, &edx);
+	return ecx;
+}
+static inline unsigned int cpuid_edx(unsigned int op)
+{
+	unsigned int eax, ebx, ecx, edx;
+
+	cpuid(op, &eax, &ebx, &ecx, &edx);
+	return edx;
+}
+#endif
diff --git a/include/asm-x86/processor_32.h b/include/asm-x86/processor_32.h
index 3b51a18..233fee3 100644
--- a/include/asm-x86/processor_32.h
+++ b/include/asm-x86/processor_32.h
@@ -132,17 +132,6 @@ extern void detect_ht(struct cpuinfo_x86 *c);
 static inline void detect_ht(struct cpuinfo_x86 *c) {}
 #endif
 
-static inline void native_cpuid(unsigned int *eax, unsigned int *ebx,
-					 unsigned int *ecx, unsigned int *edx)
-{
-	/* ecx is often an input as well as an output. */
-	__asm__("cpuid"
-		: "=a" (*eax),
-		  "=b" (*ebx),
-		  "=c" (*ecx),
-		  "=d" (*edx)
-		: "0" (*eax), "2" (*ecx));
-}
 
 #define load_cr3(pgdir) write_cr3(__pa(pgdir))
 
@@ -505,56 +494,6 @@ static inline void native_load_esp0(struct tss_struct *tss, struct thread_struct
 	}
 }
 
-
-static inline unsigned long native_get_debugreg(int regno)
-{
-	unsigned long val = 0; 	/* Damn you, gcc! */
-
-	switch (regno) {
-	case 0:
-		asm("movl %%db0, %0" :"=r" (val)); break;
-	case 1:
-		asm("movl %%db1, %0" :"=r" (val)); break;
-	case 2:
-		asm("movl %%db2, %0" :"=r" (val)); break;
-	case 3:
-		asm("movl %%db3, %0" :"=r" (val)); break;
-	case 6:
-		asm("movl %%db6, %0" :"=r" (val)); break;
-	case 7:
-		asm("movl %%db7, %0" :"=r" (val)); break;
-	default:
-		BUG();
-	}
-	return val;
-}
-
-static inline void native_set_debugreg(int regno, unsigned long value)
-{
-	switch (regno) {
-	case 0:
-		asm("movl %0,%%db0"	: /* no output */ :"r" (value));
-		break;
-	case 1:
-		asm("movl %0,%%db1"	: /* no output */ :"r" (value));
-		break;
-	case 2:
-		asm("movl %0,%%db2"	: /* no output */ :"r" (value));
-		break;
-	case 3:
-		asm("movl %0,%%db3"	: /* no output */ :"r" (value));
-		break;
-	case 6:
-		asm("movl %0,%%db6"	: /* no output */ :"r" (value));
-		break;
-	case 7:
-		asm("movl %0,%%db7"	: /* no output */ :"r" (value));
-		break;
-	default:
-		BUG();
-	}
-}
-
 /*
  * Set IOPL bits in EFLAGS from given mask
  */
@@ -571,82 +510,9 @@ static inline void native_set_iopl_mask(unsigned mask)
 				: "i" (~X86_EFLAGS_IOPL), "r" (mask));
 }
 
-#ifdef CONFIG_PARAVIRT
-#include <asm/paravirt.h>
-#else
-#define paravirt_enabled() 0
-#define __cpuid native_cpuid
-
-static inline void load_esp0(struct tss_struct *tss, struct thread_struct *thread)
-{
-	native_load_esp0(tss, thread);
-}
-
-/*
- * These special macros can be used to get or set a debugging register
- */
-#define get_debugreg(var, register)				\
-	(var) = native_get_debugreg(register)
-#define set_debugreg(value, register)				\
-	native_set_debugreg(register, value)
-
-#define set_iopl_mask native_set_iopl_mask
-#endif /* CONFIG_PARAVIRT */
-
-/*
- * Generic CPUID function
- * clear %ecx since some cpus (Cyrix MII) do not set or clear %ecx
- * resulting in stale register contents being returned.
- */
-static inline void cpuid(unsigned int op,
-			 unsigned int *eax, unsigned int *ebx,
-			 unsigned int *ecx, unsigned int *edx)
-{
-	*eax = op;
-	*ecx = 0;
-	__cpuid(eax, ebx, ecx, edx);
-}
-
-/* Some CPUID calls want 'count' to be placed in ecx */
-static inline void cpuid_count(unsigned int op, int count,
-			       unsigned int *eax, unsigned int *ebx,
-			       unsigned int *ecx, unsigned int *edx)
-{
-	*eax = op;
-	*ecx = count;
-	__cpuid(eax, ebx, ecx, edx);
-}
-
-/*
- * CPUID functions returning a single datum
- */
-static inline unsigned int cpuid_eax(unsigned int op)
-{
-	unsigned int eax, ebx, ecx, edx;
-
-	cpuid(op, &eax, &ebx, &ecx, &edx);
-	return eax;
-}
-static inline unsigned int cpuid_ebx(unsigned int op)
-{
-	unsigned int eax, ebx, ecx, edx;
-
-	cpuid(op, &eax, &ebx, &ecx, &edx);
-	return ebx;
-}
-static inline unsigned int cpuid_ecx(unsigned int op)
-{
-	unsigned int eax, ebx, ecx, edx;
-
-	cpuid(op, &eax, &ebx, &ecx, &edx);
-	return ecx;
-}
-static inline unsigned int cpuid_edx(unsigned int op)
+/* We don't really have one */
+static inline void native_swapgs(void)
 {
-	unsigned int eax, ebx, ecx, edx;
-
-	cpuid(op, &eax, &ebx, &ecx, &edx);
-	return edx;
 }
 
 /* generic versions from gas */
diff --git a/include/asm-x86/processor_64.h b/include/asm-x86/processor_64.h
index 6c0d96a..befecc6 100644
--- a/include/asm-x86/processor_64.h
+++ b/include/asm-x86/processor_64.h
@@ -114,21 +114,13 @@ extern unsigned long mmu_cr4_features;
 static inline void set_in_cr4 (unsigned long mask)
 {
 	mmu_cr4_features |= mask;
-	__asm__("movq %%cr4,%%rax\n\t"
-		"orq %0,%%rax\n\t"
-		"movq %%rax,%%cr4\n"
-		: : "irg" (mask)
-		:"ax");
+	write_cr4(read_cr4() | mask);
 }
 
 static inline void clear_in_cr4 (unsigned long mask)
 {
 	mmu_cr4_features &= ~mask;
-	__asm__("movq %%cr4,%%rax\n\t"
-		"andq %0,%%rax\n\t"
-		"movq %%rax,%%cr4\n"
-		: : "irg" (~mask)
-		:"ax");
+	write_cr4(read_cr4() & ~mask);
 }
 
 
@@ -249,6 +241,12 @@ struct thread_struct {
 	.rsp0 = (unsigned long)&init_stack + sizeof(init_stack) \
 }
 
+static inline void native_load_esp0(struct tss_struct *tss,
+				    struct thread_struct *thread)
+{
+	tss->rsp0 = thread->rsp0;
+}
+
 #define INIT_MMAP \
 { &init_mm, 0, 0, NULL, PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, 1, NULL, NULL }
 
@@ -264,13 +262,13 @@ struct thread_struct {
 	set_fs(USER_DS);							 \
 } while(0) 
 
-#define get_debugreg(var, register)				\
-		__asm__("movq %%db" #register ", %0"		\
-			:"=r" (var))
-#define set_debugreg(value, register)			\
-		__asm__("movq %0,%%db" #register		\
-			: /* no output */			\
-			:"r" (value))
+extern void native_swapgs(void);
+
+/* We have it for simmetry with i386 code, but we don't really use it */
+static inline void native_set_iopl_mask(unsigned mask)
+{
+
+}
 
 struct task_struct;
 struct mm_struct;
-- 
1.4.4.2

  parent reply	other threads:[~2007-11-09 18:42 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <11946337851964-git-send-email-gcosta@redhat.com>
2007-11-09 18:42 ` [PATCH 1/24] mm/sparse-vmemmap.c: make sure init_mm is included Glauber de Oliveira Costa
     [not found] ` <11946337933104-git-send-email-gcosta@redhat.com>
2007-11-09 18:42   ` [PATCH 2/24] irqflags consolidation Glauber de Oliveira Costa
     [not found]   ` <11946337991750-git-send-email-gcosta@redhat.com>
2007-11-09 18:42     ` [PATCH 3/24] consolidate spinlock.h Glauber de Oliveira Costa
     [not found]     ` <11946338053158-git-send-email-gcosta@redhat.com>
2007-11-09 18:42       ` [PATCH 4/24] tlb functions consolidation Glauber de Oliveira Costa
     [not found]       ` <11946338103068-git-send-email-gcosta@redhat.com>
2007-11-09 18:42         ` [PATCH 5/24] smp x86 consolidation Glauber de Oliveira Costa
     [not found]         ` <1194633815833-git-send-email-gcosta@redhat.com>
2007-11-09 18:42           ` Glauber de Oliveira Costa [this message]
2007-11-09 18:42             ` [PATCH 7/24] consolidate msr.h Glauber de Oliveira Costa
     [not found]             ` <11946338263902-git-send-email-gcosta@redhat.com>
2007-11-09 18:42               ` [PATCH 8/24] consolidate system.h Glauber de Oliveira Costa
     [not found]               ` <1194633831882-git-send-email-gcosta@redhat.com>
2007-11-09 18:42                 ` [PATCH 9/24] Wipe out traditional opt from x86_64 Makefile Glauber de Oliveira Costa
     [not found]                 ` <11946338361369-git-send-email-gcosta@redhat.com>
2007-11-09 18:42                   ` [PATCH 10/24] paravirt hooks at entry functions Glauber de Oliveira Costa
     [not found]                   ` <11946338413283-git-send-email-gcosta@redhat.com>
2007-11-09 18:42                     ` [PATCH 11/24] read/write_crX, clts and wbinvd for 64-bit paravirt Glauber de Oliveira Costa
     [not found]                     ` <11946338473652-git-send-email-gcosta@redhat.com>
2007-11-09 18:42                       ` [PATCH 12/24] provide native irq initialization function Glauber de Oliveira Costa
     [not found]                       ` <1194633852469-git-send-email-gcosta@redhat.com>
2007-11-09 18:42                         ` [PATCH 13/24] report ring kernel is running without paravirt Glauber de Oliveira Costa
     [not found]                         ` <1194633857930-git-send-email-gcosta@redhat.com>
2007-11-09 18:42                           ` [PATCH 14/24] export math_state_restore Glauber de Oliveira Costa
     [not found]                           ` <11946338621966-git-send-email-gcosta@redhat.com>
2007-11-09 18:42                             ` [PATCH 15/24] native versions for set pagetables Glauber de Oliveira Costa
     [not found]                             ` <11946338683305-git-send-email-gcosta@redhat.com>
2007-11-09 18:42                               ` [PATCH 16/24] add native functions for descriptors handling Glauber de Oliveira Costa
     [not found]                               ` <1194633873306-git-send-email-gcosta@redhat.com>
2007-11-09 18:42                                 ` [PATCH 17/24] This patch add provisions for time related functions so they Glauber de Oliveira Costa
     [not found]                                 ` <1194633878886-git-send-email-gcosta@redhat.com>
2007-11-09 18:42                                   ` [PATCH 18/24] export cpu_gdt_descr Glauber de Oliveira Costa
     [not found]                                   ` <11946338832681-git-send-email-gcosta@redhat.com>
2007-11-09 18:43                                     ` [PATCH 19/24] turn priviled operation into a macro in head_64.S Glauber de Oliveira Costa
     [not found]                                     ` <1194633888761-git-send-email-gco! sta@redhat.com>
     [not found]                                       ` <1194633888761-git-send-email-gcosta@redhat.com>
2007-11-09 18:43                                         ` [PATCH 20/24] tweak io_64.h for paravirt Glauber de Oliveira Costa
     [not found]                                       ` <11946338932611-git-send-email-gcosta@redhat.com>
2007-11-09 18:43                                         ` [PATCH 21/24] native versions for page table entries values Glauber de Oliveira Costa
     [not found]                                         ` <1194633898545-git-send-email-gcosta@redhat.com>
2007-11-09 18:43                                           ` [PATCH 22/24] prepare x86_64 architecture initialization for paravirt Glauber de Oliveira Costa
     [not found]                                           ` <11946339033567-git-send-email-gcosta@redhat.com>
2007-11-09 18:43                                             ` [PATCH 23/24] consolidation of paravirt for 32 and 64 bits Glauber de Oliveira Costa
     [not found]                                             ` <11946339082711-git-send-email-gcosta@redhat.com>
2007-11-09 18:43                                               ` [PATCH 24/24] make vsmp a paravirt client Glauber de Oliveira Costa
     [not found]                                               ` <11946339142999-git-send-email-gcosta@redhat.com>
2007-11-11 18:07                                                 ` Andi Kleen
     [not found]                                                 ` <20071111180709.GG22277@bingen.suse.de>
2007-11-13 11:36                                                   ` Glauber de Oliveira Costa
     [not found]                                                   ` <47398C4A.40806@redhat.com>
2007-11-13 12:33                                                     ` Andi Kleen
     [not found]                                                     ` <200711131333.41946.ak@suse.de>
2007-11-13 12:51                                                       ` Glauber de Oliveira Costa
     [not found]                                                       ` <47399DC8.7000504@redhat.com>
2007-11-13 13:09                                                         ` Andi Kleen
2007-11-13 17:21                                                         ` Jeremy Fitzhardinge
     [not found]                                                         ` <200711131409.41959.ak@suse.de>
2007-11-13 18:49                                                           ` Ravikiran Thirumalai
2007-11-13 18:00                                                     ` Ravikiran Thirumalai
2007-11-19 22:21               ` [PATCH 7/24] consolidate msr.h Bastian Blank
     [not found]               ` <20071119222151.GA11178@wavehammer.waldi.eu.org>
2007-11-19 22:36                 ` Steven Rostedt
     [not found]                 ` <Pine.LNX.4.58.0711191734270.32296@gandalf.stny.rr.com>
2007-11-20  5:51                   ` Ingo Molnar
     [not found]                   ` <20071120055113.GC20436@elte.hu>
2007-11-20  6:14                     ` Steven Rostedt
2007-11-20  6:16                     ` Steven Rostedt
     [not found]                     ` <Pine.LNX.4.58.0711200114580.4062@gandalf.stny.rr.com>
2007-11-20 10:43                       ` Rusty Russell
2007-11-10  0:29           ` [PATCH 5/24] smp x86 consolidation Jeremy Fitzhardinge
     [not found]           ` <4734FB67.8080500@goop.org>
2007-11-10  1:29             ` Glauber de Oliveira Costa
     [not found]             ` <4735098B.7040305@redhat.com>
2007-11-10  2:08               ` Jeremy Fitzhardinge
2007-11-17  9:32               ` Ingo Molnar
2007-11-09 23:00   ` [PATCH 1/24] mm/sparse-vmemmap.c: make sure init_mm is included Jeremy Fitzhardinge
     [not found]   ` <4734E6A0.6070508@goop.org>
2007-11-10  1:26     ` Glauber de Oliveira Costa
2007-11-12  8:17 ` [kvm-devel] [PATCH 0/24] paravirt_ops for unified x86 - that's me again! Amit Shah
     [not found] ` <200711121347.20050.amit.shah@qumranet.com>
2007-11-13 11:43   ` Glauber de Oliveira Costa
2007-11-13 20:26   ` Jeremy Fitzhardinge

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=11946338212915-git-send-email-gcosta@redhat.com \
    --to=gcosta@redhat.com \
    --cc=ak@suse.de \
    --cc=akpm@linux-foundation.org \
    --cc=anthony@codemonkey.ws \
    --cc=chrisw@sous-sol.org \
    --cc=kvm-devel@lists.sourceforge.net \
    --cc=lguest@ozlabs.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=tglx@linutronix.de \
    --cc=virtualization@lists.linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).