[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] PV-on-HVM: Implement compatibilty version of wait_for_completion_timeout



# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxxxxx>
# Node ID 0886fc73e787076a7ee2247e71da68f48d311e0b
# Parent  ac6e4405ab6c363eae43fd7384b7dca975e9e28e
PV-on-HVM: Implement compatibilty version of wait_for_completion_timeout
for kernels before 2.6.11

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxxxxx>
---
 unmodified_drivers/linux-2.6/compat-include/xen/platform-compat.h |    4 +
 unmodified_drivers/linux-2.6/platform-pci/platform-compat.c       |   32 
++++++++++
 2 files changed, 36 insertions(+)

diff -r ac6e4405ab6c -r 0886fc73e787 
unmodified_drivers/linux-2.6/compat-include/xen/platform-compat.h
--- a/unmodified_drivers/linux-2.6/compat-include/xen/platform-compat.h Wed Oct 
25 13:58:30 2006 +0100
+++ b/unmodified_drivers/linux-2.6/compat-include/xen/platform-compat.h Wed Oct 
25 13:58:30 2006 +0100
@@ -33,4 +33,8 @@ unsigned long vmalloc_to_pfn(void *addr)
 unsigned long vmalloc_to_pfn(void *addr);
 #endif
 
+#if defined(__LINUX_COMPLETION_H) && LINUX_VERSION_CODE < 
KERNEL_VERSION(2,6,11)
+unsigned long wait_for_completion_timeout(struct completion *x, unsigned long 
timeout);
 #endif
+
+#endif
diff -r ac6e4405ab6c -r 0886fc73e787 
unmodified_drivers/linux-2.6/platform-pci/platform-compat.c
--- a/unmodified_drivers/linux-2.6/platform-pci/platform-compat.c       Wed Oct 
25 13:58:30 2006 +0100
+++ b/unmodified_drivers/linux-2.6/platform-pci/platform-compat.c       Wed Oct 
25 13:58:30 2006 +0100
@@ -3,6 +3,7 @@
 
 #include <linux/mm.h>
 #include <linux/module.h>
+#include <linux/sched.h>
 
 #include <xen/platform-compat.h>
 
@@ -41,3 +42,34 @@ unsigned long vmalloc_to_pfn(void * vmal
 }
 EXPORT_SYMBOL(vmalloc_to_pfn);
 #endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,11)
+unsigned long wait_for_completion_timeout(struct completion *x, unsigned long 
timeout)
+{
+        might_sleep();
+
+        spin_lock_irq(&x->wait.lock);
+        if (!x->done) {
+                DECLARE_WAITQUEUE(wait, current);
+
+                wait.flags |= WQ_FLAG_EXCLUSIVE;
+                __add_wait_queue_tail(&x->wait, &wait);
+                do {
+                        __set_current_state(TASK_UNINTERRUPTIBLE);
+                        spin_unlock_irq(&x->wait.lock);
+                        timeout = schedule_timeout(timeout);
+                        spin_lock_irq(&x->wait.lock);
+                        if (!timeout) {
+                                __remove_wait_queue(&x->wait, &wait);
+                                goto out;
+                        }
+                } while (!x->done);
+                __remove_wait_queue(&x->wait, &wait);
+        }
+        x->done--;
+out:
+        spin_unlock_irq(&x->wait.lock);
+        return timeout;
+}
+EXPORT_SYMBOL(wait_for_completion_timeout);
+#endif

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.