From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932183AbcLGEN5 (ORCPT ); Tue, 6 Dec 2016 23:13:57 -0500 Received: from mx1.redhat.com ([209.132.183.28]:37290 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753123AbcLGENv (ORCPT ); Tue, 6 Dec 2016 23:13:51 -0500 Subject: Re: [PATCH 03/10] drm/virtio: fix lock context imbalance To: "Michael S. Tsirkin" , linux-kernel@vger.kernel.org References: <1481038106-24899-1-git-send-email-mst@redhat.com> <1481038106-24899-4-git-send-email-mst@redhat.com> Cc: David Airlie , Gerd Hoffmann , dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org From: Jason Wang Message-ID: Date: Wed, 7 Dec 2016 12:13:40 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 MIME-Version: 1.0 In-Reply-To: <1481038106-24899-4-git-send-email-mst@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Wed, 07 Dec 2016 04:13:45 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2016年12月06日 23:40, Michael S. Tsirkin wrote: > When virtio_gpu_free_vbufs exits due to list empty, it does not > drop the free_vbufs lock that it took. > list empty is not expected to happen anyway, but it can't hurt to fix > this and drop the lock. > > Signed-off-by: Michael S. Tsirkin > --- > drivers/gpu/drm/virtio/virtgpu_vq.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) Reviewed-by: Jason Wang > > diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c > index 5a0f8a7..2f0c2f9 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_vq.c > +++ b/drivers/gpu/drm/virtio/virtgpu_vq.c > @@ -109,8 +109,10 @@ void virtio_gpu_free_vbufs(struct virtio_gpu_device *vgdev) > > spin_lock(&vgdev->free_vbufs_lock); > for (i = 0; i < count; i++) { > - if (WARN_ON(list_empty(&vgdev->free_vbufs))) > + if (WARN_ON(list_empty(&vgdev->free_vbufs))) { > + spin_unlock(&vgdev->free_vbufs_lock); > return; > + } > vbuf = list_first_entry(&vgdev->free_vbufs, > struct virtio_gpu_vbuffer, list); > list_del(&vbuf->list);