Path: csiph.com!1.us.feeder.erje.net!feeder.erje.net!2.eu.feeder.erje.net!feeds.phibee-telecom.net!news.panservice.it!diesel.cu.mi.it!bofh.it!news.nic.it!robomod From: Jason Wang Newsgroups: linux.kernel Subject: Re: [PATCH 03/10] drm/virtio: fix lock context imbalance Date: Wed, 07 Dec 2016 05:20:01 +0100 Message-ID: References: X-Original-To: "Michael S. Tsirkin" , linux-kernel@vger.kernel.org User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 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: robomod@news.nic.it List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Approved: robomod@news.nic.it Lines: 32 Organization: linux.* mail to news gateway X-Original-Cc: David Airlie , Gerd Hoffmann , dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org X-Original-Date: Wed, 7 Dec 2016 12:13:40 +0800 X-Original-Message-ID: X-Original-References: <1481038106-24899-1-git-send-email-mst@redhat.com> <1481038106-24899-4-git-send-email-mst@redhat.com> X-Original-Sender: linux-kernel-owner@vger.kernel.org Xref: csiph.com linux.kernel:1537475 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);