diff -urN 2.2.17pre19/arch/i386/lib/usercopy.c usercopy-sched/arch/i386/lib/usercopy.c --- 2.2.17pre19/arch/i386/lib/usercopy.c Mon Jan 17 16:44:33 2000 +++ usercopy-sched/arch/i386/lib/usercopy.c Thu Aug 24 01:23:33 2000 @@ -10,16 +10,20 @@ unsigned long __generic_copy_to_user(void *to, const void *from, unsigned long n) { - if (access_ok(VERIFY_WRITE, to, n)) + if (access_ok(VERIFY_WRITE, to, n)) { __copy_user(to,from,n); + conditional_schedule(); + } return n; } unsigned long __generic_copy_from_user(void *to, const void *from, unsigned long n) { - if (access_ok(VERIFY_READ, from, n)) + if (access_ok(VERIFY_READ, from, n)) { __copy_user_zeroing(to,from,n); + conditional_schedule(); + } return n; } @@ -61,6 +65,7 @@ { long res; __do_strncpy_from_user(dst, src, count, res); + conditional_schedule(); return res; } @@ -68,8 +73,10 @@ strncpy_from_user(char *dst, const char *src, long count) { long res = -EFAULT; - if (access_ok(VERIFY_READ, src, 1)) + if (access_ok(VERIFY_READ, src, 1)) { __do_strncpy_from_user(dst, src, count, res); + conditional_schedule(); + } return res; } @@ -102,8 +109,10 @@ unsigned long clear_user(void *to, unsigned long n) { - if (access_ok(VERIFY_WRITE, to, n)) + if (access_ok(VERIFY_WRITE, to, n)) { __do_clear_user(to, n); + conditional_schedule(); + } return n; } @@ -111,6 +120,7 @@ __clear_user(void *to, unsigned long n) { __do_clear_user(to, n); + conditional_schedule(); return n; } @@ -143,5 +153,6 @@ :"=r" (n), "=D" (s), "=a" (res), "=c" (tmp) :"0" (n), "1" (s), "2" (0), "3" (mask) :"cc"); + conditional_schedule(); return res & mask; } diff -urN 2.2.17pre19/include/asm-i386/uaccess.h usercopy-sched/include/asm-i386/uaccess.h --- 2.2.17pre19/include/asm-i386/uaccess.h Wed Aug 23 19:57:22 2000 +++ usercopy-sched/include/asm-i386/uaccess.h Thu Aug 24 01:22:40 2000 @@ -6,6 +6,7 @@ */ #include #include +#include #include #define VERIFY_READ 0 @@ -270,6 +271,7 @@ : "=&c"(size), "=&D" (__d0), "=&S" (__d1) \ : "r"(size & 3), "0"(size / 4), "1"(to), "2"(from) \ : "memory"); \ + conditional_schedule(); \ } while (0) #define __copy_user_zeroing(to,from,size) \ @@ -298,6 +300,7 @@ : "=&c"(size), "=&D" (__d0), "=&S" (__d1) \ : "r"(size & 3), "0"(size / 4), "1"(to), "2"(from) \ : "memory"); \ + conditional_schedule(); \ } while (0) /* We let the __ versions of copy_from/to_user inline, because they're often @@ -338,6 +341,7 @@ : "=c"(size), "=&S" (__d0), "=&D" (__d1)\ : "1"(from), "2"(to), "0"(size/4) \ : "memory"); \ + conditional_schedule(); \ break; \ case 1: \ __asm__ __volatile__( \ @@ -428,6 +432,7 @@ : "=c"(size), "=&S" (__d0), "=&D" (__d1)\ : "1"(from), "2"(to), "0"(size/4) \ : "memory"); \ + conditional_schedule(); \ break; \ case 1: \ __asm__ __volatile__( \