68 lines
2.3 KiB
Diff
68 lines
2.3 KiB
Diff
# HG changeset patch
|
|
# User Ian Campbell <ian.campbell@xensource.com>
|
|
# Date Wed Oct 25 13:58:30 2006 +0100
|
|
# 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@xensource.com>
|
|
|
|
--- 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
|
|
--- 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
|
|
|