Josip, give this debugging patch a try.  It is against 2.6.23.1
but it should apply to most recent kernels.

It should give you debugging messages in the kernel log that
start with "FUTEX_BUG" if the debugging code triggers.

Please post just a few samples of whatever it spits out.

Thanks!

diff --git a/kernel/futex.c b/kernel/futex.c
index fcc94e7..6da8b3c 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -1874,6 +1874,25 @@ err_unlock:
        return ret;
 }
 
+static void log_futex_bug(u32 __user *uaddr, struct task_struct *curr, int pi)
+{
+       struct mm_struct *mm = curr->mm;
+       struct vm_area_struct *vma;
+       unsigned long addr;
+
+       printk(KERN_ERR "FUTEX_BUG: Looping too much in futex death\n");
+       printk(KERN_ERR "FUTEX_BUG: uaddr[%p] task[%s:%d] pi(%d)\n",
+              uaddr, curr->comm, curr->pid, pi);
+
+       addr = (unsigned long) uaddr;
+       vma = find_vma(mm, addr);
+       if (vma)
+               printk(KERN_ERR "FUTEX_BUG: VMA start[%lx] end[%lx] 
flags[%lx]\n",
+                      vma->vm_start,
+                      vma->vm_end,
+                      vma->vm_flags);
+}
+
 /*
  * Process a futex-list entry, check whether it's owned by the
  * dying task, and do notification if so:
@@ -1881,6 +1900,7 @@ err_unlock:
 int handle_futex_death(u32 __user *uaddr, struct task_struct *curr, int pi)
 {
        u32 uval, nval, mval;
+       int limit = 0;
 
 retry:
        if (get_user(uval, uaddr))
@@ -1903,8 +1923,12 @@ retry:
                if (nval == -EFAULT)
                        return -1;
 
-               if (nval != uval)
-                       goto retry;
+               if (nval != uval) {
+                       if (++limit < 100)
+                               goto retry;
+                       log_futex_bug(uaddr, curr, pi);
+                       put_user(mval, uaddr);
+               }
 
                /*
                 * Wake robust non-PI futexes here. The wakeup of
-
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to