From patchwork Thu Nov 18 09:51:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Barzen, Benjamin" X-Patchwork-Id: 12626403 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BA62CC433EF for ; Thu, 18 Nov 2021 09:52:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9710161B73 for ; Thu, 18 Nov 2021 09:52:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245292AbhKRJzt (ORCPT ); Thu, 18 Nov 2021 04:55:49 -0500 Received: from smtp-fw-9103.amazon.com ([207.171.188.200]:5237 "EHLO smtp-fw-9103.amazon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245287AbhKRJyW (ORCPT ); Thu, 18 Nov 2021 04:54:22 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.de; i=@amazon.de; q=dns/txt; s=amazon201209; t=1637229083; x=1668765083; h=from:to:cc:subject:date:message-id:content-id: mime-version:content-transfer-encoding; bh=qmsJzsuIciemmp4zdBevBtDHty8sywNOzaXrLohwo6Q=; b=lRZBM6LSqwblL1KQEmqGd2BDf7SBkxwKrEG000dtmmB2qSkUHZYD51D0 IkKKzJ+CWDeTXc/3fFvMWj2/SytFcOSVW98IUjWTvKR1BaYsR/XRbhqNv G4BeY0EPLN418DcHmBnteqDW1h5uHvAnMq8xqTRTojtMIp5bUfrIui1kc g=; X-IronPort-AV: E=Sophos;i="5.87,244,1631577600"; d="scan'208,223";a="972553103" Received: from pdx4-co-svc-p1-lb2-vlan2.amazon.com (HELO email-inbound-relay-pdx-2b-1f9d5b26.us-west-2.amazon.com) ([10.25.36.210]) by smtp-border-fw-9103.sea19.amazon.com with ESMTP; 18 Nov 2021 09:51:08 +0000 Received: from EX13D15EUA002.ant.amazon.com (pdx1-ws-svc-p6-lb9-vlan2.pdx.amazon.com [10.236.137.194]) by email-inbound-relay-pdx-2b-1f9d5b26.us-west-2.amazon.com (Postfix) with ESMTPS id 094B241D14; Thu, 18 Nov 2021 09:51:08 +0000 (UTC) Received: from EX13D15EUA003.ant.amazon.com (10.43.165.94) by EX13D15EUA002.ant.amazon.com (10.43.165.79) with Microsoft SMTP Server (TLS) id 15.0.1497.26; Thu, 18 Nov 2021 09:51:06 +0000 Received: from EX13D15EUA003.ant.amazon.com ([10.43.165.94]) by EX13D15EUA003.ant.amazon.com ([10.43.165.94]) with mapi id 15.00.1497.026; Thu, 18 Nov 2021 09:51:06 +0000 From: "Barzen, Benjamin" To: "kvm@vger.kernel.org" CC: Benjamin Barzen , "Barzen, Benjamin" , "pbonzini@redhat.com" Subject: [kvm-unit-tests PATCH RESEND] x86/intel-iommu: check if DMA translation is enabled before testing it Thread-Topic: [kvm-unit-tests PATCH RESEND] x86/intel-iommu: check if DMA translation is enabled before testing it Thread-Index: AQHX3GHOrjHCaGsBYkCOfJkGRqe8CA== Date: Thu, 18 Nov 2021 09:51:05 +0000 Message-ID: Accept-Language: en-US Content-Language: en-GB X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.43.164.131] Content-ID: <9A376AAB6E815F469FE72AB350D4AF71@amazon.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org From 74eaede66f7587bfb52a929bc553404a9a476392 Mon Sep 17 00:00:00 2001 From: Benjamin Barzen Date: Wed, 17 Nov 2021 11:40:58 +0000 Subject: [PATCH RESEND] x86/intel-iommu: check if DMA translation is enabled before testing it   Commit [1] to the Linux kernel allows for units where only interrupt remapping is implemented. To signal this to the guest system, all SAGAW bits of the DMAR capability register are set to 0. This commit checks that at least one SAGAW bit is set before running DMA translation tests.   [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c40aaaac10   Signed-off-by: Benjamin Barzen --- lib/x86/intel-iommu.c |  7 +++++-- lib/x86/intel-iommu.h |  3 ++- x86/intel-iommu.c     | 22 ++++++++++++++++------ 3 files changed, 23 insertions(+), 9 deletions(-)                   pci_dev_print(&edu_dev.pci_dev); -               vtd_test_dmar(); +               if (vtd_readq(DMAR_CAP_REG) & VTD_CAP_SAGAW) { +                       vtd_test_dmar(); +               } else { +                       report_skip(VTD_TEST_DMAR_4B); +               }                 vtd_test_ir();         } --  2.32.0 Amazon Development Center Germany GmbH Krausenstr. 38 10117 Berlin Geschaeftsfuehrung: Christian Schlaeger, Jonathan Weiss Eingetragen am Amtsgericht Charlottenburg unter HRB 149173 B Sitz: Berlin Ust-ID: DE 289 237 879 diff --git a/lib/x86/intel-iommu.c b/lib/x86/intel-iommu.c index c811ba5..f6f5634 100644 --- a/lib/x86/intel-iommu.c +++ b/lib/x86/intel-iommu.c @@ -358,8 +358,11 @@ void vtd_init(void)         vtd_dump_init_info();         vtd_gcmd_or(VTD_GCMD_QI); /* Enable QI */ -       vtd_setup_root_table();         vtd_setup_ir_table(); -       vtd_gcmd_or(VTD_GCMD_DMAR); /* Enable DMAR */         vtd_gcmd_or(VTD_GCMD_IR);   /* Enable IR */ + +       if(vtd_readq(DMAR_CAP_REG) & VTD_CAP_SAGAW){ +               vtd_setup_root_table(); +               vtd_gcmd_or(VTD_GCMD_DMAR); /* Enable DMAR */ +       } } diff --git a/lib/x86/intel-iommu.h b/lib/x86/intel-iommu.h index e14f825..193d866 100644 --- a/lib/x86/intel-iommu.h +++ b/lib/x86/intel-iommu.h @@ -100,7 +100,8 @@ #define VTD_CAP_SAGAW_39bit         (0x2ULL << VTD_CAP_SAGAW_SHIFT) /* 48-bit AGAW, 4-level page-table */ #define VTD_CAP_SAGAW_48bit         (0x4ULL << VTD_CAP_SAGAW_SHIFT) -#define VTD_CAP_SAGAW               VTD_CAP_SAGAW_39bit +/* All SAGAW bits */ +#define VTD_CAP_SAGAW               (0x1FULL << VTD_CAP_SAGAW_SHIFT)  /* Both 1G/2M huge pages */ #define VTD_CAP_SLLPS               ((1ULL << 34) | (1ULL << 35)) diff --git a/x86/intel-iommu.c b/x86/intel-iommu.c index 4442fe1..52f252e 100644 --- a/x86/intel-iommu.c +++ b/x86/intel-iommu.c @@ -140,14 +140,20 @@ int main(int argc, char *argv[])         report(vtd_readl(DMAR_FSTS_REG) == 0, "fault status check");         report(vtd_readl(DMAR_GSTS_REG) & VTD_GCMD_QI, "QI enablement"); -       report(vtd_readl(DMAR_GSTS_REG) & VTD_GCMD_ROOT, "DMAR table setup");         report(vtd_readl(DMAR_GSTS_REG) & VTD_GCMD_IR_TABLE, "IR table setup"); -       report(vtd_readl(DMAR_GSTS_REG) & VTD_GCMD_DMAR, "DMAR enablement");         report(vtd_readl(DMAR_GSTS_REG) & VTD_GCMD_IR, "IR enablement"); -       report(vtd_readq(DMAR_CAP_REG) & VTD_CAP_SAGAW, + +       if (vtd_readq(DMAR_CAP_REG) & VTD_CAP_SAGAW) { +               report(vtd_readl(DMAR_GSTS_REG) & VTD_GCMD_ROOT, "DMAR table setup"); +               report(vtd_readl(DMAR_GSTS_REG) & VTD_GCMD_DMAR, "DMAR enablement"); +               report(vtd_readq(DMAR_CAP_REG) & VTD_CAP_SAGAW_39bit,                "DMAR support 39 bits address width"); -       report(vtd_readq(DMAR_CAP_REG) & VTD_CAP_SLLPS, -              "DMAR support huge pages"); +               report(vtd_readq(DMAR_CAP_REG) & VTD_CAP_SLLPS, +                       "DMAR support huge pages"); +       } else { +               printf("DMAR marked as not implemented by machine," +                               " skipping DMAR setup and tests.\n"); +       }         report_prefix_pop(); @@ -160,7 +166,11 @@ int main(int argc, char *argv[])         } else {                 printf("Found EDU device:\n");