From nobody Tue Apr 30 07:06:11 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1623230829; cv=pass; d=zohomail.com; s=zohoarc; b=N0Il6ubIT07+SPNO40g4xJ8HFcZzh4eKqoqmVWTmhsisHpNaRcoYmzOSCpV1UgEWbsk8J/Q5Njz/hzAAXAb++8tKbv7jOYREcDvV3hczNDIomtYBtfN13HJoXZosEGtAYbRYluBjSV/pLuWdjNp8HofV7Tqaxgugv3FpJJ7/0MI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1623230829; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=JgddFxzuF1jSE6HuT5x1HspbAq09VNpsTBcFaLySK44=; b=BwyPt3zVMhHJzqlkmz5wtRo+c4qseEpX52oIJDAXtKknIkCAX7a27QG+NaHQsHnEgcOK2tNFDQHIFwYxtb7ngxCWLNEQNd6zEfJzxu1qsxBakzPhy+U9vQ8cjilYNt2tXzPNfCKoFSl9jCrmcNBxWlDUdrrWJjTjlLMljXqNY48= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1623230829052626.3977036036283; Wed, 9 Jun 2021 02:27:09 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.139065.257249 (Exim 4.92) (envelope-from ) id 1lquUB-0007F9-Q5; Wed, 09 Jun 2021 09:26:55 +0000 Received: by outflank-mailman (output) from mailman id 139065.257249; Wed, 09 Jun 2021 09:26:55 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lquUB-0007F2-N5; Wed, 09 Jun 2021 09:26:55 +0000 Received: by outflank-mailman (input) for mailman id 139065; Wed, 09 Jun 2021 09:26:55 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lquUB-0007Es-1h for xen-devel@lists.xenproject.org; Wed, 09 Jun 2021 09:26:55 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id e3973676-3e22-4e97-8941-9ae6bfa5acfb; Wed, 09 Jun 2021 09:26:54 +0000 (UTC) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05lp2105.outbound.protection.outlook.com [104.47.18.105]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-8-Kqnb9FPlOEa-vknXKphazg-1; Wed, 09 Jun 2021 11:26:51 +0200 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR0402MB3773.eurprd04.prod.outlook.com (2603:10a6:803:1c::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.21; Wed, 9 Jun 2021 09:26:50 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::f06c:6f5d:34d2:1c36]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::f06c:6f5d:34d2:1c36%5]) with mapi id 15.20.4219.022; Wed, 9 Jun 2021 09:26:50 +0000 Received: from [10.156.60.236] (37.24.206.209) by FR0P281CA0089.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.9 via Frontend Transport; Wed, 9 Jun 2021 09:26:49 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: e3973676-3e22-4e97-8941-9ae6bfa5acfb DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1623230813; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JgddFxzuF1jSE6HuT5x1HspbAq09VNpsTBcFaLySK44=; b=hrj7DZUPG/nIk2OI+0MUVjCIBN5teWTvq4Nc6rcHDd9NTpRAmHhUSMuYXbtQ+qq+WZy3uj oouDHm/r1iRLLP0b8HnBEUcz2xu+QBF8dJxsrh8BHWyGx4Z7AiQ2y/DdgeR3GvSdmRbHcj qMljqHRdqvZUn466Hfm0D+deaz4XHs4= X-MC-Unique: Kqnb9FPlOEa-vknXKphazg-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K87rkpShTseE8d/AZoAhISK7jlOrTXGpo4Yy7Ekt7Q8jSx3B1hDULh0j7ZqVOmZBU5NSJUvsjU+RjW3xk4O7B8zxC6H1cpbWxr2evXxxE7/5GZAqqUSH0RmmnjSd0ARXWh3tc01SZkNmR5AdIdahQoDwMuk7OKNCBJwlS8Xe/6dVo2FpCqfwEQc32K7WBNTr1KiXtKh+WSH7O3cUNcrGxOi36PhMX7mnYto5SDvGsxZR67lraQmV/OwlhYpPAOtjYGMKrDlJf9rBD709MHsWrnnRRMH006JRSGLr351EmqmPiIOgrqtMh3qE1hLa7QgctRxn1PSoB6drxQxIUgM39w== 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-SenderADCheck; bh=JgddFxzuF1jSE6HuT5x1HspbAq09VNpsTBcFaLySK44=; b=geVoSJY9nHs5LLnhLkBpGuWRMqLPolZOZ949NsyjOQPmNSuCKwrGs33hISs1T2BG5LtX9YqvMvC9wui5Ze5D9aFSMb35DaMv/qqD58uXWyMJgCO1eTBDYecDKFFg/63/ztLjXQjIPHh8tDg7C5T79JPeTh1xsQaZWmocdP230jOJuVeOuvdewkOX7tiNwdRKi7JniqXIiveKQ3fhsd53OQ3tENdJ0B4VlO5a+A1hoUcqywUYT6EAGt6Zzul/Ylc4V2uvmSUdEulRsciwAlEl5rKRuJchrJbmVu8xbHpZZmi/aAbXMzCS8CBjrE6+zXpflhkYt1OCbzX+H21Kcx4Vsg== 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 Authentication-Results: citrix.com; dkim=none (message not signed) header.d=none;citrix.com; dmarc=none action=none header.from=suse.com; Subject: [PATCH 1/9] AMD/IOMMU: redo awaiting of command completion From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Paul Durrant , Andrew Cooper References: <03285055-47ff-ab10-ae76-0553f28f136d@suse.com> Message-ID: <1bb49cce-537e-9fba-80bb-82bf502728d0@suse.com> Date: Wed, 9 Jun 2021 11:26:48 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 In-Reply-To: <03285055-47ff-ab10-ae76-0553f28f136d@suse.com> Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Originating-IP: [37.24.206.209] X-ClientProxiedBy: FR0P281CA0089.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1e::11) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 733fc351-2ce0-46e5-2b13-08d92b28b5c7 X-MS-TrafficTypeDiagnostic: VI1PR0402MB3773: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /xL73gIYfIT3ZtoiLLGrm2YEbI0FFMrwQ0fwS0cmfwu9Ltb2RAk1xcBmtQvB1YsdvuXCUl2Jz+nzpEhi2ezjyOrlkAGsxzLfv74aVHK3IIRY2fu7HBZw1Es3P4iKsgQK5Pn+SVTF2P62Tt2BZePiLuRNVe03Ywj5zqqfjdW9hb7GAnyBKRl8SjsKblFKxkkYao2P+uoOxZ79unN8A1DN+pEwE6M36JAQ3LOQ9cA64WQ+uL67U0qPSDHZBQEq1JfWKSZkZgOl4fJZXACPi38KbHzi5ZO1eYzVesCMbIx+WuM1yXi64/jSWKRgqgUYgSHWr9E+KTtZvsJgIiVKIc1v36s6dAbJv5Xx2kebVKB/4U7UoiWpUc702O6YToXDh1H2SxA1wNZLVO+rgHA/YK0SBL7SDF6HAqDpdpS9Sd7J5Ei7AH4CO0VK42VpGgwRNEx1Q0IDAHNywAD9E2hzGRdL3m01Vocmoc4S3EP5qCf/DccAgvWOgSvMrgYmO7Z7FOcPC2Pk09NED3rq0LydHMLPxXxMso7xxN6z2+wMn4aGp0BxKvw+Qc/c2065c+gPK89EKGAi3XA52bG8/C5utsMBYCuP9IZdJKllSnBGBHM2evkDfxzGZwW4q2AsbmDZnKuTo9reRgCrFVboD+Y27WCkFPMv/fXt0lMNP45nmRdiJkBhd6FqwrjmJsHy0u0EL2Hl X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(346002)(366004)(39860400002)(376002)(396003)(4326008)(6916009)(8676002)(83380400001)(6486002)(8936002)(2616005)(956004)(38100700002)(26005)(478600001)(186003)(2906002)(16526019)(5660300002)(31686004)(31696002)(36756003)(316002)(16576012)(66946007)(66476007)(66556008)(86362001)(54906003)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?TjFhdVhYSUtJZndBeDhhMmpiOXNuTHNMV2ZnRktKc01keGVrclZkblF0TndU?= =?utf-8?B?VEw3WXBzWkJodVdsRzdxbTYwWmRydGdzK1NMTEsveS9Jc0t0K2RFaXRyV2pF?= =?utf-8?B?UDUybExMR3NZd1Z3ZS9vMGN3b3prNFpCVnhLSVA4alYvZU1LQThublhmSEVq?= =?utf-8?B?VUhtNGZaYzk2ZElBRGF4VmVXN0R1cjVZSmVScDZKeThPbnJOMjBOZ2pJOE9M?= =?utf-8?B?eWhJUEgyVS9SUEVHdGNqc01SVlBCWTFCVFNKYmpnSFM2L1ZkanpUVGVnRXlK?= =?utf-8?B?cXM2Q1RVM0pPQVh2cmlQM2lIMldabzdxNDhYd2ZEQ01NS0dROGZ1L3VMc01r?= =?utf-8?B?WDQxMk1wRGN6cXlSTFpNUG1PNXIvMXJnZXpsYTdUV0thVG9CTjlTbnh2TjVj?= =?utf-8?B?a0s3V3k3MkVvVmJvR3RNK1owVEZTbCtORkNZRFQwbWRHVFU4OVY0dHdITjFq?= =?utf-8?B?a2ozSlBGcnpoNDd4eHRlaVlMYnZubmxHS3RZc3RFSXI4MVdWTkRDSnlxZTZk?= =?utf-8?B?TXVNQ1hYSTlSdjlsamxianF4M0VJRTFYdWc1RHQ2S0cvSGhWck1EQXZhSmhL?= =?utf-8?B?U2w3VkxXQThoM2lxWXAwdVhWQjVjK25tbjgyY2txTk9DbXBPRUsxT1ZMaXpj?= =?utf-8?B?blZxbDRMYzYwT2NaL2F1eHNIbGVINXI5VjdKRHRGSVA2c2FrbFkvTlY2eXdQ?= =?utf-8?B?eStaRUlaQ3Fnd1krV200c2Z1SUpFd0thMHkxWCs5QzZ3NXgvNWU5N1J3eTR2?= =?utf-8?B?emw2bFRMMzA4YjNoTHJMd252MnRLdXRVMkVvZHlId0VuN2taNEVpdkhrejB4?= =?utf-8?B?MnFKa3dlWVE2cU53T012azNwNmkvMllEWHdCNFV6ZFBML3BONjVpVlk4ZjlO?= =?utf-8?B?a24zVnFrTklScXhVd1laQkRuQmVVTmdrMlFiOVRGS3NzV0g4ZHN6TEZuaSt5?= =?utf-8?B?UWFneUdsS0ZBTVlFKzJoNCtaWTFGekw4TU1hd1N2OU10TzRWZkVINFM1N3Bm?= =?utf-8?B?TzlJV2ljVW1WUG01TjJybzdMdW5rV3VLRDdFR3lVWThyY3A0OE10cnZFQWZk?= =?utf-8?B?TE5uTHZwQXZBK1oxbXd5eUlZelkvem5Ed1h3eE5VMlJ1aFd1cjYwN1BaUkNz?= =?utf-8?B?L2NPZ2VNVEhyajBBWjZSS1pUdkhGWks3WVF1K0VidUxvM0tzYTl1cUFONmdV?= =?utf-8?B?ejJVYzdxemlkMklWQW5Lak9vdTRtUklCTUNiUklTbHdqTlh0a1FQQzN2dWwz?= =?utf-8?B?bGFLcFQvcFZVZnYwek5sR2dJTCtnT1o1UEUxVkx6ZFN1YWs1NC9sT3J5TzZN?= =?utf-8?B?Q1Nodk52T0tLeExnZk1BVjZUYndDeVUwUkJlSnhpc29Vd1lFUVVvcEtURkkv?= =?utf-8?B?emEydWNwOWdnb0JSUjh1d3RET1h4Q0Q4ZDZyZ1FNVVpoRGNQODdUcDRrRE52?= =?utf-8?B?UnZ3MzRteTV1TzVxei9ZNzVuWjJ2TzNTUUpiMFVEazA3RHR3cVJid3BFWnJs?= =?utf-8?B?ZktVaU1hcWo3djBVckdzV0JhcTloVUtqRnFoK0JJOGprM2xFci9mT1o5ZXVi?= =?utf-8?B?dmV6U3V6Zks2YmRnYlJYUFJ6bUF6dTlQdWFDZTI3VkdZTjVDMzU4aW5RbWVm?= =?utf-8?B?dGhvKzBFSmpJQmhHWlNzVjRId2NxTWRVTDlOcWVyRDdybitKUFlnV24zb1F4?= =?utf-8?B?VGpnWlIzN21TQldFWGNvcXFxMFMyWTJycVM5UmxUZy9mVytsRGhLTnBQdE8v?= =?utf-8?Q?fWMxUPvuax8tFgvpS7bSfxPTaNFHyT/hjXMakRS?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 733fc351-2ce0-46e5-2b13-08d92b28b5c7 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2021 09:26:49.9460 (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: yZBRRnERhOgNYRzrsO5m0V184YcbiymbapR4H7QxTcEEybn+fgw0B266ztdIuCT2T6ESaiY9tOFPt4qGVG+8ig== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3773 X-ZohoMail-DKIM: pass (identity @suse.com) Content-Type: text/plain; charset="utf-8" The present abuse of the completion interrupt does not only stand in the way of, down the road, using it for its actual purpose, but also requires holding the IOMMU lock while waiting for command completion, limiting parallelism and keeping interrupts off for non-negligible periods of time. Have the IOMMU do an ordinary memory write instead of signaling an otherwise disabled interrupt (by just updating a status register bit). Signed-off-by: Jan Beulich Reviewed-by: Paul Durrant --- a/xen/drivers/passthrough/amd/iommu_cmd.c +++ b/xen/drivers/passthrough/amd/iommu_cmd.c @@ -20,6 +20,9 @@ #include "iommu.h" #include "../ats.h" =20 +#define CMD_COMPLETION_INIT 0 +#define CMD_COMPLETION_DONE 1 + static void send_iommu_command(struct amd_iommu *iommu, const uint32_t cmd[4]) { @@ -49,28 +52,31 @@ static void send_iommu_command(struct am static void flush_command_buffer(struct amd_iommu *iommu, unsigned int timeout_base) { + static DEFINE_PER_CPU(uint64_t, poll_slot); + uint64_t *this_poll_slot =3D &this_cpu(poll_slot); + paddr_t addr =3D virt_to_maddr(this_poll_slot); uint32_t cmd[4]; s_time_t start, timeout; static unsigned int __read_mostly threshold =3D 1; =20 - /* RW1C 'ComWaitInt' in status register */ - writel(IOMMU_STATUS_COMP_WAIT_INT, - iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET); - - /* send an empty COMPLETION_WAIT command to flush command buffer */ - cmd[3] =3D cmd[2] =3D 0; - set_field_in_reg_u32(IOMMU_CMD_COMPLETION_WAIT, 0, + ACCESS_ONCE(*this_poll_slot) =3D CMD_COMPLETION_INIT; + + /* send a COMPLETION_WAIT command to flush command buffer */ + cmd[0] =3D addr; + set_field_in_reg_u32(IOMMU_CONTROL_ENABLED, cmd[0], + IOMMU_COMP_WAIT_S_FLAG_MASK, + IOMMU_COMP_WAIT_S_FLAG_SHIFT, &cmd[0]); + cmd[1] =3D addr >> 32; + set_field_in_reg_u32(IOMMU_CMD_COMPLETION_WAIT, cmd[1], IOMMU_CMD_OPCODE_MASK, IOMMU_CMD_OPCODE_SHIFT, &cmd[1]); - set_field_in_reg_u32(IOMMU_CONTROL_ENABLED, 0, - IOMMU_COMP_WAIT_I_FLAG_MASK, - IOMMU_COMP_WAIT_I_FLAG_SHIFT, &cmd[0]); + cmd[2] =3D CMD_COMPLETION_DONE; + cmd[3] =3D 0; send_iommu_command(iommu, cmd); =20 start =3D NOW(); timeout =3D start + (timeout_base ?: 100) * MILLISECS(threshold); - while ( !(readl(iommu->mmio_base + IOMMU_STATUS_MMIO_OFFSET) & - IOMMU_STATUS_COMP_WAIT_INT) ) + while ( ACCESS_ONCE(*this_poll_slot) !=3D CMD_COMPLETION_DONE ) { if ( timeout && NOW() > timeout ) { From nobody Tue Apr 30 07:06:11 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1623230860; cv=pass; d=zohomail.com; s=zohoarc; b=L32S+2Fq/p+DUJ3rFlh3gRPmCNBXSn8R7JATLPIye+yU7rrFJpgXhRqwfFnKse9sgC8XucAIuWwagGwkOTiGnIDA6wp2YyBVvUjksZdp/1c5TwJ8HK+udSSq41Mvf7ValOEXSPhMPbLYLqmxKDTJkzOjhX8rHf3gBQtD8m1D5xM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1623230860; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=o6pDydvSJ6LSaglFSBHbIL7y0svRLi1hBmasidhS7XM=; b=BxO9N1VojmGYdQ7ngLMnLxeVDUVvS/kr03VQuC/gi7ThrnxGkFu+Otn+SMr/QzjXcEthZRTMPLBU98JbscGqEhWWXZPgXfcTCNjVvyV/TgzxwNjxz3pNYFCiGVq877zcK4VTZ1C4RA8HK0xNbEHpOpoH8uvBBODn/pJim4/ySa8= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1623230860751805.4998846506043; Wed, 9 Jun 2021 02:27:40 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.139073.257263 (Exim 4.92) (envelope-from ) id 1lquUe-0007tK-7H; Wed, 09 Jun 2021 09:27:24 +0000 Received: by outflank-mailman (output) from mailman id 139073.257263; Wed, 09 Jun 2021 09:27:24 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lquUe-0007tD-4E; Wed, 09 Jun 2021 09:27:24 +0000 Received: by outflank-mailman (input) for mailman id 139073; Wed, 09 Jun 2021 09:27:23 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lquUd-0007rs-Aa for xen-devel@lists.xenproject.org; Wed, 09 Jun 2021 09:27:23 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id d697bdc6-6b13-4efb-973e-78bc85c94891; Wed, 09 Jun 2021 09:27:21 +0000 (UTC) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05lp2110.outbound.protection.outlook.com [104.47.18.110]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-14-XXIDG_zIMJC01qKnpRyo0g-1; Wed, 09 Jun 2021 11:27:19 +0200 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR0401MB2335.eurprd04.prod.outlook.com (2603:10a6:800:2e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.20; Wed, 9 Jun 2021 09:27:17 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::f06c:6f5d:34d2:1c36]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::f06c:6f5d:34d2:1c36%5]) with mapi id 15.20.4219.022; Wed, 9 Jun 2021 09:27:17 +0000 Received: from [10.156.60.236] (37.24.206.209) by AM0PR02CA0022.eurprd02.prod.outlook.com (2603:10a6:208:3e::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.20 via Frontend Transport; Wed, 9 Jun 2021 09:27:17 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: d697bdc6-6b13-4efb-973e-78bc85c94891 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1623230840; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=o6pDydvSJ6LSaglFSBHbIL7y0svRLi1hBmasidhS7XM=; b=M+JFO64yhJ0D+bVcduJ7M98WEJNOb/ylq3eO3dNz28QBskmIbGGjebmyxeV+Rm2AOvQ3p7 ENDttg+sjfjjtMiqJcICHt8I8Fbo6cLyOhAzWmnzA3C4BPRKh3xLH87XeZ6MyODeWLH7Va AamtDELEXP5lcDr0mVt4cK8nD6Y8W2o= X-MC-Unique: XXIDG_zIMJC01qKnpRyo0g-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SPECZzKS4qcd3PSSM/chLBQ+vZ1o77BTCUWbsgSSfjKHnHzEtYY9THlGIgapJS3EKardfMnvrAcPrYqS7QA+FMkzXQ0am+3pntvglxEP6uTZlsK5ND50CjIpX1Q8lJgyBZP1oFr0Ca2X3Tup3xZUJM3sBfi5RKPu5WaVhEu1PPCkLx+ddoUCkdndu5Po4TQyib5p/WEMnM5KF6Qj5DQeZ7lOjqASCAV8Ci1sklS31D2Z9Jse6NGl0jikwvaA51ZhSrXdHiy5h26Gjv9+RXJeg6iDgZaZgeTsB5Ddpnl0qWZiLQiG2yuesK6ap72MsomedFaKq5tdth5NOpSY3TZ0Kw== 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-SenderADCheck; bh=o6pDydvSJ6LSaglFSBHbIL7y0svRLi1hBmasidhS7XM=; b=BK3e/YwlZQE79fZYdzImPZz7x+qkuSuyG5NxQrk0Wv6fHhQHzaK3Usl19NC3LY0QJN/R4ojoTnh0Cwx5PnPK299+0Ctp4muh6mir0s3eveS1gh2tnbs34VdCN8Tzc5CK0r26VdyUZY0H3Lve31EsqZZ9KmLUDepS1rFWrzG4Vp/m+FEApldEh48rD+Ic4Srar00/ZSk6e3kgjKGwddZpvGfGPtGoS5ATB/Hi48+Hkl4gpl7tgL8f8hqF2hQpdLR+4O3oZiyYRk+gqAChjjilPT4LODkFrfE030UYF+EDhKpdQ378s0WfwKICcjtjTVCgAzGwlutHdSyKEKE6lMkTLA== 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 Authentication-Results: citrix.com; dkim=none (message not signed) header.d=none;citrix.com; dmarc=none action=none header.from=suse.com; Subject: [PATCH 2/9] AMD/IOMMU: re-work locking around sending of commands From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Paul Durrant , Andrew Cooper References: <03285055-47ff-ab10-ae76-0553f28f136d@suse.com> Message-ID: Date: Wed, 9 Jun 2021 11:27:15 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 In-Reply-To: <03285055-47ff-ab10-ae76-0553f28f136d@suse.com> Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Originating-IP: [37.24.206.209] X-ClientProxiedBy: AM0PR02CA0022.eurprd02.prod.outlook.com (2603:10a6:208:3e::35) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b77f4cbb-8fd4-4305-ae89-08d92b28c663 X-MS-TrafficTypeDiagnostic: VI1PR0401MB2335: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1107; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0IBo7jrnbd81dzQnjdXfkNReslH/WbRxQYurUFEbtPhwThbl4hWT+fePnzGrYUZdk7Iry2nXgVBFbDlGlEIzRZyIy/Ezovy5t0wgiFijOnttWC+7EPTd3sJrbFDUHzsWtRoxgQJwKzVaBChSg0S9pESvryl/vptXaJKsBQlUzrWSmF+ipSuB1y/YwTtQvA/jt/OzOX++fO1PV9mAjdrO7qMccRDBx9iqCoBsgMs2WhzjnIWWd31oyUfRMnWYHPQI4t+AZ5x5Gu/aORHmXL65qdH9OgvFHtCBFa3OZxeD5BskcP1CtYNVyNJ4lqVjo47TCKnuhgLZRztLFUIjdFS+x3LMrvhfVuKptQ0GbHp5WcKefAH7Tvde0OZHqZXRCvnZ1gBNLla/FAvjC3mOd2MaRfnHXN7rw2lQn+mge4inUYTEkDsOsB1ZFFFvXCl13xYoiIeJVajrPJlsZjiYYa4X6WpfRGUxM/Etnst04iAA1VNp556/4ijQkjFjU3TpodSQl+o6iIyJXLGLqkDQYjUb1DpEk/7W81xOFAzT45ugVxC5y1vhqxtj1Il/TqcSrzGIuBXV0JaDkgyr0/BG6feCrk2vmLSk8ZdEbKNAmDSwuk6UvuUwq8y+RdsjBdgLozDTDLwIwftkkHPMB20IUKY/1pAMiHiZSb++laWp1tTbvNJXiUfNT1K6dneNShKtJ9Cw X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(396003)(376002)(346002)(136003)(39860400002)(6486002)(6916009)(83380400001)(31686004)(478600001)(956004)(2616005)(36756003)(2906002)(8676002)(4326008)(66946007)(8936002)(66476007)(5660300002)(38100700002)(66556008)(86362001)(16576012)(26005)(316002)(16526019)(31696002)(30864003)(186003)(54906003)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?a0RNZ3NaL0gvWkhZUndBUEVqWXBkR2p0ZHRLcFYwMHAweTZDTGE3VzZLNk9I?= =?utf-8?B?VDZ3ZVZmRDhYSnlITU9LTHcxUm85UDhaRDV0cFl2dkcxY0djVzB3M3VaeWw4?= =?utf-8?B?bzBnQVVtSHVISmJlb3lwMDgzeWc1WGFVa09nNE85U3BrMi8zOFVjTWZFb2RE?= =?utf-8?B?R1JTWE1wdWRJL2ZVYlorRENlNFpyV3c5V3ZkNXNjakJqQXkwY2Nvdlk1WkdE?= =?utf-8?B?ajRuWEZkUWFsMzU2R3VyblZQNDc0VVFpMFpudEVEQ0dMVXB2RlBaMGRqNWVT?= =?utf-8?B?bmJ4Q0hNNVRHcW9WeGJDbTB2aVAxcWk0TE5PdHVNdHN1c2dodFpOVHZZYUpn?= =?utf-8?B?akdkUHZuQmJ1VTIySG81d0RKamVVT095ZDN3dEFDYUEwVmVCTWwrckt5a0dU?= =?utf-8?B?dGZJM2tEdnREeUhKMFh2d21qNEZWZktiMkk0c3pmTy9iTzJYbW5qSUFHZlhj?= =?utf-8?B?Y3RKcG1FemVpTXE2cXBiMW9HN3ZvKytOdGNEZGM1QzZjN0hVRzA4ZGVobFBu?= =?utf-8?B?UytSY2Q3aEtaMkNXNWk4OVcwSWwweVdkV1hvRHBGaHE4UmVXTFBLYU1qODBh?= =?utf-8?B?Sjg2SldkODdZSzBNTTlsL3JJQmhCRnpIZVNVaE5RQW0xdjVSZTFSVHFuMHlN?= =?utf-8?B?bXJmZU1pMEd6RjBiNGxHdk9HT3hZWWhZeVB0M1BwS3BEMVdrNW01SnBoTEpE?= =?utf-8?B?Z2FNQmZWczRRVk80OFRLdzF1dlZtbDlHY1Z0c2R1c1lsM2d3NnI5bHM3eU52?= =?utf-8?B?UTBFSnVWbTRNNzVqUlJpZVFlTkxWSnZvSW1idkx0NWM3bVRuMFBjaTlGNksw?= =?utf-8?B?ck5zcDFudzlZZ2gzMWkzclduVmRTRFFHa3NUSEo0TkJRYUlmeUpUcnVET2lv?= =?utf-8?B?b3ZHc2NXM0w2S1FYN2lSNGR6bmpmTkp4UHRHcXp0bTFZcUFMTldaSXJCVWNV?= =?utf-8?B?ZWxnZ1JRK2kyQXdwdFZLb2EwU0Jtem1idUdTZlBOSUx4TWVCdGV5ZlZEWkUv?= =?utf-8?B?V05oZWw5RUFFS2E4alR4MjBwdWZ5c3lRQjFxQTZ5ZFNUZXlLR0NRMlZWekgv?= =?utf-8?B?WE92YkZ6WE9DT1hZS0Z1RGJYL3MzdS9odnRHRlZvMkNlMFAyeVYwWVF0bTE2?= =?utf-8?B?d09GdUlZaEZRRHpSbDBjRkkvYVUyNGNUQWpTVTZ0YzRkVGNiT01USFhaRXdv?= =?utf-8?B?VE1oank5WHNFR3N3SWZIR1pLQU5mOXpGUlNxTVdTcDc1RlFJOEZWTEQrOGxZ?= =?utf-8?B?WWVwSGFMNnAwZTBLNDFFaEJieGJpS0pJa1NxaHg0ZDFOMCtWU3pQUUZTTFRK?= =?utf-8?B?VDVZbGNxU1pmN0dKSS9sRU9KSDZIUldNVklMaGJNaEtUSi9zQjRyOFB5YmdH?= =?utf-8?B?QkJDZXFYVFFIWWFFOEVnMFVSMGVvUGYreGd1d05xMWtlU3phU2VaQ21ESW9M?= =?utf-8?B?TTBWc2hqNEJkVUM1Z0xvLzg5L092L3l4ei8vRWtGSFlQcDMzMTdST3hRMmtH?= =?utf-8?B?VUVQOWNVMG8vRVVTQ2Q5TkF6c0JEcmpjTUV2SW40NXBhY0IyQlAxbTA5OVZL?= =?utf-8?B?eTRXcUV6RjRsSE5GYjNzUmJwZjhDb1MyeFZuN0VmQy92cUVOeHBnVVR3ckVz?= =?utf-8?B?cU9uV2Vpb0syWGtVM1JTY2pGK0xlZU5Layt1ZVp0SjhwVkFIMFdXbUd5RG9E?= =?utf-8?B?Qk1JSzVhSWRHOG9Va2t5VXNzRW8xUVZNcVFaNjYyeGVJVWFLR0F2aHhWQm5C?= =?utf-8?Q?aI5peF6ooaxaoxzsXL/HCC7ueX0GXN/FyWbLJzj?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: b77f4cbb-8fd4-4305-ae89-08d92b28c663 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2021 09:27:17.8102 (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: JA4g1n48cS983orGvAmE29zq2qWCHEawC52CNVMMcBmWDnpPVWofGn88Fwgk0YYeCipnRgH+0jC9Hxh9F+5Cog== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2335 X-ZohoMail-DKIM: pass (identity @suse.com) Content-Type: text/plain; charset="utf-8" It appears unhelpful to me for flush_command_buffer() to block all progress elsewhere for the given IOMMU by holding its lock while waiting for command completion. Unless the lock is already held, acquire it in send_iommu_command(). Release it in all cases in flush_command_buffer(), before actually starting the wait loop. Some of the involved functions did/do get called with the lock already held: For amd_iommu_flush_intremap() we can simply move the locking inside. For amd_iommu_flush_device() and amd_iommu_flush_all_caches() the lock now gets dropped in the course of the function's operation. Where touching function headers anyway, also adjust types used to be better in line with our coding style and, where applicable, the functions' callers. Signed-off-by: Jan Beulich Reviewed-by: Paul Durrant --- v2: Add comments. Adjust parameter types when function headers get touched anyway. --- a/xen/drivers/passthrough/amd/iommu.h +++ b/xen/drivers/passthrough/amd/iommu.h @@ -253,9 +253,10 @@ void amd_iommu_flush_pages(struct domain unsigned int order); void amd_iommu_flush_iotlb(u8 devfn, const struct pci_dev *pdev, uint64_t gaddr, unsigned int order); -void amd_iommu_flush_device(struct amd_iommu *iommu, uint16_t bdf); +void amd_iommu_flush_device(struct amd_iommu *iommu, uint16_t bdf, + unsigned long flags); void amd_iommu_flush_intremap(struct amd_iommu *iommu, uint16_t bdf); -void amd_iommu_flush_all_caches(struct amd_iommu *iommu); +void amd_iommu_flush_all_caches(struct amd_iommu *iommu, unsigned long fla= gs); =20 /* find iommu for bdf */ struct amd_iommu *find_iommu_for_device(int seg, int bdf); --- a/xen/drivers/passthrough/amd/iommu_cmd.c +++ b/xen/drivers/passthrough/amd/iommu_cmd.c @@ -23,11 +23,20 @@ #define CMD_COMPLETION_INIT 0 #define CMD_COMPLETION_DONE 1 =20 +/* + * When @flags is non-NULL, the function will acquire the IOMMU lock, + * transferring lock ownership to the caller. When @flags is NULL, + * the lock is assumed to be already held. + */ static void send_iommu_command(struct amd_iommu *iommu, - const uint32_t cmd[4]) + const uint32_t cmd[4], + unsigned long *flags) { uint32_t tail; =20 + if ( flags ) + spin_lock_irqsave(&iommu->lock, *flags); + tail =3D iommu->cmd_buffer.tail + sizeof(cmd_entry_t); if ( tail =3D=3D iommu->cmd_buffer.size ) tail =3D 0; @@ -49,8 +58,13 @@ static void send_iommu_command(struct am writel(tail, iommu->mmio_base + IOMMU_CMD_BUFFER_TAIL_OFFSET); } =20 +/* + * Callers need to hold the IOMMU lock, which will be released here before + * entering the loop to await command completion. + */ static void flush_command_buffer(struct amd_iommu *iommu, - unsigned int timeout_base) + unsigned int timeout_base, + unsigned long flags) { static DEFINE_PER_CPU(uint64_t, poll_slot); uint64_t *this_poll_slot =3D &this_cpu(poll_slot); @@ -72,7 +86,9 @@ static void flush_command_buffer(struct IOMMU_CMD_OPCODE_SHIFT, &cmd[1]); cmd[2] =3D CMD_COMPLETION_DONE; cmd[3] =3D 0; - send_iommu_command(iommu, cmd); + send_iommu_command(iommu, cmd, NULL); + + spin_unlock_irqrestore(&iommu->lock, flags); =20 start =3D NOW(); timeout =3D start + (timeout_base ?: 100) * MILLISECS(threshold); @@ -99,12 +115,19 @@ static void flush_command_buffer(struct } =20 /* Build low level iommu command messages */ -static void invalidate_iommu_pages(struct amd_iommu *iommu, - u64 io_addr, u16 domain_id, u16 order) + +/* + * The function will acquire the IOMMU lock, via its call to + * send_iommu_command(), and then transfer lock ownership to the caller. + */ +static unsigned long invalidate_iommu_pages(struct amd_iommu *iommu, + daddr_t io_addr, domid_t domai= n_id, + unsigned int order) { u64 addr_lo, addr_hi; u32 cmd[4], entry; int sflag =3D 0, pde =3D 0; + unsigned long flags; =20 ASSERT ( order =3D=3D 0 || order =3D=3D 9 || order =3D=3D 18 ); =20 @@ -152,16 +175,27 @@ static void invalidate_iommu_pages(struc cmd[3] =3D entry; =20 cmd[0] =3D 0; - send_iommu_command(iommu, cmd); + send_iommu_command(iommu, cmd, &flags); + + return flags; } =20 -static void invalidate_iotlb_pages(struct amd_iommu *iommu, - u16 maxpend, u32 pasid, u16 queueid, - u64 io_addr, u16 dev_id, u16 order) +/* + * The function will acquire the IOMMU lock, via its call to + * send_iommu_command(), and then transfer lock ownership to the caller. + */ +static unsigned long invalidate_iotlb_pages(struct amd_iommu *iommu, + unsigned int maxpend, + unsigned int pasid, + unsigned int queueid, + daddr_t io_addr, + unsigned int dev_id, + unsigned int order) { u64 addr_lo, addr_hi; u32 cmd[4], entry; int sflag =3D 0; + unsigned long flags; =20 ASSERT ( order =3D=3D 0 || order =3D=3D 9 || order =3D=3D 18 ); =20 @@ -222,9 +256,12 @@ static void invalidate_iotlb_pages(struc IOMMU_INV_IOTLB_PAGES_ADDR_HIGH_SHIFT, &entry); cmd[3] =3D entry; =20 - send_iommu_command(iommu, cmd); + send_iommu_command(iommu, cmd, &flags); + + return flags; } =20 +/* Callers need to hold the IOMMU lock. */ static void invalidate_dev_table_entry(struct amd_iommu *iommu, u16 device_id) { @@ -241,12 +278,18 @@ static void invalidate_dev_table_entry(s &entry); cmd[1] =3D entry; =20 - send_iommu_command(iommu, cmd); + send_iommu_command(iommu, cmd, NULL); } =20 -static void invalidate_interrupt_table(struct amd_iommu *iommu, u16 device= _id) +/* + * The function will acquire the IOMMU lock, via its call to + * send_iommu_command(), and then transfer lock ownership to the caller. + */ +static unsigned long invalidate_interrupt_table(struct amd_iommu *iommu, + uint16_t device_id) { u32 cmd[4], entry; + unsigned long flags; =20 cmd[3] =3D cmd[2] =3D 0; set_field_in_reg_u32(device_id, 0, @@ -257,9 +300,12 @@ static void invalidate_interrupt_table(s IOMMU_CMD_OPCODE_MASK, IOMMU_CMD_OPCODE_SHIFT, &entry); cmd[1] =3D entry; - send_iommu_command(iommu, cmd); + send_iommu_command(iommu, cmd, &flags); + + return flags; } =20 +/* Callers need to hold the IOMMU lock. */ static void invalidate_iommu_all(struct amd_iommu *iommu) { u32 cmd[4], entry; @@ -271,7 +317,7 @@ static void invalidate_iommu_all(struct &entry); cmd[1] =3D entry; =20 - send_iommu_command(iommu, cmd); + send_iommu_command(iommu, cmd, NULL); } =20 void amd_iommu_flush_iotlb(u8 devfn, const struct pci_dev *pdev, @@ -304,10 +350,9 @@ void amd_iommu_flush_iotlb(u8 devfn, con maxpend =3D pdev->ats.queue_depth & 0xff; =20 /* send INVALIDATE_IOTLB_PAGES command */ - spin_lock_irqsave(&iommu->lock, flags); - invalidate_iotlb_pages(iommu, maxpend, 0, queueid, daddr, req_id, orde= r); - flush_command_buffer(iommu, iommu_dev_iotlb_timeout); - spin_unlock_irqrestore(&iommu->lock, flags); + flags =3D invalidate_iotlb_pages(iommu, maxpend, 0, queueid, daddr, + req_id, order); + flush_command_buffer(iommu, iommu_dev_iotlb_timeout, flags); } =20 static void amd_iommu_flush_all_iotlbs(struct domain *d, daddr_t daddr, @@ -336,15 +381,12 @@ static void _amd_iommu_flush_pages(struc { unsigned long flags; struct amd_iommu *iommu; - unsigned int dom_id =3D d->domain_id; =20 /* send INVALIDATE_IOMMU_PAGES command */ for_each_amd_iommu ( iommu ) { - spin_lock_irqsave(&iommu->lock, flags); - invalidate_iommu_pages(iommu, daddr, dom_id, order); - flush_command_buffer(iommu, 0); - spin_unlock_irqrestore(&iommu->lock, flags); + flags =3D invalidate_iommu_pages(iommu, daddr, d->domain_id, order= ); + flush_command_buffer(iommu, 0, flags); } =20 if ( ats_enabled ) @@ -362,39 +404,44 @@ void amd_iommu_flush_pages(struct domain _amd_iommu_flush_pages(d, __dfn_to_daddr(dfn), order); } =20 -void amd_iommu_flush_device(struct amd_iommu *iommu, uint16_t bdf) +/* + * Callers need to hold the IOMMU lock, which will be released here by + * calling flush_command_buffer(). + */ +void amd_iommu_flush_device(struct amd_iommu *iommu, uint16_t bdf, + unsigned long flags) { ASSERT( spin_is_locked(&iommu->lock) ); =20 invalidate_dev_table_entry(iommu, bdf); - flush_command_buffer(iommu, 0); + flush_command_buffer(iommu, 0, flags); } =20 void amd_iommu_flush_intremap(struct amd_iommu *iommu, uint16_t bdf) { - ASSERT( spin_is_locked(&iommu->lock) ); + unsigned long flags; =20 - invalidate_interrupt_table(iommu, bdf); - flush_command_buffer(iommu, 0); + flags =3D invalidate_interrupt_table(iommu, bdf); + flush_command_buffer(iommu, 0, flags); } =20 -void amd_iommu_flush_all_caches(struct amd_iommu *iommu) +/* + * Callers need to hold the IOMMU lock, which will be released here by + * calling flush_command_buffer(). + */ +void amd_iommu_flush_all_caches(struct amd_iommu *iommu, unsigned long fla= gs) { ASSERT( spin_is_locked(&iommu->lock) ); =20 invalidate_iommu_all(iommu); - flush_command_buffer(iommu, 0); + flush_command_buffer(iommu, 0, flags); } =20 void amd_iommu_send_guest_cmd(struct amd_iommu *iommu, u32 cmd[]) { unsigned long flags; =20 - spin_lock_irqsave(&iommu->lock, flags); - - send_iommu_command(iommu, cmd); + send_iommu_command(iommu, cmd, &flags); /* TBD: Timeout selection may require peeking into cmd[]. */ - flush_command_buffer(iommu, 0); - - spin_unlock_irqrestore(&iommu->lock, flags); + flush_command_buffer(iommu, 0, flags); } --- a/xen/drivers/passthrough/amd/iommu_guest.c +++ b/xen/drivers/passthrough/amd/iommu_guest.c @@ -449,8 +449,7 @@ static int do_invalidate_dte(struct doma spin_lock_irqsave(&iommu->lock, flags); dte_set_gcr3_table(mdte, hdom_id, gcr3_mfn << PAGE_SHIFT, gv, glx); =20 - amd_iommu_flush_device(iommu, req_id); - spin_unlock_irqrestore(&iommu->lock, flags); + amd_iommu_flush_device(iommu, req_id, flags); =20 return 0; } --- a/xen/drivers/passthrough/amd/iommu_init.c +++ b/xen/drivers/passthrough/amd/iommu_init.c @@ -921,13 +921,13 @@ static void enable_iommu(struct amd_iomm =20 set_iommu_translation_control(iommu, IOMMU_CONTROL_ENABLED); =20 - if ( iommu->features.flds.ia_sup ) - amd_iommu_flush_all_caches(iommu); - iommu->enabled =3D 1; =20 + if ( iommu->features.flds.ia_sup ) + amd_iommu_flush_all_caches(iommu, flags); + else out: - spin_unlock_irqrestore(&iommu->lock, flags); + spin_unlock_irqrestore(&iommu->lock, flags); } =20 static void disable_iommu(struct amd_iommu *iommu) @@ -1554,9 +1554,8 @@ static int _invalidate_all_devices( if ( iommu ) { spin_lock_irqsave(&iommu->lock, flags); - amd_iommu_flush_device(iommu, req_id); + amd_iommu_flush_device(iommu, req_id, flags); amd_iommu_flush_intremap(iommu, req_id); - spin_unlock_irqrestore(&iommu->lock, flags); } } =20 --- a/xen/drivers/passthrough/amd/iommu_intr.c +++ b/xen/drivers/passthrough/amd/iommu_intr.c @@ -310,9 +310,7 @@ static int update_intremap_entry_from_io entry.ptr32->flds.remap_en =3D false; spin_unlock(lock); =20 - spin_lock(&iommu->lock); amd_iommu_flush_intremap(iommu, req_id); - spin_unlock(&iommu->lock); =20 spin_lock(lock); } @@ -527,11 +525,9 @@ static int update_intremap_entry_from_ms =20 if ( iommu->enabled ) { - spin_lock_irqsave(&iommu->lock, flags); amd_iommu_flush_intremap(iommu, req_id); if ( alias_id !=3D req_id ) amd_iommu_flush_intremap(iommu, alias_id); - spin_unlock_irqrestore(&iommu->lock, flags); } =20 return 0; @@ -567,11 +563,9 @@ static int update_intremap_entry_from_ms entry.ptr32->flds.remap_en =3D false; spin_unlock(lock); =20 - spin_lock(&iommu->lock); amd_iommu_flush_intremap(iommu, req_id); if ( alias_id !=3D req_id ) amd_iommu_flush_intremap(iommu, alias_id); - spin_unlock(&iommu->lock); =20 spin_lock(lock); } --- a/xen/drivers/passthrough/amd/pci_amd_iommu.c +++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c @@ -129,7 +129,7 @@ static void amd_iommu_setup_domain_devic iommu_has_cap(iommu, PCI_CAP_IOTLB_SHIFT) ) dte->i =3D ats_enabled; =20 - amd_iommu_flush_device(iommu, req_id); + amd_iommu_flush_device(iommu, req_id, flags); =20 AMD_IOMMU_DEBUG("Setup I/O page table: device id =3D %#x, type =3D= %#x, " "root table =3D %#"PRIx64", " @@ -138,8 +138,8 @@ static void amd_iommu_setup_domain_devic page_to_maddr(hd->arch.amd.root_table), domain->domain_id, hd->arch.amd.paging_mode); } - - spin_unlock_irqrestore(&iommu->lock, flags); + else + spin_unlock_irqrestore(&iommu->lock, flags); =20 ASSERT(pcidevs_locked()); =20 @@ -307,14 +307,15 @@ static void amd_iommu_disable_domain_dev smp_wmb(); dte->v =3D true; =20 - amd_iommu_flush_device(iommu, req_id); + amd_iommu_flush_device(iommu, req_id, flags); =20 AMD_IOMMU_DEBUG("Disable: device id =3D %#x, " "domain =3D %d, paging mode =3D %d\n", req_id, domain->domain_id, dom_iommu(domain)->arch.amd.paging_mode); } - spin_unlock_irqrestore(&iommu->lock, flags); + else + spin_unlock_irqrestore(&iommu->lock, flags); =20 ASSERT(pcidevs_locked()); =20 @@ -455,9 +456,7 @@ static int amd_iommu_add_device(u8 devfn iommu->dev_table.buffer + (bdf * IOMMU_DEV_TABLE_ENTRY_SIZE), ivrs_mappings[bdf].intremap_table, iommu, iommu_intremap); =20 - amd_iommu_flush_device(iommu, bdf); - - spin_unlock_irqrestore(&iommu->lock, flags); + amd_iommu_flush_device(iommu, bdf, flags); } =20 amd_iommu_setup_domain_device(pdev->domain, iommu, devfn, pdev); From nobody Tue Apr 30 07:06:11 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1623230883; cv=pass; d=zohomail.com; s=zohoarc; b=SDHGmdlyfeeg3WwRDDb0sPPX6q0DbiQL3mEuF9IY4/GwfK2DRx3Vm6XVSNFATEVzZkVnJcCMt56DMXk53BjsS9SbZXNwJTabmyRK+oKlwfglGeMQPFk4N76zwKsFNCyTKUUQYH23zSRUs9uVy8pDne52Hn9gnFWdv0UK+39Vla8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1623230883; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=cqeP7V5sPiTn4G53r8FVAMkSkYXDA8o5CuxWXa7EIrQ=; b=PZlbb3EOGTNSkHAVKnnWelkxcQFY09cyPgIaKYj9jYwnKrOJmlf/uMWwWy67nVj9o8P8RPdEGmBs5d9UC26koXQuujmuqeOfYgRo9dB5dkcV/aCliSxajIH1m5kQGqBqnOShPz60zAl0fY5Y5A5DtG50YiGz3/cfPhwbnbQCucw= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1623230883074686.4756307577937; Wed, 9 Jun 2021 02:28:03 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.139077.257276 (Exim 4.92) (envelope-from ) id 1lquV4-0008R7-Iv; Wed, 09 Jun 2021 09:27:50 +0000 Received: by outflank-mailman (output) from mailman id 139077.257276; Wed, 09 Jun 2021 09:27:50 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lquV4-0008Qz-DR; Wed, 09 Jun 2021 09:27:50 +0000 Received: by outflank-mailman (input) for mailman id 139077; Wed, 09 Jun 2021 09:27:48 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lquV2-0008Qk-R8 for xen-devel@lists.xenproject.org; Wed, 09 Jun 2021 09:27:48 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 0ed03d5e-0a3e-4932-a0df-f274291f086d; Wed, 09 Jun 2021 09:27:47 +0000 (UTC) Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-am5eur03lp2054.outbound.protection.outlook.com [104.47.8.54]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-12-UvvotrcLPiOp8iylrO5OhA-1; Wed, 09 Jun 2021 11:27:46 +0200 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR0401MB2335.eurprd04.prod.outlook.com (2603:10a6:800:2e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.20; Wed, 9 Jun 2021 09:27:45 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::f06c:6f5d:34d2:1c36]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::f06c:6f5d:34d2:1c36%5]) with mapi id 15.20.4219.022; Wed, 9 Jun 2021 09:27:44 +0000 Received: from [10.156.60.236] (37.24.206.209) by FR2P281CA0020.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.12 via Frontend Transport; Wed, 9 Jun 2021 09:27:43 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 0ed03d5e-0a3e-4932-a0df-f274291f086d DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1623230866; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=cqeP7V5sPiTn4G53r8FVAMkSkYXDA8o5CuxWXa7EIrQ=; b=RR/SPGgQAgt9XF9L9Nzv86jY0gf4LA4HAgW3gerrcO4AQYp4AmnSyqWxWfjwxaiMG6XPXf Y3zfgVV/ZyRXvGWH1s4/yXEyspVyxB3eOxQwvy0/n8Zhz0HEOeSlNpGs+F4PAZhDlwv3m8 Sx4XptOqQhLmSVSEIaOsGpvOrlmMb1U= X-MC-Unique: UvvotrcLPiOp8iylrO5OhA-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iWypa+c5uJfrbEJo1oDv3A8Wa1SR9fY39yXsZJH5OSpK4c4tzHZDBE46GM++M7wi7k1RM+PkYfNPt+QC9bRdWJMxDSDu1pZJLfWGbduNtRwK3wSG+IT2hYJ2QDWNJA3wXMg0vRrO+zPAtWhKHIWxwNq+D+mi7eVOx33gCsK1fo40MdDijww2s1j+F/pWhvLa/ek9DeNp+JqVKQk0MB+AU2X7nuDQPRqmZicuSFX/BBsUt35nmR85EdPSPUMZ8u0EljPlKoAYJHJBNpmMFXeHFO3kRx2L0Ku7yBLHP13kF+gwzWnil9K7ER6fIuCGwFCAgDHvd49B1/Mvhjx1ojVVFQ== 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-SenderADCheck; bh=cqeP7V5sPiTn4G53r8FVAMkSkYXDA8o5CuxWXa7EIrQ=; b=k8Xl99bUmPu/vkXV+Bk4dNWRVUDvDOzzdujYM2IUFG6FYtuFGt/KZLbrnsW61Mtr/2YnfJfFJp9DBE624DW1BJTAm1Fi2TNieVC4Q+Y95/VWeWGs4jh/o+wH4D/6xHKejE6d8sxIT+yCPUDaVCZvYe3Dr5Xu76Yz/2TeXYctdp6sB6Tn7umm1ymLpvd0p9GSaVahzbXhEFNmI6OShm9Ka3cUrQQcPT08fdYVk1/+BSzasSQKzlTgC4+rI67so3+wNg7GKFKAoNCsmFE5OTgghQXnqVcL+g7xZuqLIsQFPzKxZCOnjmawCkRD+zvhvpk3lRwunRTu/UcZHOBErkPu5Q== 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 Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=suse.com; Subject: [PATCH 3/9] VT-d: undo device mappings upon error From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Paul Durrant , Andrew Cooper , Kevin Tian References: <03285055-47ff-ab10-ae76-0553f28f136d@suse.com> Message-ID: Date: Wed, 9 Jun 2021 11:27:37 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 In-Reply-To: <03285055-47ff-ab10-ae76-0553f28f136d@suse.com> Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Originating-IP: [37.24.206.209] X-ClientProxiedBy: FR2P281CA0020.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:14::7) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7def0a65-ef3d-431d-f3a4-08d92b28d62e X-MS-TrafficTypeDiagnostic: VI1PR0401MB2335: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4941; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XMMBxkHU0TM1Z32AdotnvmPfTWnx3j0UbFg4j/DH0WCeQ5XLECKwVsZy5tWe566s2cExxMfUjBEdvanbBpLQsGhUnT7o3P4r6r6uK0EY444k428uj/wSBoWt/gqqwPzrsql8Dlf7okKZfmxPdbrzl5FsqJQ0gVYtWRGllalSiwrgn2N6O/0t8CcGso/8wrdd+OWcbkVoxb+yv5toi1Pfpku22ApBWhaK3q5ujdSScvyyOuqDqKy3V5P9cOtiiXcWLhrszUt6UkNXmnx4lFtYLYf1v7BkWLaRyd3ifOeqNreV9avVkbqfqFgBy33rif+Q/pCb+Ygldm+eg5RWATK9XtApa5MHn8XO5g/ZIn9c5s8ebbJagqiuPIZAIMaJVoe04QXFF3lkaTILvbocj7sCyfP/Ozeaf02kjHJKbrn3n6spZaxgyvwKsqbf5L3bwyDM3kHxVXSxFFWWlEV2xXWk6ACbTTnUEfeyNpG+XLTU3UT4W3zQlWdOc/X0/sfD/mPCfVgXsM0KCrmGiv5Uxwnpg+r7W5HZjTxgWS8ZFV7MpfScj/pfFXJJQ3atyDQPSiEPI94OFlvTLxzk3+l9lemyjNHHL/2dwfpxW3tc5HUY3HxbU3PrPij2ogTKDPJYCjRlTipVBTjXykWtkbIxXrLlSkeuA28kQTQoq4USF+ylSqRTWMgHG2BerMAZeZlpEo+9 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(396003)(376002)(346002)(136003)(39860400002)(6486002)(6916009)(83380400001)(31686004)(478600001)(956004)(2616005)(36756003)(2906002)(8676002)(4326008)(66946007)(8936002)(66476007)(5660300002)(38100700002)(66556008)(86362001)(16576012)(26005)(316002)(16526019)(31696002)(6666004)(186003)(54906003)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?ZWNTdS9vKy80WkhnVGtrellsc0QvVTEvRTJuQTlxSjdFQ3RMc2VKbHlKZThY?= =?utf-8?B?ZTRMZkZQUFRseElldnBqajFMajZNS0VIN20wVXRDTit5UnFKbFYzOXIxamp3?= =?utf-8?B?SisxMVptOHlETWViN21ibkl5T1RaMWhDM0x3YTFBRTh6QmlFZzdpMWtFc0dZ?= =?utf-8?B?VU16Y3NrMGFPTzVJUmFsd3B6Y3JXSTlheWYxUTZQZFUxa2owa09QYmU4dmhG?= =?utf-8?B?am5RcnhiV2hINGxiZmloQkt3RU81a1k1SlcxWUdSbS84N3dSZ0dtVUtZaHd5?= =?utf-8?B?a1NwKzNCQTgxQUpBOHEva2UvclBJUjdnRjJSb1Q0TU90bEROYXVwUUVJbmtG?= =?utf-8?B?UllxZjNmNHIxL3BmaFJObUpKbUZ5bndEZFBUaUJ2VUZkZEdKUTBZN1VPUXdj?= =?utf-8?B?akxHclFtU3hRR0pqNjlGcElvSzVwbWx3dnkra2lwcTVlUUdidm42cS84TTh6?= =?utf-8?B?V2U1eTZuOTQxdjdpMXg4OTNlMUZPSWx3THlmZzhQakVlOGhHMTFaNzUreEcz?= =?utf-8?B?QjU2ZXFrYlBTbHRoem1uSHhxS1Z1K2t6dmg0eldyZHd1bkMya09sSVNUWXdq?= =?utf-8?B?Tkt1SUowT2VjVGJ0WEZvWDhTd3RTc1RXbEFNaS84a2VWQU9ydkNJL1NTalRL?= =?utf-8?B?N1doZlQwVkpYR1QzL211Mk94allzSVYzMC9nR0RxalF6SDhOWWRSY3c1V243?= =?utf-8?B?U3M0T2RwUWpnamlwbjJMQmNSTWt3ZDF2aXhWSVdYRDVRVVMxT2hkMEtVRzFx?= =?utf-8?B?L2lTUkVINnRlMkR4WnYrYkh0RkhBSFZFVjF1QmtSV3BFWjZnWnhodjg1ZVhC?= =?utf-8?B?T1JZNmtoQjBJTFkvVUJQQlBJNmovbXFySlRIRCtoMWdVVVlMVzBjQ0t6dElR?= =?utf-8?B?QlFNNDdEb3dxS0NYRFZvT1lja09LeWJweHdKVlJtS0psbVZOK1BqQTVpUDAw?= =?utf-8?B?YnY2bGhnSjhYbWZmSTg2TUZWSWhDcE41eTljRUdSZjlWbURyVTI2R21SUXYr?= =?utf-8?B?UlZTVU5jOHo1bUVDaTRzdmEwQW56NDFkeHZjTFRiUE1yUzFYSTMva0hrcEQy?= =?utf-8?B?SjA3WUJvNVFoVjZqYkpzd2JHRmdOdTFDeWRIMllINmdDeVV3dlpLcVpKaldB?= =?utf-8?B?dWI4UEMrWER4VnE5aEFHQzR1ZGwzVERkZEYwU2tpOGdSMFhDdk5tYkUwRVBm?= =?utf-8?B?emtOclM0NkJtdUVaZGJwZXR4SUZJVEMzTzNuVExlRS9ZVjdzRm55Q2wvU1Ny?= =?utf-8?B?MmV6cHUrbFp1Y0xtY0hxTFIzcldJcmhVMm1kOEhUTnhQZkpyN0daQmpCQS9W?= =?utf-8?B?UjdpUGFqQ0g4cDFNdktJamV2aVphZ1R5VnY5dVNxdnp1dmYrRmp4Mmc2ZUZo?= =?utf-8?B?SFlwT2Z6UmdFR0Ixek15UG9CblZiclBYZW1YdEJTRTlsNXFLczRzRFFEY1BB?= =?utf-8?B?SmFVZjNtcnM2MXhrdThaejRCNmhtcUVFdnVYKzNnV0d3NGtZQVlseWdlWURU?= =?utf-8?B?MFNueVRpM0Y0dTJONHkyb05WL2l1bHRDRldUaVVqWUp0MzNudWVOUnVyZUV5?= =?utf-8?B?Nlpwd3VWZ3dBU01aVHVQUEhRV3NndUxnSTRyS1hqY3ZaQXlUUGhMVWllU3lm?= =?utf-8?B?cFIvcitwYUFsOFVtbUsxMWtic0VEZUVOMmpuQkhxWlJvcjllK01rdExtRlg4?= =?utf-8?B?U0wyZzBGMHRTSDZIUmpkQmpoYVNuNndFQXBKL0hEVTJWeWNtb29TSjVXQXEx?= =?utf-8?Q?gjSUI4QHic7u/72TaGWjhJOlDeNCGtxMYYZflsZ?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7def0a65-ef3d-431d-f3a4-08d92b28d62e X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2021 09:27:44.2932 (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: VNGgCepyb4rKoLMW5iFXijfValxv5Rc+vICQGkbgtt3zgY1GBh1mE28q8ITQ6IpxkNwJSH0PUXuiXqd5dbxhGg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2335 X-ZohoMail-DKIM: pass (identity @suse.com) Content-Type: text/plain; charset="utf-8" When - flushes (supposedly not possible anymore after XSA-373), - secondary mappings for legacy PCI devices behind bridges, - secondary mappings for chipset quirks, or - find_upstream_bridge() invocations fail, the successfully established device mappings should not be left around. Further, when (parts of) unmapping fail, simply returning an error is typically not enough. Crash the domain instead in such cases, arranging for domain cleanup to continue in a best effort manner despite such failures. Finally make domain_context_unmap()'s error behavior consistent in the legacy PCI device case: Don't bail from the function in one special case, but always just exit the switch statement. Signed-off-by: Jan Beulich Reviewed-by: Paul Durrant Reviewed-by: Kevin Tian --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -1442,9 +1442,15 @@ int domain_context_mapping_one( if ( !seg && !rc ) rc =3D me_wifi_quirk(domain, bus, devfn, MAP_ME_PHANTOM_FUNC); =20 + if ( rc ) + domain_context_unmap_one(domain, iommu, bus, devfn); + return rc; } =20 +static int domain_context_unmap(struct domain *d, uint8_t devfn, + struct pci_dev *pdev); + static int domain_context_mapping(struct domain *domain, u8 devfn, struct pci_dev *pdev) { @@ -1505,16 +1511,21 @@ static int domain_context_mapping(struct if ( ret ) break; =20 - if ( find_upstream_bridge(seg, &bus, &devfn, &secbus) < 1 ) - break; + if ( (ret =3D find_upstream_bridge(seg, &bus, &devfn, &secbus)) < = 1 ) + { + if ( !ret ) + break; + ret =3D -ENXIO; + } =20 /* * Mapping a bridge should, if anything, pass the struct pci_dev of * that bridge. Since bridges don't normally get assigned to guest= s, * their owner would be the wrong one. Pass NULL instead. */ - ret =3D domain_context_mapping_one(domain, drhd->iommu, bus, devfn, - NULL); + if ( ret >=3D 0 ) + ret =3D domain_context_mapping_one(domain, drhd->iommu, bus, d= evfn, + NULL); =20 /* * Devices behind PCIe-to-PCI/PCIx bridge may generate different @@ -1531,6 +1542,9 @@ static int domain_context_mapping(struct ret =3D domain_context_mapping_one(domain, drhd->iommu, secbus= , 0, NULL); =20 + if ( ret ) + domain_context_unmap(domain, devfn, pdev); + break; =20 default: @@ -1609,6 +1623,19 @@ int domain_context_unmap_one( if ( !iommu->drhd->segment && !rc ) rc =3D me_wifi_quirk(domain, bus, devfn, UNMAP_ME_PHANTOM_FUNC); =20 + if ( rc && !is_hardware_domain(domain) && domain !=3D dom_io ) + { + if ( domain->is_dying ) + { + printk(XENLOG_ERR "%pd: error %d unmapping %04x:%02x:%02x.%u\n= ", + domain, rc, iommu->drhd->segment, bus, + PCI_SLOT(devfn), PCI_FUNC(devfn)); + rc =3D 0; /* Make upper layers continue in a best effort manne= r. */ + } + else + domain_crash(domain); + } + return rc; } =20 @@ -1661,17 +1688,29 @@ static int domain_context_unmap(struct d =20 tmp_bus =3D bus; tmp_devfn =3D devfn; - if ( find_upstream_bridge(seg, &tmp_bus, &tmp_devfn, &secbus) < 1 ) + if ( (ret =3D find_upstream_bridge(seg, &tmp_bus, &tmp_devfn, + &secbus)) < 1 ) + { + if ( ret ) + { + ret =3D -ENXIO; + if ( !domain->is_dying && + !is_hardware_domain(domain) && domain !=3D dom_io ) + { + domain_crash(domain); + /* Make upper layers continue in a best effort manner.= */ + ret =3D 0; + } + } break; + } =20 /* PCIe to PCI/PCIx bridge */ if ( pdev_type(seg, tmp_bus, tmp_devfn) =3D=3D DEV_TYPE_PCIe2PCI_B= RIDGE ) { ret =3D domain_context_unmap_one(domain, iommu, tmp_bus, tmp_d= evfn); - if ( ret ) - return ret; - - ret =3D domain_context_unmap_one(domain, iommu, secbus, 0); + if ( !ret ) + ret =3D domain_context_unmap_one(domain, iommu, secbus, 0); } else /* Legacy PCI bridge */ ret =3D domain_context_unmap_one(domain, iommu, tmp_bus, tmp_d= evfn); From nobody Tue Apr 30 07:06:11 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1623230909; cv=pass; d=zohomail.com; s=zohoarc; b=P3i73dPsw35v616ROjfb3BuaGRdeKfdmRi1rcLY7Ujcj9Rngk5BrBvFdmBb6aumIftKaDHAc2sF1N/YgBkIRKeJ1EFAlYQcJwbn6xTJUnsPr8/KFiJEdBVkbLsPVp499fccpN1QjcgH+GWhEVSdJV/X+Ai1d5rb8ONzU7QWawGc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1623230909; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=mANegH+ahRiJ8qcgWzaWhVXVsUaVgtH5xHgoOdjJtEU=; b=AjnVRJ9LOfCvLDAIXj3lSYZhsSQgvbhtIWDoDyswBMpNO7PZaFrmH+vzCsexJuqXbhwdN7BZyHEfHLo84sB3/Iyxl9MkH+zeNppCBqOOx/E5q36qy1tJ9SAd7Xa2aSjRMft3mcvw8GqDtnMHwG83tWYu5ATpnRullMW3jGYBGEI= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 162323090905070.78480991476408; Wed, 9 Jun 2021 02:28:29 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.139086.257288 (Exim 4.92) (envelope-from ) id 1lquVU-0000fa-V3; Wed, 09 Jun 2021 09:28:16 +0000 Received: by outflank-mailman (output) from mailman id 139086.257288; Wed, 09 Jun 2021 09:28:16 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lquVU-0000fT-Rs; Wed, 09 Jun 2021 09:28:16 +0000 Received: by outflank-mailman (input) for mailman id 139086; Wed, 09 Jun 2021 09:28:15 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lquVT-0000Q5-Ix for xen-devel@lists.xenproject.org; Wed, 09 Jun 2021 09:28:15 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id c343e9ff-0e8a-4e9f-b23b-3b508e18ced6; Wed, 09 Jun 2021 09:28:09 +0000 (UTC) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05lp2111.outbound.protection.outlook.com [104.47.17.111]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-40-1qUaJkRgN0yKtsxnkFY_YQ-1; Wed, 09 Jun 2021 11:28:07 +0200 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR04MB4845.eurprd04.prod.outlook.com (2603:10a6:803:51::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.21; Wed, 9 Jun 2021 09:28:05 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::f06c:6f5d:34d2:1c36]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::f06c:6f5d:34d2:1c36%5]) with mapi id 15.20.4219.022; Wed, 9 Jun 2021 09:28:05 +0000 Received: from [10.156.60.236] (37.24.206.209) by AM4PR0101CA0078.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::46) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.20 via Frontend Transport; Wed, 9 Jun 2021 09:28:05 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: c343e9ff-0e8a-4e9f-b23b-3b508e18ced6 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1623230888; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mANegH+ahRiJ8qcgWzaWhVXVsUaVgtH5xHgoOdjJtEU=; b=d4vkRo+sAQabZqK6NS1OiuFmLas71JcdTbkDiFVeLDituUsgZmgdZoDQ12EbOx9vUgUQs3 /8Vf7TNAr8IwYVFp0cDc4zwNw2lW0FKNCKuDjhXnjzbf/6Cbc90BQrJ5V0kMbxpSXhyDwC 9EIyUYpFhqmh3tjUkisv6erx+8AH75Q= X-MC-Unique: 1qUaJkRgN0yKtsxnkFY_YQ-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cWXoUqqU1ASNj3QxKBMfrOmehvEGHmmIWefTp8hInHTtpet7ZWsjr55FiSdpKsWieUFuf9IrmXLGmekNOnxLJAQBwMpmJLe7R6TuYr+D0Whi5pTrvnnUtAeGFvzcr4ss9mEEVnz+Ig5W3RkFdtvGnh84BIUn6sJlUPdw43qCOR/OoL+8Rn+cftXfz3DOoBlIDTzWT2lDmlPKX8DqVYnQTUcvc/THz6hUisxN8SiY/IikfIwDXMgQYHlXAoaR/4Vj4IuL2Z1IuLUSJ1viL6oPh7IkPtSKvyrvhWNO21EN/ix4MODavYFKMnlSToDyTU9f+ympwppBg0uVz7aYG0CnQQ== 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-SenderADCheck; bh=mANegH+ahRiJ8qcgWzaWhVXVsUaVgtH5xHgoOdjJtEU=; b=nTgcUPHSxx1aujN/DSE/kSsDGv8qtbo3VxRKkif1L5GRZcKbHlrQrA8/rr1ii9TogTgdXIGqBhGEb6OvRjZdBhXa21H0UE/kGuotTKwHSdxpTPZSwCa6WQNKOpsU29Wc3h6s6uOfJAX+vLlMgKcFTxwhRV9F6NtqPW1U1MmJndh5B7Bfs28r05rXd8+JlqQd0x8C/z7TDFNVRP7oeSQwzvEpX1Rr7/wVCJSgg9Eat9AsbIHVPYuum3TyUEdj2vd/CVWKmIKr1dNkVr/obyHL7yIvLypCff+K4cq33ayoGYJ8MxCyQMmUF2ynCZZV08xYVi5tMRAoJrUg1KBE8cNHww== 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 Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=suse.com; Subject: [PATCH 4/9] VT-d: adjust domid map updating when unmapping context From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Paul Durrant , Andrew Cooper , Kevin Tian References: <03285055-47ff-ab10-ae76-0553f28f136d@suse.com> Message-ID: Date: Wed, 9 Jun 2021 11:28:03 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 In-Reply-To: <03285055-47ff-ab10-ae76-0553f28f136d@suse.com> Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Originating-IP: [37.24.206.209] X-ClientProxiedBy: AM4PR0101CA0078.eurprd01.prod.exchangelabs.com (2603:10a6:200:41::46) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 862e2902-a531-4e21-16a9-08d92b28e2cd X-MS-TrafficTypeDiagnostic: VI1PR04MB4845: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: wJB3rfqD93rkArIx6w47OGzy+pLaykv1quFMUv/tAVTjalCwGmrPSSdt8IWB5ltip+4ysLyLNkb8qSkYDnOzETYKAKSIzxcERHeUumZDUfNre5u5cXoCHfsCM3RhMzKdWLTZLL/H+a/uwok+mzWk0RhgqqyqtCagTmaYJ2a8n3AgS4QHqiAqlwO4llWZHxTAqOo7tB79r2FOB5wYn0U3SffLFc76pvOCj/XeZ/QqtbeZZJzBzZlXGEP+W/sOoYsEq6euMQU/iC9BDx6Zvrrm3GpRFm0e6TabeiU4C5PLTWz8jNm6ic3NqMx/PSfPI3Xj7nOu3FAwZcUTgk/LqnSi/soOSEFlJIchTDa2r3aKZsBzCUu+krrKUwz3KAQY1rn2Urnr5e38LckreKycWWUSUMAOtp4kEsna1vHGsI9iEZIXVCj9pAII1OuMD8zIcNRTg9MLe3q6me67Em8xpXk9tmhy/RYKLVFkVtjjWe7xwOBPbtstw9dmueRf9NeLAsalUsLbEJ6xOH7gn3YOFtiyGXgOS1sTrIq99IeovsiVkY+tRZszBF1fR3PvRg07gGglUlQvTS/rXWdVyRafrN2NAvcJcuafKgWb9gU3FoPRvfsI3K8upnaFJvfNn6QTCwzWq8auHanaaLyblLk3imZsHw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(366004)(396003)(39860400002)(376002)(346002)(316002)(478600001)(86362001)(8676002)(38100700002)(83380400001)(16526019)(26005)(186003)(36756003)(956004)(4326008)(2616005)(8936002)(5660300002)(6486002)(31696002)(6916009)(2906002)(66946007)(54906003)(31686004)(16576012)(66556008)(66476007)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?cUR5T2toMDZxZU9xVEJscW5raW1yUERyZFFSaG9rTFdscXZQYjNjOFI4ZnBa?= =?utf-8?B?b2JCN2trNU1KcGlud2Nxd2pmMHNUM3ZCYkdjb0NncXZZQ3lRTFlZeDFuUWMr?= =?utf-8?B?YXFWMjZ3MEFwaGVZWWtyZlFPQ3oyMVV0cWNqN2VrQ2FEOTVPRm11ejVHTFgx?= =?utf-8?B?ck1JYW9NcS9hdHN1VFdaakdKVytoUExwcjBHb2VCdTB4aXIwVFZjYXFVbGJx?= =?utf-8?B?anlLMU9pQXdhSU9QZG15Yzd5YWlmYWFTeWJwZUp6SlVoN002Zi9IT0tXamNO?= =?utf-8?B?NHpMbTJkVWtNZUVuMGxqbENHQWZSWHkyVURiM0ppeVRwRkh4UjFmbmpiM0VH?= =?utf-8?B?YU9JczZFSHQ5YVFWUnJQSjd5dXZSMkFOc00vdUROUFBhVStKVlFjbGxraWFI?= =?utf-8?B?cjlLZ3lJN0lqcVpFQjNta3lLcE1FMFZuVVVVOE9GWnZ0UzB5ZUdPMnZiQXhq?= =?utf-8?B?R0JobDVGamQ5cUxGK3ZTUytNOU41dW02OG8xdEZBNjFkbnB3cld3RWpZazRX?= =?utf-8?B?ZVh4dlpFZ0JoZXNhNmhrSHBFRnlTc2ZQcXBoTXpDZFdYUndOcDFRZUpOMjVW?= =?utf-8?B?R1dnZmZOd0drQ1Y3QnhhdnJOMXhyU2ozcWtsOGFMTEtCdGxUYUhzSlhiRnBL?= =?utf-8?B?ZE9iR3NXSDZ0RXBBQXI1eFJkVlFEdmVIcHBYOFVIdEVUeUVZVzZGU3lMK2hr?= =?utf-8?B?Q052UHN4dlFOYUplMkZiT3A3R1VySkNmWjUwWlNQUHVmS0NKalI3Tm9lT1Nl?= =?utf-8?B?bjdpdDkzbU9kYmt4M05SZFNQN2I4V2lFczN5T1VuVmo1MTAzZzhGYkFoMEtn?= =?utf-8?B?bkJOSzBDTlFoaEJNQmV6c2hxMXMxeTNGU0NpVWFITXlLK2tNdkVpUUNVRWFz?= =?utf-8?B?NXBqV0pOQStoc3JvVTNwZlVPc3BIOWlEa3RDaTVLQ0h6MEdrMDBTQTkrYTc0?= =?utf-8?B?Q1g0VW9vUVh3UHMrb2grMXFkQSswQnc3ZWh4ZEM1dFpLNFJCc0d1bDNUZU4y?= =?utf-8?B?S3VwTCtjOTNHQitGbkNHUUg1TmVrVTYwSnpHWTZiakJDRHZuWloyZVh3VU44?= =?utf-8?B?L3MwVnI2QTJWNFQ5cFNzZ0hwY1luMzZWQ1dlREpINTV5SnFXd3dBNTZaZ1J2?= =?utf-8?B?QnlvdkhHTzQ0aGttK1lnSHpoQldwRE9ySFc2QjFjRW1yN3lEWG5PbHl4dk8v?= =?utf-8?B?QU5wRTYyb284UkFoKzNzbVJ4T2dMVm1JRjNSWEFYUXpGQkk1UFE0V21jbmNq?= =?utf-8?B?VmhmQ0lodGxSWjdmOFNYMkFYb0NCV2FGaDhHYWh6KzNVb1pUUS9HMXFmUC9S?= =?utf-8?B?U1Flb1lTQU02b0tiaERqaHZrYy9Wb1RKZ0J1alExaS9mWUZZZ3VQZ2JPUDdu?= =?utf-8?B?N2YrR1pxdEM0bDd0NU1xNHhRTGNNdlk0NGtTUGZqRk9EODFsM2lod1VKaUVU?= =?utf-8?B?TFJtRi9aLzYzbWtzNXo5MlRrM0J5VWFuTEhZUElqbS9RMHp3bllMb2p6S1NH?= =?utf-8?B?QmpKWWFDa2o0aHEzVENQcEp1aXZkNTZ2cWMvTHNacUNnbHJQd2dTZ1FLUVo2?= =?utf-8?B?cXByWDJKRU5aK01CaitmQjhFQ3VhYVoyM2VZWUlxSnppS2RSOStrTmNNNWdV?= =?utf-8?B?U01KNUJjZGxTVnU1cFhPRkF0TVJJYTR2SXhPaVZoQTRuVG1iUlZabkZJTWdB?= =?utf-8?B?dzF3MkVDMlRTYWpiRG8yT3FrQ1BMOFFSNXhJVVZFZy9teTgwYzVNWHFaKzlz?= =?utf-8?Q?azTlMkIayyTESo4HNPWnuO42LshTfYoPq834VES?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 862e2902-a531-4e21-16a9-08d92b28e2cd X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2021 09:28:05.5002 (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: ZSrSppcoRmVLvYDhZT3JZdzcdZdWHRVbO0wNdl3lYgbs1jMd7FwNOGnJqW9vKxzTHFnXG/+RSyHiwTv1u5gS1A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4845 X-ZohoMail-DKIM: pass (identity @suse.com) Content-Type: text/plain; charset="utf-8" When an earlier error occurred, cleaning up the domid mapping data is wrong, as references likely still exist. The only exception to this is when the actual unmapping worked, but some flush failed (supposedly impossible after XSA-373). The guest will get crashed in such a case though, so add fallback cleanup to domain destruction to cover this case. This in turn makes it desirable to silence the dprintk() in domain_iommu_domid(). Note that no error will be returned anymore when the lookup fails - in the common case lookup failure would already have caused domain_context_unmap_one() to fail, yet even from a more general perspective it doesn't look right to fail domain_context_unmap() in such a case when this was the last device, but not when any earlier unmap was otherwise successful. Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -80,9 +80,11 @@ static int domain_iommu_domid(struct dom i =3D find_next_bit(iommu->domid_bitmap, nr_dom, i+1); } =20 - dprintk(XENLOG_ERR VTDPREFIX, - "Cannot get valid iommu domid: domid=3D%d iommu->index=3D%d\n", - d->domain_id, iommu->index); + if ( !d->is_dying ) + dprintk(XENLOG_ERR VTDPREFIX, + "Cannot get valid iommu %u domid: %pd\n", + iommu->index, d); + return -1; } =20 @@ -147,6 +149,17 @@ static int context_get_domain_id(struct return domid; } =20 +static void cleanup_domid_map(struct domain *domain, struct vtd_iommu *iom= mu) +{ + int iommu_domid =3D domain_iommu_domid(domain, iommu); + + if ( iommu_domid >=3D 0 ) + { + clear_bit(iommu_domid, iommu->domid_bitmap); + iommu->domid_map[iommu_domid] =3D 0; + } +} + static void sync_cache(const void *addr, unsigned int size) { static unsigned long clflush_size =3D 0; @@ -1724,6 +1737,9 @@ static int domain_context_unmap(struct d goto out; } =20 + if ( ret ) + goto out; + /* * if no other devices under the same iommu owned by this domain, * clear iommu in iommu_bitmap and clear domain_id in domid_bitmp @@ -1743,19 +1759,8 @@ static int domain_context_unmap(struct d =20 if ( found =3D=3D 0 ) { - int iommu_domid; - clear_bit(iommu->index, &dom_iommu(domain)->arch.vtd.iommu_bitmap); - - iommu_domid =3D domain_iommu_domid(domain, iommu); - if ( iommu_domid =3D=3D -1 ) - { - ret =3D -EINVAL; - goto out; - } - - clear_bit(iommu_domid, iommu->domid_bitmap); - iommu->domid_map[iommu_domid] =3D 0; + cleanup_domid_map(domain, iommu); } =20 out: @@ -1775,6 +1780,7 @@ static void iommu_domain_teardown(struct { struct domain_iommu *hd =3D dom_iommu(d); struct mapped_rmrr *mrmrr, *tmp; + const struct acpi_drhd_unit *drhd; =20 if ( list_empty(&acpi_drhd_units) ) return; @@ -1786,6 +1792,9 @@ static void iommu_domain_teardown(struct } =20 ASSERT(!hd->arch.vtd.pgd_maddr); + + for_each_drhd_unit ( drhd ) + cleanup_domid_map(d, drhd->iommu); } =20 static int __must_check intel_iommu_map_page(struct domain *d, dfn_t dfn, From nobody Tue Apr 30 07:06:11 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1623230941; cv=pass; d=zohomail.com; s=zohoarc; b=Da0MQz8RrMCYQt5W+6CWqdN0iFkMnEghysLP61vh432NJUaAJqKRXX/5ZwWF9rF9djY+spa3JfFQGRqTPdDVUz7Iw9Y9KZzfVcgeB8tdu4V7l6EdjLD2sqg6YapGtCskQMTFOHwRS6HS+aHLOSP3DsA1PIiHvs6BOoSuN/FLqzQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1623230941; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=txVdk0hVPwWU6U7vm39WYjxerByLtrHY/Ueo8afMxSA=; b=mriibnp82684BLb/Mqp/ZtSgF+/TrmNFSCe3eNRWGFA4MhhDIv4sEdfyPcAZ5OxJFfwpRmXDOfYuRzSD8sboU7bxI6yYYBR94DXkeZzpyBtJL5aSh0lkUBqoD0hDdQoG63fZCW3Z3uaE2kfQdnYjQRSzfN6pp2QuuBUz9cnmluU= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1623230941142339.4754590849967; Wed, 9 Jun 2021 02:29:01 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.139091.257300 (Exim 4.92) (envelope-from ) id 1lquW1-0001IR-8J; Wed, 09 Jun 2021 09:28:49 +0000 Received: by outflank-mailman (output) from mailman id 139091.257300; Wed, 09 Jun 2021 09:28:49 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lquW1-0001II-5C; Wed, 09 Jun 2021 09:28:49 +0000 Received: by outflank-mailman (input) for mailman id 139091; Wed, 09 Jun 2021 09:28:48 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lquW0-0001Hq-4O for xen-devel@lists.xenproject.org; Wed, 09 Jun 2021 09:28:48 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id b6efa68c-0834-4d93-98d6-0b6d94b75f3b; Wed, 09 Jun 2021 09:28:47 +0000 (UTC) Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-am5eur03lp2050.outbound.protection.outlook.com [104.47.8.50]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-29-bvIlS6VoPZi8lL9dURHfSA-1; Wed, 09 Jun 2021 11:28:45 +0200 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR0401MB2335.eurprd04.prod.outlook.com (2603:10a6:800:2e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.20; Wed, 9 Jun 2021 09:28:44 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::f06c:6f5d:34d2:1c36]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::f06c:6f5d:34d2:1c36%5]) with mapi id 15.20.4219.022; Wed, 9 Jun 2021 09:28:44 +0000 Received: from [10.156.60.236] (37.24.206.209) by PR3P189CA0004.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:52::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.20 via Frontend Transport; Wed, 9 Jun 2021 09:28:43 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: b6efa68c-0834-4d93-98d6-0b6d94b75f3b DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1623230926; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=txVdk0hVPwWU6U7vm39WYjxerByLtrHY/Ueo8afMxSA=; b=gYH1iwYocVb6ckhUnMKF8HR0/TCqsX0aoYEOcE4WabtBTdwey4I8RAPjCL3dh+nAN2Hhqf 5GJ7CqWLCl+/vAO+bAenKBdOLFvutEe9svevQ5ksvzR1jWaa5zlaUvkjShmM8Fdvru9+Si R+51xps3X1usXjtJvMjkJsX+9EXKzAE= X-MC-Unique: bvIlS6VoPZi8lL9dURHfSA-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BalcyRP884+twz+aBkZDTFM82Kvyjxi04FtYerzBBokUf/wzgZA6KQCL7f2FOe+zkebvQ2debhJiPA/kQgVM82O+QaNFMQUbHRJ/+uskSJ2M1W/Ig8J/RTTsLIncu75x3tW5YO/sxuhGClm2q+uKAcncPwwe6kIpxVw8+6hqL3doAeeDOwfGYvKcuO+/+vI9jVgi/pihgPjdWe6hb8uJ48crTGskNgyNNeRPekCkh/nsFkbFk9QJaLAC84T95QJgTMA3x7V5SH0c+Z7j9oSArEgC0t+ixabtHB81b2EnUmYbtAg4fwVEGEjHgkXR1cTKbfAIsIzt6e8uEfV+npk8dQ== 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-SenderADCheck; bh=txVdk0hVPwWU6U7vm39WYjxerByLtrHY/Ueo8afMxSA=; b=MkleqzeUjE2JJiIKTstSyHNy4+I0hczL9XH9MQ6j5jlyIUuGly5BJaaWOXtk30F7p6uiRbhoM5CfrS4a5nt8R50E4IkSNANdGOkFGP6Rbb3xyAPUQ8UyFwkPhAJtm4xmYEvadw5p6JX4tr8e3c6w2NJIjcH/5/P6ZvDd/SsknjGDtHc6eOlX42MDGCtV3tKq2+7rVmoRZiP1b+vW1pipIjBoGjy4AN/Z+HcNweGlj1J4iTuLQ5aBp3VNj+2p+izGclAS+HhRdQLwcaS/nOeGPMeTcfE0DptgtS/A9SCOFZ1pE8BwfmdaIO6M5GgNxwNpDT+NFgHYrHqEJiM/vubhvQ== 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 Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=suse.com; Subject: [PATCH 5/9] VT-d: clear_fault_bits() should clear all fault bits From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Paul Durrant , Andrew Cooper , Kevin Tian References: <03285055-47ff-ab10-ae76-0553f28f136d@suse.com> Message-ID: Date: Wed, 9 Jun 2021 11:28:42 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 In-Reply-To: <03285055-47ff-ab10-ae76-0553f28f136d@suse.com> Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Originating-IP: [37.24.206.209] X-ClientProxiedBy: PR3P189CA0004.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:52::9) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 62062e91-acae-4b28-1f80-08d92b28f9e5 X-MS-TrafficTypeDiagnostic: VI1PR0401MB2335: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1388; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6rMtZJP2nkCTW6Dkar5gUUaKr4vGyp0pIPzA3CxA40dyVW+P0c017KwvOpavyZlC83KqZVKGCcEwW6ER/nGmte7pBXD7xbHVqZldyIJasZuKUjZjKnu/PLyNCoxqTVh6ryoXWQZuuPrKkB/2QbQxUggOHFhxA0H6iGtw4KJY1+MHyO2/kAXpVWUp+Dt/uJECkTCzXtU96c7zkmAHvCJM2E//mBkQTNOTIkjfSZ6FEUJG51vyzrVgqR+Ki+6EUlluAVOgJKbGu7TOGbxEwa8rwYHY+xkIjDuA3Tu9lahcm8AONTBtsh9ZRvJwgn+ewtUMVoINyb22Qokzhe8RW+PzaU9mWB7pIEmfT3+/F7sfg3HrrYo7UzqzQSEaoh/OAuBLa3gIXG5NC4wMc6CzMD1c4XFLZwMvtgIcwSczBCfcmd7begJcZTnvrV3X1izgZ7U1V7Pms9rQXdzJXgTqQ10W6XIS7QavjlGEOTtpiEg4uSSO8FvPpA5a4T3JJZmV2wAo0Kq3b3iWtQZ6LnVTXhc/NHJ5brYG6dL95RuWb3flan3vRs276v+UEIlA1/4Ux61QBgEU/poxopnPNBgfQ1SRxjQudVImW62v6IbHXRGiBEanx+4Y2p5cs6dzvXq2EvBXO4Kiw2tNJsQWLqrnmRhbF5+0oji0V131qgLNU6LnKkVOY0jrVjltUYXRM3aFldS5 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(396003)(376002)(346002)(136003)(39860400002)(6486002)(6916009)(83380400001)(31686004)(478600001)(956004)(2616005)(36756003)(2906002)(8676002)(4326008)(66946007)(8936002)(66476007)(5660300002)(38100700002)(66556008)(86362001)(16576012)(26005)(316002)(16526019)(31696002)(186003)(54906003)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?c3Qrb1BabEFDQmxuZnd3TXE5UGN2Q2h4azd3RTRIck5mbzhaUFpoUnhnQkpt?= =?utf-8?B?MWFYckVVUHRCbHJoL3RQbWZVa3N3NjNDSm56OFdDVEE5eDhqam9PdXdOb3Ev?= =?utf-8?B?QTRlY2M1eE1Fa2FwVTJLUDBhZmZmMTI1ZUxnV3A4MzJHSDkwbEoxbkV5bVZI?= =?utf-8?B?Y1pRRXhjb25YUEFEQTlLMDhqZjdiLy9xZ0FxSWJDVE5XZm1NWWlSSUxzYURn?= =?utf-8?B?a2FHSXp0N2RxYlhiSXUyVGYyZEl0WnFERnM5a1BIV2Z0QS83Z05JS25PMDlU?= =?utf-8?B?NnMzdVFNL1Nkblc4QWZoWWVuY0tNMU9EbllkYTZpUHk5c3o5YkVLUjZCNlh5?= =?utf-8?B?ZlFkUDJZd3N2M3lMZHFYTklYRXQ3SVBiZWFxRklBQXVjWU96ZktuNmNUT3Ur?= =?utf-8?B?TkFUcVVWSTVZakdmVnFmMVBUS0xjaXBRQ0l3d2lkL2krYjhTNWlFTjBRSGVz?= =?utf-8?B?eEg4ZVg5ektKV0ZtYlpLUndJS2g1ZmJPT0p4RkdpWlBnWDlLb1Y0QWpjallQ?= =?utf-8?B?Q2FJU0xML0hNRjAzT0VsUFg4cFFQQXlMaXU1RFNQbUp4TnBVcVorVEpNWEpF?= =?utf-8?B?aUVKRkNERktNQXZuQlZQYWZTVnNHd1BQS1RTcERQTkJCWE1jV3RKM3Y4WWZR?= =?utf-8?B?ZlFOSEU5NjVEdytoRWNBcGpReTB5Szl4OU5KZndMOTRKN215a1NsSTZqZGox?= =?utf-8?B?UjJZVEQrbUQ3RnZDbGlFdVdXbVQvRGIwQW5kZzBmci9ObExNd1Bod0Z4WDJW?= =?utf-8?B?TG5vZUk0U1NlbDROR2RCZ2FwME5TbTkyaGROUjlrWEJZem4rdjJXNytsMmti?= =?utf-8?B?MDNIZmtzcFRhVEViRHM5ZVhNWW4yWHdqVW56b0pJM0ZaRGdHbXRKVERnMnNJ?= =?utf-8?B?TUVVc3UrZElZbUR4NkJNWWlBY0dtWHB4QmRoWGsyQkhRZEFhdHhhVGRyWnpF?= =?utf-8?B?eG1ENERtWFNKSUJWRmJmTlpKSXNGd1RkRkViRDZXbFphcUpGRHhac2c1Um8r?= =?utf-8?B?WE5iM1JCVjMwM1ljT0VUdk5YaFF0T2xjVDRPMjluU0p3ZU9OdXoyYTlPTHg4?= =?utf-8?B?ZDJZMXVBU0Frdlh4WlMyQ0tVRWNFZGJNbkpBNklDQzkraXFQTnFOQ09XRit4?= =?utf-8?B?SFpBazVBeXRxd3B5VXQ5bUdCTjJMSTZKZWdGTW9IeDBWZDZuU201bW5TSjU5?= =?utf-8?B?cXB3M2tCTXhWbFBzWS8yd1pEVWN4SzBoSzZwY0F4R0QyWlpFdmlwYnFtMCtM?= =?utf-8?B?VC93UTRPaUZaMTlvTGlwaTRMSHJ6YktnZGkyMzcrODZJWGY2RkZDK2pVQUlS?= =?utf-8?B?eVg3Ull3b0lidFRtRUxnYkVrQ29SallIeitMVUhHY04rdzVZMHg2Q1N6M0Nu?= =?utf-8?B?MFZPdmtVNUxkWU1NSUNnTnpYU1E2SXFOd0V3ZmJoenFuLyszRjFuamRpcStt?= =?utf-8?B?RVR1eklFMW9rcmtVdzZiby8yRDhJU0tRYzAvUWxmclRBMzI5OHBmZ3c2SFdl?= =?utf-8?B?dndOS05SVFV4aE1CNFBiaWtDam50ZTQrcUxhdSttc3NweURZUHpqSjFZdDly?= =?utf-8?B?c0xybkRXSHBVSisyWXhqNytLRlA1STQvUE1pOHM0eGt3WEtqK0k3TytENk1J?= =?utf-8?B?TDhScmFQWVBSSnBjRnl1MW10L2FDN2Q4ZFRTWi9keU5pRFNRWklDbkRXRXMw?= =?utf-8?B?dWVRU1gvRHo2Q1hhV1l5MHZjaGRyR1dDWXhISC84UW5KSUVsbGpxZW0zd3cw?= =?utf-8?Q?ogzZYuE+X+1Ro/BuDQgQzdtguDOZ/jHPFWI3ojO?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 62062e91-acae-4b28-1f80-08d92b28f9e5 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2021 09:28:44.2184 (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: bhsu9ev4SkKUXklHtRkbO91+z63MR0SjE73zBq+wUtS55yaLjUnwapLKbffEGW63c3XOQEzzo9+Q78tNbdPT1w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2335 X-ZohoMail-DKIM: pass (identity @suse.com) Content-Type: text/plain; charset="utf-8" If there is any way for one fault to be left set in the recording registers, there's no reason there couldn't also be multiple ones. If PPF set set (being the OR or all F fields), simply loop over the entire range of fault recording registers, clearing F everywhere. Since PPF is a r/o bit, also remove it from DMA_FSTS_FAULTS (arguably the constant's name is ambiguous as well). Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -2094,13 +2094,23 @@ static int __hwdom_init setup_hwdom_devi =20 void clear_fault_bits(struct vtd_iommu *iommu) { - u64 val; unsigned long flags; =20 spin_lock_irqsave(&iommu->register_lock, flags); - val =3D dmar_readq(iommu->reg, cap_fault_reg_offset(iommu->cap) + 8); - dmar_writeq(iommu->reg, cap_fault_reg_offset(iommu->cap) + 8, val); + + if ( dmar_readl(iommu->reg, DMAR_FSTS_REG) & DMA_FSTS_PPF ) + { + unsigned int reg =3D cap_fault_reg_offset(iommu->cap); + unsigned int end =3D reg + cap_num_fault_regs(iommu->cap); + + do { + dmar_writel(iommu->reg, reg + 12, DMA_FRCD_F); + reg +=3D PRIMARY_FAULT_REG_LEN; + } while ( reg < end ); + } + dmar_writel(iommu->reg, DMAR_FSTS_REG, DMA_FSTS_FAULTS); + spin_unlock_irqrestore(&iommu->register_lock, flags); } =20 --- a/xen/drivers/passthrough/vtd/iommu.h +++ b/xen/drivers/passthrough/vtd/iommu.h @@ -174,9 +174,8 @@ #define DMA_FSTS_IQE (1u << 4) #define DMA_FSTS_ICE (1u << 5) #define DMA_FSTS_ITE (1u << 6) -#define DMA_FSTS_FAULTS (DMA_FSTS_PFO | DMA_FSTS_PPF | DMA_FSTS_AFO | \ - DMA_FSTS_APF | DMA_FSTS_IQE | DMA_FSTS_ICE | \ - DMA_FSTS_ITE) +#define DMA_FSTS_FAULTS (DMA_FSTS_PFO | DMA_FSTS_AFO | DMA_FSTS_APF | \ + DMA_FSTS_IQE | DMA_FSTS_ICE | DMA_FSTS_ITE) #define dma_fsts_fault_record_index(s) (((s) >> 8) & 0xff) =20 /* FRCD_REG, 32 bits access */ From nobody Tue Apr 30 07:06:11 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1623230961; cv=pass; d=zohomail.com; s=zohoarc; b=PS0mq/o2DgK9onb3kMIhg7Ie/Vq8ku8EF6LntbtBgqTc1uL7HA1jjA9QPzn4zp65dGcko2Y9w/T2qKsS/lRU33yunHrmYWpBapkFbHp526RcukWB4wK2h7HzTxme0qfVAtJjKK6lIEs0KJg0IU/dT1FP+f39IERcL65Hzg3tt+A= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1623230961; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=OdIIKv781vcvaB9/e0X5fG6O/EkokaPYCef67sSMkIA=; b=K82ZMPTLq33epWDnFdehNe/JidtScvuyNobMbHhSyTuy5Vt/suuPzgfW+vXzYla806CTjDF+IRnsq4Q+hF/e9NY40V5JPUHQWI2LHqqJ3EkgEdtWZPe8DU/PlUAscIGxjlZvS89lxKojjYQc5QSsuuW/sb4FxX+UJA54r739YQ0= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1623230961388331.70546260090305; Wed, 9 Jun 2021 02:29:21 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.139096.257312 (Exim 4.92) (envelope-from ) id 1lquWM-0001sd-IG; Wed, 09 Jun 2021 09:29:10 +0000 Received: by outflank-mailman (output) from mailman id 139096.257312; Wed, 09 Jun 2021 09:29:10 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lquWM-0001sW-EZ; Wed, 09 Jun 2021 09:29:10 +0000 Received: by outflank-mailman (input) for mailman id 139096; Wed, 09 Jun 2021 09:29:09 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lquWL-0001qN-D3 for xen-devel@lists.xenproject.org; Wed, 09 Jun 2021 09:29:09 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 2a0b0085-7e88-4b03-8904-56600271e260; Wed, 09 Jun 2021 09:29:08 +0000 (UTC) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05lp2109.outbound.protection.outlook.com [104.47.17.109]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-25-O5LBzrL5M6WxY_Bt2DdAcw-1; Wed, 09 Jun 2021 11:29:06 +0200 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR04MB4845.eurprd04.prod.outlook.com (2603:10a6:803:51::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.21; Wed, 9 Jun 2021 09:29:05 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::f06c:6f5d:34d2:1c36]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::f06c:6f5d:34d2:1c36%5]) with mapi id 15.20.4219.022; Wed, 9 Jun 2021 09:29:05 +0000 Received: from [10.156.60.236] (37.24.206.209) by AM0PR04CA0017.eurprd04.prod.outlook.com (2603:10a6:208:122::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.20 via Frontend Transport; Wed, 9 Jun 2021 09:29:04 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 2a0b0085-7e88-4b03-8904-56600271e260 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1623230947; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=OdIIKv781vcvaB9/e0X5fG6O/EkokaPYCef67sSMkIA=; b=SlIl0W7Fv60Q0n3DONFgABQKY8ULsGwD8rTN3mJK6zTN+5yk6CN1Yk2QA0b0nxJCNcJGa4 87U9sEgC0nN+GcXtspa19iZUGQu3fF+RrAYvZx+ApZ+l/cME/VZ1WTYQGbrLiB8giI3dxt ZP5f8aiXxuLjJfCn3vkP/KYFT2e/iOs= X-MC-Unique: O5LBzrL5M6WxY_Bt2DdAcw-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VDPfesniEpPeHlNwJRDkUoJG4vN6INT1kyxXqXEtAxpalMdF9/xwV2rq74v7SHoXFvSDGzO+NajZW66pvl2O7TbUldWfb/S17fgg/cNP1hJKIJ6ads433n3N4kJvk7DNDZVzqft4IZ+BV2PPOzFS/JmIhPAzz0W2Yda9WnWvpSrnx1MrwDnk/0ctUV0HnENLk8H5y5VQ5yU9g59kveAow+BfNEr03BKu2GmZanF1n369qDvc5ZnVQO9UUDq+HkdoVcMSTsUjxGdMWeECpWTM98hraK+4Z2Yc2y/BDcj93RbxBL5YaOgjyXsGDif1THtRM2dnghuFAE6U8n13obI17w== 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-SenderADCheck; bh=OdIIKv781vcvaB9/e0X5fG6O/EkokaPYCef67sSMkIA=; b=GgBX3XSsNOhx1FdUSpzcf1dWzYNzEuIUZdK+KjlmhOvbGLlpmtByq0wDWOVKKtaQONijhAwFgU0bsOwTFtN0AB2ThM77dZmB8dpkqeYaAPawcCgD3Hl5uXxABQ3CQQYxZy6M2jj+v5m4h4+Bc5OrXCahMwL/UVB0K6EZMCwdpv3BvOCXU53hj0bKm5RWCcDmmY/2OIiwR6GIb/39x3X+bonhVScDovoHDdBDJcTVnzYWLkYoMuLcBHW/QymXb7D4lRpsor/zopQHWnIEvBG0z8TTWVLt/NCEJaTSdo+amQP+hHxulgtiIMdaaqQqBfgK/4G5Ceb0HUwlO2i/mltlhQ== 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 Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=suse.com; Subject: [PATCH 6/9] VT-d: don't lose errors when flushing TLBs on multiple IOMMUs From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Paul Durrant , Andrew Cooper , Kevin Tian References: <03285055-47ff-ab10-ae76-0553f28f136d@suse.com> Message-ID: <8a4f355e-c381-412c-8949-061851d0f7e2@suse.com> Date: Wed, 9 Jun 2021 11:29:03 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 In-Reply-To: <03285055-47ff-ab10-ae76-0553f28f136d@suse.com> Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Originating-IP: [37.24.206.209] X-ClientProxiedBy: AM0PR04CA0017.eurprd04.prod.outlook.com (2603:10a6:208:122::30) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2ab675b8-f533-4885-19a4-08d92b290673 X-MS-TrafficTypeDiagnostic: VI1PR04MB4845: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7691; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: clgvOzyeGfAea+7RLH4EaBGyO4g11cgn6cP4AQUSQ7k5MRUmMglndIcfeOA5jvDEhm2hIOu1Q8cdWfpoDTajL7bVeN1FNo/bngwvP/9W3k3uGssEWKuGMjs/FWISYcGgjC35a0fue0B60R5tzJSvcPc+Ke5T/ukXyTuqrFP3xFBZLo/ddZZUKUztYHyK+0w6HG5PDNyeFUVQV0NuATfmDKNWDpZLu1eqA+rrvsBSbSyh+tqsqeDN54fNeRDO9Nomp3Myw8mgcNCttwVL0TXiZMZa6bbJOEYTfC/P+vL5FySJ5en84abUtMQ4gvwJT1ksOqOk/SdBgYjBQgqUu874Va3IQevl1P6hJOFYTJftXa1BCmDrwAcm6V6qa0kOXM28yCgki1aOOuiMF1z9xz697RDjf37DOf+XfuGvgGp2yItqnrHjMqBMglXPPJuh3BG3ehxCGZVr/pQXpPxDIol02zR6dEx/ExybZoy/YcXpgE5+HYo5Yu00Qp76KaduKXlVP7vhfapx6T7DGduV8MXXzflKREvanIx3lzyge8ABpmzgdTDjHiO3iljCcH8rE/5pbMHJIp0jyypQVkIki4Y/82nBXDeWDzfjlOfc/8JPiYDe+KxEh6ESLPLdPhRNOBigVG7NGUtOEZXspLxLX3owusuHxyqERFnW/7SHBqfS1FHDKL9kOAY+fObZ7O/VXi7Q X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(366004)(396003)(39860400002)(376002)(346002)(316002)(478600001)(86362001)(8676002)(38100700002)(83380400001)(16526019)(26005)(186003)(36756003)(956004)(4326008)(2616005)(8936002)(5660300002)(6486002)(31696002)(6916009)(2906002)(66946007)(54906003)(31686004)(16576012)(66556008)(66476007)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?QXIwR0pQL2FXKzBMZDFsMmJacERwODhuSHdKSG16QXZSdVdhU3p2TVBQbERR?= =?utf-8?B?RzJaamsxbjVscDBOZ0FVdDE1ZS9rTE5pOGN1Ym5wS1V2a2ZrV0FrY3l2UU9Z?= =?utf-8?B?TTBMM1RTSWxqNlNYT0ExbzVYc2l4bjF5WmpqTlRPMC9lWFFiNmVXOG01UE5D?= =?utf-8?B?eEE1Z0Fza2RKWnI5NTJoUEluYmdyRG9IdXEzU09XMHdNa3V1YXM4RDZRU0Ft?= =?utf-8?B?OHh4UFo4N01vb0xUaDdGVUJROHV4RWdZWDNHWkVKNVd5Z3B2dHVWSWlDNHJk?= =?utf-8?B?UUFLN0FINTc5ektnN0FzYlgzVjkvYTNLWGdIN21COW9vUWpjbnR6a1ZsYWRa?= =?utf-8?B?dm11d2UrdTVvUFpwZ3BzTGxaQ2p4NFFsQ1lzZ3NuU2d3aUlCdllvWTVKMk9R?= =?utf-8?B?VkNHcjBDV0tGTHVScEd3M3lQM2w5S2ZRbEpNdWRHUXhFUjZCcXBscWc2TVV4?= =?utf-8?B?OEpFcmRQeUo0SUJaSHcwM0FmRlhRZzZXS3gzaExuRTdLS1NKeVY4aThIRll3?= =?utf-8?B?QjVOdkJpR1VDa2NlNUR5QVh3aUdGR0VVOVlPUkpiY2VNQ0xFeUtSdmlYNjhw?= =?utf-8?B?bHlNdlBnSkRDZXR5VTZXYW1KeEF2R2xMVGVWK1JMYmJiSUs3ZU9qK3o2M1hu?= =?utf-8?B?UlR3Yk1lSTZqTzBudFdKOGVDMjBDMWo1VGg1cXQzZGV4bC9aZjZPY1JQYUR6?= =?utf-8?B?UXpPdm1qZ01EVE1ESVhXS2l3d2RJdm90Vmo2dWtWS0FqeVZMeU1vR25ISHFH?= =?utf-8?B?cFNxc1hjd29ETVRSV21FdjIyMVlvZ0tJVDFSa2RJL0Vzem80ZVFSK25sbVYw?= =?utf-8?B?eTIxYWNTeDkyeExTSnRoZldZaDhnZHRFN3c2L3M3VVVkOG1JaXVnVm9oYTZX?= =?utf-8?B?TW5PV2RGSEJaRFViNHMvcHFPSWVpWWtzOW5OTDhpZW1UQ1g1VWZZblorTTEr?= =?utf-8?B?QXFuZ2MraG1RN0pCQzNFY29DUndOZ2JBRXIyYkduY21FeFlnU1VRT0h6RlV6?= =?utf-8?B?d0t6TjE5ZUVwc3Y0TVc2dzdhN0haekFJZmJDREcrU2paZDNMRk5hTHo0VXJH?= =?utf-8?B?TVp1b1JKaEVjZ29rdmtWUThUUTdvcjQxZzlEV0dmanhKdHZ4Ymp5RjFldVRK?= =?utf-8?B?SksvYmFGakFKWnNqSEY4WmFVbDhvaFFQTjhGYXdiT090TWViTEh1U3VXcjRP?= =?utf-8?B?VmtSUEMxYTNGdHROYUlCK1FIVWFqbFFKSi9tZ3VXVCtjOHhJMTVhQ2Q3UVN3?= =?utf-8?B?Q0ZGKzdFblRkaUlrTm1wSjZ6bDM1M2k1OW12YmFaK0p3d0JnOEhCWHp3OWRv?= =?utf-8?B?cllTYUQ2aGdZMnkxUE1DT2tMRk5SdUxWeFBmRC9XWHMzL1duQ0hYMzluT0dE?= =?utf-8?B?UG5xeUp1UkN6NXNHN0h4d0RSOEtIQ01TejRmY2xGM1NHUStDNlZsSTdaSXhC?= =?utf-8?B?aVZxSDJTWXJuZHZBekVqWTJ0M1VyYWVGRFZsOHk4eWJLaHV3aGNRc096N0dn?= =?utf-8?B?dVF2SDhEMkZiOHUvZGlvMnJMd2NYOEVvOCtSQ0EyeHpqVWxoczdIRVptTXFL?= =?utf-8?B?V0RSV2gzRnZHYmY5SFhxR28vRFN5S3pTeEJaWVNVVXJ4RXNlalYxeDBIZ3ll?= =?utf-8?B?Y1N2Q0RUWWc5VCt6WFNZMTVaYmtLSmVFVVM1SW9sdkZ2cnBkeXVqSVd6U2RW?= =?utf-8?B?eEZrT2Z4RzZyOWhKRDRUT0JWTmRRRTY5VEdaWjZHZEJlTEVCQ1JiVHZyN2Ny?= =?utf-8?Q?ED6GIlCdbKTGJCEUvzprQTKkk0Cm3Il8jgHFEHG?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2ab675b8-f533-4885-19a4-08d92b290673 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2021 09:29:05.2564 (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: hCsL72nNclbwx0FAHEcIUi8BXiZiKmnIH+Isbuz+N4drvvd06e2PP7ku2hgcxzFGSC6i5OQE0iPgxfOejgXKSA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4845 X-ZohoMail-DKIM: pass (identity @suse.com) Content-Type: text/plain; charset="utf-8" While no longer an immediate problem with flushes no longer timing out, errors (if any) get properly reported by iommu_flush_iotlb_{dsi,psi}(). Overwriting such an error with, perhaps, a success indicator received from another IOMMU will misguide callers. Record the first error, but don't bail from the loop (such that further necessary invalidation gets carried out on a best effort basis). Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -643,7 +643,7 @@ static int __must_check iommu_flush_iotl struct vtd_iommu *iommu; bool_t flush_dev_iotlb; int iommu_domid; - int rc =3D 0; + int ret =3D 0; =20 /* * No need pcideves_lock here because we have flush @@ -651,6 +651,8 @@ static int __must_check iommu_flush_iotl */ for_each_drhd_unit ( drhd ) { + int rc; + iommu =3D drhd->iommu; =20 if ( !test_bit(iommu->index, &hd->arch.vtd.iommu_bitmap) ) @@ -673,13 +675,12 @@ static int __must_check iommu_flush_iotl flush_dev_iotlb); =20 if ( rc > 0 ) - { iommu_flush_write_buffer(iommu); - rc =3D 0; - } + else if ( !ret ) + ret =3D rc; } =20 - return rc; + return ret; } =20 static int __must_check iommu_flush_iotlb_pages(struct domain *d, From nobody Tue Apr 30 07:06:11 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1623230991; cv=pass; d=zohomail.com; s=zohoarc; b=P1Cz1ey6u+v0EZFe61QjWNt082kkeFQpyX8pkyNfMMVR7nqqRsWiGXIqmObffsBhyzTMyqqwbz/yHlszRV9FVD5r2mVwrU53cS9KLmjaCuEwF5d8P9lLKNx+acDH98NRQBQzHkzk5LZpXS1KWF8Qpg6UPGtuOe2IFZDNjqOcu8o= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1623230991; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=wObYJPemsOXsGyhjl3tI23Gvv+HFSVMfSoBU/wvfj5Q=; b=AXkDfDlIuu8dEHTZpfv2f0gVJ1UBVqDJnN02TuIpBNRzWvhjrzbCGXPIDOnPBSa8/YwaLG91phDdWeJIXvwjPWXMdhEoFoy2a5rh8KUAVOlPROef+TxqNeXQJ1dnprJODU6FoJhDnHhQhXttmw7U7ypq4NZxWWr88MS5zlwJVUM= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1623230991412565.5106312944424; Wed, 9 Jun 2021 02:29:51 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.139107.257324 (Exim 4.92) (envelope-from ) id 1lquWp-0002ZS-V5; Wed, 09 Jun 2021 09:29:39 +0000 Received: by outflank-mailman (output) from mailman id 139107.257324; Wed, 09 Jun 2021 09:29:39 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lquWp-0002ZJ-Rp; Wed, 09 Jun 2021 09:29:39 +0000 Received: by outflank-mailman (input) for mailman id 139107; Wed, 09 Jun 2021 09:29:38 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lquWo-0002Yx-Mr for xen-devel@lists.xenproject.org; Wed, 09 Jun 2021 09:29:38 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id ce1b3c19-d1d6-494b-aeaf-6ab966fac692; Wed, 09 Jun 2021 09:29:37 +0000 (UTC) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05lp2113.outbound.protection.outlook.com [104.47.17.113]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-25-0dbrQj_KMUOVT9SqWq-sVA-1; Wed, 09 Jun 2021 11:29:34 +0200 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR04MB4845.eurprd04.prod.outlook.com (2603:10a6:803:51::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.21; Wed, 9 Jun 2021 09:29:33 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::f06c:6f5d:34d2:1c36]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::f06c:6f5d:34d2:1c36%5]) with mapi id 15.20.4219.022; Wed, 9 Jun 2021 09:29:33 +0000 Received: from [10.156.60.236] (37.24.206.209) by AM0PR04CA0127.eurprd04.prod.outlook.com (2603:10a6:208:55::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.21 via Frontend Transport; Wed, 9 Jun 2021 09:29:32 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: ce1b3c19-d1d6-494b-aeaf-6ab966fac692 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1623230976; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=wObYJPemsOXsGyhjl3tI23Gvv+HFSVMfSoBU/wvfj5Q=; b=NmjY5+Mi/HprhL86a57fMVyMSBXnoTatfheC2AN4AaockXJqgz/ZvI/OYQWTbPtRbPXRwx Ob5zZ7nhkmuXYEWxxOmYSqhZdz1cAkz5mNJPVrWpfMf0pxMQcu/3B9Q7C9ZDkMr96/12ea 2qlXf619Yk03urH1lFANtdYyA7USDsI= X-MC-Unique: 0dbrQj_KMUOVT9SqWq-sVA-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=njzdSJMVjinNRJyNlUVNY1h70Q6WeBsLdM2lkds/qZzL79k9Xqun1HfoR1mgOeXsekczJ3yfjAnKSIaa6P8z/0bHpZPmSTNZsSv3t/KRbWGqaOZzqrRwI6MFMeGkhZmp4uwdJcWGRBPsEKbLySFVc6SCmVHKQHatmIPRCh4H3ueaGR/u9i4oWhJt+fE70WcTwB/4gvdK7VVwVE1AJZM9Ej9TDpXOix+PX9386WhZKFrg4vXnJ/qrYUNeUX8JYGuWGOjDRCtyWOPNdL2pal5KivYPxe7AxU15wA+A/FWtpkFLfvDWfBCykRVmL5RLLL46W6liki23bnWgHkdGU2cVbw== 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-SenderADCheck; bh=wObYJPemsOXsGyhjl3tI23Gvv+HFSVMfSoBU/wvfj5Q=; b=OwXjyYj+scBn2M8zzk4qjF3vjYTkHVuw2tJHAzLC5Hp4AM8TaNlmdsFFj562xCIlYNKZDIxo2mUasM667ZEImIeR4CKvTIqPg0SLXA2J6BJNsWDDkMeHVF5Mjusn60sYe5GA9gVIxDDKRBMoTutbZZn8TTdNQ3ahl4Oc+TDe/9wT97972dPRDulxMheKrESG4X1skvIBgzugERboEj47d47Vo08zjeQFS38f6LgPQ5nfD7kLJJ/YgOxurF6Q5655R0cvP+dxu+Qf398yo74I5i/W5obcVMTWVwOXR1YJAmIPGDgOG/H9CmsASlFY6xO9O5iWzQG5Vof87mTyhh5YaA== 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 Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=suse.com; Subject: [PATCH 7/9] VT-d: centralize mapping of QI entries From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Paul Durrant , Andrew Cooper , Kevin Tian References: <03285055-47ff-ab10-ae76-0553f28f136d@suse.com> Message-ID: Date: Wed, 9 Jun 2021 11:29:31 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 In-Reply-To: <03285055-47ff-ab10-ae76-0553f28f136d@suse.com> Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Originating-IP: [37.24.206.209] X-ClientProxiedBy: AM0PR04CA0127.eurprd04.prod.outlook.com (2603:10a6:208:55::32) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c1703c37-502e-41c0-c692-08d92b291716 X-MS-TrafficTypeDiagnostic: VI1PR04MB4845: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3826; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: A9M6WYwwa3RjkJ6QXGYO3ZB64+q66+C43ASPxf4GA57JsRZuR4EuR+yKUMHHfYyQJiYtf3wOwcHtBcYXMdXqCjKGSMOeplPhTcq9zplmOqnGFgqrv1u5nH8hnCewxnl+Lj/Gkh4tKuPh/aezl5FgnCYGJK1ijWGOE2bDupzz+L8Uum7ccK+3l7Lv4o1D/fM8g7F65rR2NDD8n4IDYHnNM61sWtpxFPNN3CTLcgWmAB+IPM6kf569elzafC3Sdldt6JekKi/Zz94v9Le2TXgTuIvb03IftzEm3dElswaafGyvXBRikGnGx7YP1iXDmxEb+0kFwZUq/LoBjkUNV8nb8Ws0aOEE0+vrjpPMwrH1gRUv4Rdkcqfz0o/BrYgpEjaD5KbH7wKZY+EolND8uEuKbIwFvUSIEQOPqNnlQ/cvlJl7DCYne0NLz0JAyTiEsYl04wK0tZ68LTs/njJqRCQT3AQ8cumLvPkfmh6MNLsVrps/eqrw0alHeTsJzQvWL7DSX4y922QeiHIlt/s9dnFkpuG0g5pA9gvTHz9uVu+zUYWWyzIfGPPxp8N5CmXnZIzg7R9q7u1edMRReE3/JwZumfRvT8f2ta7IMIezyS+9GaOECIDd4e0WRH3tJebHq0DdAQtN494NqNgNNm0f6dDnGjLcFz6R5Nc1YqrkM9uS3iQ6VVYUfG+iLd6ns0GVtL+6 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(366004)(396003)(39860400002)(376002)(346002)(316002)(478600001)(86362001)(8676002)(38100700002)(83380400001)(16526019)(26005)(186003)(36756003)(956004)(4326008)(2616005)(8936002)(5660300002)(6486002)(31696002)(6916009)(2906002)(66946007)(54906003)(31686004)(16576012)(66556008)(66476007)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?RUlxM1lJaXNuc240cHBSNmhiOXowRDlhOHVRWXRkekFnV2V3NGdheG42T2xS?= =?utf-8?B?WUJZRVY1YlczN21GM2R1dXYyNTNBNlhCNTBSUTJEUys0dzUySkowM0VjVVJW?= =?utf-8?B?a3FaY2ZOVlJGaktwOGh0d1hjM1JkR28wTU16aW84R1YvK3N6TncxSVpNWUlM?= =?utf-8?B?MGhTWFg3Q3VFeUpBN2FPcDArUGxEVkdHa21LUzdzTzRUa3JUR0hjRkxhYi9Q?= =?utf-8?B?R2cweFBVbU85NUJQUTlTWjFCeVovL2EyN1ZzaUxJYVU4eDdVVjZsTjV4Uzg3?= =?utf-8?B?VUV4dURGL1JzOERycXFDMTE0aHMyc3pCSnFSTjZkWkgxVVlWNFFDVDVuVkcw?= =?utf-8?B?dHhQK0JMUEJxZ0xJd3R2OW1ZNzNzUFZaWDRsbVlSZXlaRExKR2plN2REVWNv?= =?utf-8?B?bWVYTmlXWlMrOFFDU21MRTFFMGwzWjJ1NHJZL2xLSlJUaGdLR0txZmxrL0V0?= =?utf-8?B?ellHMXl5MWRjT08zZFpZdXQ1Rnp3MGNrb3BEdnpNamgxU0NienhrTjg0WDBp?= =?utf-8?B?bkZnZHFud0ZQU1Zwc1dncXdNT0JPY3U4MUhYMm1RYkZtUUpXbk0zdjlxZXJL?= =?utf-8?B?Vm5EU1AxeUpHcmwreElWdDhObWsyRkxSRTdFRzdNdHVvTXhOeFdQdWx6ZkJp?= =?utf-8?B?MWd4U3ZlU3g0cjhDV1YxbVBjUURVazFCTTUwS2tMeEdMT25INEpiZ3ZLaC9X?= =?utf-8?B?UEVGVG03NEhiTnJrbXh2dkJoUTlvU2pTdzFKaDRKaVdnOU1wbDUxQk1saVJ3?= =?utf-8?B?cWYxVzBtS2FBMUlqQ0RVb0MxZlhSSTZVV0liS3ZtaEEreHhwZ1N4dnl3UjBr?= =?utf-8?B?a1BmckdFV0NZT2o3YTNIaG9qOG1OaDgrdWdnN0ZMVEpudjg1TUtYR2dlUno4?= =?utf-8?B?SEttY3JwNzFlaG1yVS9WenNuUzRjMXZiVkRaY1AxalFoaGljM0RDZkFzOERO?= =?utf-8?B?cGpZRnZmZG1OZXl4ZG5HMWhkL1diUmg5azJVQWMvWUVob3BDMjVUMXQ3ZFVC?= =?utf-8?B?QXZyVGdOTk9LUGJ1QVJ1OHJyRlplTU9lYUFkcUtHY2k2YWV1ZllrNWIwUHE2?= =?utf-8?B?WnpCRTFBVjV2amQrc0xqYmlSRnBUR2l0ZGorMGUvZVpieVp2aTJLSFVud0J6?= =?utf-8?B?MlV2dFFZdVJpVXZibmFSQXVGTUJ0QkRWSStvNHh3S1l1a2VOdE1rbnduQ1Nv?= =?utf-8?B?ZmR4T2ovaDJPa2pDUGFRbnNUcXdjWUUxeVNGeENlNDhsNENrR0w4MUZqcHZR?= =?utf-8?B?RlMwUXVsVXIxWjZyN1lybHBGU0ppSEF0TEJVSGt0Sjc3LzdMRHpCbVo1Q2Vv?= =?utf-8?B?dUcvc3N3UlAvSFlkWTViVDBLZGlOenh6N0M1bnIvS3NmaVMvSDdYV2JwQVM0?= =?utf-8?B?aW5IYzlnL0pWcS8rWmVXRmFWWVhSVlFndkxHakFnQkN0b1cxM0lwQUNnNzlF?= =?utf-8?B?SkxmTG85MmxpUzNJSHF0ZlpDOFc2QU5tZkp5NU43ejEyUlduaGxnd25ZalZh?= =?utf-8?B?NHJqeGhXVlplZnlydzdmYnI3dDhLTFlHT2tjY2wyeDFJK3dmSVRreC93MTVC?= =?utf-8?B?KzVLRHdxNjhvVEtWcitNVGtuSHlyamM3OFVFbnJkOTZiMkZTbkcvR3JIb1Vv?= =?utf-8?B?cVV3eEJTSWxtcUJrQllQR3ZMWVlKdFkxdWljRlpTcU04YVlRbXhFM0VrTk1P?= =?utf-8?B?a0Z6Wml2SGlNUzdoNStXQnRsbTZZbC9PSkpvb3EyTForOVVMY1JwdHQ5NFFz?= =?utf-8?Q?oOtqhXy9RCCqB6fKRInFIDThWGRslYcBKP5iRII?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: c1703c37-502e-41c0-c692-08d92b291716 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2021 09:29:33.1857 (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: QfsfkuskLWjicyoOeSKnfJFC1PZV9bIfWOvHSUFizrVf7Kg22JbsUVfhQ7JF2QvhrcaT1Wxpd131k3Nuqb5Wvg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4845 X-ZohoMail-DKIM: pass (identity @suse.com) Content-Type: text/plain; charset="utf-8" Introduce a helper function to reduce redundancy. Take the opportunity to express the logic without using the somewhat odd QINVAL_ENTRY_ORDER. Also take the opportunity to uniformly unmap after updating queue tail and dropping the lock (like was done so far only by queue_invalidate_context_sync()). Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian --- I wonder though whether we wouldn't be better off permanently mapping the queue(s). --- a/xen/drivers/passthrough/vtd/qinval.c +++ b/xen/drivers/passthrough/vtd/qinval.c @@ -69,6 +69,16 @@ static void qinval_update_qtail(struct v dmar_writel(iommu->reg, DMAR_IQT_REG, val << QINVAL_INDEX_SHIFT); } =20 +static struct qinval_entry *qi_map_entry(const struct vtd_iommu *iommu, + unsigned int index) +{ + paddr_t base =3D iommu->qinval_maddr + + ((index * sizeof(struct qinval_entry)) & PAGE_MASK); + struct qinval_entry *entries =3D map_vtd_domain_page(base); + + return &entries[index % (PAGE_SIZE / sizeof(*entries))]; +} + static int __must_check queue_invalidate_context_sync(struct vtd_iommu *io= mmu, u16 did, u16 source_= id, u8 function_mask, @@ -76,15 +86,11 @@ static int __must_check queue_invalidate { unsigned long flags; unsigned int index; - u64 entry_base; - struct qinval_entry *qinval_entry, *qinval_entries; + struct qinval_entry *qinval_entry; =20 spin_lock_irqsave(&iommu->register_lock, flags); index =3D qinval_next_index(iommu); - entry_base =3D iommu->qinval_maddr + - ((index >> QINVAL_ENTRY_ORDER) << PAGE_SHIFT); - qinval_entries =3D map_vtd_domain_page(entry_base); - qinval_entry =3D &qinval_entries[index % (1 << QINVAL_ENTRY_ORDER)]; + qinval_entry =3D qi_map_entry(iommu, index); =20 qinval_entry->q.cc_inv_dsc.lo.type =3D TYPE_INVAL_CONTEXT; qinval_entry->q.cc_inv_dsc.lo.granu =3D granu; @@ -98,7 +104,7 @@ static int __must_check queue_invalidate qinval_update_qtail(iommu, index); spin_unlock_irqrestore(&iommu->register_lock, flags); =20 - unmap_vtd_domain_page(qinval_entries); + unmap_vtd_domain_page(qinval_entry); =20 return invalidate_sync(iommu); } @@ -110,15 +116,11 @@ static int __must_check queue_invalidate { unsigned long flags; unsigned int index; - u64 entry_base; - struct qinval_entry *qinval_entry, *qinval_entries; + struct qinval_entry *qinval_entry; =20 spin_lock_irqsave(&iommu->register_lock, flags); index =3D qinval_next_index(iommu); - entry_base =3D iommu->qinval_maddr + - ((index >> QINVAL_ENTRY_ORDER) << PAGE_SHIFT); - qinval_entries =3D map_vtd_domain_page(entry_base); - qinval_entry =3D &qinval_entries[index % (1 << QINVAL_ENTRY_ORDER)]; + qinval_entry =3D qi_map_entry(iommu, index); =20 qinval_entry->q.iotlb_inv_dsc.lo.type =3D TYPE_INVAL_IOTLB; qinval_entry->q.iotlb_inv_dsc.lo.granu =3D granu; @@ -133,10 +135,11 @@ static int __must_check queue_invalidate qinval_entry->q.iotlb_inv_dsc.hi.res_1 =3D 0; qinval_entry->q.iotlb_inv_dsc.hi.addr =3D addr >> PAGE_SHIFT_4K; =20 - unmap_vtd_domain_page(qinval_entries); qinval_update_qtail(iommu, index); spin_unlock_irqrestore(&iommu->register_lock, flags); =20 + unmap_vtd_domain_page(qinval_entry); + return invalidate_sync(iommu); } =20 @@ -147,17 +150,13 @@ static int __must_check queue_invalidate static DEFINE_PER_CPU(uint32_t, poll_slot); unsigned int index; unsigned long flags; - u64 entry_base; - struct qinval_entry *qinval_entry, *qinval_entries; + struct qinval_entry *qinval_entry; uint32_t *this_poll_slot =3D &this_cpu(poll_slot); =20 spin_lock_irqsave(&iommu->register_lock, flags); ACCESS_ONCE(*this_poll_slot) =3D QINVAL_STAT_INIT; index =3D qinval_next_index(iommu); - entry_base =3D iommu->qinval_maddr + - ((index >> QINVAL_ENTRY_ORDER) << PAGE_SHIFT); - qinval_entries =3D map_vtd_domain_page(entry_base); - qinval_entry =3D &qinval_entries[index % (1 << QINVAL_ENTRY_ORDER)]; + qinval_entry =3D qi_map_entry(iommu, index); =20 qinval_entry->q.inv_wait_dsc.lo.type =3D TYPE_INVAL_WAIT; qinval_entry->q.inv_wait_dsc.lo.iflag =3D iflag; @@ -167,10 +166,11 @@ static int __must_check queue_invalidate qinval_entry->q.inv_wait_dsc.lo.sdata =3D QINVAL_STAT_DONE; qinval_entry->q.inv_wait_dsc.hi.saddr =3D virt_to_maddr(this_poll_slot= ); =20 - unmap_vtd_domain_page(qinval_entries); qinval_update_qtail(iommu, index); spin_unlock_irqrestore(&iommu->register_lock, flags); =20 + unmap_vtd_domain_page(qinval_entry); + /* Now we don't support interrupt method */ if ( sw ) { @@ -246,16 +246,12 @@ int qinval_device_iotlb_sync(struct vtd_ { unsigned long flags; unsigned int index; - u64 entry_base; - struct qinval_entry *qinval_entry, *qinval_entries; + struct qinval_entry *qinval_entry; =20 ASSERT(pdev); spin_lock_irqsave(&iommu->register_lock, flags); index =3D qinval_next_index(iommu); - entry_base =3D iommu->qinval_maddr + - ((index >> QINVAL_ENTRY_ORDER) << PAGE_SHIFT); - qinval_entries =3D map_vtd_domain_page(entry_base); - qinval_entry =3D &qinval_entries[index % (1 << QINVAL_ENTRY_ORDER)]; + qinval_entry =3D qi_map_entry(iommu, index); =20 qinval_entry->q.dev_iotlb_inv_dsc.lo.type =3D TYPE_INVAL_DEVICE_IOTLB; qinval_entry->q.dev_iotlb_inv_dsc.lo.res_1 =3D 0; @@ -268,10 +264,11 @@ int qinval_device_iotlb_sync(struct vtd_ qinval_entry->q.dev_iotlb_inv_dsc.hi.res_1 =3D 0; qinval_entry->q.dev_iotlb_inv_dsc.hi.addr =3D addr >> PAGE_SHIFT_4K; =20 - unmap_vtd_domain_page(qinval_entries); qinval_update_qtail(iommu, index); spin_unlock_irqrestore(&iommu->register_lock, flags); =20 + unmap_vtd_domain_page(qinval_entry); + return dev_invalidate_sync(iommu, pdev, did); } =20 @@ -280,16 +277,12 @@ static int __must_check queue_invalidate { unsigned long flags; unsigned int index; - u64 entry_base; - struct qinval_entry *qinval_entry, *qinval_entries; + struct qinval_entry *qinval_entry; int ret; =20 spin_lock_irqsave(&iommu->register_lock, flags); index =3D qinval_next_index(iommu); - entry_base =3D iommu->qinval_maddr + - ((index >> QINVAL_ENTRY_ORDER) << PAGE_SHIFT); - qinval_entries =3D map_vtd_domain_page(entry_base); - qinval_entry =3D &qinval_entries[index % (1 << QINVAL_ENTRY_ORDER)]; + qinval_entry =3D qi_map_entry(iommu, index); =20 qinval_entry->q.iec_inv_dsc.lo.type =3D TYPE_INVAL_IEC; qinval_entry->q.iec_inv_dsc.lo.granu =3D granu; @@ -299,10 +292,11 @@ static int __must_check queue_invalidate qinval_entry->q.iec_inv_dsc.lo.res_2 =3D 0; qinval_entry->q.iec_inv_dsc.hi.res =3D 0; =20 - unmap_vtd_domain_page(qinval_entries); qinval_update_qtail(iommu, index); spin_unlock_irqrestore(&iommu->register_lock, flags); =20 + unmap_vtd_domain_page(qinval_entry); + ret =3D invalidate_sync(iommu); =20 /* From nobody Tue Apr 30 07:06:11 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1623231040; cv=pass; d=zohomail.com; s=zohoarc; b=PgjcT2sWVqS4TPenr7koE6BEMDGUhZgFr8C0Ft/J2s9qCbOQYkX3l+SNd5iENwqnTgclcPV8tUL+Jcb2YzfkNzF9GTOkXMB3bDsEjqP9YRriO2YZKLSQWGWdoHyyt9PHLJ+Q+Q8RQlzMYPgPO1l6URkwIsLJREJJAVJARhPZ+ro= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1623231040; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=KAEC3zWHdiALl0C1ggZlQZ2fYmIEsDbbA+043+P3nms=; b=efsaND4n3dm0ywOwggxARvyfp0xq0hp7/Z1lAFjsoFqtNrIois+6vyv1pqva1LUgMjyyQ1kStPiCWlZWzTqBWsrNsbnOuRIW8EFnjXhUYBNORPrXNkHeYuwC+ME94AEr+gwB8T5c7X3XNYDGx7LQp2sF7/zm0wG4aqRyheryox8= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1623231040426198.09992752211497; Wed, 9 Jun 2021 02:30:40 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.139111.257336 (Exim 4.92) (envelope-from ) id 1lquX7-00037H-8U; Wed, 09 Jun 2021 09:29:57 +0000 Received: by outflank-mailman (output) from mailman id 139111.257336; Wed, 09 Jun 2021 09:29:57 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lquX7-000376-4n; Wed, 09 Jun 2021 09:29:57 +0000 Received: by outflank-mailman (input) for mailman id 139111; Wed, 09 Jun 2021 09:29:56 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lquX6-00035P-Cp for xen-devel@lists.xenproject.org; Wed, 09 Jun 2021 09:29:56 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 59f7ec7b-23dd-4058-85ad-4173d4163aa5; Wed, 09 Jun 2021 09:29:55 +0000 (UTC) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05lp2104.outbound.protection.outlook.com [104.47.17.104]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-40-UC3lEw0DPp-taYdeEFZHVQ-1; Wed, 09 Jun 2021 11:29:53 +0200 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR04MB4845.eurprd04.prod.outlook.com (2603:10a6:803:51::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.21; Wed, 9 Jun 2021 09:29:52 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::f06c:6f5d:34d2:1c36]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::f06c:6f5d:34d2:1c36%5]) with mapi id 15.20.4219.022; Wed, 9 Jun 2021 09:29:52 +0000 Received: from [10.156.60.236] (37.24.206.209) by FR2P281CA0009.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.12 via Frontend Transport; Wed, 9 Jun 2021 09:29:51 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 59f7ec7b-23dd-4058-85ad-4173d4163aa5 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1623230994; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=KAEC3zWHdiALl0C1ggZlQZ2fYmIEsDbbA+043+P3nms=; b=FleOa31A9W3LlJNgFXt0P7ZUUOMSQQVFBQ3IyKee4pZvUHFI5+nnc69hUU1CbEceEtmekd IQQ3MTvSTKEw/0B6R0D6/2b/H7Vl5qqMT3f+L+WvoWLtvP033MbBiYb+G1ejraOEWTbXT1 SM9ZDk7ikvD9a7MLuoNebZOzprEDMU0= X-MC-Unique: UC3lEw0DPp-taYdeEFZHVQ-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=f8J9IL6S32rKOZQRQmluRquayipicGoLFHGEaK46bsDCBN0SucwY6TpGYWzJowQIvZm336MPVdcgSWcjP8Dp6KSBbg0g07Y6KS3KD2qjjYd7DiBGgOsg4zvMYAUmXhPpA+fqt/b/lzcfioI3en8UgSCr9ZH01pYD6fXY6AQ5NGRN2OpiUuTwJ0s1BAqwyTBjP7+aZGsUxI+1B6vaqBDfBB/Pc2SSNSWZzu+sgC4tntaaOJgZXP+xifEBtne1ueQka3QUbtLXZxI+epio7SnqUbx3AZ9pmKazEjfqmGRw+j/yf+OhXBdcCzwXvDgIQnjiUv6hZFiG/JSS/tw8clVWgA== 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-SenderADCheck; bh=KAEC3zWHdiALl0C1ggZlQZ2fYmIEsDbbA+043+P3nms=; b=FgpOWYlA3s3a1sHIME3mGdQ9aAkE/9vGqCmnN0peIK9aBKH9P9oo967PwXASSDIP/uOmxT5Sui2MAKbgPyNW2qXKoz2RwI1FD15h6WiTJGedVs1yC/gA7yoxyx7EdfcenFgcnis3iDOIOjdhHubB5gReDR3Heva2FXMZqOD7Fzxz+koqesbgWn37SasESXXq9EU7ZaWDYlE1UOpVkfPGo1KZvoOQXfCW4zJwPwg40n0WhaNJ2NZ/RVJOavPoZXt87zuHeTZqcaxdHS4zuB5//+oZGYIVoay6H/ShQsFGDRlad5wsvURo2D1XVjg0rZ4Og1A8rzKod11ltn/e9QCAIA== 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 Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=suse.com; Subject: [PATCH 8/9] VT-d: drop/move a few QI related constants From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Paul Durrant , Andrew Cooper , Kevin Tian References: <03285055-47ff-ab10-ae76-0553f28f136d@suse.com> Message-ID: <1b8558d4-42cc-bd68-e6c8-138f40f81e1c@suse.com> Date: Wed, 9 Jun 2021 11:29:50 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 In-Reply-To: <03285055-47ff-ab10-ae76-0553f28f136d@suse.com> Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Originating-IP: [37.24.206.209] X-ClientProxiedBy: FR2P281CA0009.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a::19) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2f23b461-0b43-4604-b9e4-08d92b292263 X-MS-TrafficTypeDiagnostic: VI1PR04MB4845: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2958; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: S8xSz1li6bF68Z1DKHw9Bnfjx56P7Ybrlqr3JIn+7bGSXRov4QXZlObwoffnz9Tp6E0w7DvI485hHjQBh4n1B+ZaySi3/2RsI9bFclfszGa9SxYhIF6lOFYpDnQogdMMcbKW+Y4H4Ve2ra4naECQbDwmlqzRigvcLiA3ywxvPi8nZV1IOM/nHBppWs7eCYtrQt+HkhCR/TmwWK2ZB4quLApdBGLGXDeDfRdLzMMjJSFvIf/1TLmfdpxjQ25e1V9gaB1KPfosZR9+qz/TgeR7BXqWVILrqrN/TlaayZWJtp1vaPNnlmCvXEghA6m3DErwmqGLb+knIyxaLBtO46qTUH4o0Z9s+tiY3bn0bnYQu5Jxkc4/dAzbVKUEJreNbuWrdy5ocXnePhhC5m9RJ3Z/xZ4X5yIOECn2EMDOV4wgaV5Df9dvbhQpP8klkIri/zlxSkQmZf+unJV3quAROayUAJNhJ5BI0WYpUBq0GHmAcg3QkrWBOX74gjzsjRM9bY5YijGjIzzufpOlKXlqu2azeOb1vIPdKbCwsOuhhoOJQzdWwoH/08gwIzBE4hW4/KEhSrH6gioM52+7/p22iIvemzVGjyWvgYYTAl2kRKVgJawnfy+w0KmCVsVFsasZb3AZFNKvTS0tbywASmU+zkP8/Y4Sel4UnW0fjUQts6l6kk+YmaVEJSoNCeRpNkIZF434 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(366004)(39850400004)(396003)(376002)(346002)(316002)(478600001)(86362001)(8676002)(38100700002)(83380400001)(16526019)(26005)(186003)(36756003)(956004)(4326008)(2616005)(8936002)(5660300002)(6486002)(31696002)(6916009)(2906002)(66946007)(54906003)(31686004)(16576012)(66556008)(66476007)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?MFRpcEJZN1NUUlRSSElRVWZ2U3A5aGpGTUcvWVBaKys1eU5qeldWak83V2JE?= =?utf-8?B?a1lHcnVBR0R0L09sZ3BYcHVGY3JCNEZlMVhxY3MvSWM5VWtrSWovaVp4UXdn?= =?utf-8?B?UzRMSXBKS0E2N3A3dlpMRlpvKytaVUVwMFBvV05LaVhPUUtaMC9EazlMV0Ro?= =?utf-8?B?VWswU1VNQXV5aWdtZEVQY3JTeXVsZStGVjMybnI0VW91LzRPNmJNeTFmQ2FT?= =?utf-8?B?UHZ1NTloZDNjZkJLQWdJUWFyaXhESk5BRDRFYmxST2pDZmliaEYyTGd0MkJI?= =?utf-8?B?Q3Yzb2sra2tVdHh0czNwcmpxdFBtSEl4MGNQUURVZFUxeTE1ajRKTUU2RUk1?= =?utf-8?B?N0Z4SEM0cXhQUXdKSVhDemlYWEk5SVBRZjJ3STl2YzJ2WmJidHhWOUI5RUF2?= =?utf-8?B?dTg4eG42SjhDRVo3T2lCUDF6Z3pONDZuWVZsTU5JTzhKOFVRc1FUV1R2OHVF?= =?utf-8?B?K3BLTFZCdUY0QXZGUjdlVnF4WUI4S0ZrS2JpK1lTN0pBUUJxeWxqNmkxN0FG?= =?utf-8?B?LzJLSjRZRGtuWGdHcG9MNnFVQ0hneEkrSmJlaEJSSmFsL0tqaVZHLzhjQk43?= =?utf-8?B?MWJ6QmhoUkg1RnlXWEFlVkRsck1iZFZWWk1wU002K3lMb3A2STgrOU1FVCtw?= =?utf-8?B?VGY4R1FLc2QxR1hXYmNGNFRPUDhlc0IyZUlVSCtKQms0Tit3bGc3MlBHdFZs?= =?utf-8?B?QlJNTHRMNGJHeWJ3SGtMbmw1cEtEcTNwS2M4c0RpWEs1N2RYV3JkMWYwU1VR?= =?utf-8?B?UU5NbmM4SEtjU0dZWit3TEdzQzN6YjZtWHFhN1hJckRFNWhGa245bW5GS25J?= =?utf-8?B?MXljYmxPSzZBTGMvV05SdENtYmZVOU1EUzZJNUZMV25vYURyRC9PMUh5SVFI?= =?utf-8?B?TUc4YllvSkxoaU1sbW9iUmRiR2RoN2oyMzNXajQxenVYM3ZERmtQdjU2NUMz?= =?utf-8?B?enVLQzhnUVdKeGt5dnFUQnc5QTVLWnpsYjRhZEhRZUFjL3hWVlNhR0k1N0lr?= =?utf-8?B?UUl6b1kxUHJWam1ZUlhWUE5tc1JvcjgxK1RwMjBJQnRkTXMxR3Btbm9EakRB?= =?utf-8?B?K3A4SjNOY1p6WXFVOGdWRVVnQ2JZUGFHY3FsWWdQWU1VTVgyUHlnMlNoME9Y?= =?utf-8?B?bzJZNVNSOVRoY242bXVkb2czb3VpWG1XSzE3THR1RGpFZEczNzRWbnRKZExw?= =?utf-8?B?VUV6bWVNcDlPUWpoOThLL0llNlJhMGVaN3FWWkZhTWFKSmpUcWt0M0pIaVhl?= =?utf-8?B?OGtoRHZOVURYbm0zazUzZkVZZkgxR3NZZHNwUDVPNUVTaFRIb0xST0RiT2Vq?= =?utf-8?B?aFVwK3BYUkJ6ei9WSUw5Yk51UUdoZ05CR2VxV2JYcFVWKzQwQ1pnQVJZRmw3?= =?utf-8?B?WVlEMkQ1Q0I0TzBKejZvV1pydEpzTVZrN1FQVjd2Q0FnbldRNDZKWXAvZ1Bh?= =?utf-8?B?M2VEbEZFR3k1NWI3N0ZRN004b1hWSmZ6OG5XTlhWSlpGVjFobDlNd3JvZzhO?= =?utf-8?B?YVEwRDhaUXB6WW9Gay9pa2VaZ3ZrbGRyVEY3ei9KOFJuRXNFT0VybDdzcER4?= =?utf-8?B?bmxEazUzSmJHLzRBcG5pWnd4Sms1cFpKMmkyU08zVjNLVUUyYXdHckNUZU51?= =?utf-8?B?ejQ0Y2UyVElzQmVxbEQ5UDdGZEk0MHRSSTV5M0lBcklQV2t0UGVRU0FrVTR6?= =?utf-8?B?c05wR2hOMXArbVlOS3ArWDJxQm5rajRHbGx6RmlyaE50aUVJdDA3UDZsRENn?= =?utf-8?Q?jNuRPXFa+0u1mBk8BQOvhr0IkiPXADf0jxywiq9?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2f23b461-0b43-4604-b9e4-08d92b292263 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2021 09:29:52.1619 (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: twIWbEA6QsPJfnyy4cbzQwoGeM/enrB02AXLfANTVHdZG0yp7oQZ4gRCqL6inFokNZ2dSHt9BDTAO1DxH3d1Lg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4845 X-ZohoMail-DKIM: pass (identity @suse.com) Content-Type: text/plain; charset="utf-8" Replace uses of QINVAL_ENTRY_ORDER and QINVAL_INDEX_SHIFT, such that the constants can be dropped. Move the remaining QINVAL_* ones to the single source file using them. Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian --- a/xen/drivers/passthrough/vtd/iommu.h +++ b/xen/drivers/passthrough/vtd/iommu.h @@ -451,17 +451,6 @@ struct qinval_entry { }q; }; =20 -/* Each entry is 16 bytes, so 2^8 entries per page */ -#define QINVAL_ENTRY_ORDER ( PAGE_SHIFT - 4 ) -#define QINVAL_MAX_ENTRY_NR (1u << (7 + QINVAL_ENTRY_ORDER)) - -/* Status data flag */ -#define QINVAL_STAT_INIT 0 -#define QINVAL_STAT_DONE 1 - -/* Queue invalidation head/tail shift */ -#define QINVAL_INDEX_SHIFT 4 - #define TYPE_INVAL_CONTEXT 0x1 #define TYPE_INVAL_IOTLB 0x2 #define TYPE_INVAL_DEVICE_IOTLB 0x3 --- a/xen/drivers/passthrough/vtd/qinval.c +++ b/xen/drivers/passthrough/vtd/qinval.c @@ -29,6 +29,13 @@ #include "extern.h" #include "../ats.h" =20 +/* Each entry is 16 bytes, and there can be up to 2^7 pages. */ +#define QINVAL_MAX_ENTRY_NR (1u << (7 + PAGE_SHIFT_4K - 4)) + +/* Status data flag */ +#define QINVAL_STAT_INIT 0 +#define QINVAL_STAT_DONE 1 + static unsigned int __read_mostly qi_pg_order; static unsigned int __read_mostly qi_entry_nr; =20 @@ -45,11 +52,11 @@ static unsigned int qinval_next_index(st { unsigned int tail =3D dmar_readl(iommu->reg, DMAR_IQT_REG); =20 - tail >>=3D QINVAL_INDEX_SHIFT; + tail /=3D sizeof(struct qinval_entry); =20 /* (tail+1 =3D=3D head) indicates a full queue, wait for HW */ while ( ((tail + 1) & (qi_entry_nr - 1)) =3D=3D - (dmar_readl(iommu->reg, DMAR_IQH_REG) >> QINVAL_INDEX_SHIFT) ) + (dmar_readl(iommu->reg, DMAR_IQH_REG) / sizeof(struct qinval_e= ntry)) ) { printk_once(XENLOG_ERR VTDPREFIX " IOMMU#%u: no QI slot available\= n", iommu->index); @@ -66,7 +73,7 @@ static void qinval_update_qtail(struct v /* Need hold register lock when update tail */ ASSERT( spin_is_locked(&iommu->register_lock) ); val =3D (index + 1) & (qi_entry_nr - 1); - dmar_writel(iommu->reg, DMAR_IQT_REG, val << QINVAL_INDEX_SHIFT); + dmar_writel(iommu->reg, DMAR_IQT_REG, val * sizeof(struct qinval_entry= )); } =20 static struct qinval_entry *qi_map_entry(const struct vtd_iommu *iommu, @@ -413,17 +420,18 @@ int enable_qinval(struct vtd_iommu *iomm * only one entry left. */ BUILD_BUG_ON(CONFIG_NR_CPUS * 2 >=3D QINVAL_MAX_ENTRY_NR); - qi_pg_order =3D get_order_from_bytes((num_present_cpus() * 2 += 1) << - (PAGE_SHIFT - - QINVAL_ENTRY_ORDER)); - qi_entry_nr =3D 1u << (qi_pg_order + QINVAL_ENTRY_ORDER); + qi_pg_order =3D get_order_from_bytes((num_present_cpus() * 2 += 1) * + sizeof(struct qinval_entry)= ); + qi_entry_nr =3D (PAGE_SIZE << qi_pg_order) / + sizeof(struct qinval_entry); =20 dprintk(XENLOG_INFO VTDPREFIX, "QI: using %u-entry ring(s)\n", qi_entry_nr); } =20 iommu->qinval_maddr =3D - alloc_pgtable_maddr(qi_entry_nr >> QINVAL_ENTRY_ORDER, + alloc_pgtable_maddr(PFN_DOWN(qi_entry_nr * + sizeof(struct qinval_entry)), iommu->node); if ( iommu->qinval_maddr =3D=3D 0 ) { From nobody Tue Apr 30 07:06:11 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1623231042; cv=pass; d=zohomail.com; s=zohoarc; b=AExVghkTmBl3Ory0xCiIiYfQUvvYXSyGd4CugKhEsXZmLU3W3QR8uEBCIC4RB3UUeuCXCAFloeTOvgomdTxuDESoLAqTNkhUSKzIO6MumloUILonpBzOrcXB+H/BfaPMHgxyZgIZctJahBmAwGROwOp4GiHTKIXWOz0DZh4O0xM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1623231042; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=5nH2cLUYwbL9eZj4RVdVH4PyeqIGtsVVYtNIc2+3fhE=; b=EYBdUtm5IXS0u8a1GDUCSSWl0LiF21tjOUPfwTMLPMiQZ5fB5LP9yhOBHDA6R7Li76HpIjSUD+2JuHaXk4vsC87NudZgvNJo/ZNYsORk1Q2vYD9mGuBYVf5zYqmY5nlfuCq2yjxudoD36GtSMvFxN2ZS1w/lNFaEUbP34mEJ8OU= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1623231042922804.936404898547; Wed, 9 Jun 2021 02:30:42 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.139117.257347 (Exim 4.92) (envelope-from ) id 1lquXg-0004Ty-H7; Wed, 09 Jun 2021 09:30:32 +0000 Received: by outflank-mailman (output) from mailman id 139117.257347; Wed, 09 Jun 2021 09:30:32 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lquXg-0004Tr-Dy; Wed, 09 Jun 2021 09:30:32 +0000 Received: by outflank-mailman (input) for mailman id 139117; Wed, 09 Jun 2021 09:30:31 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lquXe-0004TW-U3 for xen-devel@lists.xenproject.org; Wed, 09 Jun 2021 09:30:30 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 73802cb2-9a11-45a0-a412-86b413ab30fc; Wed, 09 Jun 2021 09:30:29 +0000 (UTC) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05lp2107.outbound.protection.outlook.com [104.47.17.107]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-39-5M9f1GgPPx2bXU4qQhSa4A-1; Wed, 09 Jun 2021 11:30:27 +0200 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR04MB4845.eurprd04.prod.outlook.com (2603:10a6:803:51::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.21; Wed, 9 Jun 2021 09:30:26 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::f06c:6f5d:34d2:1c36]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::f06c:6f5d:34d2:1c36%5]) with mapi id 15.20.4219.022; Wed, 9 Jun 2021 09:30:26 +0000 Received: from [10.156.60.236] (37.24.206.209) by PR0P264CA0200.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1f::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.21 via Frontend Transport; Wed, 9 Jun 2021 09:30:26 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 73802cb2-9a11-45a0-a412-86b413ab30fc DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1623231028; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5nH2cLUYwbL9eZj4RVdVH4PyeqIGtsVVYtNIc2+3fhE=; b=jPadiLvU9fJcOWVNjaPhJSLgSLsHFJMz3egERGm7bYxhwP+yq3C2xHbl38W/LSUxOjhM0g 82cWwvl/Cec7ss3OIHGStn23dMQKIYtTOvtO8hAPeiDhw7dB3zGRSBr8ixLGLT3xgtDGB5 6PCrhGJDsm1FEAOM/pvB+lip6MdYu2I= X-MC-Unique: 5M9f1GgPPx2bXU4qQhSa4A-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ImIDXGNG9/FmVvN2d7Zi9tdJVASKGOp6Z8qOjElAK9mHDeyD/xYAirt3hChk2b1HC1fU56o8kNtxyIR1cQFZT5PWGZOZSWHlVjJDKS358d6nBx3IjcVzXdtS12HXHZn6xBVMKlnlK+kw0p02ndwadzSDlxjPkAP3Gi+xaQfnhJFiTNTgq1gyKSj5O2M6iUB+ycCiiFunUy1nODv2sjUg47PllUOD+zujU1gKzIOWvlcHX6VbkhgRAzKuNJMX9WRl5xZRQIOPAMhDow4cYgh0+bw7rmQkkyZyRnhU/WIPvSg6cTDBquTUQF1xnXJ5WvrF3uvf74WRXa+nzQqgB5FWAg== 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-SenderADCheck; bh=5nH2cLUYwbL9eZj4RVdVH4PyeqIGtsVVYtNIc2+3fhE=; b=odxcWpgCSjkENwR7lnXWoLrV9nOiObiedgM1IrtPLgIE3uj3CBmqVKes5cpq3v0UQzCp8DvVVcpcyblLEtvwa66tUR9z7pCbJ+JcZ7Uv88vlJGNcNVOIwBmiyoMIwU99ulmIU2rB/3o1UD7FAtGWxABcCzV7a4Fax/IV00XX6ZeBPOSk0m+S+mcdnhYfFU4iS6qcSR5f+PwD4JOjKguicU0IJbrzUC8MwnKl+DvV8moREdQU8BuVUj94Vf6vFT/SronTeURxVBSdI0BKDc7Wq6r3lVkYnl/6yOotXv4CiiC3eui38Saqhng6MZcBcWRD33tYIOiaS+BI/iBse4UlOg== 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 Authentication-Results: citrix.com; dkim=none (message not signed) header.d=none;citrix.com; dmarc=none action=none header.from=suse.com; Subject: [PATCH 9/9] IOMMU/PCI: don't let domain cleanup continue when device de-assignment failed From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Paul Durrant , Andrew Cooper References: <03285055-47ff-ab10-ae76-0553f28f136d@suse.com> Message-ID: <1a7b974c-8dee-3422-28fb-4118fe145b4e@suse.com> Date: Wed, 9 Jun 2021 11:30:24 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 In-Reply-To: <03285055-47ff-ab10-ae76-0553f28f136d@suse.com> Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Originating-IP: [37.24.206.209] X-ClientProxiedBy: PR0P264CA0200.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1f::20) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 028593ed-253f-4c57-0fa8-08d92b2936d4 X-MS-TrafficTypeDiagnostic: VI1PR04MB4845: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: o+kHryYSSwj5I0KtqDAzspLPbhoVAJxnrSDdtBSLQWSnhjTMP4IUVfqAeIGAFm/D8PNpfKum2xhNaygRm4iFZFPgC5kWLdUiB2vRCR6YwV/O0ejmFU3Y11J5f4+jYvFYxWBNX281BADBJ4WwIlfn9brPiruuhOqD1wFR+q9rlUuxwmwuLIXyMEkwei/c9LTct6xRhGgCPVVx8ILQ+Pfy76kaAplIk2jqGfozTt/DMxBfjBOJ0l+fySWqmUWWljQYTK8kUFo326Q1LtojkpzDDNDHp6vfXG5ljDfVZhxxwmHbwRIzYGfB/T8sYAZoTxKUIN3jS4ApwHsHH3KuFE3OrONuVlJNjFaUClhgufXr1Ec32bg+nhIrUKdKzQygcxUv8mIF9Zy79zHTzfD+BizbFOOMw9VJn8Toam4IbCEofcKPs/osylgy5ljhGetar4+ebcuyuBkcGLEXEZcQohLlxtbGFZ98mVSbgU2qpJa7zWmiGSaF4m93M7VDCI+1ecHhNJ/D79Pt5gcQWWgBLSoOSJ5tV7/2CR6aShmxP6U9fdegHhiU+mSePx7g20AzLE8ipdKtblauE2+WCuyRWfRSaPjS3fKnsqtvXb6dduU7PfLWZAzU/oqAn2+jSmR4xqIkjaMIwotE4LIg4ieMvfs1z60hs5kh1gx7TogLCQS5FaKk+wt0gKh0+kdYqrqcEa9s X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(366004)(396003)(39860400002)(376002)(346002)(316002)(478600001)(86362001)(8676002)(38100700002)(83380400001)(16526019)(26005)(186003)(36756003)(956004)(4326008)(2616005)(8936002)(5660300002)(6486002)(31696002)(6916009)(2906002)(66946007)(54906003)(31686004)(16576012)(66556008)(66476007)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?NUwxWjdjOHhQVm5RUGtkdXBNTDBJZjZRMmJMamxvMjZVbzh6QnRWUHFXVUJC?= =?utf-8?B?MDBySlh2UmhtZUhwNkg2ci9CNG5GYklzaVFiYStManFmRmY0bFUrYXI0TVNX?= =?utf-8?B?QzJ1WUxndTlCM001UnNrYlFMdnN3VXE5UW5mMmJoVGtIRjdZSHZuRmkwUEVl?= =?utf-8?B?RHpZLzhxb3pFWjhISDlyeGNqSCtEVkVKTlJPN2VYdkN0anRsRkhpRUpsVkVo?= =?utf-8?B?VUFFM2xrM1BPcGlES1hDaERPMThNeHQvNWtudkpRdVFnV3N3ak96ZVBwdVhN?= =?utf-8?B?WGpjSTJvVTkzUmU5cytyRnliWCtLQ2hwY1lISHcwYlBwNlVUMU5RcHhwWTc2?= =?utf-8?B?bzA4d3d4YzNXNlprNXZEenBTd0ZpZHN6dGxRUmdSSFd4MXlEVXNXM0hQZXZV?= =?utf-8?B?b28xYVBuNXh4TXo3TFNEczFzdUpBZHFyN0FCazZTNVMvMndRY2lVUGM0c2lt?= =?utf-8?B?ckp6Q3JTdnZaNTBLWXBqZUI1ZVVjdGZ0VGgzY2lwektCTVdrVE9YRHdvcWtw?= =?utf-8?B?ZVRrNDBqcTJQWWxsTDJKN09WZGY0dlRuZjFoU2FsMUw2MUVJMEhSZHNIMDda?= =?utf-8?B?OGJ3R2hHSW93YzRxaldKK3NDdmc3SnB5TWZnK0duTk1jL29ud3Z6aFpSWTZr?= =?utf-8?B?YStGN3ZxMjRML2NUU20wRjltaXlIYlNYeHZkcXBqRTd3TlNzUnNmVjFXYU5B?= =?utf-8?B?N0t6bURDN2hPS09vZEFqZUNOUVlvb0lLTm52ZFBwY3UreXhoQmRRNk40UXFw?= =?utf-8?B?RVJYSEpseGVSZGlPK05Sd0NsODdaQVhhTjFuV2tKQkJqeWp1UWpFQkYxdEo2?= =?utf-8?B?allwU0kvM001anhMb2tlbDIxc1hNdjEwc096cGlhUWhzWTU3N204NVA3RjNK?= =?utf-8?B?d3RoeHhLZ0g3ak5WaVo2b0lHMEhVMEgxVHQxcGZCVlpaRUZTYjM2Y0hSVXdy?= =?utf-8?B?eDloN29aeFA5OFZYTFI1U1liemJTYmwxQ3VRd2l6U1B0UkxNNEplN1NOKytn?= =?utf-8?B?MzErejlXRlJiUHpPc1NoUmIzMmFpNWdVTFVYSFlGcnFXeEpFMUs5VldBbTQr?= =?utf-8?B?QXQ0SzNpdTBnL1RYQUFJRmtyZTdYU1hWT1MvV1Z4cWVZR1JwY0FweEhaUzNM?= =?utf-8?B?YWRmanJlT3JuKzRWMHcxTFJhSmsvc01WcHZ5bDNNNU1NSEdaR1E2MVcwN2Jk?= =?utf-8?B?RGlpODZSTUNpMTN2TzZRd3RaY1hIanFIUnNPRjN1SjNaMVdyQWRyTnVCWjVS?= =?utf-8?B?eHp6SGlZdVFOZXdSRGQyLy9KYVJoWTZLZGxSUUh5NWVQajhCQUNaTk9DTGpX?= =?utf-8?B?aUMzSEx6ZXUvQkd6N2cya3VWMEptWEkwWXBUOUFQRThlMDlKME1GVUhPdTZU?= =?utf-8?B?b1hRVnJSRmY4cE1pcW5lU1dRYXAvKy9YMEp2U2N3NURzKzcxUWt5UGxoaFJj?= =?utf-8?B?OXk2N21QUVJidUhobkFmUnUrQTZYWHMzRW1HSHlVMDJLMjk3UUlOMFFxa21v?= =?utf-8?B?MnZlbFJwUno5U2kzUnIxaE8yYUIwZHA5WnhXZUVPemNZMDVwbHRvYmFuNjAx?= =?utf-8?B?MWE5b2dJMUJ3R3AvczFpQWJXYkRtOEQwc1o0K3pUSTNNd2pJNkl5d3hjZ1R3?= =?utf-8?B?VzVaS3VUcEl5eXgySFd4L0IxZzVtdk5JMGlHR1p0T1lqZm55Tkg0MU1YYlVl?= =?utf-8?B?OTlPWHNmeXVPbDdMOVZzdER5QlVJZjdqbHJSWDh5LzlWbDdrekl5VnViaGtU?= =?utf-8?Q?iP4UyBOCURKaZtXSXlouzAnHoluHPC+lNYxgyrX?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 028593ed-253f-4c57-0fa8-08d92b2936d4 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2021 09:30:26.4225 (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: 25+IPgo9DbnHOUqsj0t9Wx8zdTha7V/acGcbmfFJo0V8SO/9im/FrIN0uUYw2Diku1+RYAqAgFxhRWi7NIMODw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4845 X-ZohoMail-DKIM: pass (identity @suse.com) Content-Type: text/plain; charset="utf-8" Failure here could in principle mean the device may still be issuing DMA requests, which would continue to be translated by the page tables the device entry currently points at. With this we cannot allow the subsequent cleanup step of freeing the page tables to occur, to prevent use-after-free issues. We would need to accept, for the time being, that in such a case the remaining domain resources will all be leaked, and the domain will continue to exist as a zombie. However, with flushes no longer timing out (and with proper timeout detection for device I/O TLB flushing yet to be implemented), there's no way anymore for failures to occur, except due to bugs elsewhere. Hence the change here is merely a "just in case" one. In order to continue the loop in spite of an error, we can't use pci_get_pdev_by_domain() anymore. I have no idea why it was used here in the first place, instead of the cheaper list iteration. Signed-off-by: Jan Beulich Reviewed-by: Paul Durrant --- A first step beyond this could be to have the backing functions of deassign_device() allow the caller to tell whether the failure was from removing the device from the domain being cleaned up, or from re-setup in wherever the device was supposed to get moved to. In the latter case we could allow domain cleanup to continue. I wonder whether we could simply make those functions return "success" anyway, overriding their returning of an error when ->is_dying is set. A next step then might be to figure whether there's any "emergency" adjustment that could be done instead of the full-fledged (and failed) de-assign, to allow at least recovering all the memory from the guest. --- a/xen/drivers/passthrough/pci.c +++ b/xen/drivers/passthrough/pci.c @@ -894,7 +894,7 @@ static int deassign_device(struct domain =20 int pci_release_devices(struct domain *d) { - struct pci_dev *pdev; + struct pci_dev *pdev, *tmp; u8 bus, devfn; int ret; =20 @@ -905,15 +905,15 @@ int pci_release_devices(struct domain *d pcidevs_unlock(); return ret; } - while ( (pdev =3D pci_get_pdev_by_domain(d, -1, -1, -1)) ) + list_for_each_entry_safe ( pdev, tmp, &d->pdev_list, domain_list ) { bus =3D pdev->bus; devfn =3D pdev->devfn; - deassign_device(d, pdev->seg, bus, devfn); + ret =3D deassign_device(d, pdev->seg, bus, devfn) ?: ret; } pcidevs_unlock(); =20 - return 0; + return ret; } =20 #define PCI_CLASS_BRIDGE_HOST 0x0600