[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |