drm/nouveau/pwr: fix missing mutex unlock in a failure path
authorBen Skeggs <bskeggs@redhat.com>
Wed, 13 Nov 2013 22:31:26 +0000 (08:31 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Thu, 14 Nov 2013 04:57:02 +0000 (14:57 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/core/subdev/pwr/base.c

index 9908f1f05a00f4f3937eb6bd29b555b274d814da..d4fd3bc9c66f3904303acb165544a928b9c68885 100644 (file)
@@ -32,6 +32,11 @@ nouveau_pwr_send(struct nouveau_pwr *ppwr, u32 reply[2],
        struct nouveau_subdev *subdev = nv_subdev(ppwr);
        u32 addr;
 
+       /* wait for a free slot in the fifo */
+       addr  = nv_rd32(ppwr, 0x10a4a0);
+       if (!nv_wait_ne(ppwr, 0x10a4b0, 0xffffffff, addr ^ 8))
+               return -EBUSY;
+
        /* we currently only support a single process at a time waiting
         * on a synchronous reply, take the PPWR mutex and tell the
         * receive handler what we're waiting for
@@ -42,11 +47,6 @@ nouveau_pwr_send(struct nouveau_pwr *ppwr, u32 reply[2],
                ppwr->recv.process = process;
        }
 
-       /* wait for a free slot in the fifo */
-       addr  = nv_rd32(ppwr, 0x10a4a0);
-       if (!nv_wait_ne(ppwr, 0x10a4b0, 0xffffffff, addr ^ 8))
-               return -EBUSY;
-
        /* acquire data segment access */
        do {
                nv_wr32(ppwr, 0x10a580, 0x00000001);