From nobody Sun May 5 13:30:37 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 149871049049928.623778578413408; Wed, 28 Jun 2017 21:28:10 -0700 (PDT) Received: from localhost ([::1]:36738 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQR3o-0008MZ-E5 for importer@patchew.org; Thu, 29 Jun 2017 00:28:08 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42572) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dQR2v-00082M-71 for qemu-devel@nongnu.org; Thu, 29 Jun 2017 00:27:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dQR2q-0007fK-AV for qemu-devel@nongnu.org; Thu, 29 Jun 2017 00:27:13 -0400 Received: from mx1.redhat.com ([209.132.183.28]:49762) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dQR2q-0007d9-3p for qemu-devel@nongnu.org; Thu, 29 Jun 2017 00:27:08 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id F07B080C08 for ; Thu, 29 Jun 2017 04:27:05 +0000 (UTC) Received: from pxdev.xzpeter.org.com (ovpn-12-89.pek2.redhat.com [10.72.12.89]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6D8357D4EB; Thu, 29 Jun 2017 04:27:00 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com F07B080C08 Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=peterx@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com F07B080C08 From: Peter Xu To: qemu-devel@nongnu.org Date: Thu, 29 Jun 2017 12:26:57 +0800 Message-Id: <1498710417-7807-1-git-send-email-peterx@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Thu, 29 Jun 2017 04:27:06 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH] intel_iommu: fix migration breakage on mr switch X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , "Michael S . Tsirkin" , Jason Wang , Juan Quintela , "Dr . David Alan Gilbert" , peterx@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Migration is broken after the vfio integration work: qemu-kvm: AHCI: Failed to start FIS receive engine: bad FIS receive buffer = address qemu-kvm: Failed to load ich9_ahci:ahci qemu-kvm: error while loading state for instance 0x0 of device '0000:00:1f.= 2/ich9_ahci' qemu-kvm: load of migration failed: Operation not permitted The problem is that vfio work introduced dynamic memory region switching (actually it is also used for future PT mode), and this memory region layout is not properly delivered to destination when migration happens. Solution is to rebuild the layout in post_load. Bug: https://bugzilla.redhat.com/show_bug.cgi?id=3D1459906 Fixes: 558e0024 ("intel_iommu: allow dynamic switch of IOMMU region") Signed-off-by: Peter Xu Reviewed-by: Jason Wang --- hw/i386/intel_iommu.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index a9b59bd..36b231d 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -2332,11 +2332,28 @@ static void vtd_iommu_notify_flag_changed(MemoryReg= ion *iommu, } } =20 +static int vtd_post_load(void *opaque, int version_id) +{ + IntelIOMMUState *iommu =3D opaque; + + /* + * Since commit 558e00 ("intel_iommu: allow dynamic switch of + * IOMMU region"), memory regions are dynamically turned on/off + * depending on context entry configurations from the guest. After + * migration, we need to make sure the memory regions are still + * correct. + */ + vtd_switch_address_space_all(iommu); + + return 0; +} + static const VMStateDescription vtd_vmstate =3D { .name =3D "iommu-intel", .version_id =3D 1, .minimum_version_id =3D 1, .priority =3D MIG_PRI_IOMMU, + .post_load =3D vtd_post_load, .fields =3D (VMStateField[]) { VMSTATE_UINT64(root, IntelIOMMUState), VMSTATE_UINT64(intr_root, IntelIOMMUState), --=20 2.7.4