diff options
author | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2004-06-10 16:59:06 +0000 |
---|---|---|
committer | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2004-06-10 16:59:06 +0000 |
commit | 7f68576b77ef3c9fde1009100690ff996d4490e0 (patch) | |
tree | 6a87f66c7a03042baa556676add65252816fbd94 /xen/include/asm-x86/ldt.h | |
parent | 822a0b35350d8006b808000eef3665ee4df7b297 (diff) | |
download | xen-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.h | 29 |
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 |