From patchwork Thu Jun 9 10:17:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 12875177 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 lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 418E6C433EF for ; Thu, 9 Jun 2022 10:25:44 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.344948.570591 (Exim 4.92) (envelope-from ) id 1nzFM0-0007oC-PZ; Thu, 09 Jun 2022 10:25:28 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 344948.570591; Thu, 09 Jun 2022 10:25:28 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1nzFM0-0007o1-M6; Thu, 09 Jun 2022 10:25:28 +0000 Received: by outflank-mailman (input) for mailman id 344948; Thu, 09 Jun 2022 10:25:27 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1nzFEF-0000Tp-NL for xen-devel@lists.xenproject.org; Thu, 09 Jun 2022 10:17:27 +0000 Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on062a.outbound.protection.outlook.com [2a01:111:f400:fe0e::62a]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 5c263a2f-e7dd-11ec-b605-df0040e90b76; Thu, 09 Jun 2022 12:17:26 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DBBPR04MB6297.eurprd04.prod.outlook.com (2603:10a6:10:cd::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5332.12; Thu, 9 Jun 2022 10:17:25 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b%7]) with mapi id 15.20.5332.013; Thu, 9 Jun 2022 10:17:25 +0000 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 5c263a2f-e7dd-11ec-b605-df0040e90b76 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=e7rHyLtlrpWi5R0XdyzjaEKcOE7LTFYo+BWVNTEciVbNS5hjkWdVxWfmbfCZ+VDfVZ/AISGuXbDP/Z+rdPcWEWAR19TMtH6v/svZ/gecHsnH3/B+j4Ej8eISkL1S7sr44ZsDVYdB+3pV/ZCaoJYPwoCIHFRJFUPK7CawlrgkoE+lwcJ9Kqj31hd+33jRkcIxOQ+jTTVfcsgPuwPVb02F4nuRgcXnejTj7910VWRqNROzFcjqrZrOcMH59s6ZtWByr0dcXDyojJ7JrqHMkCVBCt17hFwHANFoEeAggN9JFXDw30G4kbP7iCoofyTZuyEQLG3pNFzQfLqPgGIiHTnZlQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=g2qWJv01a2c4+rYUCaFJsVUw5bwP3FyDZ7zpU5yOzbI=; b=jHl1LIl4L1BbsWyarVD2X7Od4GSoygFZZHEzJvBwdW1boDqVmjEwpV+j2axBvUcd8/xD2nm8t1uavUJ7LyQuGiKCGOwLjC/uK9C25FMeQK5MjGcrRUn+mn7XQZRKwE1yFoIBJ4twYxQmdxyS/wCBazQP1N0rCwF3R3GUITNWPHj+Xa0u+jHUaxYVlzc4xMim3FwYcNltEV8n0c0ccpTEJveC7MG8trjglMX8vwF1T9NttuUZGg2WerqCL1bAkPzEt5VkPL0T3PGchLPh+b5RF5nhh/iBEC6VUwT0f6bxIBzAVeCYDy1y0IDGPNDu+nDUw4jCuVFQUnKXPWex2VL9cg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=g2qWJv01a2c4+rYUCaFJsVUw5bwP3FyDZ7zpU5yOzbI=; b=rsxK6MCO8GU9dgOs7R/kYyqbOaImxEuTQ5B2Kvd63TNjSrQmObEh5axSxE7RmePJygjT7hei+v/0YLjR4eQ0rILfZvsrYAY5oebEVBcvyfLEdqB8n6ZnxcipYUHkcN4cGwWluk9CgDSmTNSnsYixd+pUGkW5LlPfLLAKTqDGQ+HHUeemK6+fwlvxZkvmD2N2IMdqGT104AhOrSBqs4HPo4j1fgntW1Ke07Asm8scNQ3qQvgvc3qX83WvGWEyAch8h1iwbffNRUctO2vpB3gHSc4z21V/HCrYLxSlfddrleWvzWq5CbYgY0XM5n1bFPAubAVWJP9kLNaXeyNoGtiNdg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <99086452-43a8-2d93-ab4d-0343a0259259@suse.com> Date: Thu, 9 Jun 2022 12:17:23 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 Subject: [PATCH v6 02/12] IOMMU/x86: new command line option to suppress use of superpage mappings Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , =?utf-8?q?Roger_Pau_Monn=C3=A9?= , Wei Liu , Kevin Tian References: In-Reply-To: X-ClientProxiedBy: AM6PR0202CA0061.eurprd02.prod.outlook.com (2603:10a6:20b:3a::38) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0b7d5f78-bdeb-4b7e-a227-08da4a013fb2 X-MS-TrafficTypeDiagnostic: DBBPR04MB6297:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: oEmrcC25lCjyViFTbCFB7piXd1+8puPHZ73LujkTIM6HrlMlBqJvi0FNwFoixdQWqBxatpejFSNUnzM3gXr83oUo1jUXG8e9mvvX3dX2+YwyibN+8zPcoYc0BxFer2n1AKO1rNYC9+Kecpe54T2NNsfoDAN8p1ifrNRpxxQ4qEHUzC4o2e2Hzw0rjxMV1CK+BycksacoBi9KoXv4SahomNSL0k2iIDTSIpwrwInmf3nswRp7pzaBshA79HDVr7n4Y9L+7Q9U4h9xq8d3R5bs6ymOhzsYYLbT4O1x/KlPh1LWBwi9VMGRLIjs8L3HrV96kq4MakmwTTppTjyQm16dMj7RyVvbsJXA0jqt1v9ikKegAZYDHBxmQdaUA2ycn62zwo5v2i72ICYyYzYiKYvraJSQInWO1TVxJfptKi6wtaRYJKOqViZAed1aoPX9L07t81eJbx/dBif4Vwqz0LgLvgkspUbKGRxQQpu1pdNaA/IddTvKWJa6CUgAgV8+7kPW9dYa5haXeVsoVS+AfJsD4q6sKFdzfo1LI+uVZE88D3ZWHbfdrntrUoyr0VkbUYvJxPX1rt+w9F0ZoS35/dtdgh49maAmVGnXp8ErFMyDYpsRZWenpH02L3NSJZRoZWdyT7Jr+AM0KWey+uE1w0BYTrt5t7FKrKI4aAE1KDkXDumCqpeP9oQY81qfeBVGbGxU61orYChIGO1I4Oebq1FN63PMaTIJEfNdhcAMgQSDVDjbNknHMP038EeK+iDL3bAj X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(2616005)(36756003)(83380400001)(31696002)(26005)(31686004)(6512007)(6506007)(2906002)(4326008)(54906003)(8936002)(5660300002)(316002)(6486002)(6916009)(38100700002)(508600001)(86362001)(186003)(66556008)(66476007)(8676002)(66946007)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?GBcyc27EvQ0Vej0UsugSq91fuDEs?= =?utf-8?q?h6RqHO9yoS8Fw7VMdomIPtoaPQk/AuX8+5q2Gdn7Fjp1N6AZY46a1vpKROsEMqRhO?= =?utf-8?q?pU7rZ53TkN372lh2owaR+WRKiyK8/isy3os9wuHE5s454fsq07zucw6pGQFKjhM/T?= =?utf-8?q?izgQDv8VD3VjSkZ68/GW1lUCgz7z0s+gSqiJ4UtuqRQ3Y0CGYHJwQsuUGuorC6QXL?= =?utf-8?q?5Tet2Y5MicgWdDNgW+pZKrLwtIznjJ2Zq3q3wY/vjjFZV5mInX7NZlG8N+ldgyIHL?= =?utf-8?q?VjSPugA/PSdP57SxCYzkYpxJxiQ9Zjc6T0f8JQ/L5/S2S6Bo3+GG+JsS/pMRVjs6g?= =?utf-8?q?RsIAX8meVS3O+JB6ILK/yFcJ8+FutccZcmJaWT2NV6LIn3YEcoB3Y1KWYZx3/pFfT?= =?utf-8?q?H1n+6+A8fN4k3Ni6zDvJV7I08e71/ElnztFZXI82RSleR/mYzPbAc7SbcmZBJMTJE?= =?utf-8?q?i0A4PWrKqvVDWGHH8fgZW3HbCH1Suju0dm3o6lFVVz7BTbDU2E7OQl31mXj0GRLeL?= =?utf-8?q?XbvTwsHoJ+FzSy/cm7FWCjhIMwwTkuZwJcrB6JrVKObv7B8kjMaz5RKk2zM/YEQdt?= =?utf-8?q?J5jGQ0zbttr/Ow+yazPbRAxMV6md5TlTKLZ4HD3tlJbe735lR2uPkg6FhtJ4I1lF0?= =?utf-8?q?PIFlDR7dRYw/tL54JFpS3DWMKHuuvkimjcNH//FCHuNkoZHCUt5jvm22e1MvYqco8?= =?utf-8?q?kfgH1Aw33f3rMfyaFa5NiREKryw/X9M881VMZdrl9UlOf5F9ETFZZJFSzB6Btb/P4?= =?utf-8?q?ddLMjtIzxTT1MhAvEbXZ44hrzQ0gaEEAf0/gei//61rsiQgR8uRyA+kWkl60PVC0J?= =?utf-8?q?ixvrm0hey56l1fhnblGCqGY9HdmBf3jrIDcW8NdkbCMA84TFoa7IRm2ndncl/i9wz?= =?utf-8?q?kGWzmsaXgrEYMwWKpZbwiGu2NZtoReg2dl92l6t8InW//dOcvIfA8bR2ZGNIXKFoX?= =?utf-8?q?jbm7HYBFKb0KuhjVlaVWvkApohd+RMIRrPDbN4jAvcQVuscg2JnK553c+6xbP/e2y?= =?utf-8?q?XjokGqaAxe845Z/nojv+QoPcn8y0I5l1ZpxQ9QRRyq+uuB7p960PYjBABNL3r7c0u?= =?utf-8?q?Pjx8jRtZGPFyaz0R7Axl+NStWEfH6+ifqcYEVt1JezxptWHxJDm2jo6CZtDGKyFlI?= =?utf-8?q?DDrAgtXvr2VBgKI65icYaZPk7JwSnpsbJ9tapLNAcIXn9YNWtntcC8a9niRHysrav?= =?utf-8?q?Izx7h7DifN0MeAsApUazomFZiBXYQeU9MmWmaZWDpFG0UZI0LRFfgBaqKXOulkaWf?= =?utf-8?q?YKR5Yzq/pYN8klayFMkfMb7P5+CekTa0MHAX9g77LpqZ5i9v0+6WMT7B7NuVy7zas?= =?utf-8?q?bx4WAUge62D6OxK1yutDW7gx1QDym0M7C/zB0psnRJPfPbKt/hFsLWJxzRD2ACzVS?= =?utf-8?q?MlXPxJa2n4rqZfQt+s+NpJRb/jVFkHa1It7pXsYd6IAV+OzbnZFzUvYAKq28epY25?= =?utf-8?q?ra0pXvzgQVtLcRUcSyHS+0SOQiUYTSR08amHhxYjV8lwTAtL3+/NlR3XYXQJEGpLt?= =?utf-8?q?DuBi9H2/dCkvtScsMUM8ClaB484pC6Mo7XjvN9tC7nUVgtTThNnXiYUHbzXJjGqjn?= =?utf-8?q?lE/bOpMnWz2yT5RoJd67W6H/MTYuSOJgShkyv8zLHo0GTUmUA0P82ysJN0Ib3NQSP?= =?utf-8?q?twR7sDECO833xtoBkgl0mECdymudCrJg=3D=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0b7d5f78-bdeb-4b7e-a227-08da4a013fb2 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2022 10:17:25.1846 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: yz2dJUtuY39TSqr5sOyPWELuQHHZQ3pI5v2/1N5qV1Nz/GupZVBZR/om0UjH+QDRvwKU5CqpbDaWJ5SaBuN0KA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR04MB6297 Before actually enabling their use, provide a means to suppress it in case of problems. Note that using the option can also affect the sharing of page tables in the VT-d / EPT combination: If EPT would use large page mappings but the option is in effect, page table sharing would be suppressed (to properly fulfill the admin request). Requested-by: Roger Pau Monné Signed-off-by: Jan Beulich --- v6: New. --- a/docs/misc/xen-command-line.pandoc +++ b/docs/misc/xen-command-line.pandoc @@ -1405,7 +1405,7 @@ detection of systems known to misbehave ### iommu = List of [ , verbose, debug, force, required, quarantine[=scratch-page], - sharept, intremap, intpost, crash-disable, + sharept, superpages, intremap, intpost, crash-disable, snoop, qinval, igfx, amd-iommu-perdev-intremap, dom0-{passthrough,strict} ] @@ -1481,6 +1481,12 @@ boolean (e.g. `iommu=no`) can override t This option is ignored on ARM, and the pagetables are always shared. +* The `superpages` boolean controls whether superpage mappings may be used + in IOMMU page tables. If using this option is necessary to fix an issue, + please report a bug. + + This option is only valid on x86. + * The `intremap` boolean controls the Interrupt Remapping sub-feature, and is active by default on compatible hardware. On x86 systems, the first generation of IOMMUs only supported DMA remapping, and Interrupt Remapping --- a/xen/arch/x86/include/asm/iommu.h +++ b/xen/arch/x86/include/asm/iommu.h @@ -132,7 +132,7 @@ extern bool untrusted_msi; int pi_update_irte(const struct pi_desc *pi_desc, const struct pirq *pirq, const uint8_t gvec); -extern bool iommu_non_coherent; +extern bool iommu_non_coherent, iommu_superpages; static inline void iommu_sync_cache(const void *addr, unsigned int size) { --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -88,6 +88,8 @@ static int __init cf_check parse_iommu_p iommu_igfx = val; else if ( (val = parse_boolean("qinval", s, ss)) >= 0 ) iommu_qinval = val; + else if ( (val = parse_boolean("superpages", s, ss)) >= 0 ) + iommu_superpages = val; #endif else if ( (val = parse_boolean("verbose", s, ss)) >= 0 ) iommu_verbose = val; --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -2213,7 +2213,8 @@ static bool __init vtd_ept_page_compatib if ( rdmsr_safe(MSR_IA32_VMX_EPT_VPID_CAP, ept_cap) != 0 ) return false; - return (ept_has_2mb(ept_cap) && opt_hap_2mb) <= cap_sps_2mb(vtd_cap) && + return iommu_superpages && + (ept_has_2mb(ept_cap) && opt_hap_2mb) <= cap_sps_2mb(vtd_cap) && (ept_has_1gb(ept_cap) && opt_hap_1gb) <= cap_sps_1gb(vtd_cap); } --- a/xen/drivers/passthrough/x86/iommu.c +++ b/xen/drivers/passthrough/x86/iommu.c @@ -31,6 +31,7 @@ const struct iommu_init_ops *__initdata iommu_init_ops; struct iommu_ops __ro_after_init iommu_ops; bool __read_mostly iommu_non_coherent; +bool __initdata iommu_superpages = true; enum iommu_intremap __read_mostly iommu_intremap = iommu_intremap_full; @@ -104,8 +105,13 @@ int __init iommu_hardware_setup(void) mask_IO_APIC_setup(ioapic_entries); } + if ( !iommu_superpages ) + iommu_ops.page_sizes &= PAGE_SIZE_4K; + rc = iommu_init_ops->setup(); + ASSERT(iommu_superpages || iommu_ops.page_sizes == PAGE_SIZE_4K); + if ( ioapic_entries ) { restore_IO_APIC_setup(ioapic_entries, rc);