From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751727AbdFIV7s (ORCPT ); Fri, 9 Jun 2017 17:59:48 -0400 Received: from mx1.redhat.com ([209.132.183.28]:35740 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751707AbdFIV7r (ORCPT ); Fri, 9 Jun 2017 17:59:47 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 0FED48535D Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=alex.williamson@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 0FED48535D Subject: [PATCH 2/7] kvm-vfio: Decouple only when we match a group From: Alex Williamson To: kvm@vger.kernel.org Cc: Paolo Bonzini , alex.williamson@redhat.com, linux-kernel@vger.kernel.org, eric.auger@redhat.com Date: Fri, 09 Jun 2017 15:59:44 -0600 Message-ID: <20170609215944.31986.32841.stgit@gimli.home> In-Reply-To: <20170609215816.31986.89321.stgit@gimli.home> References: <20170609215816.31986.89321.stgit@gimli.home> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Fri, 09 Jun 2017 21:59:47 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Unset-KVM and decrement-assignment only when we find the group in our list. Otherwise we can get out of sync if the user triggers this for groups that aren't currently on our list. Signed-off-by: Alex Williamson Cc: Paolo Bonzini --- virt/kvm/vfio.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/virt/kvm/vfio.c b/virt/kvm/vfio.c index d32f239eb471..db9036ef8c73 100644 --- a/virt/kvm/vfio.c +++ b/virt/kvm/vfio.c @@ -201,18 +201,16 @@ static int kvm_vfio_set_group(struct kvm_device *dev, long attr, u64 arg) continue; list_del(&kvg->node); + kvm_arch_end_assignment(dev->kvm); + kvm_vfio_group_set_kvm(kvg->vfio_group, NULL); kvm_vfio_group_put_external_user(kvg->vfio_group); kfree(kvg); ret = 0; break; } - kvm_arch_end_assignment(dev->kvm); - mutex_unlock(&kv->lock); - kvm_vfio_group_set_kvm(vfio_group, NULL); - kvm_vfio_group_put_external_user(vfio_group); kvm_vfio_update_coherency(dev);