diff --git a/include/linux/ve.h b/include/linux/ve.h
index 8a6c883..369dc83 100644
--- a/include/linux/ve.h
+++ b/include/linux/ve.h
@@ -336,4 +336,8 @@ extern int sysctl_fsync_enable;
 #define put_ve(ve)	do { } while (0)
 #endif	/* CONFIG_VE */
 
+#include <linux/version.h>
+
+#define ve_require_pi_futex(ve)	((ve)->kernel_verson >= KERNEL_VERSION(2,6,18))
+
 #endif /* _LINUX_VE_H */
diff --git a/kernel/compat.c b/kernel/compat.c
index cfef9a2..6d2bcfc 100644
--- a/kernel/compat.c
+++ b/kernel/compat.c
@@ -243,6 +243,11 @@ asmlinkage long compat_sys_sigprocmask(int how, compat_old_sigset_t __user *set,
 }
 
 #ifdef CONFIG_FUTEX
+
+extern asmlinkage long compat_sys_futex_pi(u32 __user *uaddr, int op, u32 val,
+		struct compat_timespec __user *utime, u32 __user *uaddr2,
+		u32 val3);
+
 asmlinkage long compat_sys_futex(u32 __user *uaddr, int op, int val,
 		struct compat_timespec __user *utime, u32 __user *uaddr2,
 		int val3)
@@ -251,6 +256,9 @@ asmlinkage long compat_sys_futex(u32 __user *uaddr, int op, int val,
 	unsigned long timeout = MAX_SCHEDULE_TIMEOUT;
 	int val2 = 0;
 
+	if (ve_require_pi_futex(get_exec_env()))
+		return compat_sys_futex_pi(uaddr, op, val, utime, uaddr2, val3);
+
 	if (utime && (op == FUTEX_WAIT)) {
 		if (get_compat_timespec(&t, utime))
 			return -EFAULT;
diff --git a/kernel/futex.c b/kernel/futex.c
index ef85c05..3d84f51 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -759,6 +759,10 @@ long do_futex(unsigned long uaddr, int op, int val, unsigned long timeout,
 }
 
 
+extern asmlinkage long sys_futex_pi(u32 __user *uaddr, int op, u32 val,
+			  struct timespec __user *utime, u32 __user *uaddr2,
+			  u32 val3);
+
 asmlinkage long sys_futex(u32 __user *uaddr, int op, int val,
 			  struct timespec __user *utime, u32 __user *uaddr2,
 			  int val3)
@@ -767,6 +771,9 @@ asmlinkage long sys_futex(u32 __user *uaddr, int op, int val,
 	unsigned long timeout = MAX_SCHEDULE_TIMEOUT;
 	int val2 = 0;
 
+	if (ve_require_pi_futex(get_exec_env()))
+		return sys_futex_pi(uaddr, op, val, utime, uaddr2, val3);
+
 	if (utime && (op == FUTEX_WAIT)) {
 		if (copy_from_user(&t, utime, sizeof(t)) != 0)
 			return -EFAULT;
diff --git a/kernel/futex_pi.c b/kernel/futex_pi.c
index 5c7e4e5..09ae8cf 100644
--- a/kernel/futex_pi.c
+++ b/kernel/futex_pi.c
@@ -1834,6 +1834,9 @@ asmlinkage long
 sys_set_robust_list(struct robust_list_head __user *head,
 		    size_t len)
 {
+	if (!ve_require_pi_futex(get_exec_env()))
+		return -ENOSYS;
+
 	/*
 	 * The kernel knows only one size for now:
 	 */
@@ -1858,6 +1861,9 @@ sys_get_robust_list(int pid, struct robust_list_head __user **head_ptr,
 	struct robust_list_head *head;
 	unsigned long ret;
 
+	if (!ve_require_pi_futex(get_exec_env()))
+		return -ENOSYS;
+
 	if (!pid)
 		head = current->robust_list;
 	else {
@@ -2225,6 +2231,9 @@ asmlinkage long
 compat_sys_set_robust_list(struct compat_robust_list_head __user *head,
 			   compat_size_t len)
 {
+	if (!ve_require_pi_futex(get_exec_env()))
+		return -ENOSYS;
+
 	if (unlikely(len != sizeof(*head)))
 		return -EINVAL;
 
@@ -2240,6 +2249,9 @@ compat_sys_get_robust_list(int pid, compat_uptr_t *head_ptr,
 	struct compat_robust_list_head *head;
 	unsigned long ret;
 
+	if (!ve_require_pi_futex(get_exec_env()))
+		return -ENOSYS;
+
 	if (!pid)
 		head = current->compat_robust_list;
 	else {
