From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Andi Kleen <ak@muc.de>, Andrew Morton <akpm@osdl.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: [PATCH] i386-pda updates
Date: Sat, 09 Sep 2006 01:15:30 -0700 [thread overview]
Message-ID: <45027822.2010906@goop.org> (raw)
Updates to i386-pda:
- fix typo
- add a self-pointer to the PDA, so that finding its
linear address is easy
- add type checking to PDA write operations
- add byte-sized read/writes to the PDA
Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com>
---
arch/i386/kernel/cpu/common.c | 4 +++-
include/asm-i386/pda.h | 19 +++++++++++++++++++
2 files changed, 22 insertions(+), 1 deletion(-)
diff -r 69614542c834 arch/i386/kernel/cpu/common.c
--- a/arch/i386/kernel/cpu/common.c Fri Sep 08 16:53:26 2006 -0700
+++ b/arch/i386/kernel/cpu/common.c Sat Sep 09 00:19:48 2006 -0700
@@ -588,7 +588,7 @@ void __init early_cpu_init(void)
#endif
}
-/* Make sure %gs it initialized properly in idle threads */
+/* Make sure %gs is initialized properly in idle threads */
struct pt_regs * __devinit idle_regs(struct pt_regs *regs)
{
memset(regs, 0, sizeof(struct pt_regs));
@@ -648,6 +648,8 @@ static __cpuinit void pda_init(int cpu,
memset(pda, 0, sizeof(*pda));
+ pda->_pda = pda;
+
pda->cpu_number = cpu;
pda->pcurrent = curr;
diff -r 69614542c834 include/asm-i386/pda.h
--- a/include/asm-i386/pda.h Fri Sep 08 16:53:26 2006 -0700
+++ b/include/asm-i386/pda.h Sat Sep 09 00:19:48 2006 -0700
@@ -3,6 +3,8 @@
struct i386_pda
{
+ struct i386_pda *_pda; /* pointer to self */
+
struct task_struct *pcurrent; /* current process */
int cpu_number;
};
@@ -20,7 +22,14 @@ extern struct i386_pda _proxy_pda;
#define pda_to_op(op,field,val) \
do { \
typedef typeof(_proxy_pda.field) T__; \
+ if (0) { T__ tmp__; tmp__ = (val); } \
switch (sizeof(_proxy_pda.field)) { \
+ case 1: \
+ asm(op "b %1,%%gs:%c2" \
+ : "+m" (_proxy_pda.field) \
+ :"ri" ((T__)val), \
+ "i"(pda_offset(field))); \
+ break; \
case 2: \
asm(op "w %1,%%gs:%c2" \
: "+m" (_proxy_pda.field) \
@@ -41,6 +50,12 @@ extern struct i386_pda _proxy_pda;
({ \
typeof(_proxy_pda.field) ret__; \
switch (sizeof(_proxy_pda.field)) { \
+ case 1: \
+ asm(op "b %%gs:%c1,%0" \
+ : "=r" (ret__) \
+ : "i" (pda_offset(field)), \
+ "m" (_proxy_pda.field)); \
+ break; \
case 2: \
asm(op "w %%gs:%c1,%0" \
: "=r" (ret__) \
@@ -57,6 +72,10 @@ extern struct i386_pda _proxy_pda;
} \
ret__; })
+/* Return a pointer to a pda field */
+#define pda_addr(field) \
+ ((typeof(_proxy_pda.field) *)((unsigned char *)read_pda(_pda) + \
+ pda_offset(field)))
#define read_pda(field) pda_from_op("mov",field)
#define write_pda(field,val) pda_to_op("mov",field,val)
next reply other threads:[~2006-09-09 8:15 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-09-09 8:15 Jeremy Fitzhardinge [this message]
2006-09-09 15:52 ` [PATCH] i386-pda updates Andi Kleen
2006-09-09 23:07 ` Jeremy Fitzhardinge
2006-09-09 23:30 ` Jeremy Fitzhardinge
2006-09-10 6: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=45027822.2010906@goop.org \
--to=jeremy@goop.org \
--cc=ak@muc.de \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.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 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.