From nobody Mon Feb 9 01:16:58 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.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 ARC-Seal: i=1; a=rsa-sha256; t=1614047201; cv=none; d=zohomail.com; s=zohoarc; b=T8kNmbDi4+KIs4+wLzaZSvT8yJT8fTN3uTFBFgSeIbW3vh6igwkR5KdlrH2UiRoiFwa8nm/2GUfPAG4RIBqfZjCrqp409z47RlRepcCKuGI73P77cpovJL/VSPPQ1FlLQ9zoXR/jZcOysFH2LsozPZhSYJKYaM+qixMM9P7KyHM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614047201; h=Content-Type: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=/h8tnxt2iXDI7D3kKbtL+lTmXLrLuaO228+gz+ahPcw=; b=KVTjSQntrqlpsIDavNu+YGHPV4d2uQZaBTxVTmp/92kW4UlF/WehxbWX1CkAP+ewucJoUbq7hBPeXu1cKZy9emMFBns6t/Zr2aYFCtJdXT8p4GHYFBUjLQxmXUT+izJTNANOuFs/MFyqTtH0vu1F9SFlSr/6TRNb2qGhsNuB9NY= ARC-Authentication-Results: i=1; mx.zohomail.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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614047200938613.3378541565852; Mon, 22 Feb 2021 18:26:40 -0800 (PST) Received: from localhost ([::1]:36514 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lENPL-0001ss-Ve for importer@patchew.org; Mon, 22 Feb 2021 21:26:39 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:52678) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lENM2-0006AJ-7d; Mon, 22 Feb 2021 21:23:14 -0500 Received: from szxga05-in.huawei.com ([45.249.212.191]:3486) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lENLq-0000IQ-6V; Mon, 22 Feb 2021 21:23:13 -0500 Received: from DGGEMS407-HUB.china.huawei.com (unknown [172.30.72.59]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4Dl2q81TSdzjQvX; Tue, 23 Feb 2021 10:21:24 +0800 (CST) Received: from DESKTOP-7FEPK9S.china.huawei.com (10.174.184.135) by DGGEMS407-HUB.china.huawei.com (10.3.19.207) with Microsoft SMTP Server id 14.3.498.0; Tue, 23 Feb 2021 10:22:49 +0800 From: Shenming Lu To: Alex Williamson , Kirti Wankhede , Cornelia Huck , , Subject: [PATCH v3 1/3] vfio: Move the saving of the config space to the right place in VFIO migration Date: Tue, 23 Feb 2021 10:22:23 +0800 Message-ID: <20210223022225.50-2-lushenming@huawei.com> X-Mailer: git-send-email 2.27.0.windows.1 In-Reply-To: <20210223022225.50-1-lushenming@huawei.com> References: <20210223022225.50-1-lushenming@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.174.184.135] X-CFilter-Loop: Reflected 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=45.249.212.191; envelope-from=lushenming@huawei.com; helo=szxga05-in.huawei.com X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Lorenzo Pieralisi , Neo Jia , mst@redhat.com, Marc Zyngier , "Dr . David Alan Gilbert" , Eric Auger , yuzenghui@huawei.com, wanghaibin.wang@huawei.com, lushenming@huawei.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" On ARM64 the VFIO SET_IRQS ioctl is dependent on the VM interrupt setup, if the restoring of the VFIO PCI device config space is before the VGIC, an error might occur in the kernel. So we move the saving of the config space to the non-iterable process, thus it will be called after the VGIC according to their priorities. As for the possible dependence of the device specific migration data on it's config space, we can let the vendor driver to include any config info it needs in its own data stream. Signed-off-by: Shenming Lu Reviewed-by: Kirti Wankhede --- hw/vfio/migration.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index 00daa50ed8..f5bf67f642 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -575,11 +575,6 @@ static int vfio_save_complete_precopy(QEMUFile *f, voi= d *opaque) return ret; } =20 - ret =3D vfio_save_device_config_state(f, opaque); - if (ret) { - return ret; - } - ret =3D vfio_update_pending(vbasedev); if (ret) { return ret; @@ -620,6 +615,19 @@ static int vfio_save_complete_precopy(QEMUFile *f, voi= d *opaque) return ret; } =20 +static void vfio_save_state(QEMUFile *f, void *opaque) +{ + VFIODevice *vbasedev =3D opaque; + int ret; + + ret =3D vfio_save_device_config_state(f, opaque); + if (ret) { + error_report("%s: Failed to save device config space", + vbasedev->name); + qemu_file_set_error(f, ret); + } +} + static int vfio_load_setup(QEMUFile *f, void *opaque) { VFIODevice *vbasedev =3D opaque; @@ -670,11 +678,7 @@ static int vfio_load_state(QEMUFile *f, void *opaque, = int version_id) switch (data) { case VFIO_MIG_FLAG_DEV_CONFIG_STATE: { - ret =3D vfio_load_device_config_state(f, opaque); - if (ret) { - return ret; - } - break; + return vfio_load_device_config_state(f, opaque); } case VFIO_MIG_FLAG_DEV_SETUP_STATE: { @@ -720,6 +724,7 @@ static SaveVMHandlers savevm_vfio_handlers =3D { .save_live_pending =3D vfio_save_pending, .save_live_iterate =3D vfio_save_iterate, .save_live_complete_precopy =3D vfio_save_complete_precopy, + .save_state =3D vfio_save_state, .load_setup =3D vfio_load_setup, .load_cleanup =3D vfio_load_cleanup, .load_state =3D vfio_load_state, --=20 2.19.1 From nobody Mon Feb 9 01:16:58 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.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 ARC-Seal: i=1; a=rsa-sha256; t=1614047135; cv=none; d=zohomail.com; s=zohoarc; b=KvWPfpYEV1pxFOLiVLeIDe4z45zsSmjpSmlhZ9GsvzIpUtTPovl7wqKQyPkucJem/4veRr0A78F1JR6W8gZonpZ8IAunKvKZuWhEI+9IdTb339HvjxzpaJbIjhY94xDSrNg/PgZdCA3TUfea568/iGZXrFuY2p1FU4Ltt+eIx/I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614047135; h=Content-Type: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=Y2Nb8tq5y/EDmnDnapM01bA+KsUSaj4KAL4dF9y0ALQ=; b=cJELj3O/x4xcke0KLMz4ebKx4CGD2/moFYnVjbopt05yaHmITyDiOAcYx2PQasLv6qknlbCX6TtvX3mpj3noVHzpRBbqxw/lEJjXBHxpzOw3VohjXL9pXyA98JZn0GWZud5UoWwLLdxvoxrblaecfX+rqIfmBheMmK4831hNrsY= ARC-Authentication-Results: i=1; mx.zohomail.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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614047135131289.71768236027776; Mon, 22 Feb 2021 18:25:35 -0800 (PST) Received: from localhost ([::1]:33550 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lENOI-0000Xt-41 for importer@patchew.org; Mon, 22 Feb 2021 21:25:34 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:52654) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lENM0-00069P-Hi; Mon, 22 Feb 2021 21:23:12 -0500 Received: from szxga05-in.huawei.com ([45.249.212.191]:3488) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lENLq-0000IU-70; Mon, 22 Feb 2021 21:23:12 -0500 Received: from DGGEMS407-HUB.china.huawei.com (unknown [172.30.72.59]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4Dl2q824dmzjRRd; Tue, 23 Feb 2021 10:21:24 +0800 (CST) Received: from DESKTOP-7FEPK9S.china.huawei.com (10.174.184.135) by DGGEMS407-HUB.china.huawei.com (10.3.19.207) with Microsoft SMTP Server id 14.3.498.0; Tue, 23 Feb 2021 10:22:51 +0800 From: Shenming Lu To: Alex Williamson , Kirti Wankhede , Cornelia Huck , , Subject: [PATCH v3 2/3] vfio: Set the priority of the VFIO VM state change handler explicitly Date: Tue, 23 Feb 2021 10:22:24 +0800 Message-ID: <20210223022225.50-3-lushenming@huawei.com> X-Mailer: git-send-email 2.27.0.windows.1 In-Reply-To: <20210223022225.50-1-lushenming@huawei.com> References: <20210223022225.50-1-lushenming@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.174.184.135] X-CFilter-Loop: Reflected 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=45.249.212.191; envelope-from=lushenming@huawei.com; helo=szxga05-in.huawei.com X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Lorenzo Pieralisi , Neo Jia , mst@redhat.com, Marc Zyngier , "Dr . David Alan Gilbert" , Eric Auger , yuzenghui@huawei.com, wanghaibin.wang@huawei.com, lushenming@huawei.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" In the VFIO VM state change handler when stopping the VM, the _RUNNING bit in device_state is cleared which makes the VFIO device stop, including no longer generating interrupts. Then we can save the pending states of all interrupts in the GIC VM state change handler (on ARM). So we have to set the priority of the VFIO VM state change handler explicitly (like virtio devices) to ensure it is called before the GIC's in saving. Signed-off-by: Shenming Lu Reviewed-by: Kirti Wankhede Reviewed-by: Cornelia Huck --- hw/vfio/migration.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index f5bf67f642..b74982e3e6 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -862,7 +862,8 @@ static int vfio_migration_init(VFIODevice *vbasedev, register_savevm_live(id, VMSTATE_INSTANCE_ID_ANY, 1, &savevm_vfio_hand= lers, vbasedev); =20 - migration->vm_state =3D qemu_add_vm_change_state_handler(vfio_vmstate_= change, + migration->vm_state =3D qdev_add_vm_change_state_handler(vbasedev->dev, + vfio_vmstate_ch= ange, vbasedev); migration->migration_state.notify =3D vfio_migration_state_notifier; add_migration_state_change_notifier(&migration->migration_state); --=20 2.19.1 From nobody Mon Feb 9 01:16:58 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.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 ARC-Seal: i=1; a=rsa-sha256; t=1614047077; cv=none; d=zohomail.com; s=zohoarc; b=WUhE4GIvDlcT1rs75AsR+FcsbP1YfXRZ7C6jzFPp5kUutk3Ir3s2sktr1em8gjNvcJBtjW96/91khGpMswIjj1XtdChsf3RA7J0Qxob6XJMSmTPylS5N0JC4TunAMSq/r/GUj0DEFMIMoq1JYsI2hFDsbz/g0KrW4htuhglwD2Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614047077; h=Content-Type: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=8CBAJkRMxtrCg7KxrhvykHCG2p+lXF1jwDt162j1T2c=; b=n85FUEtxQ5aLhWLmcUw6i/KjhZL8OpXsdFUyjgU6mlFii/QlAIXE3E9Dq8C2Zz/tWrZ65vrPMf4yiCAX/IrCvHfdrtyLEh37nyGEUJgOmQV/WbYy6HoqWmzPHAqeeioJPcZl16z6WfV5eM8G0M/0DUIq7IAORKzvL2FGZuBI4qQ= ARC-Authentication-Results: i=1; mx.zohomail.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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614047077478955.646302769149; Mon, 22 Feb 2021 18:24:37 -0800 (PST) Received: from localhost ([::1]:58984 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lENNM-0007mm-HO for importer@patchew.org; Mon, 22 Feb 2021 21:24:36 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:52644) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lENM0-00069E-7e; Mon, 22 Feb 2021 21:23:12 -0500 Received: from szxga05-in.huawei.com ([45.249.212.191]:3487) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lENLq-0000IS-7K; Mon, 22 Feb 2021 21:23:11 -0500 Received: from DGGEMS407-HUB.china.huawei.com (unknown [172.30.72.59]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4Dl2q82RPczjRSt; Tue, 23 Feb 2021 10:21:24 +0800 (CST) Received: from DESKTOP-7FEPK9S.china.huawei.com (10.174.184.135) by DGGEMS407-HUB.china.huawei.com (10.3.19.207) with Microsoft SMTP Server id 14.3.498.0; Tue, 23 Feb 2021 10:22:53 +0800 From: Shenming Lu To: Alex Williamson , Kirti Wankhede , Cornelia Huck , , Subject: [PATCH v3 3/3] vfio: Avoid disabling and enabling vectors repeatedly in VFIO migration Date: Tue, 23 Feb 2021 10:22:25 +0800 Message-ID: <20210223022225.50-4-lushenming@huawei.com> X-Mailer: git-send-email 2.27.0.windows.1 In-Reply-To: <20210223022225.50-1-lushenming@huawei.com> References: <20210223022225.50-1-lushenming@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.174.184.135] X-CFilter-Loop: Reflected 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=45.249.212.191; envelope-from=lushenming@huawei.com; helo=szxga05-in.huawei.com X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Lorenzo Pieralisi , Neo Jia , mst@redhat.com, Marc Zyngier , "Dr . David Alan Gilbert" , Eric Auger , yuzenghui@huawei.com, wanghaibin.wang@huawei.com, lushenming@huawei.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" In VFIO migration resume phase and some guest startups, there are already unmasked vectors in the vector table when calling vfio_msix_enable(). So in order to avoid inefficiently disabling and enabling vectors repeatedly, let's allocate all needed vectors first and then enable these unmasked vectors one by one without disabling. Signed-off-by: Shenming Lu --- hw/pci/msix.c | 2 +- hw/vfio/pci.c | 20 +++++++++++++++++--- include/hw/pci/msix.h | 1 + 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/hw/pci/msix.c b/hw/pci/msix.c index ae9331cd0b..e057958fcd 100644 --- a/hw/pci/msix.c +++ b/hw/pci/msix.c @@ -131,7 +131,7 @@ static void msix_handle_mask_update(PCIDevice *dev, int= vector, bool was_masked) } } =20 -static bool msix_masked(PCIDevice *dev) +bool msix_masked(PCIDevice *dev) { return dev->config[dev->msix_cap + MSIX_CONTROL_OFFSET] & MSIX_MASKALL= _MASK; } diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index f74be78209..088fd41926 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -569,6 +569,9 @@ static void vfio_msix_vector_release(PCIDevice *pdev, u= nsigned int nr) =20 static void vfio_msix_enable(VFIOPCIDevice *vdev) { + PCIDevice *pdev =3D &vdev->pdev; + unsigned int nr, max_vec =3D 0; + vfio_disable_interrupts(vdev); =20 vdev->msi_vectors =3D g_new0(VFIOMSIVector, vdev->msix->entries); @@ -587,11 +590,22 @@ static void vfio_msix_enable(VFIOPCIDevice *vdev) * triggering to userspace, then immediately release the vector, leavi= ng * the physical device with no vectors enabled, but MSI-X enabled, just * like the guest view. + * If there are already unmasked vectors (in migration resume phase and + * some guest startups) which will be enabled soon, we can allocate all + * of them here to avoid inefficiently disabling and enabling vectors + * repeatedly later. */ - vfio_msix_vector_do_use(&vdev->pdev, 0, NULL, NULL); - vfio_msix_vector_release(&vdev->pdev, 0); + if (!msix_masked(pdev)) { + for (nr =3D 0; nr < msix_nr_vectors_allocated(pdev); nr++) { + if (!msix_is_masked(pdev, nr)) { + max_vec =3D nr; + } + } + } + vfio_msix_vector_do_use(pdev, max_vec, NULL, NULL); + vfio_msix_vector_release(pdev, max_vec); =20 - if (msix_set_vector_notifiers(&vdev->pdev, vfio_msix_vector_use, + if (msix_set_vector_notifiers(pdev, vfio_msix_vector_use, vfio_msix_vector_release, NULL)) { error_report("vfio: msix_set_vector_notifiers failed"); } diff --git a/include/hw/pci/msix.h b/include/hw/pci/msix.h index 4c4a60c739..b3cd88e262 100644 --- a/include/hw/pci/msix.h +++ b/include/hw/pci/msix.h @@ -28,6 +28,7 @@ void msix_load(PCIDevice *dev, QEMUFile *f); =20 int msix_enabled(PCIDevice *dev); int msix_present(PCIDevice *dev); +bool msix_masked(PCIDevice *dev); =20 bool msix_is_masked(PCIDevice *dev, unsigned vector); void msix_set_pending(PCIDevice *dev, unsigned vector); --=20 2.19.1