在 2010-01-13三的 09:44 -0500,Mike Frysinger写道:
> On Wed, Jan 13, 2010 at 03:09,  <[email protected]> wrote:
> > Revision 8149 Author gyang Date 2010-01-13 03:09:27 -0500 (Wed, 13 Jan 2010)
> >
> > Log Message
> >
> > Task [#5545], revise previous commit, avoid schedule in decode_address() as
> > Sonic pointed out
> >
> > --- trunk/arch/blackfin/kernel/traps.c      2010-01-13 06:09:34 UTC (rev 
> > 8148)
> > +++ trunk/arch/blackfin/kernel/traps.c      2010-01-13 08:09:27 UTC (rev 
> > 8149)
> > @@ -138,7 +138,9 @@
> >             if (!mm)
> >                     continue;
> >
> > -           down_write(&mm->mmap_sem);
> > +           while (!down_read_trylock(&mm->mmap_sem))
> > +                   barrier();
> > +
> >             for (n = rb_first(&mm->mm_rb); n; n = rb_next(n)) {
> >                     struct vm_area_struct *vma;
> >
> > @@ -184,11 +186,11 @@
> >                             if (buf[0] == '\0')
> >                                     sprintf(buf, "[ %s ] dynamic memory", 
> > name);
> >
> > -                           up_write(&mm->mmap_sem);
> > +                           up_read(&mm->mmap_sem);
> >                             goto done;
> >                     }
> >             }
> > -           up_write(&mm->mmap_sem);
> > +           up_read(&mm->mmap_sem);
> >
> >             if (!in_atomic)
> >                     mmput(mm);
> 
> i think this needs in_atomic handling.  if an exception occurred while
> one of these locks were held, the kernel would hang.
> -mike

So we have to skip this mm if it's mmap_sem is held. I will modify it.
-Graff


_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to