All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zachary Amsden <zach@vmware.com>
To: Andrew Morton <akpm@osdl.org>, Andi Kleen <ak@muc.de>,
	Jeremy Fitzhardinge <jeremy@goop.org>,
	Rusty Russell <rusty@rustcorp.com.au>,
	Chris Wright <chrisw@sous-sol.org>, Ingo Molnar <mingo@elte.hu>,
	Petr Vandrovec <petr@vmware.com>,
	Pratap Subrahmanyam <pratap@vmware.com>,
	Dan Hecht <dhecht@vmware.com>, Dan Arai <arai@vmware.com>,
	Virtualization Mailing List <virtualization@lists.osdl.org>,
	Chaz Masden <zamsden@gmail.com>, Zachary Amsden <zach@vmware.com>
Subject: [RFC, PATCH 1/5] Paravirt_ops full patching.patch
Date: Thu, 19 Apr 2007 18:52:24 -0700 (PDT)	[thread overview]
Message-ID: <20070420015224.56315BFC@zach-dev2.vmware.com> (raw)

Add 5-argument handling for paravirt ops patching of PAE functions.

Signed-off-by: Zachary Amsden <zach@vmware.com>

diff -r dbe11208916f include/asm-i386/paravirt.h
--- a/include/asm-i386/paravirt.h	Thu Apr 19 11:40:55 2007 -0700
+++ b/include/asm-i386/paravirt.h	Thu Apr 19 12:04:16 2007 -0700
@@ -308,10 +308,9 @@ unsigned paravirt_patch_insns(void *site
  * return value handling from within these macros.  This is fairly
  * cumbersome.
  *
- * There are 5 sets of PVOP_* macros for dealing with 0-4 arguments.
- * It could be extended to more arguments, but there would be little
- * to be gained from that.  For each number of arguments, there are
- * the two VCALL and CALL variants for void and non-void functions.
+ * There are 5 sets of PVOP_* macros for dealing with 0-5 arguments.
+ * For each number of arguments, there are the two VCALL and CALL
+ * variants for void and non-void functions.
  *
  * When there is a return value, the invoker of the macro must specify
  * the return type.  The macro then uses sizeof() on that type to
@@ -405,6 +404,21 @@ unsigned paravirt_patch_insns(void *site
 		    "0" ((u32)(arg1)), "1" ((u32)(arg2)),		\
 		    "2" ((u32)(arg3)), [_arg4] "mr" ((u32)(arg4)))
 
+#define PVOP_CALL5(rettype, op, arg1, arg2, arg3, arg4, arg5)		\
+	__PVOP_CALL(rettype, op,					\
+		    "push %[_arg5]; push %[_arg4];",			\
+		    "lea 8(%%esp),%%esp;",				\
+		    "0" ((u32)(arg1)), "1" ((u32)(arg2)),		\
+		    "2" ((u32)(arg3)), [_arg4] "mr" ((u32)(arg4)),	\
+		    [_arg5] "mr" ((u32)(arg5)))
+#define PVOP_VCALL5(op, arg1, arg2, arg3, arg4, arg5)			\
+	__PVOP_VCALL(op,						\
+		    "push %[_arg5]; push %[_arg4];",			\
+		    "lea 8(%%esp),%%esp;",				\
+		    "0" ((u32)(arg1)), "1" ((u32)(arg2)),		\
+		    "2" ((u32)(arg3)), [_arg4] "mr" ((u32)(arg4)),	\
+		    [_arg5] "mr" ((u32)(arg5)))
+
 static inline int paravirt_enabled(void)
 {
 	return paravirt_ops.paravirt_enabled;
@@ -644,11 +658,11 @@ static inline void set_iopl_mask(unsigne
 
 /* The paravirtualized I/O functions */
 static inline void slow_down_io(void) {
-	paravirt_ops.io_delay();
+	PVOP_VCALL0(io_delay);
 #ifdef REALLY_SLOW_IO
-	paravirt_ops.io_delay();
-	paravirt_ops.io_delay();
-	paravirt_ops.io_delay();
+	PVOP_VCALL0(io_delay);
+	PVOP_VCALL0(io_delay);
+	PVOP_VCALL0(io_delay);
 #endif
 }
 
@@ -824,8 +838,7 @@ static inline void set_pte_at(struct mm_
 static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
 			      pte_t *ptep, pte_t pteval)
 {
-	/* 5 arg words */
-	paravirt_ops.set_pte_at(mm, addr, ptep, pteval);
+	PVOP_VCALL5(mm, addr, ptep, pteval.pte_low, pteval.pte_high);
 }
 
 static inline void set_pte_atomic(pte_t *ptep, pte_t pteval)
@@ -836,8 +849,7 @@ static inline void set_pte_present(struc
 static inline void set_pte_present(struct mm_struct *mm, unsigned long addr,
 				   pte_t *ptep, pte_t pte)
 {
-	/* 5 arg words */
-	paravirt_ops.set_pte_present(mm, addr, ptep, pte);
+	PVOP_VCALL5(mm, addr, ptep, pte.pte_low, pte.pte_high);
 }
 
 static inline void set_pmd(pmd_t *pmdp, pmd_t pmdval)

             reply	other threads:[~2007-04-20  1:52 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-20  1:52 Zachary Amsden [this message]
2007-04-20  1:58 ` [RFC, PATCH 1/5] Paravirt_ops full patching.patch Jeremy Fitzhardinge
2007-04-20  2:29 ` Rusty Russell
2007-04-20  4:43 ` 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=20070420015224.56315BFC@zach-dev2.vmware.com \
    --to=zach@vmware.com \
    --cc=ak@muc.de \
    --cc=akpm@osdl.org \
    --cc=arai@vmware.com \
    --cc=chrisw@sous-sol.org \
    --cc=dhecht@vmware.com \
    --cc=jeremy@goop.org \
    --cc=mingo@elte.hu \
    --cc=petr@vmware.com \
    --cc=pratap@vmware.com \
    --cc=rusty@rustcorp.com.au \
    --cc=virtualization@lists.osdl.org \
    --cc=zamsden@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.