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.


Use page allocation for base memory region array
[palacios.git] / linux_module / palacios-stubs.c
index 5ef9c5c..d5e27b3 100644 (file)
@@ -8,6 +8,7 @@
 #include <linux/uaccess.h>
 #include <asm/irq_vectors.h>
 #include <asm/io.h>
+#include <asm/thread_info.h>
 
 #include <linux/init.h>
 #include <linux/module.h>
@@ -305,7 +306,7 @@ palacios_alloc(unsigned int size) {
     // this function is used extensively throughout palacios and the linux
     // module, both in places where interrupts are off and where they are on
     // a GFP_KERNEL call, when done with interrupts off can lead to DEADLOCK
-    if (irqs_disabled()) {
+    if (irqs_disabled() || in_atomic()) {
        return palacios_alloc_extended(size,GFP_ATOMIC,-1);
     } else {
        return palacios_alloc_extended(size,GFP_KERNEL,-1);
@@ -357,7 +358,7 @@ palacios_paddr_to_vaddr(
 /**
  * Runs a function on the specified CPU.
  */
-static void 
+void 
 palacios_xcall(
        int                     cpu_id, 
        void                    (*fn)(void *arg),
@@ -831,10 +832,14 @@ palacios_mutex_unlock_irqrestore(void *mutex, void *flags)
 
 void palacios_used_fpu(void)
 {
-   struct thread_info *cur = current_thread_info();
-
    // We assume we are not preemptible here...
-   cur->status |= TS_USEDFPU;
+#ifndef TS_USEDFPU
+   struct task_struct *tsk = current;
+   tsk->thread.fpu.has_fpu = 1;
+#else
+   struct thread_info *cur = current_thread_info();
+   cur->status |= TS_USEDFPU; 
+#endif
    clts(); 
    // After this, FP Save should be handled by Linux if it
    // switches to a different task and that task uses FPU