[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20080429013213.4084e892@ephemeral>
Date: Tue, 29 Apr 2008 01:32:13 -0400
From: Andres Salomon <dilinger@...ued.net>
To: Andrew Morton <akpm@...ux-foundation.org>
Cc: "H. Peter Anvin" <hpa@...or.com>, Ingo Molnar <mingo@...e.hu>,
linux-kernel@...r.kernel.org, jordan.crouse@....com
Subject: [PATCH] x86: GEODE: cache results from geode_has_vsa2() and
uninline
On Mon, 28 Apr 2008 20:06:51 -0700
Andrew Morton <akpm@...ux-foundation.org> wrote:
> On Mon, 21 Apr 2008 17:02:30 -0400 Andres Salomon <dilinger@...ued.net> wrote:
>
> > + if (!is_geode() || geode_has_vsa2())
>
> geode_has_vsa2() is a fairly expensive-looking function and afacit only
> needs to be evaluated once per boot. Perhaps we should cache it somewhere?
>
How about this?
This moves geode_has_vsa2 into a .c file, caches the result we get from
the VSA virtual registers, and causes the function to no longer be inline.
Signed-off-by: Andres Salomon <dilinger@...ian.org>
---
arch/x86/kernel/geode_32.c | 19 +++++++++++++++++++
include/asm-x86/geode.h | 11 +----------
2 files changed, 20 insertions(+), 10 deletions(-)
diff --git a/arch/x86/kernel/geode_32.c b/arch/x86/kernel/geode_32.c
index 9dad6ca..1cb8225 100644
--- a/arch/x86/kernel/geode_32.c
+++ b/arch/x86/kernel/geode_32.c
@@ -161,6 +161,25 @@ void geode_gpio_setup_event(unsigned int gpio, int pair, int pme)
}
EXPORT_SYMBOL_GPL(geode_gpio_setup_event);
+static int has_vsa2 = -1;
+
+int geode_has_vsa2(void)
+{
+ if (has_vsa2 == -1) {
+ /*
+ * The VSA has virtual registers that we can query for a
+ * signature.
+ */
+ outw(VSA_VR_UNLOCK, VSA_VRC_INDEX);
+ outw(VSA_VR_SIGNATURE, VSA_VRC_INDEX);
+
+ has_vsa2 = (inw(VSA_VRC_DATA) == VSA_SIG);
+ }
+
+ return has_vsa2;
+}
+EXPORT_SYMBOL_GPL(geode_has_vsa2);
+
static int __init geode_southbridge_init(void)
{
if (!is_geode())
diff --git a/include/asm-x86/geode.h b/include/asm-x86/geode.h
index 7154dc4..8a53bc8 100644
--- a/include/asm-x86/geode.h
+++ b/include/asm-x86/geode.h
@@ -185,16 +185,7 @@ static inline int is_geode(void)
return (is_geode_gx() || is_geode_lx());
}
-/*
- * The VSA has virtual registers that we can query for a signature.
- */
-static inline int geode_has_vsa2(void)
-{
- outw(VSA_VR_UNLOCK, VSA_VRC_INDEX);
- outw(VSA_VR_SIGNATURE, VSA_VRC_INDEX);
-
- return (inw(VSA_VRC_DATA) == VSA_SIG);
-}
+extern int geode_has_vsa2(void);
/* MFGPTs */
--
1.5.5
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists