drm/mgag200: do not attempt to acquire a reservation while in an interrupt handler
authorMaarten Lankhorst <m.b.lankhorst@gmail.com>
Thu, 27 Jun 2013 11:38:25 +0000 (13:38 +0200)
committerDave Airlie <airlied@redhat.com>
Fri, 28 Jun 2013 01:56:36 +0000 (11:56 +1000)
Mutexes should not be acquired in interrupt context. While the trylock
fastpath is arguably safe on all implementations, the slowpath
unlock path definitely isn't.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/mgag200/mgag200_fb.c

index 5da824ce9ba13fd9a9787797085bbe83b96ed59d..964f58cee5ea67b37f02e680b0f1ab7ebb3e5ed3 100644 (file)
@@ -27,7 +27,7 @@ static void mga_dirty_update(struct mga_fbdev *mfbdev,
        struct mgag200_bo *bo;
        int src_offset, dst_offset;
        int bpp = (mfbdev->mfb.base.bits_per_pixel + 7)/8;
-       int ret;
+       int ret = -EBUSY;
        bool unmap = false;
        bool store_for_later = false;
        int x2, y2;
@@ -41,7 +41,8 @@ static void mga_dirty_update(struct mga_fbdev *mfbdev,
         * then the BO is being moved and we should
         * store up the damage until later.
         */
-       ret = mgag200_bo_reserve(bo, true);
+       if (!in_interrupt())
+               ret = mgag200_bo_reserve(bo, true);
        if (ret) {
                if (ret != -EBUSY)
                        return;