All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeremy Fitzhardinge <jeremy@xensource.com>
To: Andrew Morton <akpm@osdl.org>
Cc: Virtualization <virtualization@osdl.org>,
	Zachary Amsden <zach@vmware.com>,
	Xen-devel <xen-devel@lists.xensource.com>,
	Jeremy Fitzhardinge <jeremy@xensource.com>,
	Hollis Blanchard <hollisb@us.ibm.com>,
	Rusty Russell <rusty@rustcorp.com.au>,
	Linux Kernel <linux-kernel@vger.kernel.org>,
	Chris Wright <chrisw@sous-sol.org>,
	Ian Pratt <ian.pratt@xensource.com>,
	"Eric W. Biederman" <ebiederm@xmission.com>,
	Gerd Hoffmann <kraxel@suse.de>,
	Christian Limpach <Christian.Limpach@cl.cam.ac.uk>,
	Christoph Lameter <clameter@sgi.com>
Subject: [PATCH 6 of 13] Roll all the cpuid asm into one __cpuid call
Date: Tue, 01 Aug 2006 13:00:44 -0700	[thread overview]
Message-ID: <730b4fe6bc1edd17dfce.1154462444@ezr> (raw)
In-Reply-To: <patchbomb.1154462438@ezr>

1 file changed, 34 insertions(+), 40 deletions(-)
include/asm-i386/processor.h |   74 +++++++++++++++++++-----------------------


It's a little neater, and also means only one place to patch for
paravirtualization.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com>



===================================================================

diff -r 09b35e6bc0ca -r 730b4fe6bc1e include/asm-i386/processor.h
--- a/include/asm-i386/processor.h	Tue Aug 01 01:32:00 2006 -0700
+++ b/include/asm-i386/processor.h	Tue Aug 01 01:32:00 2006 -0700
@@ -143,31 +143,37 @@ static inline void detect_ht(struct cpui
 #define X86_EFLAGS_VIP	0x00100000 /* Virtual Interrupt Pending */
 #define X86_EFLAGS_ID	0x00200000 /* CPUID detection flag */
 
-/*
- * 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)
-{
+static inline void __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" (op), "c"(0));
+		: "0" (*eax), "2" (*ecx));
+}
+
+/*
+ * 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, int *eax, int *ebx, int *ecx,
-	       	int *edx)
-{
-	__asm__("cpuid"
-		: "=a" (*eax),
-		  "=b" (*ebx),
-		  "=c" (*ecx),
-		  "=d" (*edx)
-		: "0" (op), "c" (count));
+			       int *edx)
+{
+	*eax = op;
+	*ecx = count;
+	__cpuid(eax, ebx, ecx, edx);
 }
 
 /*
@@ -175,42 +181,30 @@ static inline void cpuid_count(int op, i
  */
 static inline unsigned int cpuid_eax(unsigned int op)
 {
-	unsigned int eax;
-
-	__asm__("cpuid"
-		: "=a" (eax)
-		: "0" (op)
-		: "bx", "cx", "dx");
+	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;
-
-	__asm__("cpuid"
-		: "=a" (eax), "=b" (ebx)
-		: "0" (op)
-		: "cx", "dx" );
+	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, ecx;
-
-	__asm__("cpuid"
-		: "=a" (eax), "=c" (ecx)
-		: "0" (op)
-		: "bx", "dx" );
+	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, edx;
-
-	__asm__("cpuid"
-		: "=a" (eax), "=d" (edx)
-		: "0" (op)
-		: "bx", "cx");
+	unsigned int eax, ebx, ecx, edx;
+
+	cpuid(op, &eax, &ebx, &ecx, &edx);
 	return edx;
 }

  parent reply	other threads:[~2006-08-01 20:00 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-08-01 20:00 [PATCH 0 of 13] Basic infrastructure patches for a paravirtualized kernel Jeremy Fitzhardinge
2006-08-01 20:00 ` [PATCH 1 of 13] Add apply_to_page_range() which applies a function to a pte range Jeremy Fitzhardinge
2006-08-01 20:00 ` [PATCH 2 of 13] Remove locally-defined ldt structure in favour of standard type Jeremy Fitzhardinge
2006-08-01 20:00 ` [PATCH 3 of 13] Implement always-locked bit ops, for memory shared with an SMP hypervisor Jeremy Fitzhardinge
2006-08-01 20:00 ` [PATCH 4 of 13] Allow a kernel to not be in ring 0 Jeremy Fitzhardinge
2006-08-01 20:00 ` [PATCH 5 of 13] Replace sensitive instructions with macros Jeremy Fitzhardinge
2006-08-01 20:00 ` Jeremy Fitzhardinge [this message]
2006-08-01 20:00 ` [PATCH 7 of 13] Make __FIXADDR_TOP variable to allow it to make space for a hypervisor Jeremy Fitzhardinge
2006-08-01 20:00 ` [PATCH 8 of 13] Add a bootparameter to reserve high linear address space for hypervisors Jeremy Fitzhardinge
2006-08-01 21:47   ` Andi Kleen
2006-08-01 21:47     ` Andi Kleen
2006-08-02  0:48     ` Rusty Russell
2006-08-02  2:59       ` Andi Kleen
2006-08-02  2:59         ` Andi Kleen
2006-08-02  3:54         ` [Xen-devel] " Rusty Russell
2006-08-02  3:54           ` Rusty Russell
2006-08-02  4:21           ` [Xen-devel] " Andi Kleen
2006-08-02  4:33             ` Rusty Russell
2006-08-02  4:33               ` Rusty Russell
2006-08-02  4:36               ` [Xen-devel] " Andi Kleen
2006-08-02  4:36                 ` Andi Kleen
2006-08-02  5:20                 ` [Xen-devel] " Rusty Russell
2006-08-02  5:20                   ` Rusty Russell
2006-08-02  5:24                   ` [Xen-devel] " Andi Kleen
2006-08-02  5:24                     ` Andi Kleen
2006-08-02  9:06                     ` [PATCH 1/2] Allow early_param and identical __setup to exist Rusty Russell
2006-08-02  9:06                       ` Rusty Russell
2006-08-02  9:08                     ` [PATCH 2/2] Replace i386 open-coded cmdline parsing with early_param/parse_early_param Rusty Russell
2006-08-02  9:08                       ` Rusty Russell
2006-08-02  9:24                       ` Andi Kleen
2006-08-01 20:00 ` [PATCH 9 of 13] Remove the read hazard from the COW path in copy_one_pte Jeremy Fitzhardinge
2006-08-01 20:00 ` [PATCH 10 of 13] Change pte_clear_full to a more appropriately named pte_clear_not_present, Jeremy Fitzhardinge
2006-08-01 21:48   ` Andi Kleen
2006-08-01 20:00 ` [PATCH 11 of 13] Implement lazy MMU update hooks which are SMP safe for both direct and Jeremy Fitzhardinge
2006-08-01 20:00 ` [PATCH 12 of 13] Pass the mm struct into the pgd_free code so the mm is available here Jeremy Fitzhardinge
2006-08-02  3:14   ` Andi Kleen
2006-08-02  3:14     ` Andi Kleen
2006-08-02  6:25     ` [Xen-devel] " Zachary Amsden
2006-08-02  7:13       ` Chris Wright
2006-08-02  7:13         ` Chris Wright
2006-08-01 20:00 ` [PATCH 13 of 13] Put .note.* sections into a PT_NOTE segment in vmlinux Jeremy Fitzhardinge
2006-08-22 11:14   ` [PATCH 1 of 1] x86_43: " Ian Campbell
2006-08-22 11:14     ` Ian Campbell
2006-08-22 11:33     ` Andi Kleen
2006-08-22 11:33       ` Andi Kleen
2006-08-22 11:43       ` Ian Campbell
2006-08-22 11:43         ` Ian Campbell
2006-08-02  3:18 ` [PATCH 0 of 13] Basic infrastructure patches for a paravirtualized kernel Andi Kleen
2006-08-02  3:18   ` Andi Kleen

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=730b4fe6bc1edd17dfce.1154462444@ezr \
    --to=jeremy@xensource.com \
    --cc=Christian.Limpach@cl.cam.ac.uk \
    --cc=akpm@osdl.org \
    --cc=chrisw@sous-sol.org \
    --cc=clameter@sgi.com \
    --cc=ebiederm@xmission.com \
    --cc=hollisb@us.ibm.com \
    --cc=ian.pratt@xensource.com \
    --cc=kraxel@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rusty@rustcorp.com.au \
    --cc=virtualization@osdl.org \
    --cc=xen-devel@lists.xensource.com \
    --cc=zach@vmware.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.