summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sys-kernel/linux-sources/files/2.4.15pre1aa1/00_rwsem-fair-23-recursive-4')
-rw-r--r--sys-kernel/linux-sources/files/2.4.15pre1aa1/00_rwsem-fair-23-recursive-4271
1 files changed, 0 insertions, 271 deletions
diff --git a/sys-kernel/linux-sources/files/2.4.15pre1aa1/00_rwsem-fair-23-recursive-4 b/sys-kernel/linux-sources/files/2.4.15pre1aa1/00_rwsem-fair-23-recursive-4
deleted file mode 100644
index d54be8d152a9..000000000000
--- a/sys-kernel/linux-sources/files/2.4.15pre1aa1/00_rwsem-fair-23-recursive-4
+++ /dev/null
@@ -1,271 +0,0 @@
-diff -urN 2.4.11pre3aa1/arch/alpha/mm/fault.c recurse/arch/alpha/mm/fault.c
---- 2.4.11pre3aa1/arch/alpha/mm/fault.c Sun Sep 23 21:11:28 2001
-+++ recurse/arch/alpha/mm/fault.c Thu Oct 4 18:50:12 2001
-@@ -113,7 +113,7 @@
- goto vmalloc_fault;
- #endif
-
-- down_read(&mm->mmap_sem);
-+ down_read_recursive(&mm->mmap_sem, &current->mm_recursor);
- vma = find_vma(mm, address);
- if (!vma)
- goto bad_area;
-@@ -147,7 +147,7 @@
- * the fault.
- */
- fault = handle_mm_fault(mm, vma, address, cause > 0);
-- up_read(&mm->mmap_sem);
-+ up_read_recursive(&mm->mmap_sem, &current->mm_recursor);
-
- if (fault < 0)
- goto out_of_memory;
-@@ -161,7 +161,7 @@
- * Fix it, but check if it's kernel or user first..
- */
- bad_area:
-- up_read(&mm->mmap_sem);
-+ up_read_recursive(&mm->mmap_sem, &current->mm_recursor);
-
- if (user_mode(regs)) {
- force_sig(SIGSEGV, current);
-@@ -198,7 +198,7 @@
- if (current->pid == 1) {
- current->policy |= SCHED_YIELD;
- schedule();
-- down_read(&mm->mmap_sem);
-+ down_read_recursive(&mm->mmap_sem, &current->mm_recursor);
- goto survive;
- }
- printk(KERN_ALERT "VM: killing process %s(%d)\n",
-diff -urN 2.4.11pre3aa1/arch/i386/mm/fault.c recurse/arch/i386/mm/fault.c
---- 2.4.11pre3aa1/arch/i386/mm/fault.c Sun Sep 23 21:11:28 2001
-+++ recurse/arch/i386/mm/fault.c Thu Oct 4 18:50:12 2001
-@@ -191,7 +191,7 @@
- if (in_interrupt() || !mm)
- goto no_context;
-
-- down_read(&mm->mmap_sem);
-+ down_read_recursive(&mm->mmap_sem, &current->mm_recursor);
-
- vma = find_vma(mm, address);
- if (!vma)
-@@ -265,7 +265,7 @@
- if (bit < 32)
- tsk->thread.screen_bitmap |= 1 << bit;
- }
-- up_read(&mm->mmap_sem);
-+ up_read_recursive(&mm->mmap_sem, &current->mm_recursor);
- return;
-
- /*
-@@ -273,7 +273,7 @@
- * Fix it, but check if it's kernel or user first..
- */
- bad_area:
-- up_read(&mm->mmap_sem);
-+ up_read_recursive(&mm->mmap_sem, &current->mm_recursor);
-
- /* User mode accesses just cause a SIGSEGV */
- if (error_code & 4) {
-@@ -341,11 +341,11 @@
- * us unable to handle the page fault gracefully.
- */
- out_of_memory:
-- up_read(&mm->mmap_sem);
-+ up_read_recursive(&mm->mmap_sem, &current->mm_recursor);
- if (tsk->pid == 1) {
- tsk->policy |= SCHED_YIELD;
- schedule();
-- down_read(&mm->mmap_sem);
-+ down_read_recursive(&mm->mmap_sem, &current->mm_recursor);
- goto survive;
- }
- printk("VM: killing process %s\n", tsk->comm);
-@@ -354,7 +354,7 @@
- goto no_context;
-
- do_sigbus:
-- up_read(&mm->mmap_sem);
-+ up_read_recursive(&mm->mmap_sem, &current->mm_recursor);
-
- /*
- * Send a sigbus, regardless of whether we were in kernel
-diff -urN 2.4.11pre3aa1/arch/ia64/mm/fault.c recurse/arch/ia64/mm/fault.c
---- 2.4.11pre3aa1/arch/ia64/mm/fault.c Tue May 1 19:35:18 2001
-+++ recurse/arch/ia64/mm/fault.c Thu Oct 4 18:50:12 2001
-@@ -60,7 +60,7 @@
- if (in_interrupt() || !mm)
- goto no_context;
-
-- down_read(&mm->mmap_sem);
-+ down_read_recursive(&mm->mmap_sem, &current->mm_recursor);
-
- vma = find_vma_prev(mm, address, &prev_vma);
- if (!vma)
-@@ -112,7 +112,7 @@
- default:
- goto out_of_memory;
- }
-- up_read(&mm->mmap_sem);
-+ up_read_recursive(&mm->mmap_sem, &current->mm_recursor);
- return;
-
- check_expansion:
-@@ -135,7 +135,7 @@
- goto good_area;
-
- bad_area:
-- up_read(&mm->mmap_sem);
-+ up_read_recursive(&mm->mmap_sem, &current->mm_recursor);
- if (isr & IA64_ISR_SP) {
- /*
- * This fault was due to a speculative load set the "ed" bit in the psr to
-@@ -184,7 +184,7 @@
- return;
-
- out_of_memory:
-- up_read(&mm->mmap_sem);
-+ up_read_recursive(&mm->mmap_sem, &current->mm_recursor);
- printk("VM: killing process %s\n", current->comm);
- if (user_mode(regs))
- do_exit(SIGKILL);
-diff -urN 2.4.11pre3aa1/arch/ppc/mm/fault.c recurse/arch/ppc/mm/fault.c
---- 2.4.11pre3aa1/arch/ppc/mm/fault.c Thu Oct 4 10:06:33 2001
-+++ recurse/arch/ppc/mm/fault.c Thu Oct 4 18:50:12 2001
-@@ -103,7 +103,7 @@
- bad_page_fault(regs, address, SIGSEGV);
- return;
- }
-- down_read(&mm->mmap_sem);
-+ down_read_recursive(&mm->mmap_sem, &current->mm_recursor);
- vma = find_vma(mm, address);
- if (!vma)
- goto bad_area;
-@@ -164,7 +164,7 @@
- goto out_of_memory;
- }
-
-- up_read(&mm->mmap_sem);
-+ up_read_recursive(&mm->mmap_sem, &current->mm_recursor);
- /*
- * keep track of tlb+htab misses that are good addrs but
- * just need pte's created via handle_mm_fault()
-@@ -174,7 +174,7 @@
- return;
-
- bad_area:
-- up_read(&mm->mmap_sem);
-+ up_read_recursive(&mm->mmap_sem, &current->mm_recursor);
- pte_errors++;
-
- /* User mode accesses cause a SIGSEGV */
-@@ -195,7 +195,7 @@
- * us unable to handle the page fault gracefully.
- */
- out_of_memory:
-- up_read(&mm->mmap_sem);
-+ up_read_recursive(&mm->mmap_sem, &current->mm_recursor);
- if (current->pid == 1) {
- current->policy |= SCHED_YIELD;
- schedule();
-@@ -209,7 +209,7 @@
- return;
-
- do_sigbus:
-- up_read(&mm->mmap_sem);
-+ up_read_recursive(&mm->mmap_sem, &current->mm_recursor);
- info.si_signo = SIGBUS;
- info.si_errno = 0;
- info.si_code = BUS_ADRERR;
-diff -urN 2.4.11pre3aa1/fs/exec.c recurse/fs/exec.c
---- 2.4.11pre3aa1/fs/exec.c Sun Sep 23 21:11:39 2001
-+++ recurse/fs/exec.c Thu Oct 4 18:50:12 2001
-@@ -969,9 +969,9 @@
- if (do_truncate(file->f_dentry, 0) != 0)
- goto close_fail;
-
-- down_read(&current->mm->mmap_sem);
-+ down_read_recursive(&current->mm->mmap_sem, &current->mm_recursor);
- retval = binfmt->core_dump(signr, regs, file);
-- up_read(&current->mm->mmap_sem);
-+ up_read_recursive(&current->mm->mmap_sem, &current->mm_recursor);
-
- close_fail:
- filp_close(file, NULL);
-diff -urN 2.4.11pre3aa1/include/linux/rwsem.h recurse/include/linux/rwsem.h
---- 2.4.11pre3aa1/include/linux/rwsem.h Thu Oct 4 18:49:53 2001
-+++ recurse/include/linux/rwsem.h Thu Oct 4 18:50:12 2001
-@@ -18,6 +18,11 @@
- #endif
- };
-
-+struct rw_sem_recursor
-+{
-+ int counter;
-+};
-+
- #if RWSEM_DEBUG
- #define __SEM_DEBUG_INIT(name) \
- , (long)&(name).__magic
-@@ -42,6 +47,7 @@
- __SEM_DEBUG_INIT(name) \
- }
- #define RWSEM_INITIALIZER(name) __RWSEM_INITIALIZER(name, 0)
-+#define RWSEM_RECURSOR_INITIALIZER ((struct rw_sem_recursor) { 0, })
-
- #define __DECLARE_RWSEM(name, count) \
- struct rw_semaphore name = __RWSEM_INITIALIZER(name, count)
-@@ -112,6 +118,34 @@
- spin_lock(&sem->lock);
- sem->count -= RWSEM_WRITE_BIAS;
- if (unlikely(sem->count))
-+ rwsem_wake(sem);
-+ spin_unlock(&sem->lock);
-+}
-+
-+static inline void down_read_recursive(struct rw_semaphore *sem,
-+ struct rw_sem_recursor * recursor)
-+{
-+ int count, counter;
-+ CHECK_MAGIC(sem->__magic);
-+
-+ spin_lock(&sem->lock);
-+ count = sem->count;
-+ sem->count += RWSEM_READ_BIAS;
-+ counter = recursor->counter++;
-+ if (unlikely(count < 0 && !counter && !(count & RWSEM_READ_MASK)))
-+ rwsem_down_failed(sem, RWSEM_READ_BLOCKING_BIAS);
-+ spin_unlock(&sem->lock);
-+}
-+
-+static inline void up_read_recursive(struct rw_semaphore *sem,
-+ struct rw_sem_recursor * recursor)
-+{
-+ CHECK_MAGIC(sem->__magic);
-+
-+ spin_lock(&sem->lock);
-+ sem->count -= RWSEM_READ_BIAS;
-+ recursor->counter--;
-+ if (unlikely(sem->count < 0 && !(sem->count & RWSEM_READ_MASK)))
- rwsem_wake(sem);
- spin_unlock(&sem->lock);
- }
-diff -urN 2.4.11pre3aa1/include/linux/sched.h recurse/include/linux/sched.h
---- 2.4.11pre3aa1/include/linux/sched.h Thu Oct 4 18:49:53 2001
-+++ recurse/include/linux/sched.h Thu Oct 4 18:50:12 2001
-@@ -315,6 +315,7 @@
-
- struct task_struct *next_task, *prev_task;
- struct mm_struct *active_mm;
-+ struct rw_sem_recursor mm_recursor;
- struct list_head local_pages;
- unsigned int allocation_order, nr_local_pages;
-
-@@ -460,6 +461,7 @@
- policy: SCHED_OTHER, \
- mm: NULL, \
- active_mm: &init_mm, \
-+ mm_recursor: RWSEM_RECURSOR_INITIALIZER, \
- cpus_allowed: -1, \
- run_list: LIST_HEAD_INIT(tsk.run_list), \
- next_task: &tsk, \