amd64: Update some header files for the vkernel.
authorJordan Gordeev <jgordeev@dir.bg>
Sun, 16 Aug 2009 12:58:30 +0000 (15:58 +0300)
committerSascha Wildner <saw@online.de>
Sun, 21 Mar 2010 08:16:43 +0000 (09:16 +0100)
sys/cpu/x86_64/include/cpufunc.h
sys/cpu/x86_64/include/frame.h
sys/cpu/x86_64/include/param.h
sys/cpu/x86_64/include/tls.h
sys/cpu/x86_64/include/types.h

index 6b08fa9..8b1305a 100644 (file)
@@ -115,12 +115,6 @@ bsrq(u_long mask)
        return (result);
 }
 
-static __inline void
-cpu_disable_intr(void)
-{
-       __asm __volatile("cli" : : : "memory");
-}
-
 static __inline void
 do_cpuid(u_int ax, u_int *p)
 {
@@ -137,12 +131,26 @@ cpuid_count(u_int ax, u_int cx, u_int *p)
                         :  "0" (ax), "c" (cx));
 }
 
+#ifndef _CPU_DISABLE_INTR_DEFINED
+
+static __inline void
+cpu_disable_intr(void)
+{
+       __asm __volatile("cli" : : : "memory");
+}
+
+#endif
+
+#ifndef _CPU_ENABLE_INTR_DEFINED
+
 static __inline void
 cpu_enable_intr(void)
 {
        __asm __volatile("sti");
 }
 
+#endif
+
 /*
  * Cpu and compiler memory ordering fence.  mfence ensures strong read and
  * write ordering.
@@ -591,16 +599,22 @@ rcr4(void)
        return (data);
 }
 
+#ifndef _CPU_INVLTLB_DEFINED
+
 /*
- * Global TLB flush (except for thise for pages marked PG_G)
+ * Invalidate the TLB on this cpu only
  */
 static __inline void
 cpu_invltlb(void)
 {
-
        load_cr3(rcr3());
+#if defined(SWTCH_OPTIM_STATS)
+       ++tlb_flush_count;
+#endif
 }
 
+#endif
+
 /*
  * TLB flush for an individual page (even if it has PG_G).
  * Only works on 486+ CPUs (i386 does not have PG_G).
index a063049..263e169 100644 (file)
@@ -108,7 +108,7 @@ struct intrframe {
        register_t      if_r13;
        register_t      if_r14;
        register_t      if_r15;
-       register_t      :64;            /* compat with trap frame - xflags */
+       register_t      if_xflags;      /* compat with trap frame - xflags */
        register_t      :64;            /* compat with trap frame - trapno */
        register_t      :64;            /* compat with trap frame - addr */
        register_t      :64;            /* compat with trap frame - flags */
index f8cd471..7fe73c7 100644 (file)
 #define PML4MASK       (NPML4-1)
 #define NPML4EPG       (PAGE_SIZE/(sizeof (pml4_entry_t)))
 
+/* for vkernel */
+#define SEG_SHIFT      21
+#define SEG_SIZE       (1<<SEG_SHIFT)  /* bytes per mmu segment (level 1) */
+#define SEG_MASK       (SEG_SIZE-1)
+
 #define DEV_BSHIFT     9               /* log2(DEV_BSIZE) */
 #define DEV_BSIZE      (1<<DEV_BSHIFT)
 #define DEV_BMASK      (DEV_BSIZE - 1)
index 3771dfa..7badc6d 100644 (file)
@@ -67,8 +67,6 @@ struct tls_dtv {
 #define        RTLD_STATIC_TLS_EXTRA           256
 #define RTLD_STATIC_TLS_VARIANT_II
 
-#ifndef _KERNEL
-
 /* Get the current TCB. */
 static __inline struct tls_tcb *
 tls_get_tcb(void)
@@ -107,6 +105,20 @@ tls_set_tcb(struct tls_tcb *tcb)
        /*__asm __volatile("movl %0, %%fs" : : "r" (seg));*/
 }
 
+static __inline void
+tls_set_gs(void *base, size_t bytes)
+{
+       struct tls_info info;
+       int seg;
+
+       info.base = base;
+       info.size = bytes;
+       seg = set_tls_area(1, &info, sizeof(info));
+       /*__asm __volatile("mov %0, %%fs" : : "g" (seg));*/
+}
+
+#ifndef _KERNEL
+
 struct tls_tcb *_rtld_allocate_tls(void);
 struct tls_tcb *_libc_allocate_tls(void);
 void            _rtld_free_tls(struct tls_tcb *);
index bfb6c13..0843757 100644 (file)
 #ifndef _CPU_TYPES_H_
 #define        _CPU_TYPES_H_
 
+#ifndef _MACHINE_STDINT_H_
+#include <machine/stdint.h>
+#endif
+
 #if defined(__x86_64__)
 typedef        __int64_t       __segsz_t;      /* segment size */
 typedef        __int64_t       register_t;