Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


minor updates
Jack Lange [Thu, 29 May 2008 22:20:37 +0000 (22:20 +0000)]
palacios/include/palacios/vmm.h
palacios/include/palacios/vmm_util.h

index ec36284..a892094 100644 (file)
     }                                                  \
   } while (0)                                          \
 
-#define V3_CPU_KHZ(khz)                                        \
-  do {                                                 \
+#define V3_CPU_KHZ()                                   \
+  ({                                                   \
+    unsigned int khz = 0;                              \
     extern struct vmm_os_hooks * os_hooks;             \
     if ((os_hooks) && (os_hooks)->get_cpu_khz) {       \
       khz = (os_hooks)->get_cpu_khz();                 \
     }                                                  \
-  } while (0)                                          \
-
+    khz;                                               \
+  })                                                   \
+    
 
 /* ** */
 
index 95a0c8e..38ae086 100644 (file)
@@ -38,7 +38,7 @@ struct VMM_GPRs {
 
 
 void PrintTraceHex(unsigned char x);
-
+void PrintTraceLL(ullong_t num);
 void PrintTraceMemDump(unsigned char * start, int n);
 
 
@@ -97,19 +97,38 @@ void PrintTraceMemDump(unsigned char * start, int n);
  * This ends up being the most efficient "calling
  * convention" on x86.
  */
-#define do_div(n,base) ({ \
-       unsigned long __upper, __low, __high, __mod, __base; \
-       __base = (base); \
-       asm("":"=a" (__low), "=d" (__high):"A" (n)); \
-       __upper = __high; \
-       if (__high) { \
-               __upper = __high % (__base); \
-               __high = __high / (__base); \
-       } \
-       asm("divl %2":"=a" (__low), "=d" (__mod):"rm" (__base), "0" (__low), "1" (__upper)); \
-       asm("":"=A" (n):"a" (__low),"d" (__high)); \
-       __mod; \
-})
+#define do_div(n,base) ({                                   \
+      unsigned long __upper, __low, __high, __mod, __base;   \
+      __base = (base);                                      \
+      asm("":"=a" (__low), "=d" (__high):"A" (n));          \
+      __upper = __high;                                             \
+      if (__high) {                                         \
+       __upper = __high % (__base);                         \
+       __high = __high / (__base);                          \
+      }                                                                        \
+      asm("divl %2":"=a" (__low), "=d" (__mod):"rm" (__base), "0" (__low), "1" (__upper)); \
+      asm("":"=A" (n):"a" (__low),"d" (__high));                       \
+      __mod;                                                           \
+    })
+
+
+
+/* This divides two 64bit unsigned ints
+ * The previous version only allows 32 bit bases(?)...
+ * 
+ * NOTE: This absolutely sucks... there has to be a better way....
+ */
+#define do_divll(n, base) ({                           \
+      ullong_t __rem = 0;                              \
+      ullong_t __num = 0;                              \
+      while (n > base) {                               \
+       __num++;                                        \
+       n -= base;                                      \
+      }                                                        \
+      __rem = n;                                       \
+      n = __num;                                       \
+      __rem;                                           \
+    })                                         
 
 #endif
 
@@ -117,4 +136,6 @@ void PrintTraceMemDump(unsigned char * start, int n);
 
 
 
+
+
 #endif