diff -ruN linux-2.2.15/include/asm-i386/uaccess.h linux-2.2.15-LL/include/asm-i386/uaccess.h --- linux-2.2.15/include/asm-i386/uaccess.h Wed Mar 8 10:13:01 2000 +++ linux-2.2.15-LL/include/asm-i386/uaccess.h Wed Mar 8 11:07:39 2000 @@ -6,6 +6,7 @@ */ #include #include +#include #include #define VERIFY_READ 0 @@ -253,6 +254,7 @@ #define __copy_user(to,from,size) \ do { \ int __d0, __d1; \ + conditional_schedule(); \ __asm__ __volatile__( \ "0: rep; movsl\n" \ " movl %3,%0\n" \ @@ -275,6 +277,7 @@ #define __copy_user_zeroing(to,from,size) \ do { \ int __d0, __d1; \ + conditional_schedule(); \ __asm__ __volatile__( \ "0: rep; movsl\n" \ " movl %3,%0\n" \ @@ -324,6 +327,7 @@ int __d0, __d1; \ switch (size & 3) { \ default: \ + conditional_schedule(); \ __asm__ __volatile__( \ "0: rep; movsl\n" \ "1:\n" \ @@ -408,6 +412,7 @@ int __d0, __d1; \ switch (size & 3) { \ default: \ + conditional_schedule(); \ __asm__ __volatile__( \ "0: rep; movsl\n" \ "1:\n" \ diff -ruN linux-2.2.15/arch/i386/lib/usercopy.c linux-2.2.15-LL/arch/i386/lib/usercopy.c --- linux-2.2.15/arch/i386/lib/usercopy.c Tue Oct 26 20:53:39 1999 +++ linux-2.2.15-LL/arch/i386/lib/usercopy.c Wed Mar 8 10:47:32 2000 @@ -10,6 +10,7 @@ unsigned long __generic_copy_to_user(void *to, const void *from, unsigned long n) { + conditional_schedule(); if (access_ok(VERIFY_WRITE, to, n)) __copy_user(to,from,n); return n; @@ -18,6 +19,7 @@ unsigned long __generic_copy_from_user(void *to, const void *from, unsigned long n) { + conditional_schedule(); if (access_ok(VERIFY_READ, from, n)) __copy_user_zeroing(to,from,n); return n; @@ -60,6 +62,7 @@ __strncpy_from_user(char *dst, const char *src, long count) { long res; + conditional_schedule(); __do_strncpy_from_user(dst, src, count, res); return res; } @@ -68,6 +71,7 @@ strncpy_from_user(char *dst, const char *src, long count) { long res = -EFAULT; + conditional_schedule(); if (access_ok(VERIFY_READ, src, 1)) __do_strncpy_from_user(dst, src, count, res); return res; @@ -102,6 +106,7 @@ unsigned long clear_user(void *to, unsigned long n) { + conditional_schedule(); if (access_ok(VERIFY_WRITE, to, n)) __do_clear_user(to, n); return n; @@ -110,6 +115,7 @@ unsigned long __clear_user(void *to, unsigned long n) { + conditional_schedule(); __do_clear_user(to, n); return n; } @@ -125,6 +131,7 @@ unsigned long mask = -__addr_ok(s); unsigned long res, tmp; + conditional_schedule(); __asm__ __volatile__( " andl %0,%%ecx\n" "0: repne; scasb\n"