From nobody Tue May 14 09:43:16 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=1686841019; cv=pass; d=zohomail.com; s=zohoarc; b=KrW67NKrDXjw2W+ItEU1uO5y2LCZdKq6BWvFE5uRrCnWBKcm5oiBcxwzsjF/iF1itdiFYWNP461ucx5krXMFq7tIaCpSdkBb6LydP41OYbGUyWhbssnY0sPIPhrMo+jgiTusrz8Y6dtN3ZCBiULzUja+Ux0qMGjpY8LpltcJVzA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686841019; 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=OIdP+fPD+oF9cEQiMq7yKwpArFJAY76tnF1ijHYYjN8=; b=i4GbhpXnuEd5g0JEOACV0KjIYzA5vyfKHCKW8ZPEN9VsLwJb6O9S1xemQoFaRT5SEQ/K0LsoZTui6gEz97Oa68n3Sf9dhDt5ABxKgCKQhtHtl7OEVRxqT9cxo0kkn4G8zryfQO02H9r3osHz8Pe4fkg9ZCO/rTiYbLDHwbNp79c= 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 1686841019448264.4681543300013; Thu, 15 Jun 2023 07:56:59 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.549667.858318 (Exim 4.92) (envelope-from ) id 1q9oOi-0005WI-Og; Thu, 15 Jun 2023 14:56:28 +0000 Received: by outflank-mailman (output) from mailman id 549667.858318; Thu, 15 Jun 2023 14:56: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 1q9oOi-0005WB-L9; Thu, 15 Jun 2023 14:56:28 +0000 Received: by outflank-mailman (input) for mailman id 549667; Thu, 15 Jun 2023 14:56:27 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1q9oOh-0005W0-Fy for xen-devel@lists.xenproject.org; Thu, 15 Jun 2023 14:56:27 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04on2070.outbound.protection.outlook.com [40.107.7.70]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id cc94a841-0b8c-11ee-8611-37d641c3527e; Thu, 15 Jun 2023 16:56:25 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by PAXPR04MB9665.eurprd04.prod.outlook.com (2603:10a6:102:240::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6500.25; Thu, 15 Jun 2023 14:55:54 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::e442:306f:7711:e24c]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::e442:306f:7711:e24c%5]) with mapi id 15.20.6455.039; Thu, 15 Jun 2023 14:55:54 +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: cc94a841-0b8c-11ee-8611-37d641c3527e ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ViTfpIZ4Ba9SXt5AGTOqOAwElEaQGfdGZn4pkvYCwdMtlhDV7U8hPhW6ddmUuK7PWAkCmgN/cGgtnv97Yq57KKJd9BQa1h4CiETCMM8dpSSp9wkfoIi+rJQpxWgW1tN54IDV356yEDHWmFpHdxVwYhRoS7+jz3Cr6sgAq9/IBEHsGZgvo1VHHJ774pYBbKcH7YrJQPjsNsraNpNkXoSmDaktoCYyzz+cIS/Bn4YIq/pAUpidDo+f+D3biNfOx2NRbvocmW/y4jShDrAqtuTflN/S9JL7DwVn5PAYaY8xc6i21HQsFLPjAaq+TslUIcYeO9y9aI4ycl1pedYC5jsr2Q== 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=OIdP+fPD+oF9cEQiMq7yKwpArFJAY76tnF1ijHYYjN8=; b=oKqM1Y2aU1AD3xfDOr5ACjQr5szE/jn93odDFIvzj8U+YFjPrgz2hfI9kG06apDbdyKAxNhevVtv7X+xibTfi/n9e8u+6datYUCkuwYLxGFmY8phCeHY3lTIvqJ4WLYCzHE8yxyM1S4N1L5ID1nr/jnx8ZD7wgEUkLnNOQPSKrvusMwDw8RORwHHteKvMPP+Bk6AdoI15Y8qoqH8va0xBkSB17y0AyFtKEwp9UTONJ6dU1LQI8k2ziUjgkQaMq0BSJ6+xkLeH10DEMu5m109/o6yVUE9Qf+WYKkSVjOL4LmTj3QzWaSFCYc8PXTWS8HBX0RGWBydPVaOAThRzYt7mg== 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=OIdP+fPD+oF9cEQiMq7yKwpArFJAY76tnF1ijHYYjN8=; b=Sj+rb7AIiCPLVdGGoEQCUBtDep6sBzN6qAeR5gEcigc9h3rCDt5RWFnnbVF5okuTqOHXAQvwC+3dI4pcUkV/k0T1B3w+7+iz/kR+w3Myod2dxcuMQuNsSxjrpwBy6/iWNxUuH84hNkLCCay0uwf82Phi3WPqK5B9uuWqBwViyBsaghjg3dxmV2nvw2o233QIUy9/IYAfKxTe6kFIXJi9GD4pEca35ia4cyIDcLYnBQj7wRctWddvUsZa05vA2iBpTS7MqovFk9kmYm0JU0mFziplypGLisHT3kJ/R6M9T17wEhg2282O3Bjoe7b6fUX8FtFOsY2Umg5UFhsAF4crrQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <84853482-edea-ff2e-7301-1148e29bca65@suse.com> Date: Thu, 15 Jun 2023 16:55:52 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: [PATCH v2 1/2] x86/vPIT: re-order functions Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: In-Reply-To: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0068.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:9a::12) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|PAXPR04MB9665:EE_ X-MS-Office365-Filtering-Correlation-Id: da522441-91cc-4c19-f325-08db6db09e8f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: iiVEUvMsqyFTew2r8tSwvfnir1Nag5PPN6Kx7yRcArDNyvkmHy1ynBUs5wKH5MqoxaLVLM4qgOFPujPqmmZBW9hEbpXFpqNM8F79vVkrNfgRbEd6an+ryCa20LZbWNDuuGHEizUSRy9RndsBxVtENJubd8FTxg1S75J37MCZqeSR4DtZH+oTYyPbtPpRpD8DD8fqmX3eOHEnutr2keoW/KC65lDisjZN2d51oRl2r2L57snYZ+UGG2/b8S/pyvZfpmiM7vDyE245xFnUw6ZApV+OADwdxDsw2VZ4IshRGy3TOZd5MYK57oAAMXnYG8AJb0dT3Gd/BRozWs4NgEEoHjGSKKhcnd6uirb5NbISXsIzJQBsTJUS2QomjBZ/Ll7r/6amLRjf2P13UccEXvKlZJdvhfi+aN+cnfKu1UvrWaCjvi3Liufjqn0sxC4XoYwulyI4sY81Pa2iZeIahlpjVStPBxbq36YKmpSTWxBNwq6ph+sKSr4tSaRZnY/4EJ3TINSnJK21u7bi1WB22DhvDPyB4Nzr+k8tZr0cqWOhEms10KlHkFS3uonNDn8H9EhlJQrfhD34gDt7GByq2Hxrbn44nN366L0pjyAewIOegZsr++RDFKBHtbnKbPdwCp2/Mo/noR/z0Fi7Y4DLZuHFHGQ59XpM+kPyaPI33xIXResMsKRA3w90Wur+CRS+TxLm 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:(13230028)(376002)(136003)(346002)(366004)(396003)(39860400002)(451199021)(5660300002)(38100700002)(2616005)(83380400001)(6506007)(186003)(2906002)(26005)(6512007)(478600001)(66556008)(6916009)(66946007)(66476007)(316002)(8936002)(6486002)(8676002)(41300700001)(86362001)(31696002)(36756003)(4326008)(31686004)(54906003)(169823001)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UW5FRWdSdUowQUNWVDFlNDNvMm45Q2xhUXdEME1PWG85alBLakFDeG5aSkg5?= =?utf-8?B?cC9XejRiSVNJZkdNL2htbXJDNXZnTU1NZ0VNcGhCMnB6bm1ZSENMakFpUEJO?= =?utf-8?B?V2QvSysyM3hISW1iNlIwcVBFSHhnbUdweEluWnJmNVRiZldicHpaR1NERk5Y?= =?utf-8?B?T3AvVkxtTExlMk9sdmNRUVdxamdiVlgxUk1rSXFXbk4wcTRFTGNIQTRqcFp0?= =?utf-8?B?b01KMSs1MlpUTE52SThXVTdGNG1MdHhaZWF6dHByQlpXaFNoVjBkbGZINGlN?= =?utf-8?B?cXI2Tnl5MCtIU05YaEY3ZkxKYWd5TEEweFBTRFpDYUt3QXYweS9BSXZPOEwz?= =?utf-8?B?QmNJUFFFbUFqYm5XRitTRDZ6dDZBSUF1RWVVN3cvWE5DY1M1RDhxTUsxcEY1?= =?utf-8?B?MGtaR0psL1RiTG1iaE03NlJvVHFnVDJFSXpOcGV5enZxc0ppd2RGRklYSE9M?= =?utf-8?B?SEx1eCtvRWR1K0hPSVZWbHB6T1NYSUIzUE1JOGJ1Z0wxUHJ5ZExmV3BMdEow?= =?utf-8?B?aW83clVMQlplOTdpZG5SWmR2Rk5NNG5JeXBQYnd4RFd1MFZhaXhRZk56cTJB?= =?utf-8?B?d0tGc0xmVVdhZytuR3JHTlhaVlJYdkFRcm9jQjMySkpEcWhXTHZjelVJbmtz?= =?utf-8?B?ajhpcmNwWmRQTGJnTUtva3loYVArL2RuZ0RkZUtrUEdFeXZiZ00wdXNaMkFp?= =?utf-8?B?ZlIzN0ZwWUJjUWNzVVZ3eko4R3Y4RnBkSnlpMGZFNzJlVUdWRkVyTmZWSTJs?= =?utf-8?B?dENhSXRuR045ZWJVMDhtRVhFc0p4NTZvL21SckNBUVZMWkFTN0JrQS81cDlk?= =?utf-8?B?MWRSSkd6U3ZCZyttOHEzS1pLMG42UXp4cjN6TjUyTTAzU3orOGg0a21pb3RR?= =?utf-8?B?UWhUenBpRFRlWnA1L0ZLYUxsNnVWYUhJb1lsYXZyTnRUN1JDbDF5cGdkcHIy?= =?utf-8?B?UE85Q1BUZ1lQV3N2ZWNaVDFmT2RGQXA2a1RSbHN1WGNBM1pDOURvMHNGcms0?= =?utf-8?B?cDNiZ2NSWUV1dkxYY0g3Z3g3T0RWRU1PaFV6MWVHb0N3dXU1aUtCOEpOVjA0?= =?utf-8?B?dzE4VXU5a1pYSmRlbDM4bG01K2lqQU83T1Ztc2FGdEFpTXhkcy9BcHlQYzFV?= =?utf-8?B?K1huVllaN2UrVUUwMjBkNTZsS1BaQXlCUi9iekFKRW9MWWV1QmxZK2hSYkht?= =?utf-8?B?cVRvY0szbGtqRnhTMDJtRGtLWG5kem9kdkZQNG02ams1QkozOFRMRDRhVEdS?= =?utf-8?B?YUI5SzZLNi9iTGJueUlYS29aTml0SllGMk5VaTNmQTBwNk1oM0V0Vkw1VnBD?= =?utf-8?B?RHJCMjhXbnVsWHlPbFJVem9XYzlmeXVvK052MHlUSng0UDhuS2g3SWtIcWpQ?= =?utf-8?B?K2Jra0J5bVJ4UjR1cjJ0ZVcyOXk2M3dVSE9yeDAzb0JVLzNYYU9VU2dMNitX?= =?utf-8?B?UWs4aGlGOGJ0UlJTdXRFSGg0Q3pTSjJ4b21ocEY2bVN6cUpuZTlwQmMrL3ZT?= =?utf-8?B?ZWljOXhjUUg5RGNIV0l3THRxTWFYNjY1MjdodUxvSHh2WGx3Wm8rU01UTUpz?= =?utf-8?B?VnF4cGVnTGxHTGM4RmFCM0NGQ1prMnM3c3NKSjIrdVlFeDhGbWV4MHJCRlN5?= =?utf-8?B?L2ttTWNqQ3oxL0ZUb2UzY3dLVGZTNnp6VkloLzZuS1NHMmV0T1BTRVEweWRI?= =?utf-8?B?NkhXRGZmNkxEVjlMNGc4dW1JRENXTHRORXpYQmJpOU5Vc0VoUmlKSTVjSi83?= =?utf-8?B?b2trUUtDM2hQMnpHUm1Nb3JyZ0RjUHNoZjNUZWFVR2FsT0NYTWk3Q2JoVk00?= =?utf-8?B?K25nV01Yc2FxRldYL2NoQmt4WDRSbTlFaHJvVXBWLzJrYU5oVGY2eWFZZWRI?= =?utf-8?B?bEdpYm1DT3JFdGlyR0VtbGhHNnJyUWJOSTNzUnJ0UGc4VmZNNGxES29aRXZ2?= =?utf-8?B?ZXk4L0pBczlXbmQzS25vNHhyQS9DUmdqTnBCTXNjeVR5NkN1RTA4Y3RSTWNi?= =?utf-8?B?bEU5SG8yWTg0VC9yRUNMNVJRdk9mUU8vTk1Bc3hwS01TWGJDSTJkMkRmRkZL?= =?utf-8?B?ZkMyNnJmc2gzdllnekh3OFFDN1BLRUVwWmpTalYyVmJJeHJHeGlsQnZlS0VX?= =?utf-8?Q?sn1pMKEHrDCRFJyK+s3Y8jjrY?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: da522441-91cc-4c19-f325-08db6db09e8f X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jun 2023 14:55:54.6024 (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: yvwKE2WPt7U3VyBsoFoXHtXZwVPORbgeKv5cSA2S2fAugsvK7scsiZCdjSd5yRjDEHU1y0/YUUhn7/pxVFyfdA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB9665 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1686841020824100001 To avoid the need for a forward declaration of pit_load_count() in a subsequent change, move it earlier in the file (along with its helper callback). While moving the code, address a few style issues. Signed-off-by: Jan Beulich Reviewed-by: Roger Pau Monn=C3=A9 --- v2: Address a few style issues while moving the code. --- a/xen/arch/x86/emul-i8254.c +++ b/xen/arch/x86/emul-i8254.c @@ -87,6 +87,58 @@ static int pit_get_count(PITState *pit, return counter; } =20 +static void cf_check pit_time_fired(struct vcpu *v, void *priv) +{ + uint64_t *count_load_time =3D priv; + + TRACE_0D(TRC_HVM_EMUL_PIT_TIMER_CB); + *count_load_time =3D get_guest_time(v); +} + +static void pit_load_count(PITState *pit, int channel, int val) +{ + uint32_t period; + struct hvm_hw_pit_channel *s =3D &pit->hw.channels[channel]; + struct vcpu *v =3D vpit_vcpu(pit); + + ASSERT(spin_is_locked(&pit->lock)); + + if ( val =3D=3D 0 ) + val =3D 0x10000; + + if ( v =3D=3D NULL ) + pit->count_load_time[channel] =3D 0; + else + pit->count_load_time[channel] =3D get_guest_time(v); + s->count =3D val; + period =3D DIV_ROUND(val * SYSTEM_TIME_HZ, PIT_FREQ); + + if ( !v || !is_hvm_vcpu(v) || channel ) + return; + + switch ( s->mode ) + { + case 2: + case 3: + /* Periodic timer. */ + TRACE_2D(TRC_HVM_EMUL_PIT_START_TIMER, period, period); + create_periodic_time(v, &pit->pt0, period, period, 0, pit_time_fir= ed, + &pit->count_load_time[channel], false); + break; + case 1: + case 4: + /* One-shot timer. */ + TRACE_2D(TRC_HVM_EMUL_PIT_START_TIMER, period, 0); + create_periodic_time(v, &pit->pt0, period, 0, 0, pit_time_fired, + &pit->count_load_time[channel], false); + break; + default: + TRACE_0D(TRC_HVM_EMUL_PIT_STOP_TIMER); + destroy_periodic_time(&pit->pt0); + break; + } +} + static int pit_get_out(PITState *pit, int channel) { struct hvm_hw_pit_channel *s =3D &pit->hw.channels[channel]; @@ -156,57 +208,6 @@ static int pit_get_gate(PITState *pit, i return pit->hw.channels[channel].gate; } =20 -static void cf_check pit_time_fired(struct vcpu *v, void *priv) -{ - uint64_t *count_load_time =3D priv; - TRACE_0D(TRC_HVM_EMUL_PIT_TIMER_CB); - *count_load_time =3D get_guest_time(v); -} - -static void pit_load_count(PITState *pit, int channel, int val) -{ - u32 period; - struct hvm_hw_pit_channel *s =3D &pit->hw.channels[channel]; - struct vcpu *v =3D vpit_vcpu(pit); - - ASSERT(spin_is_locked(&pit->lock)); - - if ( val =3D=3D 0 ) - val =3D 0x10000; - - if ( v =3D=3D NULL ) - pit->count_load_time[channel] =3D 0; - else - pit->count_load_time[channel] =3D get_guest_time(v); - s->count =3D val; - period =3D DIV_ROUND(val * SYSTEM_TIME_HZ, PIT_FREQ); - - if ( (v =3D=3D NULL) || !is_hvm_vcpu(v) || (channel !=3D 0) ) - return; - - switch ( s->mode ) - { - case 2: - case 3: - /* Periodic timer. */ - TRACE_2D(TRC_HVM_EMUL_PIT_START_TIMER, period, period); - create_periodic_time(v, &pit->pt0, period, period, 0, pit_time_fir= ed,=20 - &pit->count_load_time[channel], false); - break; - case 1: - case 4: - /* One-shot timer. */ - TRACE_2D(TRC_HVM_EMUL_PIT_START_TIMER, period, 0); - create_periodic_time(v, &pit->pt0, period, 0, 0, pit_time_fired, - &pit->count_load_time[channel], false); - break; - default: - TRACE_0D(TRC_HVM_EMUL_PIT_STOP_TIMER); - destroy_periodic_time(&pit->pt0); - break; - } -} - static void pit_latch_count(PITState *pit, int channel) { struct hvm_hw_pit_channel *c =3D &pit->hw.channels[channel]; From nobody Tue May 14 09:43:16 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=1686841019; cv=pass; d=zohomail.com; s=zohoarc; b=fUYylLeGSlbyQJKg7BPNMjKvuZoBXF6NynWpimQFaw8EECJENLdMwpLatvIDT3yw2zCej2B/Kf5mNEYHv5NZVshVuB0EZ6RVOlVLBcspW3UU5jXujqRupIg9Z4vun25OgV6Yl8WBJPhnwpuFjPKc+qi8x4CqlSuuQBp7LdFeqUE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686841019; 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=qmhhqca6YSZa1ppylCiI9prpDFctF1Vhnvq7mhVxCUw=; b=AowBR01T3e5hSimo3Gea50r73OKKDpyq09wztgQlHZsY24ycYtf3x0g6KyPxx51plwgcGB6obBMUj360yRhJmernU7JwqJdgZL9uN6JCW4ZFIrCkaZc7wv/FFKF/Ay6l73IyryS/tCwLU6sKV9/3DQcJk7LoVfes8WFK23DF7MQ= 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 1686841019389522.3502811519146; Thu, 15 Jun 2023 07:56:59 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.549668.858328 (Exim 4.92) (envelope-from ) id 1q9oOk-0005lW-W9; Thu, 15 Jun 2023 14:56:31 +0000 Received: by outflank-mailman (output) from mailman id 549668.858328; Thu, 15 Jun 2023 14:56:30 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1q9oOk-0005lN-Sd; Thu, 15 Jun 2023 14:56:30 +0000 Received: by outflank-mailman (input) for mailman id 549668; Thu, 15 Jun 2023 14:56:29 +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 1q9oOj-0005W0-8g for xen-devel@lists.xenproject.org; Thu, 15 Jun 2023 14:56:29 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04on2070.outbound.protection.outlook.com [40.107.7.70]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id ce0c15c5-0b8c-11ee-8611-37d641c3527e; Thu, 15 Jun 2023 16:56:27 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by PAXPR04MB9665.eurprd04.prod.outlook.com (2603:10a6:102:240::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6500.25; Thu, 15 Jun 2023 14:56:24 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::e442:306f:7711:e24c]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::e442:306f:7711:e24c%5]) with mapi id 15.20.6455.039; Thu, 15 Jun 2023 14:56:24 +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: ce0c15c5-0b8c-11ee-8611-37d641c3527e ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UUcQj1qOv7HNY3eMDYdW05BLEG/ESx3BkhHfS4jNWZ7LUEnlLj/VTAWB8s8K64bjqhGyUr7qAGq7/hOZRhNsWeUQoJWeYc8VJesKYlxjpVbYxOZ83BKIv3ohuAmPAsyQ68YSHuA/nL94gdjBgwZh2DnOsk1ZrbXguObdJ7xvW3nbIlS0AfA7q1fu+YaKXY/PqWtdPpWvM3cDDja+2c8u0V2FKFfkD7QJYNa+1+WDJ2njFK6BORYC7gwLet0tyg1v033mt0C7h6N98qkTTW/Blhu5+r9ZLaXb4FS1VwfHu/pJvbecqSVO7v/nuTu6xYIn6EdOhhYu2+NdFzcKv1s1oA== 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=qmhhqca6YSZa1ppylCiI9prpDFctF1Vhnvq7mhVxCUw=; b=b92FX2AgB5hpeOnmU1CDspK0Yo/Mk0jLIcUOqLahk3zHfV9od7xq6jpGYoqNzyrgNQKhD+aZVRWmtLpTIYJDYzmefEMlPz+t8NYCVt6/mr3LY1YUKKaAjycIlwZjsTXyiV1keOye0A+CTEUjFsNdWgxzIWVv74TVFq/zIxpLgoLtnbYC+Us97Y9iVO4Wq95aR5fn6YWoI+qegamPzbZA01lmyGt3AYGRMeCzuv5hCBHCpcRNkAYY6LGKb/veZYPIm0+9/XAPOvhgbki3L6WdAuNY2bprfi73Gb50VS1v+ZZzsjgtaAOKdIX6vqaSbQ6Yf9fiax0Gwt6TGtaPmMasMA== 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=qmhhqca6YSZa1ppylCiI9prpDFctF1Vhnvq7mhVxCUw=; b=psUQHWrfzYwdZ6a6SvOiGbFOc2f5XAF54bsarsSg10vG2uWtuO4xg7ymK7l/7yA/04STBn2cvI1xFLFRbTKta0FJ8nIiWbegcg5CYPJ5ASlR4Mp2TRdPjBcyj5dgP6do93kmrHYMGXVMUXeoqjxQcBkkQk2ilmugvuZiAJfBOwH6u8sXaChAI8lRrxpwYnVl0HQylm3OVdfzZkHFf8u94P4DXwbbsD8mqVOCSs3ILjWOivjgU/q3zeFvZCUD3HfyEf6woMKm7lVu5ZG4zSblGEh8g2LUPedFm3bzyQ0g+SLW/379JjjLN+/6mFV6SlLAjeWfYvcHIP54fXx7dt8jLA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <7b69e322-bc37-a1bd-444d-b2cbe1d76b39@suse.com> Date: Thu, 15 Jun 2023 16:56:22 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: [PATCH v2 2/2] x86/vPIT: account for "counter stopped" time Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: In-Reply-To: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0073.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:9a::15) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|PAXPR04MB9665:EE_ X-MS-Office365-Filtering-Correlation-Id: ffbab607-6f5b-4e6d-16f0-08db6db0b019 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: U0hkV3Agd5s3ahA+d7w0qReNESaVtSORPlCDkGD1eKrXlou2t+z84enR+uJ9jnszvsAPqFyGpum77kqBjzjoV1+AXV5/cLlUnIP1L+beZtGwc3XnAjPP1HSZ7tr5mndcc7u39R38+DRleaCTqTSxBUN1tBKJhqSV06v9JEwJ8oFv6omy7D/NwklwhePKau/MPUWMEGZhWlW57j/GosJm83p2PMdz0awZ7yfBACNx0FpTmBLfcviv1/kUQlMIAhzXMQJ3se6VlfVMyH18NcQxEuf1Ey2u2mN1TskKd+ZgEnkQPWamlfKRuL9q/GqMzorBbocMOgjYZeLdvA20rJBVCN2c01Rq+us3uSfZEIhZDvL79WvMY/KkKnMbIE/rCZ8jC9mnddU38VKXUNaIoSc5Qz9JTNfUGsPzMau7riP7yAEddprEdonAi8fXGxfn3kMbqhPJStmn2ANkrtJ3FbwzqHAypb3pO8yE3QYWV02pazr/UnuzG7kNYqdRSrg2mW6abs+FfJn39lNAQvdltUIh2wzMVsfiqFiMlcQQcVWu45fPqepmVznBquMqxwjzviKilpFwbepQ8lQTTxhiKYmLNyhL35gQWS2mrxdnj4nfaOyq8qD+K3uDTDiDDapZRngdCpiLfL+Z5WiIVHzvXeK51S+qnbDSHdK2Q0h5fjjPTj4= 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:(13230028)(376002)(136003)(346002)(366004)(396003)(39860400002)(451199021)(5660300002)(966005)(38100700002)(2616005)(83380400001)(6506007)(186003)(2906002)(15650500001)(26005)(6512007)(478600001)(66556008)(6916009)(66946007)(66476007)(316002)(8936002)(6486002)(8676002)(41300700001)(86362001)(31696002)(36756003)(4326008)(31686004)(54906003)(66899021)(21314003)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WjNZbEdJbVNFWTEvaXBhTEZoR256QTRNNW9nSnVrVkNmak52bVRYZUYySmtF?= =?utf-8?B?NVVubk9BUnBTNy9mUEEvZ2NBYVY0dTljeUE2Y2pOTVU3dFkrUktMenZvaS9G?= =?utf-8?B?cHRQM3Bib0lib2ZJckVqZEVJckxkSmRra0NvZkUySnhNcVB5VEtWZUJPQ1p1?= =?utf-8?B?YjdFOGpCTU4xMjhSUVZtTWFvaC92WHY3LzdhOS9yYU03bjNNRGNIYUdSazFs?= =?utf-8?B?eWlhWHNuc1dxT3JHNlBlaEdsbVhmaVRnWjB2VGFyZmVPTmgydkJGSUtkY1FN?= =?utf-8?B?MnZIbTR4YStXQ2NsTXhGTTBPU29JckxQR2lMZ3ErU0NROWE1aGJCaUdIeElW?= =?utf-8?B?dktvaFRyb3VzSWUwUHIvaS83cU9YR0Njd2JPbEpyQkkxd0FORGFUZkw0Unp5?= =?utf-8?B?c2dMRG94L04rSmhmNzZySkUvYXZLd1ZHWTlNM083eWRTTnNKSTByekdHUGgy?= =?utf-8?B?UXErMGMvQWZUOWhJRWRRcHVuVHpGcEMvc2ZvdmpvazJHRjd2TUFIaXdKdXZm?= =?utf-8?B?TFBKeG91cER6RmV2STdzV3BwRXpMR2cxYVM1NjFjMitJR01zSURFSW9ac0lx?= =?utf-8?B?YkFNVys1R3g5dzBZclJsajkvMlBUYVVqNXdKaCtQcG13ZkladDdEc1ZVMWFi?= =?utf-8?B?UVFjUHZCYTFMNjZGS2hieG82bGVua1pYeWFZSGpEanprUzFDN2RPUHRpVWxx?= =?utf-8?B?S1pzZmhXUFkvSDdRWFZNSGZiaU43L0xrY0kwcFNpL1lHV2pXMGprajNPQ2Z3?= =?utf-8?B?bkdwUSs5L3hZV0JxNzhpbGVlYnY4R0JacWFhYTc2dmdXcDdKYjUyMzVGc091?= =?utf-8?B?QkV0ZStqT2d5NTcyZzMrNXVwWUM3NlBmYjlJVWgxZ0N0ZXU5dEZiWWg4WUND?= =?utf-8?B?Q2ZoakN4SzZzM3lQL1RhaURzQkpVVFROV2tTZFlhYjAwT3RPSFB0TVJYVk5W?= =?utf-8?B?ZTR0Nm9zRzMyTW4yT0RQRzVueVhabUhaQTZub0JaL05WQURqejhtczVzckdt?= =?utf-8?B?SjFBOEdmNHkvREFLR1ZzN3FrQkhjV0xPWWJkbmUrQm9Uc08wZm1NWmNkaHZG?= =?utf-8?B?dlNJaG9PRW90bHQ4Y2J1czFYTlBTdDJjdEZYUkVFclh0eU9TK29qRUI5dktN?= =?utf-8?B?L0w3ZEtFcjJLWjVQSkRTNko1djJGd1dQUmVnRjFKdDJBRU9OazlGQ1lMclpj?= =?utf-8?B?ZVBFQmZ4OUQzTUNadU42eHh1d1dNditUZVpiN1puRlRFOVRzZ2hla05SblRT?= =?utf-8?B?VWVKV2dGVWRlWW5GNE1CNWpkOE1pdlNWT3VDZ3c1UitpSVZMU2plSGNrNGlF?= =?utf-8?B?VTNndTVTa1psbTRqRmJhakJJaEcwZ294NUR0WVZzOGJ2MGxGZ09ZeVFhOFUr?= =?utf-8?B?b250Nmd5NytTL0NML1pxZjJORVcwRnJPZjZESC9oQzV3bjRwb2pWTjZGVmNy?= =?utf-8?B?K3hNUkEvU1RLbnpjRWJMc2hOWkxwNEtvUE5QVXZQNERkUEE1M3Naempmd0xi?= =?utf-8?B?RnZkQzhoTEVJSTFIQUR1eFc4R1JHR0ZSQWJOczNRL3d3OGRGdWhZc0g4bkRa?= =?utf-8?B?Y2FuTEQ0TkhkS1htWk96N2k5VlZuNnViKzRxWlJhcWtNSWpZMUI2TmYwN1Zn?= =?utf-8?B?QkVud1hNTnI5Y3JVeUxFcUI3WkZydHpManQrU3paMmRsODJOVjJ6M09MZ3NX?= =?utf-8?B?Sms0Mlh1NEdrZHAycnlsOU5ncnZrZzdHYzEwQVBndFFBWkw0UElxUGx1SnRY?= =?utf-8?B?VktWNENKK3lDZnp1cUVTdWEzZjY2ZzBGZituTlZNVmN2cis3dnFBYTZ3ZXhh?= =?utf-8?B?Z3I5SnFqRU03RE1wNzkxdU53b0VtTzdFQkYyc2ZSeGNVYTJuSEhpMVZTZHVp?= =?utf-8?B?V0dEWE5TNjBwWDI2Y25MenR5eTgyTnhnQWpMYUZyZmZtU0tOWHpwVVFnemF0?= =?utf-8?B?cE9telNCZDRaaUVqMDk3bkJFa3QxZGxleUEzUHYvRUwyZ01PSENQU05MWjZv?= =?utf-8?B?cElPNGJaMS9rLzRTTFBLK0I2RzZMTG9ySStnRmVCeXEzb0RkN0FSRlk1UTBs?= =?utf-8?B?bVMzd0RjWG1nQmdadnNyODRpb09SSDkzUURyUXJxTzZnejNjNWNGdWQxTi83?= =?utf-8?Q?sLJSsa00WhEYzhvnl7qp7f0ft?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: ffbab607-6f5b-4e6d-16f0-08db6db0b019 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jun 2023 14:56:24.0340 (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: msB07mKMwl8RtGOFAnfIL7+3yvjBgcvr4fh+qpyFAANkKkMtDmHYDhYZQliutUnncDPFIP7dYgE26Uw8oowv6A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB9665 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1686841020854100003 Content-Type: text/plain; charset="utf-8" For an approach like that used in "x86: detect PIT aliasing on ports other than 0x4[0-3]" [1] to work, channel 2 may not (appear to) continue counting when "gate" is low. Record the time when "gate" goes low, and adjust pit_get_{count,out}() accordingly. Additionally for most of the modes a rising edge of "gate" doesn't mean just "resume counting", but "initiate counting", i.e. specifically the reloading of the counter with its init value. No special handling for state save/load: See the comment near the end of pit_load(). [1] https://lists.xen.org/archives/html/xen-devel/2023-05/msg00898.html Signed-off-by: Jan Beulich Acked-by: Roger Pau Monn=C3=A9 --- TBD: "gate" can only ever be low for chan2 (with "x86/vPIT: check/bound values loaded from state save record" [2] in place), so in principle we could get away without a new pair of arrays, but just two individual fields. At the expense of more special casing in code. TBD: Should we deal with other aspects of "gate low" in pit_get_out() here as well, right away? I was hoping to get away without ... (Note how the two functions also disagree in their placement of the "default" labels, even if that's largely benign when taking into account that modes 6 and 7 are transformed to 2 and 3 respectively by pit_load(). A difference would occur only before the guest first sets the mode, as pit_reset() sets it to 7.) Other observations: - Loading of new counts occurs too early in some of the modes (2/3: at end of current sequence or when gate goes high; 1/5: only when gate goes high). - BCD counting doesn't appear to be properly supported either (at least that's mentioned in the public header). [2] https://lists.xen.org/archives/html/xen-devel/2023-05/msg00887.html --- v2: In pit_load_count() also set count_stop_time from count_load_time (in case the counter is stopped). Correct spelling in comments. Correct calculations in pit_get_{count,out}(). --- a/xen/arch/x86/emul-i8254.c +++ b/xen/arch/x86/emul-i8254.c @@ -65,7 +65,10 @@ static int pit_get_count(PITState *pit, =20 ASSERT(spin_is_locked(&pit->lock)); =20 - d =3D muldiv64(get_guest_time(v) - pit->count_load_time[channel], + d =3D pit->hw.channels[channel].gate || (c->mode & 3) =3D=3D 1 + ? get_guest_time(v) + : pit->count_stop_time[channel]; + d =3D muldiv64(d - pit->count_load_time[channel] - pit->stopped_time[c= hannel], PIT_FREQ, SYSTEM_TIME_HZ); =20 switch ( c->mode ) @@ -110,6 +113,10 @@ static void pit_load_count(PITState *pit pit->count_load_time[channel] =3D 0; else pit->count_load_time[channel] =3D get_guest_time(v); + + pit->count_stop_time[channel] =3D pit->count_load_time[channel]; + pit->stopped_time[channel] =3D 0; + s->count =3D val; period =3D DIV_ROUND(val * SYSTEM_TIME_HZ, PIT_FREQ); =20 @@ -148,7 +155,10 @@ static int pit_get_out(PITState *pit, in =20 ASSERT(spin_is_locked(&pit->lock)); =20 - d =3D muldiv64(get_guest_time(v) - pit->count_load_time[channel],=20 + d =3D pit->hw.channels[channel].gate || (s->mode & 3) =3D=3D 1 + ? get_guest_time(v) + : pit->count_stop_time[channel]; + d =3D muldiv64(d - pit->count_load_time[channel] - pit->stopped_time[c= hannel], PIT_FREQ, SYSTEM_TIME_HZ); =20 switch ( s->mode ) @@ -182,22 +192,39 @@ static void pit_set_gate(PITState *pit, =20 ASSERT(spin_is_locked(&pit->lock)); =20 - switch ( s->mode ) - { - default: - case 0: - case 4: - /* XXX: just disable/enable counting */ - break; - case 1: - case 5: - case 2: - case 3: - /* Restart counting on rising edge. */ - if ( s->gate < val ) - pit->count_load_time[channel] =3D get_guest_time(v); - break; - } + if ( s->gate > val ) + switch ( s->mode ) + { + case 0: + case 2: + case 3: + case 4: + /* Disable counting. */ + if ( !channel ) + destroy_periodic_time(&pit->pt0); + pit->count_stop_time[channel] =3D get_guest_time(v); + break; + } + + if ( s->gate < val ) + switch ( s->mode ) + { + default: + case 0: + case 4: + /* Enable counting. */ + pit->stopped_time[channel] +=3D get_guest_time(v) - + pit->count_stop_time[channel]; + break; + + case 1: + case 5: + case 2: + case 3: + /* Initiate counting on rising edge. */ + pit_load_count(pit, channel, pit->hw.channels[channel].count); + break; + } =20 s->gate =3D val; } --- a/xen/arch/x86/include/asm/hvm/vpt.h +++ b/xen/arch/x86/include/asm/hvm/vpt.h @@ -48,8 +48,14 @@ struct periodic_time { typedef struct PITState { /* Hardware state */ struct hvm_hw_pit hw; - /* Last time the counters read zero, for calcuating counter reads */ + + /* Last time the counters read zero, for calculating counter reads */ int64_t count_load_time[3]; + /* Last time the counters were stopped, for calculating counter reads = */ + int64_t count_stop_time[3]; + /* Accumulate "stopped" time, since the last counter write/reload. */ + uint64_t stopped_time[3]; + /* Channel 0 IRQ handling. */ struct periodic_time pt0; spinlock_t lock;