From nobody Wed May 15 18:54:42 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=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1674485635; cv=pass; d=zohomail.com; s=zohoarc; b=ndqK/Bn2MY0VXExbVxN1QPpfwOXXJK9oHW/TRz2JfqQhcpGZIbb8eJqy/EHcixxB2VaQtjEjvrtUiJ8KmULS7IjcqAKnYWXTgPNH2qntvhYtjvrBAYZgNOs9yuO3oaDvDaBZXwiaOiS8SBt4zI+ndvHAAwA+fwmkkK/WtQLe7to= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1674485635; 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=+ieUVVVZIskofyobszOZSotS3S7+YkheR+/Im8erqdU=; b=JOXTiNG0DQGoRUn/oImcR1D2kJ8k8txHmgdZPpMiRgDR55nRQqLrsrWVSh8WeRdQaCGDS5y3/wCoNjlVUKGaD4cU4agpzrVxYvCP6sh6TlsgjPC/cqNh/9WKPwn7pq7UNH6eXY9qoOUn6yZpPma3TmabBX0UDmDnX7LFK6Zh2GU= 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=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1674485635238905.9443558842142; Mon, 23 Jan 2023 06:53:55 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.482947.748763 (Exim 4.92) (envelope-from ) id 1pJyCN-0004UY-Jc; Mon, 23 Jan 2023 14:53:27 +0000 Received: by outflank-mailman (output) from mailman id 482947.748763; Mon, 23 Jan 2023 14:53:27 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pJyCN-0004UR-Gm; Mon, 23 Jan 2023 14:53:27 +0000 Received: by outflank-mailman (input) for mailman id 482947; Mon, 23 Jan 2023 14:53:26 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pJyCM-0004Rs-DL for xen-devel@lists.xenproject.org; Mon, 23 Jan 2023 14:53:26 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2082.outbound.protection.outlook.com [40.107.20.82]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id afabc85b-9b2d-11ed-b8d1-410ff93cb8f0; Mon, 23 Jan 2023 15:53:24 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by PA4PR04MB7773.eurprd04.prod.outlook.com (2603:10a6:102:cd::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.33; Mon, 23 Jan 2023 14:53:22 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389%7]) with mapi id 15.20.6002.033; Mon, 23 Jan 2023 14:53:22 +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: afabc85b-9b2d-11ed-b8d1-410ff93cb8f0 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gXMuFJfzrcQlpcDC69Incyxye9jFnwS750Wdii0DIuTGkz9QRcBAKq7ON9H4umSJiUrQIcZMctqIzsamEnaAMRb2yve1YkIqkxKUeq79nRO5GaRz3DOOkt6MNDj2VpI8IZTwNX6Yk0TVs4TfcoHjaxVEK5jgJ5vCMsXBsiJMLKGhafGSFYRTzvj1WvFXXaC65gmKEwFlfMrJQUypHgIT1F/u+mcadn55X1HYdIARZEo+LM5sAURFTthP9dC0h0WOMo3+L/TX5db6RF9jEcLkANJW33llMZejcrjYnNF2oQwZXHQiLhkG2qwf3wZH3JOuqTtsY4K0xKECsCdj6GlJow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=+ieUVVVZIskofyobszOZSotS3S7+YkheR+/Im8erqdU=; b=fldU3ziAkLwa4ox1AkWShDeX/nHqVy222+XKZcuva4OihxXyvMPF2FnK6yonqo7TfgghpXyILZesNXSSPEmHTUcVRK8BF5Ng2Rn7wINf+yJ6TsTHnub3PpfWX9tu7UZ16wEkL8zPPy3pXN3Ebo8jRAM8F8DpZmmAD5AP7klVDhJCyKOts7jGsXGuFnQqvNudx6vAkmusycPVfGPo4Q3q5B2qIzMBOehXCknG6+uOOglJQIpjWzsV0lgF3h4VOtgOqB6ZaATaAHwwEdqDT5MjGeAGRInVjS5vSWcDlQxHxPthSmp152QNsU3P/VouHIDm/qqkl4rGpCUOb0j+MP5Low== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+ieUVVVZIskofyobszOZSotS3S7+YkheR+/Im8erqdU=; b=esxef1x32bA3RXV5hIalJEseDd5tFDfOXiD+tvs7AnAkzfjeIrUhLELr6YtNWXs8uJdERHKuuWFB29zl3IM7LYSfguHY/tsteemR2D9ds8cuTqQHDmXn+IWmziV4uRzxAKBLJCOLhB8lKdHWBFhgjo/HFUB3IppOwyRkmVkefJ7bDJ0pWbNuLRg1RuHMQaWtLngcNwzJQ98ecpDXXv2EK8F0dtJJMCJXPqNy//tRWkeYsKNraqXFQ6oClbLM6NqRuvU9Oqwk7n8SxkfU7OoN5JaQwZHmNpM7Pk2ntSSj8jSlQPr/AZciNqTPn7skUtAJNzTS4+UwNKvlSunGm7fUyQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <4a9fd51e-d083-ad95-8f38-2829c980bb66@suse.com> Date: Mon, 23 Jan 2023 15:53:21 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: [PATCH RFC v2 1/8] domain: GADDR based shared guest area registration alternative - teardown Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , George Dunlap , Julien Grall , Stefano Stabellini , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <33cd2aba-73fc-6dfe-d0f2-f41883e7cdfa@suse.com> In-Reply-To: <33cd2aba-73fc-6dfe-d0f2-f41883e7cdfa@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR0P281CA0016.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:15::21) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|PA4PR04MB7773:EE_ X-MS-Office365-Filtering-Correlation-Id: b814be01-3ba0-4110-1e7f-08dafd5192eb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /ZcH9VsGK1/hHH4DrxWcVsGeRTD/vD0LrcCssfY0beNe0GXux3MLSr4o6cFYHW6YhlNpnwr7KZ60+HHAPw9R3qWQR1IHc5a2aUWhgp8mKHoJY6qZXRt79sId86XMvs3EpYT80LJg10jtKQn7ZrJXjRndeKPrsm2JEYV+aEbqA2YI4cSoscvzK/r4UNDadRtnmmvJrKOQgd7Qr1tdWNnSukNd3h+u+S2jg8eaUxVUktWr8uOHirbIw8EqT/+AfNpICY+xeXfbwBqpaUj5865lE+tnIZLuEYQDRBdxFM2At2KCog32KVdlwzBWVlM1ypzMo1xnGcMIhtv046Fy+ctuhSQDzjTt4jPMOcJxNoiOHR2RpdrNvXPvUhalKX0TiMJwhyWBQAP8UAE55N6zCVDwqjXhzFv2oAXrC/mrhoFVweCmqhXPVECWl5lniEWBlGtacgapFeC8NTMfDeklfYcUGJIcaQ8FcC8Ec9WKnRy1CI29fYpEzQ8DuUb5k0UUPl87N36PkP8f4NOtPrVseXOCu6kGESTwAiUcVf2aoV/agvDsBi89+aAW5Uars0woXBqVc4ARk1iKOVQvIKdlYGD8sY6kLzVZ3WcZV71SrT1ZY2mg7UwNWiFNURQNOnxk7rwNgsgA/JzPhYXb07Z6rDHx6EN4eYdC56bFXzaAwvesak8js6unFdq8IF2yhjeZxO00e6gHA4Zr9/KMYzLZXpbHvsYy0S5yYOGXYwqSaa96BLE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(136003)(396003)(346002)(39860400002)(376002)(366004)(451199015)(54906003)(86362001)(41300700001)(316002)(8676002)(36756003)(6916009)(66946007)(4326008)(66476007)(66556008)(31696002)(6486002)(38100700002)(478600001)(2616005)(186003)(6512007)(6506007)(26005)(31686004)(2906002)(8936002)(5660300002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MkNzRmYzN1NDZlplRXNLd1Y1QUZCbmY3U09Pejlla2wwK0ZJRFh4NzJOQWpF?= =?utf-8?B?RTBiaTlNWlVGdm5MOUsxV0UvZ3NBbzVSZWpjVjY4aEhIckVBYTVTVEJIcFQ0?= =?utf-8?B?Q0NGdm50dXg3SlVNNTNydDhwMnd0aTR5V2cvaEl4bEdydVlMSUVNbG1NcmUr?= =?utf-8?B?RjJDK2t5aitaWVF6NVBxT2hqeWh6MXYxSStJUExSaS9PbHRpUldkbmNKa1BR?= =?utf-8?B?RXZSUUh3cEt5QUw0YjlRV0Z2dXNWc2Z5QVN2V2hVRytUQXQxYnN4bW1EamVn?= =?utf-8?B?OEdYc2tsYWpJcW1BaUJ0eEM3dVk3aTlweFdDVFdjOWxBdVh0UmoyZDZaWVd5?= =?utf-8?B?QjVkbDRmRWdDM05FRC9Jbi9iK094R0hjMFpWWE11Rk5oWGQzRjYxai9nUnM4?= =?utf-8?B?Z1c4U1BWc2Nkai83UW5TOVJHbU5xaDJienZNT1ZTN1FERlVEYkR3YUZDVklF?= =?utf-8?B?a2M1MCtUMnFtTUxCZ3NHNW1JZlZtNkJxdHRCOWVCUmVpaHdSa2RQWitPNUNq?= =?utf-8?B?M3ViMkhieWZudmdEeXk3b3VwalZmNzY1L0Y1MklIUlZEdUJHNzJScmlYTzAw?= =?utf-8?B?OTRhMmx6UDh5SnFETmJ4OWpOTVFlSklzcTYxVStnM1ZWMDloTE91OUZncWZF?= =?utf-8?B?ZElvVG42NW03M0M5OVU5emRLUjVJcFpsMldjRW9vTXZpYUk3UlVmUHNFbit4?= =?utf-8?B?WEd1OGttcng0disxV083emFhbkdFQ0l2OTNxdVZucTBmOHd4RFJ3bHB5NnRU?= =?utf-8?B?dklYOThPZWZNNXFMK01RUDdxeU9NU2tEYXJZV05nNElXQllpa3pwVGxBZEw0?= =?utf-8?B?Z2FSeEZxYkN5d1BTZFg0SW0vSkd1NTBzYXQ3azI5NHJ3d2l6dmtUQkRTd2Nt?= =?utf-8?B?YjRkR3A3SmFlOUdkZ0haajNDdTVJd2FzakVrQVdmVjV5bndmRFdrOWNtRGR3?= =?utf-8?B?dXFOK3lqZFlkYmlKWDV0MGVDQ1VnRklLR0loN1JRd25YMW9LTENwU0x0NGda?= =?utf-8?B?VmlIbEt5cU5heUdmQmQ4aEFnaGhRRlFqRXhFcUpOZ045a0Y1MDRSQ2d6WTZX?= =?utf-8?B?WWI4RUxKeldDM1hSd0JLdG5LUE1PazVtem9wNVduaHJSb0d1b2VKYzQ5SGtR?= =?utf-8?B?cUFnMHNVajYyV0FsNUwvSHVRUjdVRFQyY0dTUGVuMGI5V0FZM1QvTTIvM2hv?= =?utf-8?B?U1A1TDZHRk90QWJ3VWhjeHEvS00waGJVV1ZNdERkSTNBc00wd1NlamZXWVhz?= =?utf-8?B?a1BINzBvNzlUaHhkMWNvNXVaWi9zNTBiSExLZTRKczhvRUlnQXVFSm5ITXlY?= =?utf-8?B?SGxMN2VxdUZsazlCYXNYUG5zMWJKczR1NGdNSmNGOThxU0NpZEFOU3E4NkpG?= =?utf-8?B?RmpuYTRacjZ5NEVMT0JnU0gwTDVQM01wNjkwK2J1SzRYZkpHSzhyZ3VPRjlk?= =?utf-8?B?NDR1R0hmOHFmWTc0aTkzTXVoYjhpd1lVM0dtV1Jnd2RqdFZGSE9HUWl1THF6?= =?utf-8?B?SjB0c2JXZUNCUkFrZDJrWEFJZUlGczBMQUl3c2tQNTVTczY4K0tpKzhzRjc3?= =?utf-8?B?YkdmelJ3Rm9vOGplWWIvcDVzNDFmRDV6UnNUaDlqNHNBVTZzakdQTlR2ekFa?= =?utf-8?B?N0ZTUGVjUzUyOHJvMkVQU20yK2gycVRGTlZNQmxYODZhV21sZWc4N1o0VjRS?= =?utf-8?B?czQ4aVhTc0N5MkhUL1lJSkUzbmNuNW5BcWtUWlNBc29rbnBSanlTWU5rdTho?= =?utf-8?B?Y0lUOXZBL2RFL1pwTERiMTFlOElodEhNRGdNazI1TWg5dTA0bmJCc0p5VE5s?= =?utf-8?B?QWEzUEx4NDF0Q1p4Z2Zhb29iNldkM1B1R1hDUXhzd2dIOE40VWp2QmNhbE5C?= =?utf-8?B?cU04dC9MVzZ4UHo3cndMb3ZTd01vb2xwNFI5Z0k0Ym82N1VWRkhORmhLWjIw?= =?utf-8?B?ckhuV3pMLzJQZWt2TVBSRmwzZjZJWVQzenBpSnprOFpIZVRJaXFQU0l0bkxQ?= =?utf-8?B?THhYOHNpRmlyNHRmUnEvSDBLZ2JWb2JoV2lKY0FDbDh2UXhRUnhBTVFSWmc5?= =?utf-8?B?bklNTUR3cUxZYWFVZGxiWktrazVhYkdWQXFaRnFlS0x3UndkVDQwQ2c3dVRT?= =?utf-8?Q?5cqbhST9+6tW0eo4mMnJRLeYq?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: b814be01-3ba0-4110-1e7f-08dafd5192eb X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2023 14:53:22.7906 (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: 9xCEzB4ZIIs59guhEr+jSabhPV0O5enaoa2pKbyyI507xppZ1NS4FXl/Q2Cz+4yyAoeXlryYLN4ppqzOcTb9MQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7773 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1674485635831100001 Content-Type: text/plain; charset="utf-8" In preparation of the introduction of new vCPU operations allowing to register the respective areas (one of the two is x86-specific) by guest-physical address, add the necessary domain cleanup hooks. Signed-off-by: Jan Beulich Reviewed-by: Julien Grall --- RFC: Zapping the areas in pv_shim_shutdown() may not be strictly necessary: Aiui unmap_vcpu_info() is called only because the vCPU info area cannot be re-registered. Beyond that I guess the assumption is that the areas would only be re-registered as they were before. If that's not the case I wonder whether the guest handles for both areas shouldn't also be zapped. --- v2: Add assertion in unmap_guest_area(). --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -1014,7 +1014,10 @@ int arch_domain_soft_reset(struct domain } =20 for_each_vcpu ( d, v ) + { set_xen_guest_handle(v->arch.time_info_guest, NULL); + unmap_guest_area(v, &v->arch.time_guest_area); + } =20 exit_put_gfn: put_gfn(d, gfn_x(gfn)); @@ -2329,6 +2332,8 @@ int domain_relinquish_resources(struct d if ( ret ) return ret; =20 + unmap_guest_area(v, &v->arch.time_guest_area); + vpmu_destroy(v); } =20 --- a/xen/arch/x86/include/asm/domain.h +++ b/xen/arch/x86/include/asm/domain.h @@ -658,6 +658,7 @@ struct arch_vcpu =20 /* A secondary copy of the vcpu time info. */ XEN_GUEST_HANDLE(vcpu_time_info_t) time_info_guest; + struct guest_area time_guest_area; =20 struct arch_vm_event *vm_event; =20 --- a/xen/arch/x86/pv/shim.c +++ b/xen/arch/x86/pv/shim.c @@ -394,8 +394,10 @@ int pv_shim_shutdown(uint8_t reason) =20 for_each_vcpu ( d, v ) { - /* Unmap guest vcpu_info pages. */ + /* Unmap guest vcpu_info page and runstate/time areas. */ unmap_vcpu_info(v); + unmap_guest_area(v, &v->runstate_guest_area); + unmap_guest_area(v, &v->arch.time_guest_area); =20 /* Reset the periodic timer to the default value. */ vcpu_set_periodic_timer(v, MILLISECS(10)); --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -963,7 +963,10 @@ int domain_kill(struct domain *d) if ( cpupool_move_domain(d, cpupool0) ) return -ERESTART; for_each_vcpu ( d, v ) + { unmap_vcpu_info(v); + unmap_guest_area(v, &v->runstate_guest_area); + } d->is_dying =3D DOMDYING_dead; /* Mem event cleanup has to go here because the rings=20 * have to be put before we call put_domain. */ @@ -1417,6 +1420,7 @@ int domain_soft_reset(struct domain *d, { set_xen_guest_handle(runstate_guest(v), NULL); unmap_vcpu_info(v); + unmap_guest_area(v, &v->runstate_guest_area); } =20 rc =3D arch_domain_soft_reset(d); @@ -1568,6 +1572,19 @@ void unmap_vcpu_info(struct vcpu *v) put_page_and_type(mfn_to_page(mfn)); } =20 +/* + * This is only intended to be used for domain cleanup (or more generally = only + * with at least the respective vCPU, if it's not the current one, reliably + * paused). + */ +void unmap_guest_area(struct vcpu *v, struct guest_area *area) +{ + struct domain *d =3D v->domain; + + if ( v !=3D current ) + ASSERT(atomic_read(&v->pause_count) | atomic_read(&d->pause_count)= ); +} + int default_initialise_vcpu(struct vcpu *v, XEN_GUEST_HANDLE_PARAM(void) a= rg) { struct vcpu_guest_context *ctxt; --- a/xen/include/xen/domain.h +++ b/xen/include/xen/domain.h @@ -5,6 +5,12 @@ #include =20 #include + +struct guest_area { + struct page_info *pg; + void *map; +}; + #include #include =20 @@ -76,6 +82,11 @@ void arch_vcpu_destroy(struct vcpu *v); int map_vcpu_info(struct vcpu *v, unsigned long gfn, unsigned int offset); void unmap_vcpu_info(struct vcpu *v); =20 +int map_guest_area(struct vcpu *v, paddr_t gaddr, unsigned int size, + struct guest_area *area, + void (*populate)(void *dst, struct vcpu *v)); +void unmap_guest_area(struct vcpu *v, struct guest_area *area); + int arch_domain_create(struct domain *d, struct xen_domctl_createdomain *config, unsigned int flags); --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -202,6 +202,7 @@ struct vcpu XEN_GUEST_HANDLE(vcpu_runstate_info_compat_t) compat; } runstate_guest; /* guest address */ #endif + struct guest_area runstate_guest_area; unsigned int new_state; =20 /* Has the FPU been initialised? */ From nobody Wed May 15 18:54:42 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=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1674485658; cv=pass; d=zohomail.com; s=zohoarc; b=BX3UgJLvygFAOPFPjRwmCDXnLpwm2vzZWsy19UWX5+9LVEns/Mswcjt5s4jcnaLby3SdAHVA+vOu6+Kdu1lBHocl+n8iqx31SrPV+zQAJPtNv2akIx20sw8zjFHntyq5zz+Xb7/9wwtHZiOzfGalkuuDB70LUZnwmSKEIROwrhc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1674485658; 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=xLGElkWNJzy0Qko5n6wahh8Mc1zRhNMqrRcxVopaWLA=; b=nzbT0woCgVpuOG8nluHE0O9AHDUbpI12JLCGl/NjVm782r1c+l69djs91fsPV5Dd/ilTqRCJ110D50ggVeQN+MaaHxjScZwb9lxcdikEyNQ9ec/wGLRSMcCkpVoxp6uqBIWoV7BK1cdydywtrNBdtZRiYv5yc51kd8ied6NrhGc= 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=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1674485658434162.27797113933707; Mon, 23 Jan 2023 06:54:18 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.482951.748773 (Exim 4.92) (envelope-from ) id 1pJyCw-00050I-Sj; Mon, 23 Jan 2023 14:54:02 +0000 Received: by outflank-mailman (output) from mailman id 482951.748773; Mon, 23 Jan 2023 14:54:02 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pJyCw-00050B-PD; Mon, 23 Jan 2023 14:54:02 +0000 Received: by outflank-mailman (input) for mailman id 482951; Mon, 23 Jan 2023 14:54:01 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pJyCv-0004vE-EM for xen-devel@lists.xenproject.org; Mon, 23 Jan 2023 14:54:01 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2051.outbound.protection.outlook.com [40.107.20.51]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id c47c3418-9b2d-11ed-91b6-6bf2151ebd3b; Mon, 23 Jan 2023 15:53:59 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by PA4PR04MB7773.eurprd04.prod.outlook.com (2603:10a6:102:cd::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.33; Mon, 23 Jan 2023 14:53:57 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389%7]) with mapi id 15.20.6002.033; Mon, 23 Jan 2023 14:53:57 +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: c47c3418-9b2d-11ed-91b6-6bf2151ebd3b ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UMJyfdgY3rYBuGCAzjCkP2DZ2hlBmw72kHJFef4s67K/Cn8CGM6w9eB9exMoZ4M1xzSkxuSfxQb0TgpngCAcYWpcaeWYiYNaCRTG4eVqaTlRxHgsUKxhmntKFOAN2wEciLur2F3zNFaxZCS7W1RHpkHATbYUtuFSodWaF1PneYtIds9ebD8IffWoz5O5U92rkrhBXoBJ4/nwLZ9bujOD79J80xwny9Qck97Ak0ARlMPsDGxqWUstXB+LUd/6dAXT9tFkpkR0dlbGoffV4fImCBffTk9t/XgOYbws/IxvYhdelt0BIpDr+5FSthJoF8z+qmBMSbDdoOqCFFoU4CXjQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=xLGElkWNJzy0Qko5n6wahh8Mc1zRhNMqrRcxVopaWLA=; b=iaAoEz/t1if+SToDS6yetda/Z+N0Dym+j002mXnH0j0OJdJZezseQ7Cw5GlICCv6iEmdUsj8tByh0PmVHMh1maqSXOh2EJhX7FnHCcr1l0UynSFEmS+Ocov6waolIWfeibDbT19iAw6XFL/J1574Jux907oPeVASB2Nk3bBhULnMxOOPjVKp+Sd7/Co/hOjdYJjniVsXiAtcTE3pxUWzYsMUe9vFWLIld9bpQMGGZ3qWs1dkClnHgxfSs1RpDIzLSHb0MFa4M/kAqiZu6asD4a/zzlzhKJV/45VJ435C6UaZya1WRdSK50FV+SfoROnSFkoaxRy1IJfVBoMiMxJ0sw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xLGElkWNJzy0Qko5n6wahh8Mc1zRhNMqrRcxVopaWLA=; b=LRDBQ7hya00xUJBVC/1b0odQGfpICE9f+gaAn/fLIFBGTIg+J07/VvEYDlzNhtk4SpKsfYhp2nkXRs3MSq4T+VsL+K+fV2mlKMwN7ePTO/5GL6QNDRxv74yQ2vcpDZvk3kMJkLp4j+j5FZepSMsYEE1L560pDkhHSw4iot/o9l4qzxB/dD/FE2EsQ4lRWcSeaZzcFilkNawQIVuSeYSL4hIFk7kaEloIbjysk4w2/zEZ1UBw16h7IU3qki4S+LfC8RGY9zuyiB6U+XBguFKlz3Y4Q43uAEauXLEe0nxRm8dCQxGPSwTNaC07Hv9atvI9ThnPt05Qw93E07+NhZILQQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <0cc7c5ec-b5db-f9a6-cfd8-c05a22f417c7@suse.com> Date: Mon, 23 Jan 2023 15:53:56 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: [PATCH RFC v2 2/8] domain: update GADDR based runstate guest area Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , George Dunlap , Julien Grall , Stefano Stabellini , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <33cd2aba-73fc-6dfe-d0f2-f41883e7cdfa@suse.com> In-Reply-To: <33cd2aba-73fc-6dfe-d0f2-f41883e7cdfa@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR0P281CA0005.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:15::10) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|PA4PR04MB7773:EE_ X-MS-Office365-Filtering-Correlation-Id: a8850510-960a-43c0-a7fb-08dafd51a7d5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: a9iwsAwBTZwqj493zHfISErjmTXBkwGwLbkPMLzuEtV1oi32wWBgTW25PfCvNEEM+iTOVC7zzX+ZJGnsnB7hE7uAj3UVx6ZNDDY+2Z/sOG6j77dUGKFOZMkcVwSYPFpLxnQzyYKT7sgDaJxkl5jkw1srXAXKERb3ffbd8CP6C8t3/ppFXUN3V0PZqcgc3sirqbAjc28Smf/ZXrDqu6c2Dh0xYMCrJvB8nTuHfbpvYcaN0lvIuS8OlpjwDiXPm3bE1kdndvWevU1B+Z4nQamPLJJuhPV9XYAKzq9lvN3KNIpS2R+TMjk4D8mwCqPIHqOOFP29to/Hf2B1wMHVYIq4ElCEpE3lF+VYddeX7YKUzrzzZlM+mKRx7KlePFvk+0CyqocN5H7zawPtjiTomoOP7OU0kPZy4vZwwmKDM79T7pNwLUWA6Gu+dRR9c+T2GqusJdzbUEb4zyphL5Q1aS7MYdnYE29rN1UXGaH98M92A3pUxGQqWumNJghOL2gRP+DN4U9ZbnnqKjZEnwuRaYsHuxc4uZ+hPc7u0hhNAdfN1/o4xSd2EU44kWbiDi//VGGL/lDw0z8q3jmHpvQ90Qu81VS1rr5k42CKMLp7JfbCXPkxM5HO+0XWdyG7I8ibkncreT+GOoPv2CbqCrqsZzzIcFVwPl160d/95JxFQUsV7y2OdUDVsSApE9q1AejGqF7iPpIp4v5CiTln3rMyn+9wqsCFz7V7+FADpc4KD/MQ20Q= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(136003)(396003)(346002)(39860400002)(376002)(366004)(451199015)(54906003)(86362001)(41300700001)(316002)(8676002)(36756003)(6916009)(66946007)(4326008)(66476007)(83380400001)(66556008)(31696002)(6486002)(38100700002)(478600001)(2616005)(186003)(6512007)(6506007)(26005)(31686004)(2906002)(15650500001)(8936002)(5660300002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?c2w3MVBLRmlmdkp5anJOclNNTmxINFpFNHV1UjdubGxoWWg1V1JEN1p0Z3Yx?= =?utf-8?B?bnNJeTJwUGNHNmlqOEQ0TFg3NklzZVk0WEhwaVJ6NCthNmJhSzdVUE9ST0Nv?= =?utf-8?B?THl6UWZxaXM2enphdkpDRGhEVGp1d0dieFZPL2QxZTRoNldPRlRDaEJSL0lu?= =?utf-8?B?NmNBU0tIWEdoaHFYN21VRVdvVG9yK0xFdUI5bFNyRWtUNzI3ZEdUYVZ4dEl2?= =?utf-8?B?cjRtc2xRbkhoT2p0UDh6N3VveVJCbnFnMFNXaGlKUXRKQUdlU2JSMEMxSjZC?= =?utf-8?B?eXpCS2gwNmxwVmVidVRsSGh2RUVReE9IUlVwaENqUytUOElVRUxOcGIwWnE1?= =?utf-8?B?SnNrZ1R4RW42YVE5VTZtUURMSWoxRVZVS2FzVW9mbDB0a1FVdGtHL3M3ZWw2?= =?utf-8?B?TnUwcmwwSk9sSnprRkVnQS80RFZZeTBJN05JR3IwUFgxYXFtU2F5Q1lGTzRl?= =?utf-8?B?eDcrdnoyTUw1QzMzNysxT0ljcjBZRHlJQWFUTkw4dXZiWFNITjZadExJOEo2?= =?utf-8?B?QXp0TTFkTHFvSnhwVlUrUkdhWjlWT1N2bUNGQjFmU2FDbzJLYWxWSHUxLzJD?= =?utf-8?B?K1EyQUJDMjlLaUUwdzFtU291bmtOY005SllWUTZlWkV5Szc3ODAweW5ydmxN?= =?utf-8?B?WHFCSmJpSXhDRmxsS2JUS3FuRnpxWGJDQkpaVWErWVBabmxvb1FJZ09CazUz?= =?utf-8?B?Qk5tTlRsRlViYVdNeW5uMVhQY1RHRjNORmhxdWF3dWFNZitVRUVkMjVBTjZD?= =?utf-8?B?RTd5Y3J6UFNNeUQrcjVSbHVORUc5bSt0bkw4UGJmbC9qYjFtR3ppY2JINVFC?= =?utf-8?B?Q1ErMTJTY2I1YTJ1RXY2SzRHaHhQZEZtUnQ3ckJidE0xcUFnL2hlTE4yU0RQ?= =?utf-8?B?S3ZQQ05INWVhTEZ5S2NzT1NKOGlkY0VrRUJDUGZiVnBVeWI1SnRMSFdhano0?= =?utf-8?B?cy9JVVRqQ04rNEZqSXdUZi9IYml0SFkvMlpWaEE2UXRSdmNDem5UekltSmg5?= =?utf-8?B?SUtNTHFKOXRYb0xEb2IxYjROVXlTeVZvZlY3YS9vL2Y2T1V1NDl4NlJVMDRq?= =?utf-8?B?bm9HVkZ1bjRzZTdCVDBkQnE0RWp6ZW9vc1gveS91OWVRYm9vcEFJci9TNFNH?= =?utf-8?B?WFVDNUFadzRSNHE3T1FOYjdJOU51dVpJa0UwTnhHY09HbU5Yc09lTnM5Tk9I?= =?utf-8?B?eHZvdGlEZGRObjJ5cmZMcjRneUNwU2JsZ2loclRYcTNKUXNFWHlGdURockFF?= =?utf-8?B?ZnUwV00zMWpweHhwekhodGtNZkFFc1hEa0JpdVFHMGt6dkd2MGpDMW1oRWkv?= =?utf-8?B?VTVPdHFXc3kzZXI5YzNoOXc5NG83SjZJTGxsVytJeU1xQk8wNnZUMnladHRD?= =?utf-8?B?cmJzZE9handCeTgvTi9ybnhRNVpxNVI1azZtR0R4N29HdDZlRnhiYjB0U01h?= =?utf-8?B?eFg0UjB2ZU53OGVKdXMwMUt1amRaUWxWQzRZYWJuM0xJZVdRbXBSM1M3ejdC?= =?utf-8?B?SUNaQjlZL0FVMGcwcU9ScTBGeGc2dlFpR3YrT1k3MmVEOVMra2hFbCs3Sm1J?= =?utf-8?B?ZGFuejBOTis3YzNVYUR3cVhoMnNERStCUnY1WnhzY3ZUS3hWQ1lxMWZiYWxh?= =?utf-8?B?Vkh3RjB0ZFNnY2NEaWJBY0dqZTlxZG5pZVJXL2FGMHJaUDRycjdoR0szQm1a?= =?utf-8?B?ZWNnUStlam0rNWIzZ1ZNQ2lOQWV5K2V2Tk1PODlNa2hBYXRZQjNjYkJkWU5m?= =?utf-8?B?VjdPRjlhcDB0TGY0SlRGTEorUXgvWGFCa1I1cXczaHgwWk41dnA1bWd3cmV6?= =?utf-8?B?WlU5bVJDelBkdGJoalFUd1lhY3FLOVowSk9oeDRlRXRrci9BYy9US3UvYVU4?= =?utf-8?B?cTR2dzFVQ2N3L1ZGQjlZWm9tcXVqL0NEckZTYUhDQTc5bmNZUkpkOElWQndu?= =?utf-8?B?bi9Tc0Jiek85a25lcVB3ZUd2dWRISERBWTYyM1dTQmh4bElHdTRVdlhUdEFt?= =?utf-8?B?ZDdVbXNvbDhnNEFRYXkwRFUyZ1JtYmZ2TzVaQldlTU5OVTVpRDVnSG5vanB4?= =?utf-8?B?Y3dCc3hQbnBDV3loRDdha3hlbGZ1YksyNU00REozS1E2TWI0NXFQRjRzQitK?= =?utf-8?Q?QPk/UbySPRoK6ABpFOzsT9gKj?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: a8850510-960a-43c0-a7fb-08dafd51a7d5 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2023 14:53:57.7884 (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: c4hTpLgHb0Xlm0+u4YCrqVn8pFVwfYs2Jb4Tx2TXGQ9v0ew02XNL9QXiLnsU8WVfz46X9GzxZcp6Gy/e+pCY1Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7773 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1674485659880100001 Content-Type: text/plain; charset="utf-8" Before adding a new vCPU operation to register the runstate area by guest-physical address, add code to actually keep such areas up-to-date. Note that updating of the area will be done exclusively following the model enabled by VMASST_TYPE_runstate_update_flag for virtual-address based registered areas. Note further that pages aren't marked dirty when written to (matching the handling of space mapped by map_vcpu_info()), on the basis that the registrations are lost anyway across migration (or would need re- populating at the target for transparent migration). Plus the contents of the areas in question have to be deemed volatile in the first place (so saving a "most recent" value is pretty meaningless even for e.g. snapshotting). Signed-off-by: Jan Beulich --- RFC: HVM guests (on x86) can change bitness and hence layout (and size! and alignment) of the runstate area. I don't think it is an option to require 32-bit code to pass a range such that even the 64-bit layout wouldn't cross a page boundary (and be suitably aligned). I also don't see any other good solution, so for now a crude approach with an extra boolean is used (using has_32bit_shinfo() isn't race free and could hence lead to overrunning the mapped space). --- v2: Drop VM-assist conditionals. --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -1616,14 +1616,53 @@ bool update_runstate_area(struct vcpu *v struct guest_memory_policy policy =3D { }; void __user *guest_handle =3D NULL; struct vcpu_runstate_info runstate; + struct vcpu_runstate_info *map =3D v->runstate_guest_area.map; + + memcpy(&runstate, &v->runstate, sizeof(runstate)); + + if ( map ) + { + uint64_t *pset; +#ifdef CONFIG_COMPAT + struct compat_vcpu_runstate_info *cmap =3D NULL; + + if ( v->runstate_guest_area_compat ) + cmap =3D (void *)map; +#endif + + /* + * NB: No VM_ASSIST(v->domain, runstate_update_flag) check here. + * Always using that updating model. + */ +#ifdef CONFIG_COMPAT + if ( cmap ) + pset =3D &cmap->state_entry_time; + else +#endif + pset =3D &map->state_entry_time; + runstate.state_entry_time |=3D XEN_RUNSTATE_UPDATE; + write_atomic(pset, runstate.state_entry_time); + smp_wmb(); + +#ifdef CONFIG_COMPAT + if ( cmap ) + XLAT_vcpu_runstate_info(cmap, &runstate); + else +#endif + *map =3D runstate; + + smp_wmb(); + runstate.state_entry_time &=3D ~XEN_RUNSTATE_UPDATE; + write_atomic(pset, runstate.state_entry_time); + + return true; + } =20 if ( guest_handle_is_null(runstate_guest(v)) ) return true; =20 update_guest_memory_policy(v, &policy); =20 - memcpy(&runstate, &v->runstate, sizeof(runstate)); - if ( VM_ASSIST(v->domain, runstate_update_flag) ) { #ifdef CONFIG_COMPAT --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -231,6 +231,8 @@ struct vcpu #ifdef CONFIG_COMPAT /* A hypercall is using the compat ABI? */ bool hcall_compat; + /* Physical runstate area registered via compat ABI? */ + bool runstate_guest_area_compat; #endif =20 #ifdef CONFIG_IOREQ_SERVER From nobody Wed May 15 18:54:42 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=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1674485684; cv=pass; d=zohomail.com; s=zohoarc; b=Yzh/kLQVldUskg7CL51FHnTZaop4vf3A/EVS9QcqBDdXzGmUeoHnTL29ezRqHHHciOni1tqnNG1LnFtuQh1X33xvOp15nKppmA5AMRnEB6zIjKtsK1dc173ZXzEPUQLVScN6ahfSILisBVNVcoSklvPckD+b3vSu4Q9asJYsa5c= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1674485684; 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=uB3131ouV1w0eF2ri7Zz76fAeueaRAbvh0LQL2AdBT4=; b=mxLMemJY3c7NEFR7V/ouwwCDZv/H9oV/7n9OSeo+CpGh97lmwyXZK8h2+DCHOkO7J5JU0Q+hJ875FqbGgeSeel0QB3FBkHy53ybwThcxkdPyZc485b9UB6JhbktQlg3+xG+Wdy11gdSJg7+mRUtjnnf8X0IGfc8bxy5UhzVYOSE= 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=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1674485684783337.5152735629024; Mon, 23 Jan 2023 06:54:44 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.482954.748782 (Exim 4.92) (envelope-from ) id 1pJyDK-0005TJ-44; Mon, 23 Jan 2023 14:54:26 +0000 Received: by outflank-mailman (output) from mailman id 482954.748782; Mon, 23 Jan 2023 14:54:26 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pJyDK-0005T8-1J; Mon, 23 Jan 2023 14:54:26 +0000 Received: by outflank-mailman (input) for mailman id 482954; Mon, 23 Jan 2023 14:54:25 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pJyDI-0005Sn-VO for xen-devel@lists.xenproject.org; Mon, 23 Jan 2023 14:54:24 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2085.outbound.protection.outlook.com [40.107.20.85]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id d24b4f11-9b2d-11ed-b8d1-410ff93cb8f0; Mon, 23 Jan 2023 15:54:22 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by PA4PR04MB7773.eurprd04.prod.outlook.com (2603:10a6:102:cd::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.33; Mon, 23 Jan 2023 14:54:21 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389%7]) with mapi id 15.20.6002.033; Mon, 23 Jan 2023 14:54:21 +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: d24b4f11-9b2d-11ed-b8d1-410ff93cb8f0 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZKjw0lQj7/r6HOS2+9hXSwapljUiThwRDoha6a0Hy4UL5LHsxftjNusUdOObOJ+7wscsoKRk3w+OYptXaryGHbwkfJTyjtDmUqKzSid+2rlDhV/TVInyj7dJ4Lwo9jCbM9rANysDcRr/bdzryVWAQxp1G9C8LGon6FywCY5fMdRrbIht0+yyXIHgsbUUvIUW594IelZPnol5fUuaLnm613UFg3Jg2nW0l93QCiMLkrbQoysuCeBiDG11dxI6zjxUEQ4BzJAGNOHSA1NpT2VY7qNuPAk6r01yN4x0exUA0rtClBdF3zO/lTuG2dVziGRDtZNvkbhJCAx5jS1yUDtdbQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=uB3131ouV1w0eF2ri7Zz76fAeueaRAbvh0LQL2AdBT4=; b=L3p/eGSB/cmTKCJy5bq6b7dh2QZsx61UT6SsbOqanbWCrdH9DoMo0ADL13SCu+NwlGlJJ/PHqxliyUlgRk16/3PJuDbChU5jI/EV5EFV3ktYKPahM6YaD1YqgsaXGYIFuIv0rfy3sqG2O1V0hm/laSCz6Y295kDxIEz5G+dCsOu8nmtavjsxxukFkeHMe8zOrFZWA4fNG8iUUdt5hGApmsSMiDgLoC+tRi9OsOt4YfxVRTEJ7ZJxQB6ZDyXzTgnd3LJqJaqSS/p1EwH325ASNgit7pIKudu/100xxVmpykkO8qaQBEFbL2GnxWW2FxEjXC2cnMyjd0MH/xgzrL1W4g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uB3131ouV1w0eF2ri7Zz76fAeueaRAbvh0LQL2AdBT4=; b=e71a9TPS1qj4YG7+VbneayVFG4SxfLQ1S1JBrvarojoTYvMabVfppRJusEY1ik/gSwQmLNSchxCIkY/iD4JGczj9lsb63iIX8qKBx2+J5hY1rPUlX/x5S+O8xOC+n7Hk4g9rlD5QKsQtql6sZm1bjj4oUgHugnvx6S9+N83+C0td+xIBvCT/dQJBA8/pjsxqzHBzrmdQuZEPrb6PSwCxtoJPqH/RV0UcV/pZuN5Yj8ONGgzDJdyarWjl6ZmwxM97VInuJz0vaE6Y/rrCXtseoNhBRPMizwkexCFOiUFdBmD4LA+HgMULyRuxhJViDzbF2pVBQ/y01gYJuuVGWC5i/w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <74e428a9-9309-4ef6-16cf-37f7f9d5c8f7@suse.com> Date: Mon, 23 Jan 2023 15:54:19 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: [PATCH v2 3/8] x86: update GADDR based secondary time area Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , George Dunlap , Julien Grall , Stefano Stabellini , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <33cd2aba-73fc-6dfe-d0f2-f41883e7cdfa@suse.com> In-Reply-To: <33cd2aba-73fc-6dfe-d0f2-f41883e7cdfa@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0127.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:94::13) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|PA4PR04MB7773:EE_ X-MS-Office365-Filtering-Correlation-Id: 0df1fba5-82b1-4f13-3f8a-08dafd51b5b8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0w/0LhDVftYWDWoCh1ba820g4syNQVcr0uFTTylJy/lERty2h8mJx+VYSvsWPsv5wGAY+iwfuJK+qTtX27N6CfKTMSljN+y2Dly0WyJzXsrYBEw8SL5jzDR/HaKVf6GrcPdvqkhNes7HtGqJB9LGQHmfU07qJMtmO1GXqY0jWT5aH2yNWDNTy9eQfe02FfxA2uZPi90W/sT/kCcZuaMOonlmtqJ9FZJ2pgpZcTJO7YAIEAnAFtbZP7YjSLlYj7C2Xw3jEMgK22aVoBDb9DQCcgW/O2PkmmY322OLQXd52a/Qb+VMaP93XARNSdvhLhEOekj/Ox51Kt/1/SA2B5V2d5S89LevfbAvyfVK1qIPtPEnjIsbUFFfEEyfcZpDcLHjr7Q/WkY3Mz67QzCKDfC+VlvMY8d5BjQe+65v/mHQ45leafZmkJwpKRT71raJaZeLeYZGCpJQprrBFnYXUqYrCPCAItAFQi6mNmfn4FEECpOgKoXf2+l1mRnrqYJpe0lqXN4K4l+CtcXnG3Aek4O9NpjWEqJIR82jmgxBeOILX9G++sXtn4lNH5b7U5afmCFqwNHbGQt/RNnF1DiGPVNYY+2u9LrqxTcAl7khzlB3yOC5EBQ4eEDageCrZoqJ8WnUWNEUJ6B2koMeYhbwj+/iP+8oQXtGzQ4b8S+NhAWC0pjQx75onMlUmty3kWeK9Q5jekeD8dH4b6UyDEshWDY31jfCrTywCvZr41cFBKihdQw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(136003)(396003)(346002)(39860400002)(376002)(366004)(451199015)(54906003)(86362001)(41300700001)(316002)(8676002)(36756003)(6916009)(66946007)(4326008)(66476007)(83380400001)(66556008)(31696002)(6486002)(38100700002)(478600001)(2616005)(186003)(6512007)(6506007)(26005)(31686004)(2906002)(15650500001)(8936002)(5660300002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aldSTExpU3N1aFl2UWVzdlcwVytWb2tJTEdrK3p3cVJXSE9ndUs0UlUyRlBj?= =?utf-8?B?YUIrbmxxWHZBUHdTdjIwSUxrQ2VYdE1XZmJyd1Rzb0ZHUkQwcWp5TFM0UmJ5?= =?utf-8?B?eStZZ3o5RlAvMm9CRkFUWnVPQ2xmTWd0eXNVOE8xYUhMYXA2TEJIa2tYS09B?= =?utf-8?B?WXR0QVlLOG9wZkVpRlVMTlhsT3ByajNzSHJUN0ZHbWh4VmMvUERKRm11SmpJ?= =?utf-8?B?QzNpMFJlbWp4R1VHZWZSSkRwS1dMRE5nZVpJQ0luQjNkc0FzbzJZVmg3K2RB?= =?utf-8?B?NzcvbnZxZnVkcDZYYW5vT0JNRDZVZjNCUWtqWVVKVWtNR3dtc1BNcUJMYklD?= =?utf-8?B?TFowb24vM0lwc0hJdXFrV285TExKbytrT0pFMUVRUkw0d1ZCVUIzTk9LK25R?= =?utf-8?B?Y0g0NHpQTk9GcWs4b2srd2xRQTJmU0g2MllRSUZpZ1M3dFlSVjRSd1k3TGJU?= =?utf-8?B?MGZPTXdWZmxyRkNBRC9SZVJBUlorbjZodi9JV3dRcXV6aE9qNWx2MkhEd1Bx?= =?utf-8?B?TEtPTFZYOEd5RHJTL2ZJbzE4SERyem9NbjhNVnorK2xHbS9wd25vd2VjcGVp?= =?utf-8?B?UUFwbENmQ3hydXVHQm5QSzFlanlMYWZlaEt6NFNtU21oTVV0T0tnREk2Wk1x?= =?utf-8?B?UkxQQkZ4TDIrbFd4NXB6cVlybnJYQVVuV2hvZ1EvYitTZ1d6NEFFdHFNcnRF?= =?utf-8?B?a3RNdnQ3Q2FTWjk5WlczM2d5SUh5VzN0OXdzQ2laWlFUeUlJc3JCM2tZSVVH?= =?utf-8?B?Z25MejdqNE1jUUU1YUxIWmJUNnRKN1o2dGNqblpNZjRZYUdQVFc3Z29HTy91?= =?utf-8?B?TlYxNXUvQmtZbE13emFJS3FZbk5hcGF1c2lwSFh1VmMyTkt6OGk1VndCQjYx?= =?utf-8?B?OUk4cXIxdUFIcXpjT3NDV0orSTdmQXN6MkUxMi84MTczVHI1VUtCbzFrRFp2?= =?utf-8?B?M21qWUVqbG9aT21KUzlzSjBQRGwxVTh2UnBJeUFnYmJjNVh4RDRMSHZ2aUN4?= =?utf-8?B?emJVR1N2eDJjb1Zzd2h3NDNieEE3NTU2ZlRnbFdwZHBzTFN6RHRBeHFDVzQ5?= =?utf-8?B?STBpY01FekNpWWpCZWdMdjRML1AzT0JUdmVvZHhaYXQ5NzVtbTRDK3JkRDF1?= =?utf-8?B?eXUwRG1UUTVSZWduOGVJWkFrN01aL2xKMzZRNk1MeGZaWkFGai92Skk4VUNq?= =?utf-8?B?eXMxV2RKcjF4b3FyTW5FTW9tQTlqdXhiOGZWVGtDU1BTb1NZTzd0TFErK1JM?= =?utf-8?B?L1kzL01WcjcxYXI5bzhkd3FhQ1d3cy9zSEdhV2JobklGQVphWFc1NzE0b0JI?= =?utf-8?B?VGVmWVJ1UVl5TEltZkRiSnpUMDJDckZudFVkL2t1ZWJaSWRja3puQ0FFb3p1?= =?utf-8?B?RVRzTms4NkVYRFZwb01ONDRXS25TWEFiZUNCWERsZkREOWFYaGE2ZW1VTlRV?= =?utf-8?B?RVRIZXIwNTBzSSt1aVRpenpReGE3M3RQaVJISUsxWU1IL3k4WU5KUUtOaGU3?= =?utf-8?B?YlJheVI5cVF4K3ExWDNrTWpMODZCSTBlaW1OYnFGMmUrZFBIV2ppMFJNbU1I?= =?utf-8?B?TndVN29JM3NKeldFT3pzem9nUmlsZEJWOWxmVklRbkRHOEtudnBLbkczYlA0?= =?utf-8?B?N0dMSDF0RzM4RThyM0JiaEllQjJvS2U3blhRdjhRUmMwdmdPL0J2dG1Cb1R1?= =?utf-8?B?a0tYR3RKUFA2VjBUV21Wb0ZkSmU0T1BPeFZDSTlNMVpUWW9Qb3BhVWFQQVdL?= =?utf-8?B?d3JoeDZnUW5IQVRpendJOUdZcjlUQmdBaG1LeG1IWTdtOWVhL1krZVJ2djFm?= =?utf-8?B?ZmpoS1pYREplbGFnMFN6NFEzLzJMb0p2czlBZkE0cUtsRUc5MU1YbFZKRHRh?= =?utf-8?B?M0RzV0VrY3RjQ1lFalB0OGsxNjhhVEFDMjN6RWZRRXNtdDRrcldYaGpETHRz?= =?utf-8?B?RjNLaEFOMXBSY2dwUm42bkZSY2hNM1dwV0VSbExyZ2d5S2x0ZVB1OEU2d3JU?= =?utf-8?B?b3FlUldvdTZJRTJmVDhWZnI5enFCVkJGNlJ0dXAwbFRPcithWnhZUDFzY1o4?= =?utf-8?B?RHN1cVc4bmNQaDE0UDdvME14RldRY3VDTzY4alBveDFFSkcrVlZqMkdERmN5?= =?utf-8?Q?2bsnhDEb/Q33apRTMu9CbsIkd?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0df1fba5-82b1-4f13-3f8a-08dafd51b5b8 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2023 14:54:21.0994 (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: OhLXKreFrhMnMQNzXvWHDpOlPbCG+WH6nBALruo5xev2dWcSyOdtcfvis0tK5vTrw1kLOWSYVCbpf+7UcsP2Pg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7773 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1674485685943100001 Content-Type: text/plain; charset="utf-8" Before adding a new vCPU operation to register the secondary time area by guest-physical address, add code to actually keep such areas up-to- date. Note that pages aren't marked dirty when written to (matching the handling of space mapped by map_vcpu_info()), on the basis that the registrations are lost anyway across migration (or would need re- populating at the target for transparent migration). Plus the contents of the areas in question have to be deemed volatile in the first place (so saving a "most recent" value is pretty meaningless even for e.g. snapshotting). Signed-off-by: Jan Beulich --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -1462,12 +1462,34 @@ static void __update_vcpu_system_time(st v->arch.pv.pending_system_time =3D _u; } =20 +static void write_time_guest_area(struct vcpu_time_info *map, + const struct vcpu_time_info *src) +{ + /* 1. Update userspace version. */ + write_atomic(&map->version, src->version); + smp_wmb(); + + /* 2. Update all other userspace fields. */ + *map =3D *src; + + /* 3. Update userspace version again. */ + smp_wmb(); + write_atomic(&map->version, version_update_end(src->version)); +} + bool update_secondary_system_time(struct vcpu *v, struct vcpu_time_info *u) { XEN_GUEST_HANDLE(vcpu_time_info_t) user_u =3D v->arch.time_info_guest; + struct vcpu_time_info *map =3D v->arch.time_guest_area.map; struct guest_memory_policy policy =3D { .nested_guest_mode =3D false }; =20 + if ( map ) + { + write_time_guest_area(map, u); + return true; + } + if ( guest_handle_is_null(user_u) ) return true; From nobody Wed May 15 18:54:42 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=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1674485741; cv=pass; d=zohomail.com; s=zohoarc; b=XhCQzuQsEUxQyzaPGihCd9Cr3hh1LuB6FoDKTRcFxEUeOQLiWon+YTHFob0gsrZSist5uDBT7zBDS+AskLMJKc1y39heD7PKBIIRkb+nimC17y7reA/sG4yP1zzsgtz0tICp4JhezbE/6egA2C0gj0/LVdv629FXD8vLkEmKgIs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1674485741; 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=XBd5rNRYBMnhzTJl9KZ9diTDyGeUkSl/k2wQJ+HyU7U=; b=oDchKjw9i1M/360DOCrkWYYgJqtqEoNp07F6IJiNSjQD2rv3RaVr2ivWf12jlqS5a5gwyrbgH8H3O56vzmtAXU6VCVfrGvsyREvplMx9DmuWCRQht1laAGFE2Oc2JxjZjA/kffMxYlY9pEVq5p3h9sP3S0GDWsi4GEIUr6d/71E= 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=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1674485740735150.60429024700022; Mon, 23 Jan 2023 06:55:40 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.482963.748793 (Exim 4.92) (envelope-from ) id 1pJyEG-0006Cd-LD; Mon, 23 Jan 2023 14:55:24 +0000 Received: by outflank-mailman (output) from mailman id 482963.748793; Mon, 23 Jan 2023 14:55: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 1pJyEG-0006CW-Gu; Mon, 23 Jan 2023 14:55:24 +0000 Received: by outflank-mailman (input) for mailman id 482963; Mon, 23 Jan 2023 14:55:23 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pJyEF-0005Sn-GU for xen-devel@lists.xenproject.org; Mon, 23 Jan 2023 14:55:23 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2044.outbound.protection.outlook.com [40.107.104.44]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id f5853384-9b2d-11ed-b8d1-410ff93cb8f0; Mon, 23 Jan 2023 15:55:21 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM9PR04MB8422.eurprd04.prod.outlook.com (2603:10a6:20b:3ea::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.33; Mon, 23 Jan 2023 14:55:19 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389%7]) with mapi id 15.20.6002.033; Mon, 23 Jan 2023 14:55:19 +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: f5853384-9b2d-11ed-b8d1-410ff93cb8f0 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lzHcLqMRkQoh1rloIw5lkw+1b3GwJaGQIPTIRT/XdgjGkHIGrvL+MiflvntiSSdSi1r2LVB7vHxRGmpCHzdhb294dm+jTgrkp05uOlOwD9OOWB5QLhRiCpX/6CGyyKlDENGVpHzbOdPR/ZCcYyi2XRfAQa2fwPdMiTBbPj0i0+yj4gfnwajQg18O+YjifnP9STrSR/aCubNjP0U23hx0/cqTah4fyiPsc56D1TcxJLC1gG71apwfdquutn3Pl2Xz11E7+A4/poAz8xsIb/w+a92b6kCYkKeh6p7BQeBzjQi2lJiIljrdu5CyZG7sO259JrAj6EsTQ2bOQ758Ln/akw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=XBd5rNRYBMnhzTJl9KZ9diTDyGeUkSl/k2wQJ+HyU7U=; b=JYLTn6/+r0RcRmXyskZbbCi+kEtdkN814whmGZUo6b6uMCBmgwevG9IynJhBXf7XPWzZRZvO8k7vuZfqJ49342oMHqLhf7TMXHTultorxfhJwHuRwZpzQmEZLlMc9xQY2L/l90in+bOEDGX3By74oB+yyw6Z1DjuMymS57BSKQi4rUUCvIFcuFBg3maqgm7lVCxfG222sWvaANiFz6mBOEpNxw6oNQREEq7KQejRoVuMMKucSR5bxVYjPxl32JZtzSZ1ANho2fZlhXMQDd4gBBGZ0S3mkRwcSz4b8snDBCMrnDRCGdQUTDxNL8q1BKG8MEgxwWr6++SpSWl6IvPO3Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XBd5rNRYBMnhzTJl9KZ9diTDyGeUkSl/k2wQJ+HyU7U=; b=jqQ6wd3VAEQhcCF8TG7Q7xxoLFkk9OMsoeDsKZYSXUB8R2j+TLL6OoP5fB855FmpRIidbDmeDUK/1pVCrHthPWLBYboRehk8sV1zx7rg9ipmubwr+erEiNaeLcCYzBLKKTECS50+kwmww0KvZLlvH2GulSC+3IEgszmYNt3Fk62rdeRInBUqHeMx3bmJDLuELcqnkM7KtIAIIax+yL8fElwUYXq4b+wbc9ISHITi9164EuSWXDPgOiThPDyr40fOrBPi/hPU+C5qIJM3rfy6Pw54aWi+MdcfK4lb8JSDpBqmDCWSjf7uYThDqYPJJr+1+jMbtGBi5Mhq3I9rNWTMFg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Mon, 23 Jan 2023 15:55:18 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: [PATCH v2 4/8] x86/mem-sharing: copy GADDR based shared guest areas Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , George Dunlap , Julien Grall , Stefano Stabellini , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , Tamas K Lengyel References: <33cd2aba-73fc-6dfe-d0f2-f41883e7cdfa@suse.com> In-Reply-To: <33cd2aba-73fc-6dfe-d0f2-f41883e7cdfa@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0106.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:9c::18) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM9PR04MB8422:EE_ X-MS-Office365-Filtering-Correlation-Id: fb2ebd09-5ba0-4ff8-393f-08dafd51d87e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: elneRqC9nPRAGLqIAnJ8y8dJWE78p4dW+sY5KOdnUO3C+D9MHr0ZM58Ve/d1uvjNXyBrKplbFCTDfhvG6NwGmk3BVfGRGQ8LfEVz71SUgT1ydUQvbOlAz6Mi+Isw7PDsmKAfYD1yd5kcQzUFjZYe7Gp+I+lbVYgZri1sAYtkjcpJO5+N0WXzJrN/q8Bz1UVO7WpEHUfV/Bk9wpI63e7YebtTp4To1j4WzyzS4F5cxHiY3qnivdbcJJs9WLoMK4NxzkfI5STtb6Zbqyzi9rPGF0FTN8/TafWOiF6aF1mhOgMuPHlKTwSIdje24QnmovVGDSQFZJWhuInuNhBLdYMyElOrugnZDNfes4eGQRZGEEajoXxU6v95NGEQoetWenD9DebwtLY1082JFRnZTjg53penF/MocJ1+V6zaHVGcz0qArGutfjPN1s0GFLc9BljzXoF0GXvnecY1hO0vH/p2n11p5Ho4r3SzPMOqiEuXsHzSXhc2Atq1hb6PVr7X+bVU7CLrrXUsTndYfon6sn3JSSzVGU8m/5CqFgXYQcQm2MH/hTTP4DVrCzATD4+i7H3IqRcyl1jst2zNIpNTwULOo8K7Wt04Zpm/7nnsp+4jS5yB77sd2xi0c2pNn2c4Qvg9tBXXe+x590iSWkUFAwDRQnnQ6Th5Nia2JNqqVeREhSbrkxOeKeSlhrQ/TWGfugbsv/5wPGm3/pRxCDuimXLqs0L4nlc2R/BTLI9Uz3y1m9c= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(376002)(396003)(136003)(39850400004)(366004)(346002)(451199015)(31686004)(2616005)(38100700002)(31696002)(41300700001)(2906002)(8936002)(5660300002)(4326008)(8676002)(6916009)(6506007)(316002)(54906003)(36756003)(83380400001)(66556008)(66476007)(66946007)(86362001)(478600001)(6486002)(26005)(186003)(6512007)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?b0RHa3F4R0FCODJ5azAxRTFHQ2trTHpCTEd5M1dDQlZUYmQzam5XOU5ZanNU?= =?utf-8?B?SWcrajg2c0R5SHVwa3VncndOQWtyYUFYektONG5EL05sQmY5b1FXYXJRMUg4?= =?utf-8?B?SllsYkRPV1Q4Q2RkWVhBYVIrTjZvT2N6T0VPS2l6T05FbGxLOFExSjJqSnhV?= =?utf-8?B?ckN4OXBVdUduUDJkQ2RMOWpGQ0U1bm01M1ZqeTJpSm04THZGMW5UMENrMjlj?= =?utf-8?B?ZDBZSzZJWG4yWUdBM3I2bGhDOG5xZytWc2ZtaTVDd2tURjMwRUltRFEwWEh0?= =?utf-8?B?OE1jdHdsU1AzK1R6bXhDWS9RU1NsYnVnMUdpMVoreTY2ci9zTjF0TjlNU0hs?= =?utf-8?B?ZmtReXkvQ1l5UWJtWnZRbkwzdUIwLzdQS3Y3a3l6MGdiMTRpQWVlUEsvdXB4?= =?utf-8?B?VkVRd2RVb2MzcGRhY01FV2F0dVNFanc3MHRWY284R0NYWk9tdXNNUlZWM0kw?= =?utf-8?B?Ry83NlVNQkJwTmxjdGJaTU15MFlYdUdBUkpsQWszOFFTVVFoaHJhTEV5OWhG?= =?utf-8?B?c04zdk0xVTZ3dVFhYnFyYlJtRmlpWGhCL1FpeUNFMXQ0RTY0WDdtc2RSYTk5?= =?utf-8?B?S0QzSTR4cjlpVHByTVN5SHRBN0QzQ3dqNDg4cHpwR0JjSWdidE9XNmZQaStE?= =?utf-8?B?SnRtR3MrbnFMQ1lmMzlZZ3FTQ2NNdHhRRWx5VVR1K0FCdXlEc0V2eXl3UUtj?= =?utf-8?B?ZjlQMTlpUDFMN25ZQ1oxcWFxSnBlNEdNaEtzeWQ0S2lCY1RNWXA1YlBqc1BJ?= =?utf-8?B?Z3dvOUNESXIrMndXNlNpaGR5dm1WZFg5VXBkRWNGNTg2VFFYYmFlamxqenRR?= =?utf-8?B?SExsTjZtQ0xxWFVaTDloWnl1UjYxZndpV3VRRzN3azdRUU1qN0ZyZHB6R25W?= =?utf-8?B?bm1LL3BsMzk3dStDdGwyN3p6OXFTTEJqTmhZelBpVkNKUkNPdFRrOGx4UWRs?= =?utf-8?B?ZlZVeDNPT3RzRnNQRExNWk9FanhxcEhQSUtsbERvS0YwTElsY2RMOFA0KzZr?= =?utf-8?B?K1VhM3R6ZXYxZEwvVi9vSFgxdjBITnlPb0x3cGlRRmtPWHNic0U3bndnNEhJ?= =?utf-8?B?MVVYVGZaS1p6NitRSHVmZUt5aElBaDc2bTlXRm5KdVBKbEZjQkFHTnRCRzQz?= =?utf-8?B?YjQyNnFRMGhaUndOUXBpZHJWTzVDN3lUemY3eVJlM1RDVVl5ei92bS9odytQ?= =?utf-8?B?WWU0SUZTWFNJVU9lVU1ZWmZoaHpRYkN0T0prNzl1cys0S0FHd0N2cFFRcXhM?= =?utf-8?B?WUhxTTRYWU95eldrZ2tYRExER21BY1g5RkFOZ0xLTHpqT0o2dmt1UjlvZ1BN?= =?utf-8?B?dWVCd3FXMFczZ1hnTTQ0N2ZnWHBEb3lMUDJScE9CdUhTY1JDOGtlaXBGZ1RK?= =?utf-8?B?eW1QY1NsNWw2QmU1Y0Q3bVFnVHA3QnlBOUNha2IwQUZmaUMvNS9xWWQzbUhr?= =?utf-8?B?WStpTWdxbmRsejVvQ3dNRzBjcDJuditQLzdjNmJicUVRSXBaMXl2U2xwK0dl?= =?utf-8?B?a0V0RGNrU0pCanRGczFGWlVxMDhTNFVReFpjVGVONk1ZajM3SWZvSXBtWXNr?= =?utf-8?B?Zkl1UTZLWnBlTDFFYWhvVUJHUGxBVG1jRHdkaHdWZHIvZzRROWNWYlV1VGxZ?= =?utf-8?B?MjRXQ0FEdGkvZGh1M1dTMnF1TXZuYzd2L3B6YVJMWGNhK3B5U01oby9GRjAz?= =?utf-8?B?aVlYcWpOWnhMOXJtSnlkVmFMTStBZGh5RVd4OC80QlJsaEZTSi9Dakt0eGdp?= =?utf-8?B?cER2U25xcm02Z0lzbk1XS1NoSnZmTzdycG1oYmZRb3ltRTRJQUdrc3BKejNI?= =?utf-8?B?ZTlrdzdyUGhhWFRhb1FwQmZ5VzRrSEFkaUx4NjRzcnpYaUNUOUlJemw5UEZ3?= =?utf-8?B?OWpWS1dpZkdkbjhpQnFIRVA1MTdiMlZQWFBLWWxPZkhncHRNS1hrcVRHZEtZ?= =?utf-8?B?Sld1K2hCT2xxaC9ja3E2WEl4NGp0OWJHQkQvUWNPMitWYndXdlQrS05HSnlG?= =?utf-8?B?bzNrZm55Y2ZoMHBvQzZ2aFRiMXVVMmVYY1QzRWI0blRHWFpTRzllNkhuc2kr?= =?utf-8?B?STh5TVFuNW10aFVwekFFdjBydG9nemVSSGRSQUJMdm04ZEdPNzZGUHhWWm5O?= =?utf-8?Q?ey5cHqTR99atvet/RuZCXciUZ?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: fb2ebd09-5ba0-4ff8-393f-08dafd51d87e X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2023 14:55:19.5175 (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: EcYAo8zWFAtzPK/kfagqhfAV5xwaJ2vrFjqwf6G6/qTJQIZA0S2bAjEq+GTsCqEXLCb9OeCwRugM8O9kAG3ncA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8422 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1674485742245100001 Content-Type: text/plain; charset="utf-8" In preparation of the introduction of new vCPU operations allowing to register the respective areas (one of the two is x86-specific) by guest-physical address, add the necessary fork handling (with the backing function yet to be filled in). Signed-off-by: Jan Beulich --- a/xen/arch/x86/mm/mem_sharing.c +++ b/xen/arch/x86/mm/mem_sharing.c @@ -1653,6 +1653,65 @@ static void copy_vcpu_nonreg_state(struc hvm_set_nonreg_state(cd_vcpu, &nrs); } =20 +static int copy_guest_area(struct guest_area *cd_area, + const struct guest_area *d_area, + struct vcpu *cd_vcpu, + const struct domain *d) +{ + mfn_t d_mfn, cd_mfn; + + if ( !d_area->pg ) + return 0; + + d_mfn =3D page_to_mfn(d_area->pg); + + /* Allocate & map a page for the area if it hasn't been already. */ + if ( !cd_area->pg ) + { + gfn_t gfn =3D mfn_to_gfn(d, d_mfn); + struct p2m_domain *p2m =3D p2m_get_hostp2m(cd_vcpu->domain); + p2m_type_t p2mt; + p2m_access_t p2ma; + unsigned int offset; + int ret; + + cd_mfn =3D p2m->get_entry(p2m, gfn, &p2mt, &p2ma, 0, NULL, NULL); + if ( mfn_eq(cd_mfn, INVALID_MFN) ) + { + struct page_info *pg =3D alloc_domheap_page(cd_vcpu->domain, 0= ); + + if ( !pg ) + return -ENOMEM; + + cd_mfn =3D page_to_mfn(pg); + set_gpfn_from_mfn(mfn_x(cd_mfn), gfn_x(gfn)); + + ret =3D p2m->set_entry(p2m, gfn, cd_mfn, PAGE_ORDER_4K, p2m_ra= m_rw, + p2m->default_access, -1); + if ( ret ) + return ret; + } + else if ( p2mt !=3D p2m_ram_rw ) + return -EBUSY; + + /* + * Simply specify the entire range up to the end of the page. All = the + * function uses it for is a check for not crossing page boundarie= s. + */ + offset =3D PAGE_OFFSET(d_area->map); + ret =3D map_guest_area(cd_vcpu, gfn_to_gaddr(gfn) + offset, + PAGE_SIZE - offset, cd_area, NULL); + if ( ret ) + return ret; + } + else + cd_mfn =3D page_to_mfn(cd_area->pg); + + copy_domain_page(cd_mfn, d_mfn); + + return 0; +} + static int copy_vpmu(struct vcpu *d_vcpu, struct vcpu *cd_vcpu) { struct vpmu_struct *d_vpmu =3D vcpu_vpmu(d_vcpu); @@ -1745,6 +1804,16 @@ static int copy_vcpu_settings(struct dom copy_domain_page(new_vcpu_info_mfn, vcpu_info_mfn); } =20 + /* Same for the (physically registered) runstate and time info are= as. */ + ret =3D copy_guest_area(&cd_vcpu->runstate_guest_area, + &d_vcpu->runstate_guest_area, cd_vcpu, d); + if ( ret ) + return ret; + ret =3D copy_guest_area(&cd_vcpu->arch.time_guest_area, + &d_vcpu->arch.time_guest_area, cd_vcpu, d); + if ( ret ) + return ret; + ret =3D copy_vpmu(d_vcpu, cd_vcpu); if ( ret ) return ret; @@ -1987,7 +2056,10 @@ int mem_sharing_fork_reset(struct domain =20 state: if ( reset_state ) + { rc =3D copy_settings(d, pd); + /* TBD: What to do here with -ERESTART? */ + } =20 domain_unpause(d); =20 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -1572,6 +1572,13 @@ void unmap_vcpu_info(struct vcpu *v) put_page_and_type(mfn_to_page(mfn)); } =20 +int map_guest_area(struct vcpu *v, paddr_t gaddr, unsigned int size, + struct guest_area *area, + void (*populate)(void *dst, struct vcpu *v)) +{ + return -EOPNOTSUPP; +} + /* * This is only intended to be used for domain cleanup (or more generally = only * with at least the respective vCPU, if it's not the current one, reliably From nobody Wed May 15 18:54:42 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=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1674485767; cv=pass; d=zohomail.com; s=zohoarc; b=l9zYU/kElLfqMW2ZeK1s8+JrHMN0+YB+ZoM5Q1vncrj4V/DZqx7qniYt9O+nW8t++ioLvnE3yBVmnktSyeITMLq4KQMsGsYa3Yel/R6j64fssF4kPidEfxR2cKq/miAtEijfv7cIfPo4Uh6Yx1rAbxGH394eUzETWOBdCENn7C0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1674485767; 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=NH84g47tK7c4GlHoaAADCkWf+J2O8DieVbFkOg4ugNs=; b=BQ7UH3XJVwGwcxX7HUx1WrUpYn659GpCrZKppwE1sgdqKYxPHA1aT5K1Qfq4iSIPjjLbE+7QKLar/cuozpN880JP14DDVC8oLG0OQ7hKJGsDx4iJxtKlGamvPw70gvFajXkAzl9c8A9AvEbtq6JaCPrbw4Iv5h7NJ8rQs0zGpMA= 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=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1674485767266965.4502140820262; Mon, 23 Jan 2023 06:56:07 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.482965.748803 (Exim 4.92) (envelope-from ) id 1pJyEa-0006f2-S4; Mon, 23 Jan 2023 14:55:44 +0000 Received: by outflank-mailman (output) from mailman id 482965.748803; Mon, 23 Jan 2023 14:55:44 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pJyEa-0006em-PK; Mon, 23 Jan 2023 14:55:44 +0000 Received: by outflank-mailman (input) for mailman id 482965; Mon, 23 Jan 2023 14:55:44 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pJyEZ-0005Sn-Tl for xen-devel@lists.xenproject.org; Mon, 23 Jan 2023 14:55:44 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2068.outbound.protection.outlook.com [40.107.104.68]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 018eac98-9b2e-11ed-b8d1-410ff93cb8f0; Mon, 23 Jan 2023 15:55:41 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM9PR04MB8422.eurprd04.prod.outlook.com (2603:10a6:20b:3ea::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.33; Mon, 23 Jan 2023 14:55:40 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389%7]) with mapi id 15.20.6002.033; Mon, 23 Jan 2023 14:55:40 +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: 018eac98-9b2e-11ed-b8d1-410ff93cb8f0 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nc1jUsF5zpEMTdM153Sh1Emw9hxaXTbuRZo1w/gkXd+1i/S+X2yCBcPddRzrWH09H9EtachrDNOY1W/4Xsd8XYJoHtJHjyKog9Y69JG/4cpUbaTDWJ/Sq8sXSjDDm5VIaNjzbngitvKLqu7GfdxkJGY4hzRmF2KvHygYdqNzFaMX7La9z+7a/YzpMum2dNo0nWqT3s8g1TW+ahOdAHqjFxFME7rlnXzEYqZ01KkmGthJuwDNvNezh469LG3RnbluQmLiRTkxdFLvhmcGu+h8BgY/SOrvJayDYhNenngcv6AURTE1PhtKXZI58JtBsb2MuxzRNOJ3dmTlP84DPuBesg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=NH84g47tK7c4GlHoaAADCkWf+J2O8DieVbFkOg4ugNs=; b=WMwwg/BSil6G2g/lHcPOgyQuua3v2JhAXTl49rQ/fFHFpWxuq0dCTyzGTiwYovWkkg1EdtM72zVeeq4KwMDYaN58pBq9QH8TA9GqJNr07JVfIbJrlqkOtDwLwe5PkaAaBuFvgXG9en2Z3PzVAHW5rNzQemUe6rD3Y6MfqgAB7JsnMXhh9hziDHXIWCrb0kCxGJcvaLGNQvTOPrvR2HHqvgEPpU2v7MS1rAQr4SglO4aH3Ba/PRrO1400Hq56r7m7kT9gMDuEN00Eyhuv691MM5rcxQQm/yuIN6kVXLup9x93gTZNjczJwOD6CkRlF/G6MdA6mvmQoSXX9vNQ62SAPQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NH84g47tK7c4GlHoaAADCkWf+J2O8DieVbFkOg4ugNs=; b=ZwGhTso2bJR7mowMbRUgbABSW5WEdw/Rk8ERn4A4LxuthJp3bthQyjtdET41/alfS45V4j9Vo1GXt7JRTmZxjiHNBKPr8eBDP0/tLVwXhepLWODmi9NVsV2iszjfchkQZO8ePAlqIAps4VT3DJvUQt/EJsxwVhoX9/gA4rvMagxpeQQgx4beTRFq3fpIjB8ipeBk7bGICO6UL4Gc+7iRGVn8WVtT0ExINxLU8hKXXbsya8gtBFp2i99CyJ+qvS4MOVyUZfgotCKgWCF1slIwSRMF3Dq5Ij6oh6cfujjEVtl1DngX3Q+YbXxM99zB4586krao7DY/xHRGscVv7ehoIg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Mon, 23 Jan 2023 15:55:38 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: [PATCH v2 5/8] domain: map/unmap GADDR based shared guest areas Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , George Dunlap , Julien Grall , Stefano Stabellini , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <33cd2aba-73fc-6dfe-d0f2-f41883e7cdfa@suse.com> In-Reply-To: <33cd2aba-73fc-6dfe-d0f2-f41883e7cdfa@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR0P281CA0037.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:48::19) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM9PR04MB8422:EE_ X-MS-Office365-Filtering-Correlation-Id: aac43901-a08b-4007-d180-08dafd51e517 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: u0/JCnzpkejrBcum1BE2PLcjhwJtRdw2NzObYkkj+LXqwpQp6OXmQg4nlQCFs31GZBda0TZejZX3ePBd/wHYsoTVdMKh1qw8gkvZ0ymR1ycJGcj06uytYm1ACtW1GcIWLDj5Cpa4U+HzSFyKHs3JfWqZHGX2+axAdgPW3ShIqLZmBTfGeAg2LZ75qrOckdYPsQm/SxbEBmmM4zwifOOpGxAty5wqj60aNRPM/4gS7ng7/Oe/Xw60nD5TibuSS8cPB3AD0BXB4tTDg5HgdZxnSAPVJk0XAqBwVJknRllsC/JM73AnKfXZWWZxPwcN8YwNmDUdOpr6P8EBgojGRBqxIeLmCglRyR17FR5V4kmHklEe6vkou86iroecyrmaFHxnUwqN3NX62sSU1YqcwvHWg1KPbZigvrryhAp/ZRWxF9WiBhF+2lrcQc2dqQSBczKEZU/mtQnf6KFoWV9lEqN+GPUo1RM58Vgv5DXHybNYF8k59WyEzvUUVsZK0d26bOvEj92eyjL3P0VWR5KHvIhZch7PfmA5PnIvxIf1+raTiUKR2UHrw9JAEowwfitZTQvIutP2cGArstRpY/rsXHZC3fDtRN81ovesY/kWH3ABT7revjnvBA4S1SqjLAO3vM72yvkH5ZOTIzGQI9X/5XSh3pAp2WgyRi6vkx8HvJaf6wDzpOfcxK9f8o/GsNe2/3DnFbUGXMl4EK8mbbXm/Y9n1y1AFVNWh1ZwBG+SxNPqlcE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(376002)(396003)(136003)(39850400004)(366004)(346002)(451199015)(31686004)(2616005)(38100700002)(31696002)(41300700001)(2906002)(8936002)(5660300002)(4326008)(8676002)(6916009)(6506007)(316002)(54906003)(36756003)(83380400001)(66556008)(66476007)(66946007)(86362001)(478600001)(6486002)(26005)(186003)(6512007)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MWJacmoyQmRjZ0ZkZ3U1blNUS3JIajd4MFB1Q2xNbnR3cGI5Yzd3cXFVaEoy?= =?utf-8?B?aklGTE1UNHdDZE02ZjdFR05nMmV6MEpNQzZrUC9MZU5DTEFhbWE4T3h5QTE2?= =?utf-8?B?RGJRZTJRUVVVMVhyREZ5TVdsZWlqajlyY2MxSjhsNjBLNUtyU1lMNGYrRWU3?= =?utf-8?B?MVArREdIaEw0NzlUQytsYjF0ZW1yOUc0ZEt2cDRqL1BwS3NlSVFkVG54dExi?= =?utf-8?B?dGpiUEtEWGFRWndrOC90MHkwc0FRMHlMMzJBYnRjVkh3SmllSm50S2QvQnIv?= =?utf-8?B?aHFuRGlmUlZldFNBWFBzaWJWK1JaVDVxM1ExSDlRWkNGeTVlb0N5YkF5SXJT?= =?utf-8?B?SDQ2eUtybHoyemJQZlkxcFV5eVRwZE1sVW1NUDFDK3A4YlRHQXd6Mi96VjRy?= =?utf-8?B?N1Zmcm9oWG1McFUrOEVLL0NOem5ENzJ2Y0RHd3FJZjh6VWY1MjBIUElYVy9j?= =?utf-8?B?YzVqZEtYVHlPNHFCamorT2ZrdXc4d205c1E0TFhZOGpkRzJEM1dOZmpOOHlL?= =?utf-8?B?cE5pTGhIVWR3QU1HL1h3K1hkY0FuUm9WYm5UNzc2Wm5BSWhvdkp2ckJBOFEr?= =?utf-8?B?SUk3Q01SYWpUT0xCTDRxeENLWnBncFBCQzFJVmFITmticFUrZWtnNTM5dmc1?= =?utf-8?B?RC9XUEJ0V0lQaTdtT3pJenJvRTJJbGZONklVWU1wdEdLai9qcG94MGorODll?= =?utf-8?B?ck5Fd2lIbG9xakVPQURSOHEza0N0YkxXN1V5cmd0TzFvSmxudHdKQmd5Qkp0?= =?utf-8?B?RlJFY2lVYUFLdE16MU5QaXFEQ1NwL2dKUVF0c0s2cWJZd1M3Q3lMbXV0azZE?= =?utf-8?B?YWdPMnByZEhnMG9hMlFUNEREU1pTMmlDNE1LKzZQVENZeGtpTDAwZHhCbXA1?= =?utf-8?B?dGZ5ZjRRRktCOVoyZkI0Y2F3N1p3eW9USFJLODBEUndpZDBTSGp1bmNiNDFV?= =?utf-8?B?VzRsSlIwbjYyY0Fjd2ZXbGpkWHdOckdlN3dURGkwWWpWOTluMDRmeDFEMnFZ?= =?utf-8?B?V2cxQWYzZkhWT1o4RUhMZXhya2ZxVitFcTlpTnV5RElES0NpOGx3YWNuRVZs?= =?utf-8?B?ajNZUXRBcUEwY2JSVDcyaDVZcDI1UUZUMi9mZHpGek5aUjdMNU1USzJ2L0xL?= =?utf-8?B?VjhnK2UyOHFyNnlpMm42V25uaCtXNmk0eFB4eU9sUm9RV2tBOXMxNTQrV1dp?= =?utf-8?B?R3lwbjBpNWdZdlRQcmF2MExFL1FzTUJaU0NuRVU2dUVmc0E1dlVaTU1ERjlZ?= =?utf-8?B?Qm00M2djUTIxTEs4RzNuMzBna3BTNEMrTmlOVWVjeW5qUjRDL0VZcTI0Mytv?= =?utf-8?B?ZDRXcW9HbmdXWXB2eEFSVXR1dzVJMlE4NjhlVUdzbXIxSVRXYkFkT3ZRMFlN?= =?utf-8?B?NUp2ZTU5TlNWZi9VOEc2a0dPMGNmZWRhdmZRTXQ2U1NZSmxIY040bWRGaG9S?= =?utf-8?B?NXdKcFkzNmo5a25NTFlJa2ZUZFNWMkg4dlhjWjdQck8rTUdwQkI5ekpNR0JD?= =?utf-8?B?N0hleGZaeWxtVlVyYUJMRXlhcHJ6MTI4cmVVUWJocDZjQUNzUlpJRExUUWRI?= =?utf-8?B?T0lRR3FJczRXNjVGMEJ0UEFlRmd1NGgwT002cTdyRHArenNOZk1FQXljVnRq?= =?utf-8?B?SFMxWTN4MERUTWJmSmp2ZFVhSFBoYklUZmpYMmJJQ2picnkzUnFibkNxTkVB?= =?utf-8?B?YURNeVF4U3BJSjdEd3hDbnNjVU1yb3FBeHRUREVRWGZ5bWZRSEVnR3F1T1JE?= =?utf-8?B?VGJMRW4ydnora04zTlpXZzZ4akJ0a1dBVTNlY0pkRktPWE95OHB3dGNQZkFK?= =?utf-8?B?T01pUUduYXdhRExFL1NvOGNQU2pZdWdSZkhiRUh4NGRSRzZmQkpiRVVWbkI5?= =?utf-8?B?UERibjJqNmhnZXdUVEtCVHFqUTJQR2RyVnRTQUVHK2J3d0VzdnRWL01vcmh6?= =?utf-8?B?UUhHb3B5b05BLysxZHNpSXlhcWJlb3RlQ1VUWlBoSFNVWGdCc1BYQ3JidjBJ?= =?utf-8?B?SEZRV0FpNVlLYzFNc2I1VDl2M3lzeDR3MEZVUE9kQTdtZjlROHJONkE3OW85?= =?utf-8?B?dWs4Z2w4RGdYV05jdDJ0TnhzNXBnWUVxYnpIN1dFSUVrSGkzSTNFS1NFcDVQ?= =?utf-8?Q?8ZaAp7TUCZdiXOAOzUwSqT8Yb?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: aac43901-a08b-4007-d180-08dafd51e517 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2023 14:55:40.5474 (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: H3hVn7lvVOwZo3wwL++zponi9ue8r2Ik+Kh4Fpa+dODjiyc17E0KOuWmCoHb4Togu7mdxtRsocCMJC3buUCLeQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8422 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1674485768347100001 Content-Type: text/plain; charset="utf-8" The registration by virtual/linear address has downsides: At least on x86 the access is expensive for HVM/PVH domains. Furthermore for 64-bit PV domains the areas are inaccessible (and hence cannot be updated by Xen) when in guest-user mode, and for HVM guests they may be inaccessible when Meltdown mitigations are in place. (There are yet more issues.) In preparation of the introduction of new vCPU operations allowing to register the respective areas (one of the two is x86-specific) by guest-physical address, flesh out the map/unmap functions. Noteworthy differences from map_vcpu_info(): - areas can be registered more than once (and de-registered), - remote vCPU-s are paused rather than checked for being down (which in principle can change right after the check), - the domain lock is taken for a much smaller region. Signed-off-by: Jan Beulich --- RFC: By using global domain page mappings the demand on the underlying VA range may increase significantly. I did consider to use per- domain mappings instead, but they exist for x86 only. Of course we could have arch_{,un}map_guest_area() aliasing global domain page mapping functions on Arm and using per-domain mappings on x86. Yet then again map_vcpu_info() doesn't (and can't) do so. RFC: In map_guest_area() I'm not checking the P2M type, instead - just like map_vcpu_info() - solely relying on the type ref acquisition. Checking for p2m_ram_rw alone would be wrong, as at least p2m_ram_logdirty ought to also be okay to use here (and in similar cases, e.g. in Argo's find_ring_mfn()). p2m_is_pageable() could be used here (like altp2m_vcpu_enable_ve() does) as well as in map_vcpu_info(), yet then again the P2M type is stale by the time it is being looked at anyway without the P2M lock held. --- v2: currd -> d, to cover mem-sharing's copy_guest_area(). Re-base over change(s) earlier in the series. Use ~0 as "unmap" request indicator. --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -1576,7 +1576,82 @@ int map_guest_area(struct vcpu *v, paddr struct guest_area *area, void (*populate)(void *dst, struct vcpu *v)) { - return -EOPNOTSUPP; + struct domain *d =3D v->domain; + void *map =3D NULL; + struct page_info *pg =3D NULL; + int rc =3D 0; + + if ( ~gaddr ) + { + unsigned long gfn =3D PFN_DOWN(gaddr); + unsigned int align; + p2m_type_t p2mt; + + if ( gfn !=3D PFN_DOWN(gaddr + size - 1) ) + return -ENXIO; + +#ifdef CONFIG_COMPAT + if ( has_32bit_shinfo(d) ) + align =3D alignof(compat_ulong_t); + else +#endif + align =3D alignof(xen_ulong_t); + if ( gaddr & (align - 1) ) + return -ENXIO; + + rc =3D check_get_page_from_gfn(d, _gfn(gfn), false, &p2mt, &pg); + if ( rc ) + return rc; + + if ( !get_page_type(pg, PGT_writable_page) ) + { + put_page(pg); + return -EACCES; + } + + map =3D __map_domain_page_global(pg); + if ( !map ) + { + put_page_and_type(pg); + return -ENOMEM; + } + map +=3D PAGE_OFFSET(gaddr); + } + + if ( v !=3D current ) + { + if ( !spin_trylock(&d->hypercall_deadlock_mutex) ) + { + rc =3D -ERESTART; + goto unmap; + } + + vcpu_pause(v); + + spin_unlock(&d->hypercall_deadlock_mutex); + } + + domain_lock(d); + + if ( map ) + populate(map, v); + + SWAP(area->pg, pg); + SWAP(area->map, map); + + domain_unlock(d); + + if ( v !=3D current ) + vcpu_unpause(v); + + unmap: + if ( pg ) + { + unmap_domain_page_global(map); + put_page_and_type(pg); + } + + return rc; } =20 /* @@ -1587,9 +1662,24 @@ int map_guest_area(struct vcpu *v, paddr void unmap_guest_area(struct vcpu *v, struct guest_area *area) { struct domain *d =3D v->domain; + void *map; + struct page_info *pg; =20 if ( v !=3D current ) ASSERT(atomic_read(&v->pause_count) | atomic_read(&d->pause_count)= ); + + domain_lock(d); + map =3D area->map; + area->map =3D NULL; + pg =3D area->pg; + area->pg =3D NULL; + domain_unlock(d); + + if ( pg ) + { + unmap_domain_page_global(map); + put_page_and_type(pg); + } } =20 int default_initialise_vcpu(struct vcpu *v, XEN_GUEST_HANDLE_PARAM(void) a= rg) From nobody Wed May 15 18:54:42 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=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1674485808; cv=pass; d=zohomail.com; s=zohoarc; b=C9KJUpm9ytlnrfUmihpZgWQOKQnhajSjpv6J1Y/wcNZQhHnn55l3El1LY7fldwOihjnQQdDw86feKN/+mTsNM4Ivg0hY41TjZt3sHexyG+TYa7/33tHwZxjzXXbcBxLVCYtsG8VwXU6IvIm9L95zswUjM6+prc6B13b+2Nx7MZk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1674485808; 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=/fluMR14yPGtt1MEzvUXmnvLOAxRzJWqVCDdd15B6Z4=; b=LhZt4OwsaQVyRetjEAmnKbIsrRRQLbMjY2eJ21yA2fZ7fG60f9ZGxYkJYxc49pfApqaa2VIYbEBT1XH3sLiamxwSWKMzmW7Dws9BbhmDPPItnfzmaoQ/Z8z+NfUzgMaiULXQ7iSzhDaqnkSMOpMKQ9vyl9U1G+VyliZO6FAq7WQ= 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=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1674485808249201.6062857607493; Mon, 23 Jan 2023 06:56:48 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.482973.748813 (Exim 4.92) (envelope-from ) id 1pJyFF-0007HZ-4u; Mon, 23 Jan 2023 14:56:25 +0000 Received: by outflank-mailman (output) from mailman id 482973.748813; Mon, 23 Jan 2023 14:56:25 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pJyFF-0007HS-21; Mon, 23 Jan 2023 14:56:25 +0000 Received: by outflank-mailman (input) for mailman id 482973; Mon, 23 Jan 2023 14:56:24 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pJyFD-0007BS-Oo for xen-devel@lists.xenproject.org; Mon, 23 Jan 2023 14:56:23 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2062.outbound.protection.outlook.com [40.107.104.62]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 19d9b1c3-9b2e-11ed-91b6-6bf2151ebd3b; Mon, 23 Jan 2023 15:56:22 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM9PR04MB8422.eurprd04.prod.outlook.com (2603:10a6:20b:3ea::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.33; Mon, 23 Jan 2023 14:56:21 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389%7]) with mapi id 15.20.6002.033; Mon, 23 Jan 2023 14:56:21 +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: 19d9b1c3-9b2e-11ed-91b6-6bf2151ebd3b ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UUYbCZqUooZtUB5YodunRk27zv62PW646tNw5KgD5K6H8gTfDR7msNXifAFc0SndPlfu1oniUsnWKnvg6xN9AqouWyZ15v6yUSMmjky/ZrTPKQ/UoE+8giXyJznyaPQjELemw4p2qiSaDBaRDlne0/nH29jqM6iICm2RBte6aa32j3RTVdWau8H8lhA4rMtX7XibsqumGGgtvDDV82Bav3SsmYYg79vbxvaKEO6e4ZWlrdvG+ceMME2fk7ItwC184sQ77St7O5QW/lCZ9DhHG3fcu+x3xKAA2B9QvMEHo9LtBsoCImpwQtxFJ1SESdRSgKi/Jlilb+z4un6qxbECDw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=/fluMR14yPGtt1MEzvUXmnvLOAxRzJWqVCDdd15B6Z4=; b=dbnoMzSWC+4eWlIOSS9vvWJWSEMfj+fWsE7rat10qxMwXQ3NefCX3DDIRc3qmB63iPN5cocnHDlT5kcMQChzbXuXIaPcqIcIu2IbYXX87f5OlbW+SPsJSEf2JhhHpNibnLQIfSXkWeA9YEAgAujbGOTwZ1shcVChTHIuwA7GA7xmGHkImpHw72O4jN/3YzctlMzoWSXF/opycOhAFv70HEs/qNxiYGD3/pdNwqVXT4TIy15breVW12ps6lKex5dbrO+ni3O46B9X1yKyzU2vUfChXSQZaLlRSeuy1gcAP9EoBDApBJa176huCt9VnDAvxxzguFaBso7rEc5NCYFSLA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/fluMR14yPGtt1MEzvUXmnvLOAxRzJWqVCDdd15B6Z4=; b=l/+qPrcOO6Xg5Wxh0yptKE0JiGUUPek//MwpraJgP1Isyo8PKsi2mosmG1AV0eu3ECrloWRHmhR6P0iqvIraqyjO/8qf8h7W8X2RBY1FOdd51gT+I1rfaG7eODDzJGUwySdJ8S7RuRshisqnUxla+3msNBe5hj5xUJ5rNhwOZGguWd0RiN1xZ3O0LmIPhMKG3FmN3Cyg5KppU4Q4vcDweyde8KBe6Rn6nUQgcSRPgFHlVkq9+b9qx3Zf/CZ+ZQfx89QP+EVPg2MCJjWv7CIYgdqObUHjccTaHDElgM/aSPSb2wjqstIqIKgw4G5CbbmVViMyqs9UAL970a7Nat+JJQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <97fe3de2-a647-ede6-1831-1e301976b83e@suse.com> Date: Mon, 23 Jan 2023 15:56:19 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: [PATCH v2 6/8] domain: introduce GADDR based runstate area registration alternative Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , George Dunlap , Julien Grall , Stefano Stabellini , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <33cd2aba-73fc-6dfe-d0f2-f41883e7cdfa@suse.com> In-Reply-To: <33cd2aba-73fc-6dfe-d0f2-f41883e7cdfa@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR0P281CA0038.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:48::21) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM9PR04MB8422:EE_ X-MS-Office365-Filtering-Correlation-Id: 37c0268a-90b4-4562-ff05-08dafd51fd3f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: TjFcoZBjhsLCQDkM+4WZssqtmE8aESLJyXjjlauAXK3gx4ZDiSDhNjSObQDravJPLHu5BgoKAYvro1lR0OOZeTKQ6voNg3t6H6rW3JGjdz7ah0x7eLuDrpkOMJDdLNMsE9kjFkWHsqnz0bryTt7HkHRTMDprk2IneWW/crRACIDxvrW6FfPjTXTlh5HBmWV7j/s9tOhXm3QynipWXqzpOMOs/tbRP9r9fZZd43NJ8XM+QHplztPAUGtNvOuep1L49kBvdiaGY35HvyhpFlPBwmrIJ6gFDAvO8s5Wn7exOnOa2Gcbj089LCqsM6wgOSnCCBGXqnwFB3UXFNXSSbxMp3yPxaQ6bd3eGMpweOufhvjH5ujeKPNzsjHqlV7Z1DLGZEeL6z/sS4Nx8jyv07tkp50qMY5HQPvICwyYmcBYxHo5l9KOzZNtL540xxAOLYFxDF3j3psaDh6ayTeLFQu+GjiBv9gYUjgnMkBu5mPCkpnT1DaffsTPL3rtTDIKxLqTC5MIHLSXTxFgCxyVYdPKtZlcL13xjjtZINCLtOp/JaOua9m/B8pqBycgE+ERORVMGeEIfIIHJhV/IZayuzorIg197l4JD/lK//lGbEZccgeDuocxlBNVMePh4UPpHWGzAkmldabDdqR8lU50XB+tYGVV79th8p38T7gv6eEXLoNNZxYHAm2y/tMlS1MxkQo+yPpNjeVIzkd7nYxDTVx7mXmKmPa+LqiegpHzHwTcHOo= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(376002)(396003)(136003)(39850400004)(366004)(346002)(451199015)(31686004)(2616005)(38100700002)(31696002)(41300700001)(2906002)(8936002)(5660300002)(4326008)(8676002)(6916009)(6506007)(316002)(54906003)(36756003)(83380400001)(66556008)(66476007)(66946007)(86362001)(478600001)(6486002)(26005)(186003)(6512007)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZTBOUHhyOUlEOUprKzJvL0FyUkxkZVZlUTNZSERLZ1hiaWM3amlkZFhrMjY2?= =?utf-8?B?ZzNzV1ZLcTlXT0c3MjFxa2NjY2ZmQmdBdEVWV3QzV0ZWWW5tcXdUWjl4WWRB?= =?utf-8?B?bnpTZnZKbVMrRkRCVXh4c002U0plZXU4QXRkUGxDbWlOMmlXcTNROEdEWllz?= =?utf-8?B?K2ExUm04TFJaZ3FyY1ZEc3B2VEFxamJpeUw0M0JrbitSNHFOaFpBektSVG1G?= =?utf-8?B?SHl1VDRDTjR3ZFBIK0NMNXVXL2M4RU1KYm82empwQjBEMjB5MElGWmx4dlRF?= =?utf-8?B?enFDWmVpY251RHpiTUN6LzVuTklWaXNKVWQySXpLUWFJQ09uc0pkSWJWMndF?= =?utf-8?B?ZVd4eDhNUUI0MDA5cmtiZi82STVtd0V3cVZ1VklPVjRiYTFnUDJkUnRpL3h3?= =?utf-8?B?blZCNldyUGgvNDRDazZFaE9pR3did1VBRFJIS3VNTkpwOUw1VHdtUU15T3JF?= =?utf-8?B?UGZlcm5wQTNWMUJXaHVCOTZzWVdGVlRJVURocVc4cmh3Y21hdCtORUdZYkdU?= =?utf-8?B?eFVvUi9mSmlKQTVkTzVTci9aNHdTMFc0NnR6ckt1OUJqZTR4TDlhOTlxbVZL?= =?utf-8?B?SDR3Sjlla3pKNS9qQVhhQWd6T2xXQlJXaUJZSWN4Y0pnZnVkQWw1YU5iMG5Y?= =?utf-8?B?Y1FZQnB5dVBCbmQyYzAvMHQvNEgxVXpYWlFycXJmNVFRdkFyVHdvN3ZDRlMv?= =?utf-8?B?d1lMbDRJTWVscllVeWsrYjRPSjRGRXVRS05WcDFmeWR6MXBuT2VvUDhpZHow?= =?utf-8?B?NFVLSWYvdG9CKzErNU1UaFJBbkhtU3UrWkp3eGQ1M3lGTHBET1BFVklDUW44?= =?utf-8?B?bkFtcDMrREYvL2JQVmNmazF1SnV4b0xZREtUejRtM0VXMjJIbkE2RWE4Sk5t?= =?utf-8?B?aHRvYUJiZld5NHkyS2w5YnF4Y25qcnVOcjRCbGN4TmMrajh2MHFCeDF3T2NT?= =?utf-8?B?VXBYWHJCT0ZBTm1BeFMxR0twc05SUzc2Mmp1SnYrUzliSDRXRjdiWkNXekh6?= =?utf-8?B?YS9rbENkNUI3WHpyWGJoLzRSTCtORWhTWVNmR2RLamd3akJxODZwUmJmWXhB?= =?utf-8?B?b2IvNnhIN2lmZGVWNEtCQy9WUW1NU0Rjb05aQ3pIUVEwbng3MDdUZGg5dlc3?= =?utf-8?B?ZWhldHJ6cFpWNzBDa2JMYkxoWTJsbjErekZobzRMc1N3WnN3bERaQ2JOREVj?= =?utf-8?B?Q2FKb0VWakJmbTVjQzV0RFFuekU4WVN4RFQvWjlLNTBmaUNkdmdPNkZENkxF?= =?utf-8?B?UjFnRTc2QnFzQlZOTEFjcWpLa3ViRjd6S1FjZnRha2tNY1ZaUEkyaGFIUGVK?= =?utf-8?B?cUdIT0o2Rjg4T3czV1ZEdUd0TG1JejFLVUFhTUN1WWV2K29EMENKc3NWUHBs?= =?utf-8?B?dzEyQlNtR3F0RG1Pc0VRUHpNOXptQWJaMVpZRG5XRStZY1V6NzBsV2gzQTFK?= =?utf-8?B?SGRXWjhKaWQxV2prQ2VqSEJxdFBmazNDcHBUS0dNa1dlWVBqamYrbWlDT0gw?= =?utf-8?B?djNCM052VWkrNXlrNVY5c1NiUDU4aHMwN1N4eWRIV1JwTFBKVmdteHUvaTJi?= =?utf-8?B?aEZoL0RISmkvZ3pHWjBwaXlwUUsrVDNLWkFIaER6R0Y2NURPbVRibXMxY2s3?= =?utf-8?B?cENPSmozck8rVGRMUmpMRTJ5UXpiUEJSU0J1SHFhM1RQTjJ6OEcvMFMzd2NR?= =?utf-8?B?ZTZHVGNMdEF0OTFPYmdPcEFHTHFLUndkWHhHVWNoSkRBRksrMkRzZG5IQW44?= =?utf-8?B?QUNVdW1Fclk4TVBBY1BsQ1NUdU1aK1g3RTdQZXVObDV2RjNEM3dRVi85aU5R?= =?utf-8?B?Z25KM2tRYmM4bXFsczVYVDdHV0RGZnk1bXNxWVdMRzZ5SGZNM2d5Q09jT1Bu?= =?utf-8?B?eEd5Uk5GYmNFUXcxNFNqcFozQjhnSERaYkt1bVpqVVVkNVFwYTlaYXBzc3l2?= =?utf-8?B?Qm15c09FMmRvTTFGRUtpVWh2R1hTZ24vaXl3NFdtcFNZU21mSFp6NTljcTgr?= =?utf-8?B?VjRDaFB0cllvN21TWVJDMWs0SEV1ZFhhR1BZU0l0QW1oZ2JINUtBNjMydklO?= =?utf-8?B?WGNZTkJMY2Q2bENKRlJ1L0hPa3JMWFZtQWR3dUE3bXEzN0k3QVhUdW1yNno3?= =?utf-8?Q?nsBNBwSlEnWR+EeeUz1Y+w2y4?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 37c0268a-90b4-4562-ff05-08dafd51fd3f X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2023 14:56:21.1073 (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: bpjL5HXUBmS6BTOABqsxSM5R2W3orsmx8uxX45BOTCQbGF5QiPXSmKtwim++UxUF6y4V2rXP6YEu/JGv3K9bSw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8422 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1674485810134100001 Content-Type: text/plain; charset="utf-8" The registration by virtual/linear address has downsides: At least on x86 the access is expensive for HVM/PVH domains. Furthermore for 64-bit PV domains the area is inaccessible (and hence cannot be updated by Xen) when in guest-user mode. Introduce a new vCPU operation allowing to register the runstate area by guest-physical address. An at least theoretical downside to using physically registered areas is that PV then won't see dirty (and perhaps also accessed) bits set in its respective page table entries. Signed-off-by: Jan Beulich --- v2: Extend comment in public header. --- a/xen/arch/x86/x86_64/domain.c +++ b/xen/arch/x86/x86_64/domain.c @@ -12,6 +12,22 @@ CHECK_vcpu_get_physid; #undef xen_vcpu_get_physid =20 +static void cf_check +runstate_area_populate(void *map, struct vcpu *v) +{ + if ( is_pv_vcpu(v) ) + v->arch.pv.need_update_runstate_area =3D false; + + v->runstate_guest_area_compat =3D true; + + if ( v =3D=3D current ) + { + struct compat_vcpu_runstate_info *info =3D map; + + XLAT_vcpu_runstate_info(info, &v->runstate); + } +} + int compat_vcpu_op(int cmd, unsigned int vcpuid, XEN_GUEST_HANDLE_PARAM(void) = arg) { @@ -57,6 +73,25 @@ compat_vcpu_op(int cmd, unsigned int vcp =20 break; } + + case VCPUOP_register_runstate_phys_area: + { + struct compat_vcpu_register_runstate_memory_area area; + + rc =3D -EFAULT; + if ( copy_from_guest(&area.addr.p, arg, 1) ) + break; + + rc =3D map_guest_area(v, area.addr.p, + sizeof(struct compat_vcpu_runstate_info), + &v->runstate_guest_area, + runstate_area_populate); + if ( rc =3D=3D -ERESTART ) + rc =3D hypercall_create_continuation(__HYPERVISOR_vcpu_op, "ii= h", + cmd, vcpuid, arg); + + break; + } =20 case VCPUOP_register_vcpu_time_memory_area: { --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -1803,6 +1803,26 @@ bool update_runstate_area(struct vcpu *v return rc; } =20 +static void cf_check +runstate_area_populate(void *map, struct vcpu *v) +{ +#ifdef CONFIG_PV + if ( is_pv_vcpu(v) ) + v->arch.pv.need_update_runstate_area =3D false; +#endif + +#ifdef CONFIG_COMPAT + v->runstate_guest_area_compat =3D false; +#endif + + if ( v =3D=3D current ) + { + struct vcpu_runstate_info *info =3D map; + + *info =3D v->runstate; + } +} + long common_vcpu_op(int cmd, struct vcpu *v, XEN_GUEST_HANDLE_PARAM(void) = arg) { long rc =3D 0; @@ -1977,6 +1997,25 @@ long common_vcpu_op(int cmd, struct vcpu =20 break; } + + case VCPUOP_register_runstate_phys_area: + { + struct vcpu_register_runstate_memory_area area; + + rc =3D -EFAULT; + if ( copy_from_guest(&area.addr.p, arg, 1) ) + break; + + rc =3D map_guest_area(v, area.addr.p, + sizeof(struct vcpu_runstate_info), + &v->runstate_guest_area, + runstate_area_populate); + if ( rc =3D=3D -ERESTART ) + rc =3D hypercall_create_continuation(__HYPERVISOR_vcpu_op, "ii= h", + cmd, vcpuid, arg); + + break; + } =20 default: rc =3D -ENOSYS; --- a/xen/include/public/vcpu.h +++ b/xen/include/public/vcpu.h @@ -218,6 +218,19 @@ struct vcpu_register_time_memory_area { typedef struct vcpu_register_time_memory_area vcpu_register_time_memory_ar= ea_t; DEFINE_XEN_GUEST_HANDLE(vcpu_register_time_memory_area_t); =20 +/* + * Like the respective VCPUOP_register_*_memory_area, just using the "addr= .p" + * field of the supplied struct as a guest physical address (i.e. in GFN s= pace). + * The respective area may not cross a page boundary. Pass ~0 to unregist= er an + * area. Note that as long as an area is registered by physical address, = the + * linear address based area will not be serviced (updated) by the hypervi= sor. + * + * Note that the area registered via VCPUOP_register_runstate_memory_area = will + * be updated in the same manner as the one registered via virtual address= PLUS + * VMASST_TYPE_runstate_update_flag engaged by the domain. + */ +#define VCPUOP_register_runstate_phys_area 14 + #endif /* __XEN_PUBLIC_VCPU_H__ */ =20 /* From nobody Wed May 15 18:54:42 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=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1674485836; cv=pass; d=zohomail.com; s=zohoarc; b=QqTnnC5xUgwt7NbCrQOngOC3CO3lb9+ODJEDbIW12BHAoRKgpw8pBn9t7UylRWIHXcHDeM32H2/elRVpqAlv12DNGDUnHUIWx8ELeGdeFV4e8j16NaWH+BI6qjNLdy/aXo/InPYhprvTTlDKnv/XrIRYWakxBq8oe51SoSL/ZGw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1674485836; 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=zfjVl067685QYNdMenPbNcSHcpvBJTSgTSpwaVubY4k=; b=KGU7HCbnvjDbwEPJD1c2iSiuFIRuY+tQSzGStJBclNuk6A2l5rEBla+YynuCTCR22OJlR7ZOcEFw5wYp7CUjoDnGvIOxeRmEFVuUih+ReuBOAcqk6sDkO5C/Q/CnBrzDAWtaNsc17DlLxFlfR2Fv8SNRFWM+fWr99RlfU9g+rWQ= 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=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1674485836073471.41097582883594; Mon, 23 Jan 2023 06:57:16 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.482977.748823 (Exim 4.92) (envelope-from ) id 1pJyFi-0007sS-IB; Mon, 23 Jan 2023 14:56:54 +0000 Received: by outflank-mailman (output) from mailman id 482977.748823; Mon, 23 Jan 2023 14:56:54 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pJyFi-0007sL-Er; Mon, 23 Jan 2023 14:56:54 +0000 Received: by outflank-mailman (input) for mailman id 482977; Mon, 23 Jan 2023 14:56:52 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pJyFg-0007rt-LU for xen-devel@lists.xenproject.org; Mon, 23 Jan 2023 14:56:52 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2064.outbound.protection.outlook.com [40.107.22.64]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 2a82a8cf-9b2e-11ed-b8d1-410ff93cb8f0; Mon, 23 Jan 2023 15:56:50 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DB8PR04MB6972.eurprd04.prod.outlook.com (2603:10a6:10:11c::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.33; Mon, 23 Jan 2023 14:56:48 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389%7]) with mapi id 15.20.6002.033; Mon, 23 Jan 2023 14:56:48 +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: 2a82a8cf-9b2e-11ed-b8d1-410ff93cb8f0 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iMbyuNrlVdi8icIzsRH7UDjCL9zmS33iQrhfZKDgy+EcdAOyWwpo0gAL5BuLtyNNwpZPwn9Hu/fd8xYE/cMzEqWQXrQ2ymJkvDTyIdFbCh5Hgi+Dr69ZIBs28AZ104XbtSvWOo3ssfWnHP3nKnRNy2RFq96HYXc/f5nM0Yn3RECjTlMzYsMBOlD8yEXIps2MvDgdnBK7oDyNilkkwoBPGzvKpHqwSpH5DMKtfeeRyc3nD8fIsF0bypP56T4fH/3mvqPTIQqBfOuc2tGxINy/rGzvOUYE/2faukPII9r5eUMqNKeQ1L/qdh+38dtQoAms+6rEjnuB69lw8aiFTIHNdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=zfjVl067685QYNdMenPbNcSHcpvBJTSgTSpwaVubY4k=; b=hUdI7FMfnripvPIaWBiug2g/lyYHFvxP5ezFYIwr+Bz7nFJR92YVu3g/WDLaD5U/xolkLFiTMgR2ICPNXoGMEGI2mj0W9UQrQNpzPlEAkHodigHW75OmgS/xdlkK817fyusrDl0tP2xeXxIsJvr6CIrrj8VhXPLmzMZF1wn4kidqhvU7VQOzhRwQ8SyvW3ra7biZttgiMg87sbelG3MS6C6nWcc/9IR2dQM+z5Ir2jnGFSV1/sJ2B1dEveMZ6Rp3JBj1BA1OfWFXUT7zSLpIu26vgU485mlAXhw2WzdTpr+CLVuEocd17KHyv4fwOBnj2Bo/NU5mgxMltP7q3ROhgA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zfjVl067685QYNdMenPbNcSHcpvBJTSgTSpwaVubY4k=; b=SLM641KhnryrfiSIgYXIoQPRTcJyUpa7+r5MCV5M5As38syHXvIZ+5nGiSPBNAhzSIY6HveaOevEu+LEc9U2KqDhCVeNEdNZjvBciMoG4x3MSEcx3W7C0B0MUA1BlSiRXsCGIASZsM5DXXX8/GTlJrXeB/dhcFZWOSjqKhpwAuWAc/L2sIg9Li9IfoyC43iM4JNyXuIbP+J05wsQVpU0XTccmfWsnv34IiiKhYr72P23/T5n5EfCwNtRrnN60C0yL9zNPewu43hb6EwqwfD5CsFjkjn5FkR4rrJMIniWeUOxRLaN6twttwbZWbO2CuZ6WjrvIGgD6eB9FtQa8txReQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Mon, 23 Jan 2023 15:56:46 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: [PATCH v2 7/8] x86: introduce GADDR based secondary time area registration alternative Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , George Dunlap , Julien Grall , Stefano Stabellini , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <33cd2aba-73fc-6dfe-d0f2-f41883e7cdfa@suse.com> In-Reply-To: <33cd2aba-73fc-6dfe-d0f2-f41883e7cdfa@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0202.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a5::6) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DB8PR04MB6972:EE_ X-MS-Office365-Filtering-Correlation-Id: b5ede3fa-d391-4b78-acb2-08dafd520d6a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Mt3+/3F7Ln8r1gJQGJE9DHI63uyYw4q+SOa5ii9NU6jLoo+cYzrHqa7Qz62iS8Fgr63ol1/zzSyQkAefKPAIPzH2dvPcpiTNMQNcTxTiYbz7+vk+xCSXvTCFe68NqQLRVRX6GFHYMIuosT5XKlrRA/zNPTOlK6tjkmBhjybkDtZVJkSgk/R1eFPm0xRTvh7VNWGpDUsTvgERsDU69vTUNPJPmCyORAaNppdQUS0c1nnqv1RDxxfycE/SvLCzrL7axcfaDvn0CPSvtXfr51OrRcO47w+DFZaPUtzeL/dmgcIQvGB5Omgz1/+mo4SJI4bZ12bC8X0S+GX+0DCOw5F2Zl6fBHIC3P+cgA7Fh53rZ6ogQe969ae4oG9oynzxjvgnFdpVu07CQKQ3vtNLEN1NxmfJdw+O7j9LmcmaLk8h7cL0Ue46hD83TZuiIZ1a6Tn4ZtPqAY15uPMYEThi3E9WOHYnPeIEWXVWEuFix+3s0Mhn8unbmM50sTTGeWAExWPYZHv0Gt6HC/0Vd6oBiabQKQMypNx+a27iVDzZbRWO0mn2fsnX3fWJ2j6pgGSWef/9OjQ7VCf+XiebPnKstxZKH2cWAF3K5daIThDGPdYh0iRwcQvyt4ZJamNm5PvGMsmAD/I0gD7FaWgnzbppKLo6V9qvwNeCEvF6hoZgpvaGzaRlnRKaSYZgAE3sBbcO0PmKiLwnapQ88aY1yg40wq3j2RY4Yo46cANbguYGXEl+TpU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(376002)(366004)(396003)(39860400002)(136003)(346002)(451199015)(6506007)(26005)(186003)(6486002)(478600001)(6512007)(8676002)(6916009)(4326008)(316002)(31696002)(66946007)(66476007)(66556008)(41300700001)(5660300002)(8936002)(83380400001)(36756003)(2906002)(38100700002)(86362001)(54906003)(31686004)(2616005)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dDBubHZZVDFZYkk2dFRXTDBsYWZhVENtcHFJZkxaejNUT0ZvQXdNZFhSQzh3?= =?utf-8?B?azM0ejBUR3IyNzkyWXIvMUU0cC94UUNRQmdCSUtNeHJFR3RoSmdLSXVPTjFr?= =?utf-8?B?LzI2akorclVYd0xjM3VJUEJ4NGVyNCtNbHVaVU1ubmFqWTRzbm1iRTUyU2E4?= =?utf-8?B?N2thc2l1TjVySEdIcTQ0SWxUdllScUhwcDZySTNtNGk1L0ZjWEhjd2dSbDYz?= =?utf-8?B?VnJYUUxGWGNnei9XaFhSeWhzSTRSN3U3bVZ2T1hDMFIrMWwxbU1sZnJCTUZN?= =?utf-8?B?SlNjaFBCZmtSQ2lLTk1tL3d0OFh1Y0QzejFEV3gyWDhiOFlLd1dqeW9xU2Y3?= =?utf-8?B?UjkyeEQxSjJKbWdwaHNVUURKOHUva1hSK1RXVk9yU3RyaDVUTEpYWGU4Y3Rz?= =?utf-8?B?eEZ2bUtJMlpYRm1DWVdEVTJkQ3pweGpQY3FNRUV3SVpyOE0ySTlnMzVsdW1a?= =?utf-8?B?aElaN3g2VCt4SzgvZTFlMm1zNmFOaHNxaUlEMXVtMFRIV3ExVkZaaVZ5NlRu?= =?utf-8?B?b1BYSlNlNlVwWlhwYUNIcDN2U0RXcFg2ei80blR0eFFic2MyQjg4cjM4d0dX?= =?utf-8?B?MXIzbTREMkQzUmx6UW8zQ1lKOXZ2RC9XRVduaGZ2QXltRkhIcGNGNVpuRTBt?= =?utf-8?B?ZmZyaXVxNTR6THZNN1VEUUdLbzF2bitqNjJNZC8wK0hMRFRkSlNVSE5SZURt?= =?utf-8?B?SFRPS2pCbzBOYXRhbWhaakZ1TytKZW1rUDdBc3VaVmI2SGgzOVJiKzdTWTRG?= =?utf-8?B?UDN2NG1pcUpaTTBhQUtuajVDcEl1VkNwTm5aTkI1c21jQ3VxUnprUTZHTTNJ?= =?utf-8?B?Z2NDTlpJeE05SEpQb2VwcmhEYkJKQWV2eFdCS3JoN2FYRlFhNG9jODBrTjdy?= =?utf-8?B?MnlGTVB3akpIdVcydXhTaGVjVDBwdkhWb1dYczdzVlgydnJSQTBoTnFxZ2h3?= =?utf-8?B?NWhtVW5wYk5wWklHVmgzcStFbkQ3cDB3dVkvMWlnQmNrY2kveVk0enZoZ0NC?= =?utf-8?B?NFk3UXo1WWVpMC9KYlkvUGJNTlJZeFA1Qm9qbU9uVCtFeVVrQUZUaUJUZ1k5?= =?utf-8?B?S25VRlE4T1JBRmhOQzNZWGdGMXo2R0VDb3A5QUhzRXJlR0hKQmNMMjhyU0sw?= =?utf-8?B?dnVMYW8rTllIOHZkVk5RVkZTL201Vi9IenFwdjVudnlZUFduUHVYeUMwM01I?= =?utf-8?B?MW5yYjUzbEhyc3B0eklwNUtlcGZFUGR0bVpUWk11d0xER3pPTUtSQWcvc1Y1?= =?utf-8?B?K0xaYUxpYXliM1RuUUkwQjcwNXZzdytBcDJlYXVydnFxdTFXc0dwWkxJcU5r?= =?utf-8?B?VEMrTGhZSy9zRkoyT3VLKzFvd3hVOUpIR1k3RjJvVXpiTVdPb2RYZkFkRHFQ?= =?utf-8?B?eWRGQldyM0xoeTdHcnB4UDB2MDZoNnFxN0tMQ3hITkN1L2k5cFIxbkVmemZK?= =?utf-8?B?Yzk3c3JISzZVMHpLT29HSk9rODhrdU5lL0NDVVhXeXVGbkxSOWJMZkNSOFZp?= =?utf-8?B?bGxhU0ptYXlxaXNjak9PSUpiMlJKaFUzaktXaWR0MnY3M3hHM0d1c2JQc2M5?= =?utf-8?B?ajJFTXZaUjVFWVdVVzZJekVJcjFYRDhuWjQ1SGNuVkVFbHlXaGE5dTl3eS84?= =?utf-8?B?UlJMRWZmbkV4QVJjaHdYdnE4VG9pL01uU21KTW8rTE1rWDNXWmpRUS9XYjA0?= =?utf-8?B?T29sVTVtMnBkOE5xWlVjZVE5T1Z0UUw4WjlQWEY0VWdFRDNHeG9NRDg1K2hj?= =?utf-8?B?a09OMWMwYmNOb2JFT3hvYllUMmZOdG1BVEF5WHN1dGhXNHZ0NnhLb3k2V2xi?= =?utf-8?B?MlFNWFlJRHJpNVlhd2FQOGY2M2E4akE2WTlwV3Q1U0VTbGZnVEhrQUE4VDdY?= =?utf-8?B?QkF0RmxaMlJGREFPeEJlZjdIZ3pPUDN0NUVJZU5rZXZKaEs3djZZOFZ3b1VV?= =?utf-8?B?RnNRVEhOOXZTcXlTVGZramJHcHEvN3c1aFIweDg1VVpzdWVEWTF1cTFWZGZL?= =?utf-8?B?OHRZenZkUlVBMnJJVGdFbTRJMU0yOHlVUEZhbDNqYTRRQjd0eml0eDN6M2hP?= =?utf-8?B?ZnJacW01d01NT0dKV1orb1VIVHU4QXBWVjkzSzM4ai84SUNhaC81VC9Gbm5G?= =?utf-8?Q?v6E0K4+mTAkT6GKkCY/RcZZBw?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: b5ede3fa-d391-4b78-acb2-08dafd520d6a X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2023 14:56:48.2305 (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: NbfjHjq+qT0boZANSHwHTVrVDo1Blev2cTDgX0voZ66m3uGOrjRHtK14FKhMPMr8M76nzCZa3GNLLp5kxPzRqQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB6972 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1674485838264100001 Content-Type: text/plain; charset="utf-8" The registration by virtual/linear address has downsides: The access is expensive for HVM/PVH domains. Furthermore for 64-bit PV domains the area is inaccessible (and hence cannot be updated by Xen) when in guest-user mode. Introduce a new vCPU operation allowing to register the secondary time area by guest-physical address. An at least theoretical downside to using physically registered areas is that PV then won't see dirty (and perhaps also accessed) bits set in its respective page table entries. Signed-off-by: Jan Beulich --- v2: Forge version in force_update_secondary_system_time(). --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -1499,6 +1499,15 @@ int arch_vcpu_reset(struct vcpu *v) return 0; } =20 +static void cf_check +time_area_populate(void *map, struct vcpu *v) +{ + if ( is_pv_vcpu(v) ) + v->arch.pv.pending_system_time.version =3D 0; + + force_update_secondary_system_time(v, map); +} + long do_vcpu_op(int cmd, unsigned int vcpuid, XEN_GUEST_HANDLE_PARAM(void)= arg) { long rc =3D 0; @@ -1536,6 +1545,25 @@ long do_vcpu_op(int cmd, unsigned int vc =20 break; } + + case VCPUOP_register_vcpu_time_phys_area: + { + struct vcpu_register_time_memory_area area; + + rc =3D -EFAULT; + if ( copy_from_guest(&area.addr.p, arg, 1) ) + break; + + rc =3D map_guest_area(v, area.addr.p, + sizeof(vcpu_time_info_t), + &v->arch.time_guest_area, + time_area_populate); + if ( rc =3D=3D -ERESTART ) + rc =3D hypercall_create_continuation(__HYPERVISOR_vcpu_op, "ii= h", + cmd, vcpuid, arg); + + break; + } =20 case VCPUOP_get_physid: { --- a/xen/arch/x86/include/asm/domain.h +++ b/xen/arch/x86/include/asm/domain.h @@ -681,6 +681,8 @@ void domain_cpu_policy_changed(struct do =20 bool update_secondary_system_time(struct vcpu *, struct vcpu_time_info *); +void force_update_secondary_system_time(struct vcpu *, + struct vcpu_time_info *); =20 void vcpu_show_execution_state(struct vcpu *); void vcpu_show_registers(const struct vcpu *); --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -1524,6 +1524,16 @@ void force_update_vcpu_system_time(struc __update_vcpu_system_time(v, 1); } =20 +void force_update_secondary_system_time(struct vcpu *v, + struct vcpu_time_info *map) +{ + struct vcpu_time_info u; + + collect_time_info(v, &u); + u.version =3D -1; /* Compensate for version_update_end(). */ + write_time_guest_area(map, &u); +} + static void update_domain_rtc(void) { struct domain *d; --- a/xen/arch/x86/x86_64/domain.c +++ b/xen/arch/x86/x86_64/domain.c @@ -115,6 +115,7 @@ compat_vcpu_op(int cmd, unsigned int vcp =20 case VCPUOP_send_nmi: case VCPUOP_get_physid: + case VCPUOP_register_vcpu_time_phys_area: rc =3D do_vcpu_op(cmd, vcpuid, arg); break; =20 --- a/xen/include/public/vcpu.h +++ b/xen/include/public/vcpu.h @@ -230,6 +230,7 @@ DEFINE_XEN_GUEST_HANDLE(vcpu_register_ti * VMASST_TYPE_runstate_update_flag engaged by the domain. */ #define VCPUOP_register_runstate_phys_area 14 +#define VCPUOP_register_vcpu_time_phys_area 15 =20 #endif /* __XEN_PUBLIC_VCPU_H__ */ From nobody Wed May 15 18:54:42 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=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1674485868; cv=pass; d=zohomail.com; s=zohoarc; b=fSJZcpGx92TXyhxrQLtZNfMz87zIkUck236Pps1UfrJsRPulZrH2h5iYYint1aAkWNhw8OAtGC9fY0O9eXaSdIx1htipSzzhr0k+C/51KzgeWS+oU9eEDe995QBv+c8w/5vcBP/Ev0thdyH3d9nM7gtvsB9rALn35mBOxJK0tMo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1674485868; 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=4vRXvWQLyGKAmG7Bji/j/VfcIcDZDAV0kqzYj4NHDKM=; b=m/hiOPmN10L4JQU+voEDSO/2IauAYcF2joqmEljcBBMwonkoJOl4ar/7cXzRtinaak4CPWTLDEwmrZIuSYl9OHk68pkB+r/UCmx2r3mSeL/TWy/NGDUCs3svgnIIetOvfjHTAkoBvhd9e43E6G1s6A6hJfVBAZvR1OCiZo8Me90= 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=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1674485868841717.096532503129; Mon, 23 Jan 2023 06:57:48 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.482985.748833 (Exim 4.92) (envelope-from ) id 1pJyGG-0008S1-Rd; Mon, 23 Jan 2023 14:57:28 +0000 Received: by outflank-mailman (output) from mailman id 482985.748833; Mon, 23 Jan 2023 14:57:28 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pJyGG-0008Ru-OP; Mon, 23 Jan 2023 14:57:28 +0000 Received: by outflank-mailman (input) for mailman id 482985; Mon, 23 Jan 2023 14:57:27 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pJyGF-0007BS-4r for xen-devel@lists.xenproject.org; Mon, 23 Jan 2023 14:57:27 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2076.outbound.protection.outlook.com [40.107.22.76]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 3f8fd8df-9b2e-11ed-91b6-6bf2151ebd3b; Mon, 23 Jan 2023 15:57:25 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DB8PR04MB6972.eurprd04.prod.outlook.com (2603:10a6:10:11c::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.33; Mon, 23 Jan 2023 14:57:23 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389%7]) with mapi id 15.20.6002.033; Mon, 23 Jan 2023 14:57:23 +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: 3f8fd8df-9b2e-11ed-91b6-6bf2151ebd3b ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BBL5oriJJl9QVmA217MpxakpE+Qh9lBxqdfPRykcVGBQ+kYV6ur31uGRg5vTuFE3oJ9AgKcRdwWMa3ONVbInZp4+KLB762IQ4wMQnnH2vqlFvNnoKFFbgU6UjfgcPIQAjPSAnivogA7rgstKujrpRh1lJzK9lo58PESuP+SdZWo61wF4wfF4YG5qVD5yhzub6wDCzwkhos+cQrGTofQSMHFK5d2mw4Hxfpe+cfuOJR1BHWXiMqgrEU++CyYN/FIOqRDCtOw8ykhMb4F4+3upfuFnRytGlJvwUcf1n8N0y9SlRtO20sZ3S+l9mZbCV9bhURHTTlery2EeSZmdqYM13g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=4vRXvWQLyGKAmG7Bji/j/VfcIcDZDAV0kqzYj4NHDKM=; b=ibdqDd717LlSPHfSaxIXXgWfWJbHocf82gZgDEC1yaMy5UN7+JWVSsSSGsy/y+PPgqKsYk90DXY2LbwFXDRx+l4TXxCQ2woVaLtOxEiYNAtuw5ZhpMtQgvaueKjdTiqanVEF0URlYgpd5AVY2ERjP/0+YD0Vt//0W/RC8K3q3ak7hdffckr0nFkt9JQkosWEjuyehnMuAuwqumiMvKqg6w+YYC/4im522C7+Ldmi8I5K2M4qpjCyZy8YwOb2RXo0MJr3W5iWiV6X2xa2xDRFtmavkYCSSt0DHY0jrOtABmKiLD4lRzXCrGRdEIB9E1JxCA2GMxxb/hDsV3M9wc/Wcg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4vRXvWQLyGKAmG7Bji/j/VfcIcDZDAV0kqzYj4NHDKM=; b=sKDKCou3ewMLQIzmPETiGkeFOd0g9A28wL7IODL2G15LYJ0nBvbvo0pmp2OMmiWJZ4FxYRSM4AWjndjgKCFiP0h0K9x0xQa8Tatqxv4fj9Ho69BGCd6QSLJyc+RR2Xm1ZVoMLfJ3jLwzVuJk4dmMfPcMZ05aYL7UktVnDZ/VZRA5O3uYT2w+RHQGBucTaZic9FB2XzRSSNWtbB/voN5ei60BurTA2LiH7PXnrs1jbQ82T1CIfsSHzKUnURZLH5wGyka9T2pnc0TnX+afBcsdpJzLhl4oJIe4/xl+OldkK1YzPo95Q9LQovKMMFlrXmm9CyXPvS+ONj8AC1VpBLJVgQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <5ef83f20-e1d0-83a5-168d-912f5be17ca2@suse.com> Date: Mon, 23 Jan 2023 15:57:22 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: [PATCH v2 8/8] common: convert vCPU info area registration Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , George Dunlap , Julien Grall , Stefano Stabellini , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , Tamas K Lengyel References: <33cd2aba-73fc-6dfe-d0f2-f41883e7cdfa@suse.com> In-Reply-To: <33cd2aba-73fc-6dfe-d0f2-f41883e7cdfa@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0145.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:95::8) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DB8PR04MB6972:EE_ X-MS-Office365-Filtering-Correlation-Id: b9f951ea-9165-41a2-815d-08dafd522282 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: RpJ5HiMxbVQFEhWuC+/PFqPNz3jCxdcsjrQg3fKcoOPRbesZrkTdSr7B5mXgBvCUXNwR7miEHUxCTQa7emtrKqKPOrc1cnMyS70ekhmiRRYpIoo8RRiN4qaxojA3MmLxARWX1mkcDuDsXZ4nvIPIzGRdMPl8BYlPUwi+SJreRFXGGiHbE8W1I3cg0FOrJTMGJNo08j/TTyhQ155Wv0Dx3lPXFe6eN0iqFEIQEMIHtWrOODfsdogtt3eCMprANcENyjexV0MYnwEwL0ZMXxOpQY4o6w/91i/0ZLxyEnQ+7eDnxF54CMdKSsz3RN2Il8NoplZ1kTIXNIqnZzF2nt2+y0qxHW2x+Hjb1H6bskBeuE9FInwvpi0E2GCR1SNhY4+sXNErSKDOFpQ6TV1ygnrVgSoz/HpJdXmz4QVrq0tGs3iKk1PnElANriazG26eXwwYDDa09ljSbgj88Qwi0V4EP/VzVZxj/jgS2e/5l6kyqa7DsQ6Fxa04lyG7ocW7+vJ+rO+2HhJCJCUGuWuGBTddyV3+IktgsS/8/D0oIhJ3KAscMoDPXPZvz5HiSoOkZpqHj2cSP9Tv3bIsBP0supoG4yzgGKcIGFazEBJTXSNFM56+pAd2SZ4/Y20cs9y5Ijh2RFsGTpLSNtnSDWnkFu2TGB/SjA5+DbPAtP4HvUJZaqEp7mFFTqIVwJZx5fb+DWw24/rvPAcLlHrVwBqcV6U3/SB6PdFJwecqiNCd8IU/r1g+ahQowNPrmo/PuORBT0zUVDLQg6VVUMv4RuNVDym5bQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(376002)(366004)(396003)(39860400002)(136003)(346002)(451199015)(6506007)(26005)(186003)(6486002)(478600001)(6512007)(8676002)(6916009)(4326008)(316002)(31696002)(66946007)(66476007)(66556008)(41300700001)(5660300002)(8936002)(83380400001)(30864003)(36756003)(2906002)(38100700002)(86362001)(54906003)(31686004)(2616005)(45980500001)(43740500002)(309714004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bmJlbDFsK21tM3ZaMUJWZ21wWXdoeHVjU0JIRXhCUytFTnR4OTJ3OUxpZzIv?= =?utf-8?B?QzREdW1QSnpZQkJXY0I1MDNtbTBtMjlsdGV6dXl0NUhCSitJNTVZZ0hUN3Nw?= =?utf-8?B?citoMjB1WFRRZXFzQ244ZDlValFFMnBPbDVuMTVXWVZ6YjE0TDVnU2RjcXhY?= =?utf-8?B?MExpN0pSTXRTSkpjY05OVEJ2Nzhrd0hldCtvREFSMTZ5MVM5b1kvZFZtUGFD?= =?utf-8?B?eHZJU2tWRExWWlRicG5MRHVjMEY0R1lFeG5iWUVGajI2UVp6NWVoNFNVd082?= =?utf-8?B?Qi9QN3BCbDN3cUZFZGxGMnIzTnpYMGlYRkM1aDhsQnFPTEdOcS9CZDBVbGVa?= =?utf-8?B?VDNkQXlTeGRJMjh2aVArR3B0YU9KSzVtZEtlNWVnUFVYbGNNdE93dmk5eGlU?= =?utf-8?B?VWZtMDlBVC9mcXhJaHV6YXRuTUlJSU5MenN1UnpCd05DTkpvVG9ZL2trcVlx?= =?utf-8?B?OXhjdURJNzFlVWN0K0E3SlFReGs4cG1lbGJmOHN5a0c3V3pRMUlUSEZjMXNt?= =?utf-8?B?aTRhOWowQXBNMU9JYzFnR2VPYzI0TW4zMnl6ck1SaVkybnBTK3QrMFFzdHo5?= =?utf-8?B?WnhHUnp6SkI1V2R6RkdCaThEcmZ4K2VXMWhlTEpMUm80Mjg2ZXJaTDVEdjFB?= =?utf-8?B?Yjk3WkxxRThlUmJwMktFcmpDNi9aaDY5OUY2YWRJYm4vYzIyZVNQcjRPN21z?= =?utf-8?B?ck90a0dKZytvTkI0RkRxeERxZkVGdzFrZzVMK3pqOXFnR1hCL2lsQmpwZTcv?= =?utf-8?B?VVhzano3eXQyRVk5clFqbTc5QUtDYkhoSnd2dVZ4MkdPR2E5TzNUOGJwZGV1?= =?utf-8?B?Rkd6SlFMWHVLazNrTjNUZ0tBWXFzbjR1NWtxTzY0VGRiSGtUdFFQRGxLU0tl?= =?utf-8?B?djFFSWZqb0loZnNUT1hHSHRTei93dkFzNkZIajEvSmFIeCtKQlFRd2lzUVpn?= =?utf-8?B?OG9KSTRYRHlUR3V0ek52cUt6ajF3MU9nSHBweFN4UTU1d2tTTFlocUlDajNz?= =?utf-8?B?MHNTSi8yNGl0Vm1PQmJQUGdLYURzaE5ZSi8xamVZY0Q0YW9oZ2xTZVd3ekY3?= =?utf-8?B?UmpBd0hDaWxsSzF3Qkx3M1dLUzlRTnpZZ2E3VW5UQWF5NVprUDdqMVJ4Z1d1?= =?utf-8?B?Z2o2NFQ1T2EyR1JhdDRxLzJPNGxpbHRTQnhDc0RqNm9TdWgxZUlvQXU1b3B2?= =?utf-8?B?bytRcS9qb3FZUkErZHIrRmVEOGJ6Qk4xSDRxZ3djWG5Lay9PWGt4UTV5aGtO?= =?utf-8?B?TGY0UzZBc1VXTDFOcTNMOGszWGN5RlNvekFEWGN5VS9GRzRIYzRkWUdldTVa?= =?utf-8?B?UzVRUXIrV1RyaTZPMlVQZ0UxNG1sVEVhSEhaakp2TytJM1ZuRkRndFBoN2Za?= =?utf-8?B?NzhvTFAyT0FjazdDeUJCa3FKNHl6cG5OdVF1UElJb0dkNEdiZlJlU0Vob1JS?= =?utf-8?B?WXhGSk5KQjFabUluQm5VSVVMSkRxalhENkppRVAwNmRQN29pMnV0dngxZzNy?= =?utf-8?B?aUZHMExJL0REWUtsY201bm12UVAwTGpla1czTG1TQ0Z0Wm9qaU5qdkVRQkxv?= =?utf-8?B?OTJudlk4aC95UDM2bzRwcDVtYjB6aVNiVjlZZ2Z3YmVWQ2hlRGFKanBPZWlW?= =?utf-8?B?ZUZscUk4NkpQY1g3R2hUNTNMa1R2Ukw4Y04veHhKSEVHbncyZGhrVjJveFRR?= =?utf-8?B?QnRISm4rY21zSE04N2FmTXBoc0xQZ2lhRWdQRzhDZWZ1L1VWMHNFU1kvSWRy?= =?utf-8?B?MlVBWCtacUc0VnE3VTZKcDk0amU3N0FOb3JHMlh3Tm9yVG56RTVQaW1uTjZS?= =?utf-8?B?b00rRTdIV1g0SjJreUFXS1V4TldkTjBYSU0xUk1aaDgyVktpNXkwYklPWmV6?= =?utf-8?B?SXphRXh4MWNHU1JoMXJuc0VjWHpEd0Z6ZlgrSHBZc3RRcEtOb2xYSFg0SlJV?= =?utf-8?B?LzhsTGZmSTRKb0pRbzZLTUs2dUNQcUNaUHM4Z3Q0UFFIL3o5OEE0YlEwN0M1?= =?utf-8?B?cWhZNmY2eUpCL3ppN01BcktkSmh2UlVVdVhVZVZ4WmNod1hxNS9lSVZOSzVr?= =?utf-8?B?d0FsSUIyckduQWxocnpLT2pyN09tS1ZlY2hHQkRVaWM1bFY3UHhJNGxGbkxt?= =?utf-8?Q?1C8HhQiBs60ZYZuCkC6L2ayN4?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: b9f951ea-9165-41a2-815d-08dafd522282 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2023 14:57:23.6501 (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: BJbgybWiD9RHgFefRzkquLVXPmXLpooqZBZqAOuxTx6ljiU6ednIIC3C0DlPyD+r+8bD3AAWKBivpgmBvo43WQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB6972 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1674485870307100001 Content-Type: text/plain; charset="utf-8" Switch to using map_guest_area(). Noteworthy differences from map_vcpu_info(): - remote vCPU-s are paused rather than checked for being down (which in principle can change right after the check), - the domain lock is taken for a much smaller region, - the error code for an attempt to re-register the area is now -EBUSY, - we could in principle permit de-registration when no area was previously registered (which would permit "probing", if necessary for anything). Note that this eliminates a bug in copy_vcpu_settings(): The function did allocate a new page regardless of the GFN already having a mapping, thus in particular breaking the case of two vCPU-s having their info areas on the same page. Signed-off-by: Jan Beulich --- RFC: I'm not really certain whether the preliminary check (ahead of calling map_guest_area()) is worthwhile to have. --- v2: Re-base over changes earlier in the series. Properly enforce no re- registration. Avoid several casts by introducing local variables. --- a/xen/arch/x86/include/asm/shared.h +++ b/xen/arch/x86/include/asm/shared.h @@ -26,17 +26,20 @@ static inline void arch_set_##field(stru #define GET_SET_VCPU(type, field) \ static inline type arch_get_##field(const struct vcpu *v) \ { \ + const vcpu_info_t *vi =3D v->vcpu_info_area.map; \ + \ return !has_32bit_shinfo(v->domain) ? \ - v->vcpu_info->native.arch.field : \ - v->vcpu_info->compat.arch.field; \ + vi->native.arch.field : vi->compat.arch.field; \ } \ static inline void arch_set_##field(struct vcpu *v, \ type val) \ { \ + vcpu_info_t *vi =3D v->vcpu_info_area.map; \ + \ if ( !has_32bit_shinfo(v->domain) ) \ - v->vcpu_info->native.arch.field =3D val; \ + vi->native.arch.field =3D val; \ else \ - v->vcpu_info->compat.arch.field =3D val; \ + vi->compat.arch.field =3D val; \ } =20 #else @@ -57,12 +60,16 @@ static inline void arch_set_##field(stru #define GET_SET_VCPU(type, field) \ static inline type arch_get_##field(const struct vcpu *v) \ { \ - return v->vcpu_info->arch.field; \ + const vcpu_info_t *vi =3D v->vcpu_info_area.map; \ + \ + return vi->arch.field; \ } \ static inline void arch_set_##field(struct vcpu *v, \ type val) \ { \ - v->vcpu_info->arch.field =3D val; \ + vcpu_info_t *vi =3D v->vcpu_info_area.map; \ + \ + vi->arch.field =3D val; \ } =20 #endif --- a/xen/arch/x86/mm/mem_sharing.c +++ b/xen/arch/x86/mm/mem_sharing.c @@ -1758,53 +1758,24 @@ static int copy_vpmu(struct vcpu *d_vcpu static int copy_vcpu_settings(struct domain *cd, const struct domain *d) { unsigned int i; - struct p2m_domain *p2m =3D p2m_get_hostp2m(cd); int ret =3D -EINVAL; =20 for ( i =3D 0; i < cd->max_vcpus; i++ ) { struct vcpu *d_vcpu =3D d->vcpu[i]; struct vcpu *cd_vcpu =3D cd->vcpu[i]; - mfn_t vcpu_info_mfn; =20 if ( !d_vcpu || !cd_vcpu ) continue; =20 - /* Copy & map in the vcpu_info page if the guest uses one */ - vcpu_info_mfn =3D d_vcpu->vcpu_info_mfn; - if ( !mfn_eq(vcpu_info_mfn, INVALID_MFN) ) - { - mfn_t new_vcpu_info_mfn =3D cd_vcpu->vcpu_info_mfn; - - /* Allocate & map the page for it if it hasn't been already */ - if ( mfn_eq(new_vcpu_info_mfn, INVALID_MFN) ) - { - gfn_t gfn =3D mfn_to_gfn(d, vcpu_info_mfn); - unsigned long gfn_l =3D gfn_x(gfn); - struct page_info *page; - - if ( !(page =3D alloc_domheap_page(cd, 0)) ) - return -ENOMEM; - - new_vcpu_info_mfn =3D page_to_mfn(page); - set_gpfn_from_mfn(mfn_x(new_vcpu_info_mfn), gfn_l); - - ret =3D p2m->set_entry(p2m, gfn, new_vcpu_info_mfn, - PAGE_ORDER_4K, p2m_ram_rw, - p2m->default_access, -1); - if ( ret ) - return ret; - - ret =3D map_vcpu_info(cd_vcpu, gfn_l, - PAGE_OFFSET(d_vcpu->vcpu_info)); - if ( ret ) - return ret; - } - - copy_domain_page(new_vcpu_info_mfn, vcpu_info_mfn); - } - - /* Same for the (physically registered) runstate and time info are= as. */ + /* + * Copy and map the vcpu_info page and the (physically registered) + * runstate and time info areas. + */ + ret =3D copy_guest_area(&cd_vcpu->vcpu_info_area, + &d_vcpu->vcpu_info_area, cd_vcpu, d); + if ( ret ) + return ret; ret =3D copy_guest_area(&cd_vcpu->runstate_guest_area, &d_vcpu->runstate_guest_area, cd_vcpu, d); if ( ret ) --- a/xen/arch/x86/pv/shim.c +++ b/xen/arch/x86/pv/shim.c @@ -395,7 +395,7 @@ int pv_shim_shutdown(uint8_t reason) for_each_vcpu ( d, v ) { /* Unmap guest vcpu_info page and runstate/time areas. */ - unmap_vcpu_info(v); + unmap_guest_area(v, &v->vcpu_info_area); unmap_guest_area(v, &v->runstate_guest_area); unmap_guest_area(v, &v->arch.time_guest_area); =20 --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -1438,7 +1438,7 @@ static void __update_vcpu_system_time(st struct vcpu_time_info *u =3D &vcpu_info(v, time), _u; const struct domain *d =3D v->domain; =20 - if ( v->vcpu_info =3D=3D NULL ) + if ( !v->vcpu_info_area.map ) return; =20 collect_time_info(v, &_u); --- a/xen/arch/x86/x86_64/asm-offsets.c +++ b/xen/arch/x86/x86_64/asm-offsets.c @@ -53,7 +53,7 @@ void __dummy__(void) =20 OFFSET(VCPU_processor, struct vcpu, processor); OFFSET(VCPU_domain, struct vcpu, domain); - OFFSET(VCPU_vcpu_info, struct vcpu, vcpu_info); + OFFSET(VCPU_vcpu_info, struct vcpu, vcpu_info_area.map); OFFSET(VCPU_trap_bounce, struct vcpu, arch.pv.trap_bounce); OFFSET(VCPU_thread_flags, struct vcpu, arch.flags); OFFSET(VCPU_event_addr, struct vcpu, arch.pv.event_callback_eip); --- a/xen/arch/x86/x86_64/traps.c +++ b/xen/arch/x86/x86_64/traps.c @@ -97,7 +97,7 @@ static void _show_registers( if ( context =3D=3D CTXT_hypervisor ) printk(" %pS", _p(regs->rip)); printk("\nRFLAGS: %016lx ", regs->rflags); - if ( (context =3D=3D CTXT_pv_guest) && v && v->vcpu_info ) + if ( (context =3D=3D CTXT_pv_guest) && v && v->vcpu_info_area.map ) printk("EM: %d ", !!vcpu_info(v, evtchn_upcall_mask)); printk("CONTEXT: %s", context_names[context]); if ( v && !is_idle_vcpu(v) ) --- a/xen/common/compat/domain.c +++ b/xen/common/compat/domain.c @@ -49,7 +49,7 @@ int compat_common_vcpu_op(int cmd, struc { case VCPUOP_initialise: { - if ( v->vcpu_info =3D=3D &dummy_vcpu_info ) + if ( v->vcpu_info_area.map =3D=3D &dummy_vcpu_info ) return -EINVAL; =20 #ifdef CONFIG_HVM --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -127,10 +127,10 @@ static void vcpu_info_reset(struct vcpu { struct domain *d =3D v->domain; =20 - v->vcpu_info =3D ((v->vcpu_id < XEN_LEGACY_MAX_VCPUS) - ? (vcpu_info_t *)&shared_info(d, vcpu_info[v->vcpu_id]) - : &dummy_vcpu_info); - v->vcpu_info_mfn =3D INVALID_MFN; + v->vcpu_info_area.map =3D + ((v->vcpu_id < XEN_LEGACY_MAX_VCPUS) + ? (vcpu_info_t *)&shared_info(d, vcpu_info[v->vcpu_id]) + : &dummy_vcpu_info); } =20 static void vmtrace_free_buffer(struct vcpu *v) @@ -964,7 +964,7 @@ int domain_kill(struct domain *d) return -ERESTART; for_each_vcpu ( d, v ) { - unmap_vcpu_info(v); + unmap_guest_area(v, &v->vcpu_info_area); unmap_guest_area(v, &v->runstate_guest_area); } d->is_dying =3D DOMDYING_dead; @@ -1419,7 +1419,7 @@ int domain_soft_reset(struct domain *d, for_each_vcpu ( d, v ) { set_xen_guest_handle(runstate_guest(v), NULL); - unmap_vcpu_info(v); + unmap_guest_area(v, &v->vcpu_info_area); unmap_guest_area(v, &v->runstate_guest_area); } =20 @@ -1467,111 +1467,6 @@ int vcpu_reset(struct vcpu *v) return rc; } =20 -/* - * Map a guest page in and point the vcpu_info pointer at it. This - * makes sure that the vcpu_info is always pointing at a valid piece - * of memory, and it sets a pending event to make sure that a pending - * event doesn't get missed. - */ -int map_vcpu_info(struct vcpu *v, unsigned long gfn, unsigned int offset) -{ - struct domain *d =3D v->domain; - void *mapping; - vcpu_info_t *new_info; - struct page_info *page; - unsigned int align; - - if ( offset > (PAGE_SIZE - sizeof(*new_info)) ) - return -ENXIO; - -#ifdef CONFIG_COMPAT - BUILD_BUG_ON(sizeof(*new_info) !=3D sizeof(new_info->compat)); - if ( has_32bit_shinfo(d) ) - align =3D alignof(new_info->compat); - else -#endif - align =3D alignof(*new_info); - if ( offset & (align - 1) ) - return -ENXIO; - - if ( !mfn_eq(v->vcpu_info_mfn, INVALID_MFN) ) - return -EINVAL; - - /* Run this command on yourself or on other offline VCPUS. */ - if ( (v !=3D current) && !(v->pause_flags & VPF_down) ) - return -EINVAL; - - page =3D get_page_from_gfn(d, gfn, NULL, P2M_UNSHARE); - if ( !page ) - return -EINVAL; - - if ( !get_page_type(page, PGT_writable_page) ) - { - put_page(page); - return -EINVAL; - } - - mapping =3D __map_domain_page_global(page); - if ( mapping =3D=3D NULL ) - { - put_page_and_type(page); - return -ENOMEM; - } - - new_info =3D (vcpu_info_t *)(mapping + offset); - - if ( v->vcpu_info =3D=3D &dummy_vcpu_info ) - { - memset(new_info, 0, sizeof(*new_info)); -#ifdef XEN_HAVE_PV_UPCALL_MASK - __vcpu_info(v, new_info, evtchn_upcall_mask) =3D 1; -#endif - } - else - { - memcpy(new_info, v->vcpu_info, sizeof(*new_info)); - } - - v->vcpu_info =3D new_info; - v->vcpu_info_mfn =3D page_to_mfn(page); - - /* Set new vcpu_info pointer /before/ setting pending flags. */ - smp_wmb(); - - /* - * Mark everything as being pending just to make sure nothing gets - * lost. The domain will get a spurious event, but it can cope. - */ -#ifdef CONFIG_COMPAT - if ( !has_32bit_shinfo(d) ) - write_atomic(&new_info->native.evtchn_pending_sel, ~0); - else -#endif - write_atomic(&vcpu_info(v, evtchn_pending_sel), ~0); - vcpu_mark_events_pending(v); - - return 0; -} - -/* - * Unmap the vcpu info page if the guest decided to place it somewhere - * else. This is used from domain_kill() and domain_soft_reset(). - */ -void unmap_vcpu_info(struct vcpu *v) -{ - mfn_t mfn =3D v->vcpu_info_mfn; - - if ( mfn_eq(mfn, INVALID_MFN) ) - return; - - unmap_domain_page_global((void *) - ((unsigned long)v->vcpu_info & PAGE_MASK)); - - vcpu_info_reset(v); /* NB: Clobbers v->vcpu_info_mfn */ - - put_page_and_type(mfn_to_page(mfn)); -} - int map_guest_area(struct vcpu *v, paddr_t gaddr, unsigned int size, struct guest_area *area, void (*populate)(void *dst, struct vcpu *v)) @@ -1633,14 +1528,44 @@ int map_guest_area(struct vcpu *v, paddr =20 domain_lock(d); =20 - if ( map ) - populate(map, v); + /* No re-registration of the vCPU info area. */ + if ( area !=3D &v->vcpu_info_area || !area->pg ) + { + if ( map ) + populate(map, v); =20 - SWAP(area->pg, pg); - SWAP(area->map, map); + SWAP(area->pg, pg); + SWAP(area->map, map); + } + else + rc =3D -EBUSY; =20 domain_unlock(d); =20 + /* Set pending flags /after/ new vcpu_info pointer was set. */ + if ( area =3D=3D &v->vcpu_info_area && !rc ) + { + /* + * Mark everything as being pending just to make sure nothing gets + * lost. The domain will get a spurious event, but it can cope. + */ +#ifdef CONFIG_COMPAT + if ( !has_32bit_shinfo(d) ) + { + vcpu_info_t *info =3D area->map; + + /* For VCPUOP_register_vcpu_info handling in common_vcpu_op().= */ + BUILD_BUG_ON(sizeof(*info) !=3D sizeof(info->compat)); + write_atomic(&info->native.evtchn_pending_sel, ~0); + } + else +#endif + write_atomic(&vcpu_info(v, evtchn_pending_sel), ~0); + vcpu_mark_events_pending(v); + + force_update_vcpu_system_time(v); + } + if ( v !=3D current ) vcpu_unpause(v); =20 @@ -1670,7 +1595,10 @@ void unmap_guest_area(struct vcpu *v, st =20 domain_lock(d); map =3D area->map; - area->map =3D NULL; + if ( area =3D=3D &v->vcpu_info_area ) + vcpu_info_reset(v); + else + area->map =3D NULL; pg =3D area->pg; area->pg =3D NULL; domain_unlock(d); @@ -1803,6 +1731,27 @@ bool update_runstate_area(struct vcpu *v return rc; } =20 +/* + * This makes sure that the vcpu_info is always pointing at a valid piece = of + * memory, and it sets a pending event to make sure that a pending event + * doesn't get missed. + */ +static void cf_check +vcpu_info_populate(void *map, struct vcpu *v) +{ + vcpu_info_t *info =3D map; + + if ( v->vcpu_info_area.map =3D=3D &dummy_vcpu_info ) + { + memset(info, 0, sizeof(*info)); +#ifdef XEN_HAVE_PV_UPCALL_MASK + __vcpu_info(v, info, evtchn_upcall_mask) =3D 1; +#endif + } + else + memcpy(info, v->vcpu_info_area.map, sizeof(*info)); +} + static void cf_check runstate_area_populate(void *map, struct vcpu *v) { @@ -1832,7 +1781,7 @@ long common_vcpu_op(int cmd, struct vcpu switch ( cmd ) { case VCPUOP_initialise: - if ( v->vcpu_info =3D=3D &dummy_vcpu_info ) + if ( v->vcpu_info_area.map =3D=3D &dummy_vcpu_info ) return -EINVAL; =20 rc =3D arch_initialise_vcpu(v, arg); @@ -1956,16 +1905,29 @@ long common_vcpu_op(int cmd, struct vcpu case VCPUOP_register_vcpu_info: { struct vcpu_register_vcpu_info info; + paddr_t gaddr; =20 rc =3D -EFAULT; if ( copy_from_guest(&info, arg, 1) ) break; =20 - domain_lock(d); - rc =3D map_vcpu_info(v, info.mfn, info.offset); - domain_unlock(d); + rc =3D -EINVAL; + gaddr =3D gfn_to_gaddr(_gfn(info.mfn)) + info.offset; + if ( !~gaddr || + gfn_x(gaddr_to_gfn(gaddr)) !=3D info.mfn ) + break; =20 - force_update_vcpu_system_time(v); + /* Preliminary check only; see map_guest_area(). */ + rc =3D -EBUSY; + if ( v->vcpu_info_area.pg ) + break; + + /* See the BUILD_BUG_ON() in vcpu_info_populate(). */ + rc =3D map_guest_area(v, gaddr, sizeof(vcpu_info_t), + &v->vcpu_info_area, vcpu_info_populate); + if ( rc =3D=3D -ERESTART ) + rc =3D hypercall_create_continuation(__HYPERVISOR_vcpu_op, "ii= h", + cmd, vcpuid, arg); =20 break; } --- a/xen/include/xen/domain.h +++ b/xen/include/xen/domain.h @@ -79,9 +79,6 @@ void cf_check free_pirq_struct(void *); int arch_vcpu_create(struct vcpu *v); void arch_vcpu_destroy(struct vcpu *v); =20 -int map_vcpu_info(struct vcpu *v, unsigned long gfn, unsigned int offset); -void unmap_vcpu_info(struct vcpu *v); - int map_guest_area(struct vcpu *v, paddr_t gaddr, unsigned int size, struct guest_area *area, void (*populate)(void *dst, struct vcpu *v)); --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -175,7 +175,7 @@ struct vcpu =20 int processor; =20 - vcpu_info_t *vcpu_info; + struct guest_area vcpu_info_area; =20 struct domain *domain; =20 @@ -288,9 +288,6 @@ struct vcpu =20 struct waitqueue_vcpu *waitqueue_vcpu; =20 - /* Guest-specified relocation of vcpu_info. */ - mfn_t vcpu_info_mfn; - struct evtchn_fifo_vcpu *evtchn_fifo; =20 /* vPCI per-vCPU area, used to store data for long running operations.= */ --- a/xen/include/xen/shared.h +++ b/xen/include/xen/shared.h @@ -44,6 +44,7 @@ typedef struct vcpu_info vcpu_info_t; extern vcpu_info_t dummy_vcpu_info; =20 #define shared_info(d, field) __shared_info(d, (d)->shared_info, fiel= d) -#define vcpu_info(v, field) __vcpu_info(v, (v)->vcpu_info, field) +#define vcpu_info(v, field) \ + __vcpu_info(v, (vcpu_info_t *)(v)->vcpu_info_area.map, field) =20 #endif /* __XEN_SHARED_H__ */