From nobody Sat Apr 27 09:40:48 2024 Delivered-To: importer2@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+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1678353894; cv=none; d=zohomail.com; s=zohoarc; b=ZRmTHWAewR7uIb+VGDTck0T//Z0v5kGFFscoCsE6z2IcHvdA7lsDVYK4u/3J4h1MOIey+hfKu4RF+VYAxgBrdulDy4MZBSVaohT2I7UQU+XQp8Y72B0YMm8Ymnv6tPuctFX2SUcHOVv7pkBBrQUZ3KlWVC2UWT67I1m9G1LWPYs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678353894; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=KPDEVqN2rOPgzuoXtEzUbfW/vIjEWSHWNLMiHNs7YKE=; b=N0bicjHtTRLEYuj9X7oUn0TyuhKwFDNS0KU37Qox+IDdcdJToTcGTCaRqxe+LdARfPBtwFgoDyB54pMp0g079cej9PLKfrUSGUx5QYSfaNapS/xUM1CdM6MIE4RkypOHtSObc37PFN/rsCbHeNPXok/IudGvSmCgVg0qJhS3RBA= 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+importer2=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 1678353894133179.20699208001452; Thu, 9 Mar 2023 01:24:54 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1paCVd-000593-IG; Thu, 09 Mar 2023 04:24:25 -0500 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 1paCVZ-00058X-MU for qemu-devel@nongnu.org; Thu, 09 Mar 2023 04:24:21 -0500 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 1paCVW-00034k-5n for qemu-devel@nongnu.org; Thu, 09 Mar 2023 04:24:20 -0500 Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Mar 2023 01:24:14 -0800 Received: from spr-s2600bt.bj.intel.com ([10.240.192.124]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Mar 2023 01:24:12 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1678353858; x=1709889858; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=Tifvssd5ahm/JIBpNwm6Bcw0DL6kcnDchi5A0Pl8IJg=; b=lJ5bTYwYvtxmP4ogAk6cDuVPIoYvXrxbZI/0+TLS5OVjmI9F9JznHJGU tlrZMWwbLXMeAMW4CGJ6UUeHZmVqYPiGu5eSy8CQHHe/pyCAbWYSlZ/NB sCX06qJEbNTqqdKNkAndb7PoPGiPSVSlrZqOHVuIcKW3dSO4WX18wk7XV rqbHJr5CXZYutki3Wz8J25b31ZZRe0JvoK9zmTjVQN9G19keeH+KAMsbe kJE0A2DOkhXXJ1W7fp3vEhqZVL8iWNwPvLZQvU6KJnV2ryqJ/e9hdDq0+ BSFIHTsvauLkLdtArChZPw97CH/S3Kg2c4LFo9j5CJ9qjlm/LR4ZpC38x w==; X-IronPort-AV: E=McAfee;i="6500,9779,10643"; a="320227794" X-IronPort-AV: E=Sophos;i="5.98,245,1673942400"; d="scan'208";a="320227794" X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10643"; a="670666451" X-IronPort-AV: E=Sophos;i="5.98,245,1673942400"; d="scan'208";a="670666451" From: Zhenzhong Duan To: qemu-devel@nongnu.org Cc: mst@redhat.com, peterx@redhat.com, jasowang@redhat.com, pbonzini@redhat.com, richard.henderson@linaro.org, eduardo@habkost.net, marcel.apfelbaum@gmail.com Subject: [PATCH] intel-iommu: Set status bit after operation completed Date: Thu, 9 Mar 2023 17:23:19 +0800 Message-Id: <20230309092319.29229-1-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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+importer2=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 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+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1678353895007100001 According to SDM 11.4.4.2 Global Status Register: "This field is cleared by hardware when software sets the SRTP field in the Global Command register. This field is set by hardware when hardware completes the =E2=80=98Set Root Table Pointer=E2=80=99 operation using the = value provided in the Root Table Address register" Follow above spec to clear then set RTPS after finish all works, this way helps avoiding potential race with guest kernel. Though linux kernel is single threaded in writing GCMD_REG and checking GSTS_REG. Same reasion for GSTS_REG.TES Signed-off-by: Zhenzhong Duan --- hw/i386/intel_iommu.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index faade7def8..7cba1945a3 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -2312,11 +2312,12 @@ static void vtd_handle_gcmd_qie(IntelIOMMUState *s,= bool en) /* Set Root Table Pointer */ static void vtd_handle_gcmd_srtp(IntelIOMMUState *s) { + vtd_set_clear_mask_long(s, DMAR_GSTS_REG, VTD_GSTS_RTPS, 0); vtd_root_table_setup(s); - /* Ok - report back to driver */ - vtd_set_clear_mask_long(s, DMAR_GSTS_REG, 0, VTD_GSTS_RTPS); vtd_reset_caches(s); vtd_address_space_refresh_all(s); + /* Ok - report back to driver */ + vtd_set_clear_mask_long(s, DMAR_GSTS_REG, 0, VTD_GSTS_RTPS); } =20 /* Set Interrupt Remap Table Pointer */ @@ -2338,19 +2339,22 @@ static void vtd_handle_gcmd_te(IntelIOMMUState *s, = bool en) =20 if (en) { s->dmar_enabled =3D true; - /* Ok - report back to driver */ - vtd_set_clear_mask_long(s, DMAR_GSTS_REG, 0, VTD_GSTS_TES); } else { s->dmar_enabled =3D false; =20 /* Clear the index of Fault Recording Register */ s->next_frcd_reg =3D 0; - /* Ok - report back to driver */ - vtd_set_clear_mask_long(s, DMAR_GSTS_REG, VTD_GSTS_TES, 0); } =20 vtd_reset_caches(s); vtd_address_space_refresh_all(s); + + /* Ok - report back to driver */ + if (en) { + vtd_set_clear_mask_long(s, DMAR_GSTS_REG, 0, VTD_GSTS_TES); + } else { + vtd_set_clear_mask_long(s, DMAR_GSTS_REG, VTD_GSTS_TES, 0); + } } =20 /* Handle Interrupt Remap Enable/Disable */ --=20 2.25.1