udl-kms: change down_interruptible to down
authorMikulas Patocka <mpatocka@redhat.com>
Sun, 3 Jun 2018 14:40:55 +0000 (16:40 +0200)
committerDave Airlie <airlied@redhat.com>
Mon, 30 Jul 2018 22:03:47 +0000 (08:03 +1000)
If we leave urbs around, it causes not only leak, but also memory
corruption. This patch fixes the function udl_free_urb_list, so that it
always waits for all urbs that are in progress.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Cc: stable@vger.kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/udl/udl_main.c

index d518de8..1239dec 100644 (file)
@@ -170,18 +170,13 @@ static void udl_free_urb_list(struct drm_device *dev)
        struct list_head *node;
        struct urb_node *unode;
        struct urb *urb;
-       int ret;
        unsigned long flags;
 
        DRM_DEBUG("Waiting for completes and freeing all render urbs\n");
 
        /* keep waiting and freeing, until we've got 'em all */
        while (count--) {
-
-               /* Getting interrupted means a leak, but ok at shutdown*/
-               ret = down_interruptible(&udl->urbs.limit_sem);
-               if (ret)
-                       break;
+               down(&udl->urbs.limit_sem);
 
                spin_lock_irqsave(&udl->urbs.lock, flags);