Broken locking in ttm_bo_swapout

Maarten Maathuis madman2003 at gmail.com
Mon Jan 24 03:52:12 PST 2011


On Thu, Jan 20, 2011 at 7:53 PM, Matthew Bullock
<matthew.bullock at tadpole.com> wrote:
> I have a fairly simple opengl application running on nouveau. It effectively
> just plots a couple of very large images that change regularly.
>
> I've been getting an easily repeatable failure, hitting the
> BUG_ON(in_interrupt) in vfree() that is called during ttm_shrink_work().
> Obviously vfree() is being called with a lock held...
>
> Looking at the locking up through the stack trace, there's an obvious
> mistake:
>
> There should be a:
> spin_lock(&glob->lru_lock);
> before the continue in ttm_bo_swapout() in drivers/gpu/drm/ttm/ttm_bo.c
>
> --- ttm_bo.c~   2011-01-05 00:50:19.000000000 +0000
> +++ ttm_bo.c    2011-01-20 18:11:57.262813765 +0000
> @@ -1761,6 +1761,7 @@ static int ttm_bo_swapout(struct ttm_mem
>                        spin_unlock(&glob->lru_lock);
>                        (void) ttm_bo_cleanup_refs(bo, false, false, false);
>                        kref_put(&bo->list_kref, ttm_bo_release_list);
> +                       spin_lock(&glob->lru_lock);
>                        continue;
>                }
>
> That fixes the problem for me.
>
> Matthew
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>

This seems (very) plausible, maybe someone who commits drm patches
frequently will see this message now.

It would be a shame to forget about this e-mail.

Maarten.

-- 
Far away from the primal instinct, the song seems to fade away, the
river get wider between your thoughts and the things we do and say.


More information about the dri-devel mailing list