[PATCH 20/24] tweak io_64.h for paravirt.

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: <linux-kernel@...>
Cc: <akpm@...>, <glommer@...>, <tglx@...>, <mingo@...>, <rusty@...>, <ak@...>, <chrisw@...>, <avi@...>, <anthony@...>, <virtualization@...>, <lguest@...>, <kvm-devel@...>, <zach@...>, <jun.nakajima@...>, Glauber de Oliveira Costa <gcosta@...>, Steven Rostedt <rostedt@...>
Date: Friday, November 9, 2007 - 2:43 pm

We need something here because we can't call in and out instructions
directly. However, we have to be careful, because no indirections are
allowed in misc_64.c , and paravirt_ops is a kind of one. So just
call it directly there

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/boot/compressed/misc_64.c |    6 +++++
 include/asm-x86/io_64.h            |   37 +++++++++++++++++++++++++++++------
 2 files changed, 36 insertions(+), 7 deletions(-)

diff --git a/arch/x86/boot/compressed/misc_64.c b/arch/x86/boot/compressed/misc_64.c
index 6ea015a..6640a17 100644
--- a/arch/x86/boot/compressed/misc_64.c
+++ b/arch/x86/boot/compressed/misc_64.c
@@ -9,6 +9,12 @@
  * High loaded stuff by Hans Lermen & Werner Almesberger, Feb. 1996
  */
 
+/*
+ * we have to be careful, because no indirections are allowed here, and
+ * paravirt_ops is a kind of one. As it will only run in baremetal anyway,
+ * we just keep it from happening
+ */
+#undef CONFIG_PARAVIRT
 #define _LINUX_STRING_H_ 1
 #define __LINUX_BITMAP_H 1
 
diff --git a/include/asm-x86/io_64.h b/include/asm-x86/io_64.h
index a037b07..57fcdd9 100644
--- a/include/asm-x86/io_64.h
+++ b/include/asm-x86/io_64.h
@@ -35,12 +35,24 @@
   *  - Arnaldo Carvalho de Melo <acme@conectiva.com.br>
   */
 
-#define __SLOW_DOWN_IO "\noutb %%al,$0x80"
+static inline void native_io_delay(void)
+{
+	asm volatile("outb %%al,$0x80" : : : "memory");
+}
 
-#ifdef REALLY_SLOW_IO
-#define __FULL_SLOW_DOWN_IO __SLOW_DOWN_IO __SLOW_DOWN_IO __SLOW_DOWN_IO __SLOW_DOWN_IO
+#if defined(CONFIG_PARAVIRT)
+#include <asm/paravirt.h>
 #else
-#define __FULL_SLOW_DOWN_IO __SLOW_DOWN_IO
+
+static inline void slow_down_io(void)
+{
+	native_io_delay();
+#ifdef REALLY_SLOW_IO
+	native_io_delay();
+	native_io_delay();
+	native_io_delay();
+#endif
+}
 #endif
 
 /*
@@ -52,9 +64,15 @@ static inline void out##s(unsigned x value, unsigned short port) {
 #define __OUT2(s,s1,s2) \
 __asm__ __volatile__ ("out" #s " %" s1 "0,%" s2 "1"
 
+#ifndef REALLY_SLOW_IO
+#define REALLY_SLOW_IO
+#define UNSET_REALLY_SLOW_IO
+#endif
+
 #define __OUT(s,s1,x) \
 __OUT1(s,x) __OUT2(s,s1,"w") : : "a" (value), "Nd" (port)); } \
-__OUT1(s##_p,x) __OUT2(s,s1,"w") __FULL_SLOW_DOWN_IO : : "a" (value), "Nd" (port));} \
+__OUT1(s##_p, x) __OUT2(s, s1, "w") : : "a" (value), "Nd" (port)); \
+		slow_down_io(); }
 
 #define __IN1(s) \
 static inline RETURN_TYPE in##s(unsigned short port) { RETURN_TYPE _v;
@@ -63,8 +81,13 @@ static inline RETURN_TYPE in##s(unsigned short port) { RETURN_TYPE _v;
 __asm__ __volatile__ ("in" #s " %" s2 "1,%" s1 "0"
 
 #define __IN(s,s1,i...) \
-__IN1(s) __IN2(s,s1,"w") : "=a" (_v) : "Nd" (port) ,##i ); return _v; } \
-__IN1(s##_p) __IN2(s,s1,"w") __FULL_SLOW_DOWN_IO : "=a" (_v) : "Nd" (port) ,##i ); return _v; } \
+__IN1(s) __IN2(s, s1, "w") : "=a" (_v) : "Nd" (port), ##i); return _v; } \
+__IN1(s##_p) __IN2(s, s1, "w") : "=a" (_v) : "Nd" (port), ##i);	  \
+				slow_down_io(); return _v; }
+
+#ifdef UNSET_REALLY_SLOW_IO
+#undef REALLY_SLOW_IO
+#endif
 
 #define __INS(s) \
 static inline void ins##s(unsigned short port, void * addr, unsigned long count) \
-- 
1.4.4.2

-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 0/24] paravirt_ops for unified x86 - that's me again!, Glauber de Oliveira Costa..., (Fri Nov 9, 2:42 pm)
Re: [kvm-devel] [PATCH 0/24] paravirt_ops for unified x86 - ..., Jeremy Fitzhardinge, (Tue Nov 13, 4:26 pm)
Re: [kvm-devel] [PATCH 0/24] paravirt_ops for unified x86 - ..., Glauber de Oliveira Costa..., (Tue Nov 13, 7:43 am)
[PATCH 1/24] mm/sparse-vmemmap.c: make sure init_mm is inclu..., Glauber de Oliveira Costa..., (Fri Nov 9, 2:42 pm)
Re: [PATCH 1/24] mm/sparse-vmemmap.c: make sure init_mm is i..., Jeremy Fitzhardinge, (Fri Nov 9, 7:00 pm)
Re: [PATCH 1/24] mm/sparse-vmemmap.c: make sure init_mm is i..., Glauber de Oliveira Costa..., (Fri Nov 9, 9:26 pm)
[PATCH 2/24] irqflags consolidation, Glauber de Oliveira Costa..., (Fri Nov 9, 2:42 pm)
[PATCH 3/24] consolidate spinlock.h, Glauber de Oliveira Costa..., (Fri Nov 9, 2:42 pm)
[PATCH 4/24] tlb functions consolidation, Glauber de Oliveira Costa..., (Fri Nov 9, 2:42 pm)
[PATCH 5/24] smp x86 consolidation, Glauber de Oliveira Costa..., (Fri Nov 9, 2:42 pm)
Re: [PATCH 5/24] smp x86 consolidation, Jeremy Fitzhardinge, (Fri Nov 9, 8:29 pm)
Re: [PATCH 5/24] smp x86 consolidation, Glauber de Oliveira Costa..., (Fri Nov 9, 9:29 pm)
Re: [PATCH 5/24] smp x86 consolidation, Ingo Molnar, (Sat Nov 17, 5:32 am)
Re: [PATCH 5/24] smp x86 consolidation, Jeremy Fitzhardinge, (Fri Nov 9, 10:08 pm)
[PATCH 6/24] Add debugreg/load_rsp native hooks, Glauber de Oliveira Costa..., (Fri Nov 9, 2:42 pm)
[PATCH 7/24] consolidate msr.h, Glauber de Oliveira Costa..., (Fri Nov 9, 2:42 pm)
Re: [PATCH 7/24] consolidate msr.h, Bastian Blank, (Mon Nov 19, 6:21 pm)
Re: [PATCH 7/24] consolidate msr.h, Steven Rostedt, (Mon Nov 19, 6:36 pm)
Re: [PATCH 7/24] consolidate msr.h, Ingo Molnar, (Tue Nov 20, 1:51 am)
Re: [PATCH 7/24] consolidate msr.h, Steven Rostedt, (Tue Nov 20, 2:16 am)
Re: [PATCH 7/24] consolidate msr.h, Rusty Russell, (Tue Nov 20, 6:43 am)
Re: [PATCH 7/24] consolidate msr.h, Steven Rostedt, (Tue Nov 20, 2:14 am)
[PATCH 8/24] consolidate system.h, Glauber de Oliveira Costa..., (Fri Nov 9, 2:42 pm)
[PATCH 9/24] Wipe out traditional opt from x86_64 Makefile, Glauber de Oliveira Costa..., (Fri Nov 9, 2:42 pm)
[PATCH 10/24] paravirt hooks at entry functions., Glauber de Oliveira Costa..., (Fri Nov 9, 2:42 pm)
[PATCH 11/24] read/write_crX, clts and wbinvd for 64-bit par..., Glauber de Oliveira Costa..., (Fri Nov 9, 2:42 pm)
[PATCH 12/24] provide native irq initialization function, Glauber de Oliveira Costa..., (Fri Nov 9, 2:42 pm)
[PATCH 13/24] report ring kernel is running without paravirt, Glauber de Oliveira Costa..., (Fri Nov 9, 2:42 pm)
[PATCH 14/24] export math_state_restore, Glauber de Oliveira Costa..., (Fri Nov 9, 2:42 pm)
[PATCH 15/24] native versions for set pagetables, Glauber de Oliveira Costa..., (Fri Nov 9, 2:42 pm)
[PATCH 16/24] add native functions for descriptors handling, Glauber de Oliveira Costa..., (Fri Nov 9, 2:42 pm)
[PATCH 17/24] This patch add provisions for time related fun..., Glauber de Oliveira Costa..., (Fri Nov 9, 2:42 pm)
[PATCH 18/24] export cpu_gdt_descr, Glauber de Oliveira Costa..., (Fri Nov 9, 2:42 pm)
[PATCH 19/24] turn priviled operation into a macro in head_6..., Glauber de Oliveira Costa..., (Fri Nov 9, 2:43 pm)
[PATCH 20/24] tweak io_64.h for paravirt., Glauber de Oliveira Costa..., (Fri Nov 9, 2:43 pm)
[PATCH 21/24] native versions for page table entries values, Glauber de Oliveira Costa..., (Fri Nov 9, 2:43 pm)
[PATCH 22/24] prepare x86_64 architecture initialization for..., Glauber de Oliveira Costa..., (Fri Nov 9, 2:43 pm)
[PATCH 23/24] consolidation of paravirt for 32 and 64 bits, Glauber de Oliveira Costa..., (Fri Nov 9, 2:43 pm)
[PATCH 24/24] make vsmp a paravirt client, Glauber de Oliveira Costa..., (Fri Nov 9, 2:43 pm)
Re: [PATCH 24/24] make vsmp a paravirt client, Andi Kleen, (Sun Nov 11, 2:07 pm)
Re: [PATCH 24/24] make vsmp a paravirt client, Glauber de Oliveira Costa..., (Tue Nov 13, 7:36 am)
Re: [PATCH 24/24] make vsmp a paravirt client, Ravikiran Thirumalai, (Tue Nov 13, 2:00 pm)
Re: [PATCH 24/24] make vsmp a paravirt client, Andi Kleen, (Tue Nov 13, 8:33 am)
Re: [PATCH 24/24] make vsmp a paravirt client, Glauber de Oliveira Costa..., (Tue Nov 13, 8:51 am)
Re: [PATCH 24/24] make vsmp a paravirt client, Jeremy Fitzhardinge, (Tue Nov 13, 1:21 pm)
Re: [PATCH 24/24] make vsmp a paravirt client, Andi Kleen, (Tue Nov 13, 9:09 am)
Re: [PATCH 24/24] make vsmp a paravirt client, Ravikiran Thirumalai, (Tue Nov 13, 2:49 pm)