From nobody Mon Feb 9 11:55:45 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1687335356; cv=none; d=zohomail.com; s=zohoarc; b=hYqUkKIdWzxH3KA4qJe+VMB9GuGMtmlj/b/ClFoWma0j/kANCJx8UBXmhNTQfxDcaI75umdsdPgO9oO2Q6TRevhKUL7v/NkY2KUZhDr8Ux2GBW+kTuQvTeJmPZaRDdYgfClrURVExJCXgNS33PgkAgfsY5M/LNapEhkgCCQGD8s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1687335356; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=bYSGNs8uaV2mAimFfI2XOslGHf3ly99lq3jEhPD+09E=; b=haSfIP14b1EyTiaQDa5gBvPUUzYzEOcoeviF50GndG5nWFls0I9BpBtmOsZiZj5WEp6k8PzuEv2CEtiVVJVdDEmWDYXa4GhEz9GHU8gC7umSHtVU5xnVZMBdxt9XiNUAAlUqsHC4dzzqNVuJkwKJP8Quf6eVwz4dTs5/jF9Ruwc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1687335356702305.5386249614219; Wed, 21 Jun 2023 01:15:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qBszc-0004fx-DR; Wed, 21 Jun 2023 04:15:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qBszX-0004ew-Jj for qemu-devel@nongnu.org; Wed, 21 Jun 2023 04:15:04 -0400 Received: from mga18.intel.com ([134.134.136.126]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qBszV-0002s8-91 for qemu-devel@nongnu.org; Wed, 21 Jun 2023 04:15:03 -0400 Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jun 2023 01:14:59 -0700 Received: from duan-server-s2600bt.bj.intel.com ([10.240.192.147]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jun 2023 01:14:57 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1687335301; x=1718871301; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=mNuXNxjtVp9RLH7yf+INXJlD+blwYMF2DVMvyiVISEQ=; b=P8afrtrteYSg7ei/MgN7oj+7Am7hQ4P8sWNf41aCirfuj0r6+d5wiJba /PCqMadoz9FJPlu1c0hbWXWCiyrruB+GIDIc9xSjBjs5Dt6C+DmAmqWMY cUE1vNWmw1haRR+tQoBFPwdt8fQH8VE15vsCMxS4UCeeY10GWzO1RSWQS 7JlQX3X9qGgjWS5rgQQWrjQjpWuqlDPlZtpHv/+4KoPmn8t6oyEqyAe5p EWBb0DAEcGsxAdqQff7/E2jiM8YarkACMEWIiTXfkYhneqrleK6mZe8+T 5A9LSv4nogWG0WM/uaAPW5xZU+kPuNCp2tZlludw9aDG4/PYZvojbxAl6 A==; X-IronPort-AV: E=McAfee;i="6600,9927,10747"; a="344843456" X-IronPort-AV: E=Sophos;i="6.00,259,1681196400"; d="scan'208";a="344843456" X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10747"; a="804282290" X-IronPort-AV: E=Sophos;i="6.00,259,1681196400"; d="scan'208";a="804282290" From: Zhenzhong Duan To: qemu-devel@nongnu.org Cc: alex.williamson@redhat.com, clg@redhat.com, joao.m.martins@oracle.com, avihaih@nvidia.com, chao.p.peng@intel.com Subject: [PATCH v3 1/3] vfio/pci: Fix resource leak in vfio_realize Date: Wed, 21 Jun 2023 16:02:02 +0800 Message-Id: <20230621080204.420723-2-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230621080204.420723-1-zhenzhong.duan@intel.com> References: <20230621080204.420723-1-zhenzhong.duan@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=134.134.136.126; envelope-from=zhenzhong.duan@intel.com; helo=mga18.intel.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1687335358733100003 Content-Type: text/plain; charset="utf-8" When adding migration blocker failed in vfio_migration_realize(), hotplug will fail and we see below: (qemu) device_add vfio-pci,host=3D81:11.1,id=3Dvfio1,bus=3Droot1,x-enable-m= igration=3Dtrue 0000:81:11.1: VFIO migration is not supported in kernel Error: disallowing migration blocker (--only-migratable) for: VFIO device d= oesn't support migration If we hotplug again we should see same log as above, but we see: (qemu) device_add vfio-pci,host=3D81:11.0,id=3Dvfio0,bus=3Droot0,x-enable-m= igration=3Dtrue Error: vfio 0000:81:11.0: device is already attached That's because some references to VFIO device isn't released, we should check return value of vfio_migration_realize() and release the references, then VFIO device will be truely released when hotplug failed. Signed-off-by: Zhenzhong Duan --- hw/vfio/pci.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 73874a94de12..c71b0955d81c 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -3210,6 +3210,7 @@ static void vfio_realize(PCIDevice *pdev, Error **err= p) ret =3D vfio_migration_realize(vbasedev, errp); if (ret) { error_report("%s: Migration disabled", vbasedev->name); + goto out_deregister; } } =20 --=20 2.34.1 From nobody Mon Feb 9 11:55:45 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1687335353; cv=none; d=zohomail.com; s=zohoarc; b=DLrAItKTORyClePKw+UUgV49p/tHz7aRt2n3xPK8NduyknLm2uwGJY4D1Sw9vUi7IhuvfvbXfQaxn8sPu6DGfRMy4nfiI+MKytLfIrrmEMvhrhh5GSTvnd9bz2xHubY8v5oeekSZ9o3cb9AN4o5kFlkfCv1nAmndx9bbWFxkQ+s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1687335353; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=V4l1WGbU/h7MbaNwyJRV8n7F7ryZLv52YRP2t+6+nTs=; b=IHlpwZaNGWgBHylOCy3tYcw+gwQq60Ak6au+rgFfXwSDSp4XBPhWmr64aFKwXb6zT9f3j6XMV68FBEt43YZDZ+AkrQySJ5tgiZRrUhHcF1A2llVH+/YnNXNO3XBRk0Et+HKkFNrcXKEYpq8vDXowpvLLvHCdYozLSO/HVyLqpnY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1687335353266179.91844303862058; Wed, 21 Jun 2023 01:15:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qBszh-0004iG-GH; Wed, 21 Jun 2023 04:15:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qBszY-0004f3-Te for qemu-devel@nongnu.org; Wed, 21 Jun 2023 04:15:05 -0400 Received: from mga18.intel.com ([134.134.136.126]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qBszX-0002sc-7Z for qemu-devel@nongnu.org; Wed, 21 Jun 2023 04:15:04 -0400 Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jun 2023 01:15:01 -0700 Received: from duan-server-s2600bt.bj.intel.com ([10.240.192.147]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jun 2023 01:14:59 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1687335303; x=1718871303; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=0hPMkNVrRILLd9lF9N0wtK7GJK0SD1zU2iVss5LP7Jg=; b=g5LzpH575ng4y6rXO4MUn7Vg8IMjN9QtHaKZdGFXd5t44Ycq5S/t6IRS csG4QAy1AB7LapvWxqiBsuD3MaJGGyX3P0nqK6LPg0T62GAvCe3P3xPG3 kMMejBHNpVETHPZgOG2eY/1EW8DPSk3Yo2DCdsFPB9RIH7QRembN9EESh qtnDfLdcuEbE/pBfzlu8xvFjdPTrGFojn2vE5Ev++C5y9L4d7ilnvMaXQ JuLUt7P2eAGK3HIktxtu5qCpRyh5PZOgXL00TNYhwbZPDxLYoCO6JP+8s 0zvd2mwyBrGaIvIWx9Wi6D4CvGx+nVhSW/Tx9GoEy+2to0DXICi5l2Mkz A==; X-IronPort-AV: E=McAfee;i="6600,9927,10747"; a="344843465" X-IronPort-AV: E=Sophos;i="6.00,259,1681196400"; d="scan'208";a="344843465" X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10747"; a="804282299" X-IronPort-AV: E=Sophos;i="6.00,259,1681196400"; d="scan'208";a="804282299" From: Zhenzhong Duan To: qemu-devel@nongnu.org Cc: alex.williamson@redhat.com, clg@redhat.com, joao.m.martins@oracle.com, avihaih@nvidia.com, chao.p.peng@intel.com Subject: [PATCH v3 2/3] vfio/pci: Fix a segfault in vfio_realize Date: Wed, 21 Jun 2023 16:02:03 +0800 Message-Id: <20230621080204.420723-3-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230621080204.420723-1-zhenzhong.duan@intel.com> References: <20230621080204.420723-1-zhenzhong.duan@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=134.134.136.126; envelope-from=zhenzhong.duan@intel.com; helo=mga18.intel.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1687335355175100005 Content-Type: text/plain; charset="utf-8" In case irqchip_change_notifier isn't added, removing it triggers segfault. Signed-off-by: Zhenzhong Duan --- hw/vfio/pci.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index c71b0955d81c..82c4cf4f7609 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -3222,7 +3222,9 @@ static void vfio_realize(PCIDevice *pdev, Error **err= p) =20 out_deregister: pci_device_set_intx_routing_notifier(&vdev->pdev, NULL); - kvm_irqchip_remove_change_notifier(&vdev->irqchip_change_notifier); + if (vdev->irqchip_change_notifier.notify) { + kvm_irqchip_remove_change_notifier(&vdev->irqchip_change_notifier); + } out_teardown: vfio_teardown_msi(vdev); vfio_bars_exit(vdev); --=20 2.34.1 From nobody Mon Feb 9 11:55:45 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1687335363; cv=none; d=zohomail.com; s=zohoarc; b=kpBWfsHsMj90nNAa3zdL1JbiZ+adslH0rnxO/naS/UbO5gToN/6UK6wzxMW7vA8zRM2SfCj+aWE7A6s1+TWQKWhYRcTbfeMImhh3zLvKfv0V+Kr0/eR4SgRkCaZ2os8cD0nLeDg7VuowNTvCkuqUTMZik5PTyMoYt2LS/fVfdWU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1687335363; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=nTb5O2uDhQPV7yYriMZ0vQON2dxnjitmkyEhWFjSjrE=; b=cgdnjXLmXFCp/OxQCpa7fD/87gwljNczaOPu0OXLURPMDNw9aBoCGw3+c4YNIh+AhgKjlFmC8t1IXET1FdRnOZpxAIRGTk+k99ME65CJRCE5iJrOYTG/TsdNAQbR26mkMwyF7kdfa4peSs/6e5hHnedPpRjafsRil4AomhYZpAI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1687335363508142.66708013108087; Wed, 21 Jun 2023 01:16:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qBszh-0004iH-C6; Wed, 21 Jun 2023 04:15:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qBszb-0004fY-5D for qemu-devel@nongnu.org; Wed, 21 Jun 2023 04:15:07 -0400 Received: from mga18.intel.com ([134.134.136.126]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qBszZ-00033Z-3U for qemu-devel@nongnu.org; Wed, 21 Jun 2023 04:15:06 -0400 Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jun 2023 01:15:03 -0700 Received: from duan-server-s2600bt.bj.intel.com ([10.240.192.147]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jun 2023 01:15:01 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1687335305; x=1718871305; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=pRQzNHwxbB9VYmvs+w5/VgwfC0yvxiQn5uImTyU+Ycs=; b=lqDmp7hA3oR429tHst9CZtN67NOqVAUM3z14Jgn88w6Fzc4HICl2LsrW BDx64Z9dNrw2cJxc3DIdURM0bg1aplecLKKViHEB0wvez4D/Qsk/EKV5k Dt9zmoWtzbArGHkIlKkKWa5jUrnFn2hmNRweMpwYWAPByDbifPCVNvUi7 8kmZs5wYmMZSLB5YzW/PsNNlUBTLJXK0U6vPQnf2WzXHBU4FYFNk7Mbu+ SF51cU8vRZoGU+vZZt8AgcYt4qe+D8EgLQcL4UtPqXYn21oVZ1Wd4lyoH X5CBLswbE7NNf2msxxt4jbJRVK6y3xMOKPFfCvOFg8ongoUH0HpoMVIc7 g==; X-IronPort-AV: E=McAfee;i="6600,9927,10747"; a="344843476" X-IronPort-AV: E=Sophos;i="6.00,259,1681196400"; d="scan'208";a="344843476" X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10747"; a="804282325" X-IronPort-AV: E=Sophos;i="6.00,259,1681196400"; d="scan'208";a="804282325" From: Zhenzhong Duan To: qemu-devel@nongnu.org Cc: alex.williamson@redhat.com, clg@redhat.com, joao.m.martins@oracle.com, avihaih@nvidia.com, chao.p.peng@intel.com Subject: [PATCH v3 3/3] vfio/migration: vfio/migration: Refactor and fix print of "Migration disabled" Date: Wed, 21 Jun 2023 16:02:04 +0800 Message-Id: <20230621080204.420723-4-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230621080204.420723-1-zhenzhong.duan@intel.com> References: <20230621080204.420723-1-zhenzhong.duan@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=134.134.136.126; envelope-from=zhenzhong.duan@intel.com; helo=mga18.intel.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1687335364935100003 Content-Type: text/plain; charset="utf-8" This patch refactors vfio_migration_realize() and its dependend code as follows: 1. It's redundant in vfio_migration_realize() to registers multiple blocker= s, e.g: vIOMMU blocker can be refactored as per device blocker. 2. Change vfio_block_giommu_migration() to be only a per device checker. 3. Remove global vIOMMU blocker related stuff, e.g: giommu_migration_blocker, vfio_unblock_giommu_migration(), vfio_viommu_preset() and vfio_migration_finalize() 4. Change vfio_migration_realize() and dependent vfio_block_*_migration() to return bool type. 5. Change to print "Migration disabled" only after adding blocker succeed. 6. Add device name to errp so "info migrate" could be more informative. migrate_add_blocker() returns 0 when successfully adding the migration bloc= ker. However, the caller of vfio_migration_realize() considers that migration was blocked when the latter returned an error. What matters for migration is th= at the blocker is added in core migration, so this cleans up usability such th= at user sees "Migrate disabled" when any of the vfio migration blockers are ac= tive. Signed-off-by: Zhenzhong Duan --- hw/vfio/common.c | 54 +++++------------------------------ hw/vfio/migration.c | 37 +++++++++++------------- hw/vfio/pci.c | 4 +-- include/hw/vfio/vfio-common.h | 7 ++--- 4 files changed, 29 insertions(+), 73 deletions(-) diff --git a/hw/vfio/common.c b/hw/vfio/common.c index fa8fd949b1cf..cc5f4e805341 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -362,8 +362,6 @@ bool vfio_mig_active(void) } =20 static Error *multiple_devices_migration_blocker; -static Error *giommu_migration_blocker; - static unsigned int vfio_migratable_device_num(void) { VFIOGroup *group; @@ -381,13 +379,13 @@ static unsigned int vfio_migratable_device_num(void) return device_num; } =20 -int vfio_block_multiple_devices_migration(Error **errp) +bool vfio_block_multiple_devices_migration(Error **errp) { int ret; =20 if (multiple_devices_migration_blocker || vfio_migratable_device_num() <=3D 1) { - return 0; + return true; } =20 error_setg(&multiple_devices_migration_blocker, @@ -397,9 +395,11 @@ int vfio_block_multiple_devices_migration(Error **errp) if (ret < 0) { error_free(multiple_devices_migration_blocker); multiple_devices_migration_blocker =3D NULL; + } else { + error_report("Migration disabled, not support multiple VFIO device= s"); } =20 - return ret; + return !ret; } =20 void vfio_unblock_multiple_devices_migration(void) @@ -414,49 +414,9 @@ void vfio_unblock_multiple_devices_migration(void) multiple_devices_migration_blocker =3D NULL; } =20 -static bool vfio_viommu_preset(void) -{ - VFIOAddressSpace *space; - - QLIST_FOREACH(space, &vfio_address_spaces, list) { - if (space->as !=3D &address_space_memory) { - return true; - } - } - - return false; -} - -int vfio_block_giommu_migration(Error **errp) -{ - int ret; - - if (giommu_migration_blocker || - !vfio_viommu_preset()) { - return 0; - } - - error_setg(&giommu_migration_blocker, - "Migration is currently not supported with vIOMMU enabled"); - ret =3D migrate_add_blocker(giommu_migration_blocker, errp); - if (ret < 0) { - error_free(giommu_migration_blocker); - giommu_migration_blocker =3D NULL; - } - - return ret; -} - -void vfio_migration_finalize(void) +bool vfio_block_giommu_migration(VFIODevice *vbasedev) { - if (!giommu_migration_blocker || - vfio_viommu_preset()) { - return; - } - - migrate_del_blocker(giommu_migration_blocker); - error_free(giommu_migration_blocker); - giommu_migration_blocker =3D NULL; + return vbasedev->group->container->space->as !=3D &address_space_memor= y; } =20 static void vfio_set_migration_error(int err) diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index 6b58dddb8859..7621074f156d 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -632,42 +632,39 @@ int64_t vfio_mig_bytes_transferred(void) return bytes_transferred; } =20 -int vfio_migration_realize(VFIODevice *vbasedev, Error **errp) +/* Return true when either migration initialized or blocker registered */ +bool vfio_migration_realize(VFIODevice *vbasedev, Error **errp) { - int ret =3D -ENOTSUP; + int ret; =20 - if (!vbasedev->enable_migration) { + if (!vbasedev->enable_migration || vfio_migration_init(vbasedev)) { + error_setg(&vbasedev->migration_blocker, + "VFIO device %s doesn't support migration", vbasedev->n= ame); goto add_blocker; } =20 - ret =3D vfio_migration_init(vbasedev); - if (ret) { - goto add_blocker; - } - - ret =3D vfio_block_multiple_devices_migration(errp); - if (ret) { - return ret; + if (!vfio_block_multiple_devices_migration(errp)) { + return false; } =20 - ret =3D vfio_block_giommu_migration(errp); - if (ret) { - return ret; + if (vfio_block_giommu_migration(vbasedev)) { + error_setg(&vbasedev->migration_blocker, + "Migration is currently not supported on %s " + "with vIOMMU enabled", vbasedev->name); + goto add_blocker; } =20 - trace_vfio_migration_probe(vbasedev->name); - return 0; + return true; =20 add_blocker: - error_setg(&vbasedev->migration_blocker, - "VFIO device doesn't support migration"); - ret =3D migrate_add_blocker(vbasedev->migration_blocker, errp); if (ret < 0) { error_free(vbasedev->migration_blocker); vbasedev->migration_blocker =3D NULL; + } else { + error_report("%s: Migration disabled", vbasedev->name); } - return ret; + return !ret; } =20 void vfio_migration_exit(VFIODevice *vbasedev) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 82c4cf4f7609..061ca96cbce2 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -3209,7 +3209,8 @@ static void vfio_realize(PCIDevice *pdev, Error **err= p) if (!pdev->failover_pair_id) { ret =3D vfio_migration_realize(vbasedev, errp); if (ret) { - error_report("%s: Migration disabled", vbasedev->name); + trace_vfio_migration_probe(vbasedev->name); + } else { goto out_deregister; } } @@ -3250,7 +3251,6 @@ static void vfio_instance_finalize(Object *obj) */ vfio_put_device(vdev); vfio_put_group(group); - vfio_migration_finalize(); } =20 static void vfio_exitfn(PCIDevice *pdev) diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h index eed244f25f34..a2e2171b1f93 100644 --- a/include/hw/vfio/vfio-common.h +++ b/include/hw/vfio/vfio-common.h @@ -220,9 +220,9 @@ typedef QLIST_HEAD(VFIOGroupList, VFIOGroup) VFIOGroupL= ist; extern VFIOGroupList vfio_group_list; =20 bool vfio_mig_active(void); -int vfio_block_multiple_devices_migration(Error **errp); +bool vfio_block_multiple_devices_migration(Error **errp); void vfio_unblock_multiple_devices_migration(void); -int vfio_block_giommu_migration(Error **errp); +bool vfio_block_giommu_migration(VFIODevice *vbasedev); int64_t vfio_mig_bytes_transferred(void); =20 #ifdef CONFIG_LINUX @@ -246,8 +246,7 @@ int vfio_spapr_create_window(VFIOContainer *container, int vfio_spapr_remove_window(VFIOContainer *container, hwaddr offset_within_address_space); =20 -int vfio_migration_realize(VFIODevice *vbasedev, Error **errp); +bool vfio_migration_realize(VFIODevice *vbasedev, Error **errp); void vfio_migration_exit(VFIODevice *vbasedev); -void vfio_migration_finalize(void); =20 #endif /* HW_VFIO_VFIO_COMMON_H */ --=20 2.34.1