aboutsummaryrefslogtreecommitdiffstats
path: root/xen/include/asm-x86/ldt.h
diff options
context:
space:
mode:
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2004-06-10 16:59:06 +0000
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2004-06-10 16:59:06 +0000
commit7f68576b77ef3c9fde1009100690ff996d4490e0 (patch)
tree6a87f66c7a03042baa556676add65252816fbd94 /xen/include/asm-x86/ldt.h
parent822a0b35350d8006b808000eef3665ee4df7b297 (diff)
downloadxen-7f68576b77ef3c9fde1009100690ff996d4490e0.tar.gz
xen-7f68576b77ef3c9fde1009100690ff996d4490e0.tar.bz2
xen-7f68576b77ef3c9fde1009100690ff996d4490e0.zip
bitkeeper revision 1.952 (40c8935a3XSRdQfnx5RoO7XgaggvOQ)
Towards x86_64 support. Merged a bunch of the existing x86_64 stuff back into a generic 'x86' architecture. Aim is to share as much as possible between 32- and 64-bit worlds.
Diffstat (limited to 'xen/include/asm-x86/ldt.h')
-rw-r--r--xen/include/asm-x86/ldt.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/xen/include/asm-x86/ldt.h b/xen/include/asm-x86/ldt.h
new file mode 100644
index 0000000000..4da2a15afc
--- /dev/null
+++ b/xen/include/asm-x86/ldt.h
@@ -0,0 +1,29 @@
+#ifndef __ARCH_LDT_H
+#define __ARCH_LDT_H
+
+#ifndef __ASSEMBLY__
+
+static inline void load_LDT(struct task_struct *p)
+{
+ unsigned int cpu;
+ struct desc_struct *desc;
+ unsigned long ents;
+
+ if ( (ents = p->mm.ldt_ents) == 0 )
+ {
+ __asm__ __volatile__ ( "lldt %%ax" : : "a" (0) );
+ }
+ else
+ {
+ cpu = smp_processor_id();
+ desc = (struct desc_struct *)GET_GDT_ADDRESS(p) + __LDT(cpu);
+ desc->a = ((LDT_VIRT_START&0xffff)<<16) | (ents*8-1);
+ desc->b = (LDT_VIRT_START&(0xff<<24)) | 0x8200 |
+ ((LDT_VIRT_START&0xff0000)>>16);
+ __asm__ __volatile__ ( "lldt %%ax" : : "a" (__LDT(cpu)<<3) );
+ }
+}
+
+#endif /* !__ASSEMBLY__ */
+
+#endif