diff -urN wt8-2e/include/asm-i386/pgalloc.h wt8-2f/include/asm-i386/pgalloc.h --- wt8-2e/include/asm-i386/pgalloc.h Sat Feb 16 15:30:57 2002 +++ wt8-2f/include/asm-i386/pgalloc.h Sat Feb 16 15:37:46 2002 @@ -125,11 +125,13 @@ { unsigned long *ret; + preempt_disable(); if ((ret = (unsigned long *)pte_quicklist) != NULL) { pte_quicklist = (unsigned long *)(*ret); ret[0] = ret[1]; pgtable_cache_size--; } + preempt_enable(); return (pte_t *)ret; } @@ -141,12 +143,14 @@ extern int pgt_cache_water[]; static inline void pte_free_fast(pte_t *pte) { + preempt_disable(); if (pgtable_cache_size < pgt_cache_water[1]) { *(unsigned long *)pte = (unsigned long) pte_quicklist; pte_quicklist = (unsigned long *) pte; pgtable_cache_size++; } else pte_free_slow(pte); + preempt_enable(); } #define pte_free(pte) pte_free_fast(pte) diff -urN wt8-2e/include/linux/sched.h wt8-2f/include/linux/sched.h --- wt8-2e/include/linux/sched.h Sat Feb 16 15:32:02 2002 +++ wt8-2f/include/linux/sched.h Sat Feb 16 15:32:56 2002 @@ -330,6 +330,7 @@ struct task_struct *next_task, *prev_task; struct mm_struct *active_mm; + unsigned long flags; /* task state */ struct linux_binfmt *binfmt;