From nobody Tue Apr 30 03:18:07 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1618927757; cv=pass; d=zohomail.com; s=zohoarc; b=HxnajYKNt8oB3sOUWWGoVkPeyebmROheVBN43SvY6cpO0jvmdwNtFBjgi8lqlhkj/wKODknuTdvRRgIV5nta1br1El7OC2biz62lzRE+vMmjGPcqgAhIMZf4m1kdjKwCK7cnfDg+zg1Lwubuao2wWuDtvAHNzqvzX7ronxa8X0w= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618927757; 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=j9VslYPt+uT7gUV9+DwKKs51FNyfg40GHzoCjQgtUVQ=; b=W/+1cN7xdxDc4GQSyx2LufRv3LCDUA6zhcQUY7DpFaGvey+Ahse/b0IUplTdFF890QaRxCj9MyeKr0aiwbmkV8OtGLdn6zxUFDDncHPCj+3z9mlQn3rMpXyXtaR2Z8IwKyl2t6eS4X0e85xeMyiGmxXYK7nNDUTxgMtCORNU8X8= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1618927757342603.4985381146413; Tue, 20 Apr 2021 07:09:17 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.113740.216744 (Exim 4.92) (envelope-from ) id 1lYr3h-0000cq-F2; Tue, 20 Apr 2021 14:08:57 +0000 Received: by outflank-mailman (output) from mailman id 113740.216744; Tue, 20 Apr 2021 14:08:57 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr3h-0000cj-C2; Tue, 20 Apr 2021 14:08:57 +0000 Received: by outflank-mailman (input) for mailman id 113740; Tue, 20 Apr 2021 14:08:56 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr3g-0000cR-7s for xen-devel@lists.xenproject.org; Tue, 20 Apr 2021 14:08:56 +0000 Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id ddb82d75-6ff9-43e5-bd6a-4cf67b44f785; Tue, 20 Apr 2021 14:08:55 +0000 (UTC) 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: ddb82d75-6ff9-43e5-bd6a-4cf67b44f785 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1618927735; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=1YjGdwTNtoZj7OvoOgutGPaBGPvE/yQ1k7kXOxMCAs8=; b=KkTSZ/OhuLcz+f/23iGHbhmO9+TXhvlgJiXggPhZDd3C4oJtL5CCIWTy RHs4TQLOaYtJgflqxHwHmJ9UwbzYzHJL+IEc4yaYLOS//ThhxiNcVRqsN kt3/OT43OwltxojbxjMMqQkomuTkHU6KNq46OsMrdKQhao9LEUxVtxYue o=; Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: QhJvt58VNhF1drcMyv1Tl7Hk7420yPKTAydDwuBKPh88dCgTsVF/euOWPQsjvm3yWLrR2cYtCz nhMOrKQY0D0NskY8uccSvVTxBfqgKGkN+pclRgAYbe8pGqkfLvM/epbPmHlB87GKjveLot0p/D ANruQM4waN37/eGXQXsOpI4VNzBnBS63gC05JsyrhzFMYGzwM7m3XvVLL4HbqQVJCN+UPCZP1o tYSkLSTCvvIiQLEOx5rT749LVAm3eribLcNlEY3qz/PiDFwGJpmSCtwaXdSrZxgW5uxA2AhNjr ECw= X-SBRS: 5.2 X-MesageID: 42111179 X-Ironport-Server: esa6.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-HdrOrdr: A9a23:QLGRPazTso1KVNMovattKrPx9uskLtp033Aq2lEZdDV8btGYm8 eynP4SyB/zj3IrVGs9nM2bUZPsfVr385lp7Y4NeYqzRQWOghrMEKhOz6vHhwfhFSr36/JH2c 5bGZRWJdXsATFB4vrSzxK/F78bruWv1ICNqaPgw2x2TQdsApsQjTtRLgqACEV5SE1nKPMCdK a03cZMqzq+dXl/VK3SakUtZOTfu8bN0KvvfB9uPXUawTOThjCl4qOSKWn64j4iVVp0oIsKwC z+vCHSoo6itPy6zRG07R6o071m3OHP5/EGKMiFis0+IijhhACydO1aKsC/lQFwms6DwhIHl8 TNvgcBMq1Img/sV1DwmzTB8U3B1ysj8HDrw1PwuwqdneXJAAgUJuAEoKAxSGq812MQ+OtS/Y gO4kei871QNh/ElDSV3amxazha0nCajFBnrfQelBVkIOwjQY4Ul6Mz1mVPHqwNGSrrgbpXa9 VGPYXn6PFafUjyVQG+gkBfhNilXnEEFhybWEQ1usuMzzhMnHxipnFovfAiog== X-IronPort-AV: E=Sophos;i="5.82,237,1613451600"; d="scan'208";a="42111179" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GT/vE97SZCfSo5ls6UUxgS2n17EjPxDkFKkbEOEvWUmJOHOMHeRhjgfoAVmvOETRxbvkyDFxibAdlJ2cYD5kpc7Q8DXmAdNXjCiRzn3caQUgd5bZ/u8GNFz1eH3sCH61Np0Lx1omOpIAsQIEWcDmvtTOBYpVJUg+8DZiAcRRBnLgNbF/rGWR4KDt7NNRN5h6Q3EsIsZEPUOl7nHV1NI4fCSPJ4q+vFdbSv06d5MgyTRavIrra01Q8w32o5E+DgPzoS4xnWQhuj8g3UCaZC+DRm2wbXnzB2vcxMmpz5DP3z9t7ijEyIL0jAyIdH38d2G74b22ceC9waVXIR3z3ks7Mg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=j9VslYPt+uT7gUV9+DwKKs51FNyfg40GHzoCjQgtUVQ=; b=khuzIwRn4YpRoN0+OHUe1QF/hmXKyenCzrxlNQ1IdfETa0okZiIEkvHlfrDNTHZHdpjr7b9FCymELs3kYC1iAAN2dyHlWYVRtn2K49j+hdAD9QjG81JpT6vLlKEwntoojfPF7upIFdkx8mSddpwayPp28/sjXRe05dOA7eoZKk0nE9F4NH67Wdiwiz/RCA6LeVuf1pF6Ty8UdMen8TtgNPbC7qzhycVpggEfDuwzTXM11eCAlMhN0BJbBBTZHVg9jZ9pOqKxQlpWah/eUq35B/goqGElfmZ0HUhawomIyXB30e/n+MgVlEwVI39b1pUCk+nmtTEKCg91zHpEGcaDDQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=j9VslYPt+uT7gUV9+DwKKs51FNyfg40GHzoCjQgtUVQ=; b=fo4aTdMXXcn6AV8dMtko5WEgUmHAjX5ehzJ2BFJhf5tHx2o3l8ZRyXCs5JHB+zAMPbz37VfQurrfWk2nrK9lptJAOIDYF/o/cwXIotjTGBZ0TrMWRXnvtitz8FGr8momdpRsSR136qeciJrqU04GWNjNa9ugc9wmAyQe+HCBJgo= From: Roger Pau Monne To: CC: Roger Pau Monne , Jan Beulich , Andrew Cooper , Wei Liu Subject: [PATCH v4 01/12] x86/rtc: drop code related to strict mode Date: Tue, 20 Apr 2021 16:07:12 +0200 Message-ID: <20210420140723.65321-2-roger.pau@citrix.com> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210420140723.65321-1-roger.pau@citrix.com> References: <20210420140723.65321-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR2P264CA0067.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:31::31) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0969d9a7-70b5-4d29-cb40-08d90405d341 X-MS-TrafficTypeDiagnostic: DM5PR03MB3068: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:352; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zDoFW7+qTsSKrxxQOL/i6N0pSVOtL0kmXl1Tt0ITTz6qm3XorLU9CiX6Yn4atuSHV3aE1zam6t+04OEgBamLurQvEfjs74wVaQi8LXtKAOl9XjgtCJDrw6cakCbXbbCZUKDiR9lBA0eVSlVIJF17MbmFnouCkF4E1yGxrlWFPdfUbBOZIxivw5u3E+pH9bH+w1u5BodNVZikXwvaHd5rH0miSIM1TsKUT5J00qWbQM7x6HfNPe9vc5NzS23Fu5f9/R5tESQB8TGR3uNQmZCnyFoJd/eaPZrLySRMhdiwBQAjS3FHcSkZh67/OVP/E9/wv94J3K6MpwE+8QzB19qZWFPtQ6PMSCQx9oon69HU84upboRxPGsImfS8+FAdDgyVIE3Y94o3N4OtwSNfurhdwAEzKnw11u7rCAMA5s7j/fWxgMD6UybarFR6mXHwBBodqvx8rD1w01TEQIxzstpkPqQh6L95Ta+c5LMCV94dQRfjXPLdqZ5q+UZD+xKD67rCM+mQxkFY5UILG+8SajZ7Z+RIWKgQeAKc7lVAQCQHp7D2igfMEOLo2EgoMcfMFrdNUE6ZM2tCcO7WmJW2jVUoDrG1BaS9QKEQqvz88ooD+gs= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(39850400004)(346002)(366004)(136003)(396003)(54906003)(316002)(2906002)(6486002)(956004)(1076003)(38100700002)(36756003)(2616005)(16526019)(5660300002)(6496006)(83380400001)(4326008)(8676002)(26005)(66556008)(66946007)(66476007)(186003)(8936002)(86362001)(6666004)(478600001)(6916009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?b0k3NEVsc0RVZkxIUTdOa0F2WnZLZVdPbVlMZ1kyQjNFZkdpL05NR0hNVGtR?= =?utf-8?B?UVpNaUFUR3pDMk9oaXBUcHhDK3NoTmNwdUttWHdMMkNzdWFuUG1lcXh0cDJB?= =?utf-8?B?ZU0vZkdzVjBRamtyWUVYS3BRRSt5NTdsYlJvU01yYjBQNTloUDNIbitEVGdC?= =?utf-8?B?TGRYTm9yeGtMMFJrT3BLRnJOM0tadU5YWWpsZHNTUzdVbk1mTnovWWpiV0l0?= =?utf-8?B?NmhTQUlPNk1oQlZCSTl0OHNCeWhpdnpDUzc4TndJbEoyWjI0dlg0YWJvcita?= =?utf-8?B?UVhEekxZbkFsOUdOdW5tUUxjRDVxb3lldDhsSEhOVVE5SnRQUmFydUZwN1p3?= =?utf-8?B?VVdhRXFVNU1Sc3NWZldURUZza2hZQ2tlZGUxc1JnTm9OT0J1UWtITVFBRVF5?= =?utf-8?B?ckZlWFdEMk5oR0NmNDFvS0tEbURqK3NJdStrLzlqVGN1MXhvWTZ5TE84U0F6?= =?utf-8?B?RVJNcjRwQVRsNVBUYTFJc1hFc05CNDZwV0oyd3dmNVNGK2k4RUVya1VEK2Vi?= =?utf-8?B?aWZza2ladmZMeXROQmVod0ZHQjZYbFZQRzZ3cFVmRmtGOEE3L041WGM0Y3RT?= =?utf-8?B?OTRzZjVrSXFSR3FXam5qT3ArU3pmVlVhTWlpOUtwRG9VUzdRMzNyTUd0Nk9T?= =?utf-8?B?OFI1TEt5aXlOUmo0QUxneElyRjkrK1Ixb0VFclJhRXEvdzJKcERGVGozMjFG?= =?utf-8?B?ZU4xMWo5TFIycDRVcmVCTDNHR2ZIdTlEcmQybzI0eDNFbDh1K1d5RDh5Yzg2?= =?utf-8?B?dktpRFdkV1Y4b1VrZmViaWhSZWgwV0JOeUdpTkxpaGxjbERKWkJnOVRKSXZP?= =?utf-8?B?Q0w5dm41MFNCS0w0cE1IM2VnY0VHVE4veE4zcWJxeUlMZmJkaERsZlgyNlJT?= =?utf-8?B?M2srb3p6Z3FiRVMzR0lickl1bi9NVXRZZjRsUEI3Yll6V1h0czhXNlkzTTZr?= =?utf-8?B?bytMNGh5RmJzYWFtZVJtejhBZW82ZDB0Y1M3eG9qamtNdW5rdCtyZm4wT3RF?= =?utf-8?B?NHo1anJHL2ZrNzJKQkowZm5RZDhYR0FQZTVMVzk1MWpDbGJPMXZ2aXV6RVRl?= =?utf-8?B?QjFpWXF0aVM4dDYyYzU2NjNabml6VG4xTk8zcTVZWThTd1dLdEZlbVhQYVZS?= =?utf-8?B?c25BbVFWNkpINGxubGZxQ0MrejRqWlFLeXhWRGFOT1NWcVBvb214VzRMRjZq?= =?utf-8?B?WThvajNzOEszT3piR0VVZXBtYkxPZVBSUEJQRmpmR2R5WlAya3BtTHVldTlP?= =?utf-8?B?TW15R043NHRMTi85L3dKWFhNNW9Dd015c3lrVVRzUzlYd21GZkF6R0FEVGZl?= =?utf-8?B?ZXRaQWFCNEgvajcrRFEzbFhicmJaTi8zYXFTa2JwRy9WWm5mTkl0VURnRGlh?= =?utf-8?B?RXNYKzk5LzFHQUllRngwKzRHR3BCV3ArQkhINmppRUVubnFxRW44RDZKaFRS?= =?utf-8?B?OTEzOVJpMVVwc2hpKzI2NE5zeEgyc2ZtMlhsVDBvWTUrcnFQUzJHMGxFU3gy?= =?utf-8?B?U1pWYTlpMTEvcDhPR0ZUY2NlcW1RK1p3OC9kUGpIUDY5NU4xM0dVaitQZjZj?= =?utf-8?B?UmlEV0E0RDludExRTWsrSDgwbGpEOFBZQTZhUjBvMi9tU3Btd0hxc2FVU09R?= =?utf-8?B?VGZZSEUydkdSRmJQUVVPSWVzbk4xL0owdFlaSXJqeTNJL1dEM3JGRE5TZUxW?= =?utf-8?B?TWNkSUpVR1gvSzFlUUVZUEJUdjh3TzJlbUgwa0pQZ2JabWRLWDJvRmVJY1ps?= =?utf-8?Q?Yt/G4WVKJctFahBQkj016c3y4Fq2CuemsOKyYPZ?= X-MS-Exchange-CrossTenant-Network-Message-Id: 0969d9a7-70b5-4d29-cb40-08d90405d341 X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Apr 2021 14:08:51.7040 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: +hUEwkHVCbS+DN21Owg/yNpVk7aphjulWaIApHxm3brexNiKIOFZZNaNylNufcTnhCuLLYE5+5n5ws5TIE3R8g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR03MB3068 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) Xen has been for a long time setting the WAET ACPI table "RTC good" flag, which implies there's no need to perform a read of the RTC REG_C register in order to get further interrupts after having received one. This is hardcoded in the static ACPI tables, and in the RTC emulation in Xen. Drop the support for the alternative (strict) mode, it's been unused for a long (since Xen 4.3) time without any complains. Signed-off-by: Roger Pau Monn=C3=A9 --- Further changes in the series will require that no registering or unregistering of callback is done inside of the handlers themselves, like it was done in rtc_pf_callback when in strict_mode. --- Changes since v3: - New in this version. --- xen/arch/x86/hvm/rtc.c | 27 +-------------------------- xen/arch/x86/hvm/vpt.c | 4 +--- 2 files changed, 2 insertions(+), 29 deletions(-) diff --git a/xen/arch/x86/hvm/rtc.c b/xen/arch/x86/hvm/rtc.c index 3150f5f1479..9992595c45a 100644 --- a/xen/arch/x86/hvm/rtc.c +++ b/xen/arch/x86/hvm/rtc.c @@ -46,15 +46,6 @@ #define epoch_year 1900 #define get_year(x) (x + epoch_year) =20 -enum rtc_mode { - rtc_mode_no_ack, - rtc_mode_strict -}; - -/* This must be in sync with how hvmloader sets the ACPI WAET flags. */ -#define mode_is(d, m) ((void)(d), rtc_mode_##m =3D=3D rtc_mode_no_ack) -#define rtc_mode_is(s, m) mode_is(vrtc_domain(s), m) - static void rtc_copy_date(RTCState *s); static void rtc_set_time(RTCState *s); static inline int from_bcd(RTCState *s, int a); @@ -64,9 +55,6 @@ static void rtc_update_irq(RTCState *s) { ASSERT(spin_is_locked(&s->lock)); =20 - if ( rtc_mode_is(s, strict) && (s->hw.cmos_data[RTC_REG_C] & RTC_IRQF)= ) - return; - /* IRQ is raised if any source is both raised & enabled */ if ( !(s->hw.cmos_data[RTC_REG_B] & s->hw.cmos_data[RTC_REG_C] & @@ -74,8 +62,7 @@ static void rtc_update_irq(RTCState *s) return; =20 s->hw.cmos_data[RTC_REG_C] |=3D RTC_IRQF; - if ( rtc_mode_is(s, no_ack) ) - hvm_isa_irq_deassert(vrtc_domain(s), RTC_IRQ); + hvm_isa_irq_deassert(vrtc_domain(s), RTC_IRQ); hvm_isa_irq_assert(vrtc_domain(s), RTC_IRQ, NULL); } =20 @@ -86,19 +73,7 @@ static void rtc_pf_callback(struct vcpu *v, void *opaque) RTCState *s =3D opaque; =20 spin_lock(&s->lock); - - if ( !rtc_mode_is(s, no_ack) - && (s->hw.cmos_data[RTC_REG_C] & RTC_IRQF) - && ++(s->pt_dead_ticks) >=3D 10 ) - { - /* VM is ignoring its RTC; no point in running the timer */ - TRACE_0D(TRC_HVM_EMUL_RTC_STOP_TIMER); - destroy_periodic_time(&s->pt); - s->period =3D 0; - } - s->hw.cmos_data[RTC_REG_C] |=3D RTC_PF|RTC_IRQF; - spin_unlock(&s->lock); } =20 diff --git a/xen/arch/x86/hvm/vpt.c b/xen/arch/x86/hvm/vpt.c index 4cc0a0848bd..24d90c0a186 100644 --- a/xen/arch/x86/hvm/vpt.c +++ b/xen/arch/x86/hvm/vpt.c @@ -21,7 +21,6 @@ #include #include #include -#include #include =20 #define mode_is(d, name) \ @@ -337,8 +336,7 @@ int pt_update_irq(struct vcpu *v) { if ( pt->pending_intr_nr ) { - /* RTC code takes care of disabling the timer itself. */ - if ( (pt->irq !=3D RTC_IRQ || !pt->priv) && pt_irq_masked(pt) = && + if ( pt_irq_masked(pt) && /* Level interrupts should be asserted even if masked. */ !pt->level ) { --=20 2.30.1 From nobody Tue Apr 30 03:18:07 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1618927760; cv=pass; d=zohomail.com; s=zohoarc; b=BCEGra4+Ud1mthKL6l+PQXzj8G/8bnGchuWu5kIVVDeTz1hcu6yyFgZOhH3VVinxhYmPDl3YQn3Ez77jZAFPne3P4m/pdhOranzTMzNYKeX5LjP/2JF0zgL6UiP09WaZ1wnjy3MDf2rLHqRt8avLSnVq1KJIs3XgTH8ojFCICLQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618927760; 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=0W7J+sUzCMN7JZrGlfcB4U+CgJb8yL9z3xuBv1e4mPk=; b=AZe5iD6s92kdVSpTzhd8veCH6eXXzZdUumzslyLz6Jjp+7SCZ2iqD3pr277LpX6cj8nzKairYbTR07Aa1oyR9iLBo89WiShrLRTadvgDbeAkpzuOF9Sl9gFvpV8b+1hCa1kQGUIEuYiuIVji+mnZb2eDDhBrjikwF0k+bZ6l3F4= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1618927760639709.4501031825832; Tue, 20 Apr 2021 07:09:20 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.113741.216757 (Exim 4.92) (envelope-from ) id 1lYr3o-0000gu-Nc; Tue, 20 Apr 2021 14:09:04 +0000 Received: by outflank-mailman (output) from mailman id 113741.216757; Tue, 20 Apr 2021 14:09:04 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr3o-0000gj-K3; Tue, 20 Apr 2021 14:09:04 +0000 Received: by outflank-mailman (input) for mailman id 113741; Tue, 20 Apr 2021 14:09:03 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr3m-0000g6-Vd for xen-devel@lists.xenproject.org; Tue, 20 Apr 2021 14:09:03 +0000 Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 1e54e0a4-29e9-46a7-9f2e-bbc73f449bda; Tue, 20 Apr 2021 14:09:02 +0000 (UTC) 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: 1e54e0a4-29e9-46a7-9f2e-bbc73f449bda DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1618927742; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=DKRwBa7N8gB43Hpd1vHxNflj8UqbpDUS3qFLF/JEgoE=; b=H4ORJ5u6lG9Pc0Pmrf63By9zfX7Fr5RZaGcx/LJOUU21jbRBa+CkSMRw HLWk4dcQwnJ5zzQELFNDh7vHYCL6qTf5/i/ZkF7ALHwBBAssuINkaQPkm 5trGkn+k8dhI+aYFWPsKZt8bgxmFJ1rrLb89QLmPDWT/VHauqMtWAJPpl w=; Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: pyRF4Mckyy4RnQGpcwCwpPXvN9FRKhso+AniQ4H+wfscRWVkgJcqXjo5+fNmboec1AdjQZa6a9 80bYEq0yULhyD36RynKVukMrBNeYbj4szaVndew+JwywFWpm0ukOlIGIbxcAuE/JLZk4DCoVYd 4if4F/ykeXhPLXhKirnchwFiSQ4bY8uClaKZrFRBQ32xa+O2tMkMH94hISeK739JVEc3yeYggs 1yHjvoY39Dl59BtbZXJK3QG0XN7nSLR9NNFLYXwIAvu2wFDk0cOCa/yGCmjulVj6ytSuN8H7Vs P/A= X-SBRS: 5.2 X-MesageID: 41981482 X-Ironport-Server: esa2.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-HdrOrdr: A9a23:smjW6qpIazpy3Em6tLhR9IkaV5vxL9V00zAX/kB9WHVpW+SFis Gjm+ka3xfoiDAXHEotg8yEJbPoex7h3LRy5pQcOqrnYRn+tAKTXeRfxKbB4xmlIS3x8eZByb xtGpIVNPTcBUV35PyU3CCWCNAlqePozImNpcPzi0hgVhtrbaYI1XYaNi++HldtTAdLQboVfa D92uN9qzCteWsaY62AbxFoY8H5q8DWj5WjWBYaBnccgzWmty+i67LxDnGjr3Qjeg5IqI1CzU H11zbXy4/mmPG9xx/a2Qbonu5rseqk8PRvLoihjsAULx/llwqnYp9wMofywQwdkaWUx3sB1P XKvhc8L+R/gkmhAl2dkF/W9CTLlBYo9nP4xleTjRLY0LPEbQN/MeVtr8Z9UHLimi4dleA56o 1n9SalkqASKhX6kCH097HzJmlXv3vxm1UOu6oulXBFOLFuD4N5nMgk025+NowPJy7+4JBPKp gUMOjsoMxbdl6XdBnizw9S6e3pWnwyGyGPSVQZtvqU1CBLnGt4w1Fw/r1noks9 X-IronPort-AV: E=Sophos;i="5.82,237,1613451600"; d="scan'208";a="41981482" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cqZ2ArlYLXm6A2lLux88pVzl7/lrfi0QOqyjzFFc7BHiXjwPDXEnQmuHh3IdfC3U8Nap+hZbKglHFXxcQkLNiOA5ddTmh24mkjufdEXLaOX4dphRznuDOCcbn4rn4bTmuRck7wdQzTEXMXC9Rq8J0oorxtFiAncuZE4NLQ4KfqX9lMNWH2kjGvWByg1R9NTHCYfop8LQezOOfib6t0pAHtP1zPNxEEg8TxpP26/udFxzkke4bpLygHWDYh5PTE/HR0GCVhdUlxj6IW1Jc0rd1XUpAQN6fdPTOVsd+n9tXnP0yln7ddg4ljttNI7TaXcpinrnzH3SqR1T31GDNxD8kA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0W7J+sUzCMN7JZrGlfcB4U+CgJb8yL9z3xuBv1e4mPk=; b=FXmzNhbcmbGTL9s1majzjverbPlaLlqD5dXpqINb/hPyzxu7as75lFpGDPEKxtbrTNqthP2ru++omAtIJD2xQ3UMcsEuGuR/gIB1+sb4iewM11qDoPWCZkyi84U3tCkiJVDi7yPF7vSY2vtYdV5qaCc2UQHsrfEzgrCfq1puGvO/7JzZqsDLunNajCTh62wxlbsmJNU0KYxsoWeLVfwDeUKhoyHydU5y732F6jIq4jsmgMeI07ZTQa2zCqrrzeQkS0L/KlJv4Cz/mzwqBHxGvzuGwLY5Fepr4JxFX8+3ITAoLZ9rr9WhdgVVd1UyY1YWVGqNiTYBBadhYOviqQofaA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0W7J+sUzCMN7JZrGlfcB4U+CgJb8yL9z3xuBv1e4mPk=; b=TdcVbG7LtxJDl+fzWNzThxScjaZhK1FS8IicDWBOZvmFSfu9zrS4ddMcLTOTeFs6mWEa4c/GCx8ypXo+t2812EuH9rVtQRw6/e5CPqLAEsgADJM5+CSN8s9bEBz/i1KqTxa3OgOAiHLLAje2nOeRMGeDMZjtp4kWSprC1ldSD9s= From: Roger Pau Monne To: CC: Roger Pau Monne , Jan Beulich , Andrew Cooper , Wei Liu Subject: [PATCH v4 02/12] x86/vlapic: introduce an EOI callback mechanism Date: Tue, 20 Apr 2021 16:07:13 +0200 Message-ID: <20210420140723.65321-3-roger.pau@citrix.com> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210420140723.65321-1-roger.pau@citrix.com> References: <20210420140723.65321-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MRXP264CA0021.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:15::33) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 59c981db-aec3-492f-400f-08d90405d6e8 X-MS-TrafficTypeDiagnostic: DM4PR03MB6000: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:506; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /RnLLev71UKDoOGS4aeCKdRQw5f6o4IlqeIwaGvGrl3m7I5PxUQJ6x+6StgvxFkr15Jpm0RWWjLORiXuYMINuC4ryFrZhfuKxlHFa3rbUYSN/xRgJTz/WajV0Ul23dDuYtF1kSpKZT9AQE7U6N1a5gvT6i17ke73DLWtsjtppugzlWbeVcOaCNfRO+GT3Kx0SEjQJt472hE/01wGG03C+K9VksyZalpF0rU30Na4lt/Vd8fxUCThIzuHId8GikYQGGhu1LqtDgs7dlOKWICCo7TIKhJwEHftkzhp42LThFc4gX25MLea9sIp3hjUSodbwuTfJoQIV4pxkWO46mkGNvyqNEXbx2/MmgKpyX3nxLLtLCgJuaWSSVH2TuywseK2S2CyFjeV0G28a2ZGrpJK8Tp7nAWeYfT9LXu4cgFzxP/C+JggBLjF78G1Mx3PblQSrfFoa9hH7tAiF7Co6MAhxoVTGmEMrENRKHEJxsuaBeK8xEH8+t2EZhO+klCdSLe+avLfHh+3XPc6Cj2cWTp5dFHLlmLWcWyb5bU4CtwxmwKiPXbw5czlZr1tim132EtB9J3rSd6S/IwATazy6tNMJWvrHz/FJErmSZmOYPyQPFg= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(396003)(376002)(39850400004)(136003)(366004)(6916009)(83380400001)(4326008)(38100700002)(16526019)(36756003)(316002)(956004)(6486002)(2616005)(6496006)(478600001)(8676002)(26005)(186003)(5660300002)(8936002)(54906003)(2906002)(6666004)(66476007)(1076003)(66556008)(86362001)(66946007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?NGQzdmdEOC9udUU3N0dodkJZcDJGSE1oNENXMnhmSjJqNnhDcVl0WHQ1d1E2?= =?utf-8?B?Nml1dzRScXVpR0M2bllEV0M4YUVSYXBLeXJKQ2dkNlJzWW1FQnU4Z1cwN1BG?= =?utf-8?B?dU5KVC9iMTljTCs2NkZsdy9BNDFnYjdFa2ZMOWxNVDB2S2JYTVU1RldCT0dI?= =?utf-8?B?cHhmQkVHV29td1NHOFRZdW9oZFk3K1p4SW5tK0lwd1pKajFsaVNKVm9kT2k3?= =?utf-8?B?TmVaZWMxelZscWtBLzhhUS9qWkcrREZWcXpMeHRzSGdBUGt2TnphQzk1clcy?= =?utf-8?B?dFMxa3QxTDRXY1ZHMFp3RXhrZ3M0RU1EYnBVNFVKdkpwa0hId2hlZ3NsVnA3?= =?utf-8?B?ck1GeWVpODcxU2FIdTUzdk01dlkvUVU4eGUvMUpFWUVscDFlQnBhdEJKUmJy?= =?utf-8?B?MUsvUklKRG0wVDV2RWx5TEFCNng1cjJMaDBtY3E0aEZuY1lDYjgyaUY2SmZ5?= =?utf-8?B?N3ZLVlpQa0hGdi9peDBtTG5hVkhES29JNG5BNzdDNVJpeG1FNHFkOVZGRnp1?= =?utf-8?B?OW94LzhJQXNmUHhWNDJYZ25sRnVkaGVnNnZMZTdmRm1zTFpwMm9NcTNBVVdi?= =?utf-8?B?UVJrVndIeExjLy9iOUs5OVh2NktlSFVEVE5INmJyYWQyUFFvNStMUG1MMzBt?= =?utf-8?B?TVlBeDlubStmaVUvVVIrQmxrN1o1Nmx6S1FNSkVTdllQd2JjeW82VWYwVnEy?= =?utf-8?B?ZUI4L09WS2liMitrMU1sVmJ3SUxuN21vSlZuM1p0dWUvTHJhRHEzdU5RNHhU?= =?utf-8?B?VVd0ZjQ1a1pZZEEyOFJ4K3pydERGSlI0Wk84UllBVXM5WWVZYVowTGtRUS91?= =?utf-8?B?NFJOcFB6cndGVXhPdUIrdnFTWE5IMHJITDAzVUJSeFNZaEpIeG5MMVJLdWl4?= =?utf-8?B?eno1TVpvQjlpam5zY01ScVhYWlJMUUlVVHZMdS9JZWJNWWNMQUQrcGlZQ2pM?= =?utf-8?B?dFN0aEFib0NnZ2FUaEQzWlpQMnVTZFdKREdnM0NLbE40L1FSVVJxZFNZSTBI?= =?utf-8?B?dE9Ec1pDWmdLcUM1M0UzUllRU2dMelh5NWplQWFMZEhzRTJqbVp4UDZ2T01y?= =?utf-8?B?eHRjU2NwRXd0NDhoeFRDSU9lN2hkNTV6VEgwc1htVTFCUmU3eEljRGNVRit2?= =?utf-8?B?RDd2NGI4YlJzUU1GaldCWFpPOGVzOXcxVnVmakRWaU1KNlJRQ0N5SVIzWkhE?= =?utf-8?B?VTA2TzRCV2tsVEVYMHl5NGlHdWhLRXF3ckwvZHdCU05SeVkwYVJucTVhdGpK?= =?utf-8?B?VmR2Z3VoamtOUmo1VC9jMFpYWndTd1pDZWxUV0ZySk90NDlSMFBtZXN2bEl4?= =?utf-8?B?NWIvWExtZ0pTc0NEMmpvRWRBSFloWWF4dEJvQi9QOHdnTzVRVDFWY2toekVD?= =?utf-8?B?ODh1UnZRTjdXSzlDNlllNnY4Z3ltYktrdkdkQ2RQZllwYTAyY2srRDRWLzVP?= =?utf-8?B?OHlUQThXQkNxaVBTbGdPbk1rRlN6aGhjbGFZRGJOUkdCcHJPbjJtRndXWm5T?= =?utf-8?B?M2hZclR3bXVUSXZ3a3NPRGFuSXhrcTQ1dVN6WHRlNkpEY1NzRmlTR1dUaVND?= =?utf-8?B?ZitYZmdqSVVISjJUMGprRnlBZ0JKRnNVTHpLQnVBQnA5YjRpVGdLK1pXYVIy?= =?utf-8?B?UmJIWEc4SW9XSDM0YXYrT0NOdW9rNGNkMEgzbW1wMzdwWC8vRUtwSzJKeWxU?= =?utf-8?B?bElpREd4QWlpdXNCVCtrRDMrR3JJdjVHaG00bGNXZDhadEJ1WjVoSFNVOXVM?= =?utf-8?Q?db28ZC2yN/lpRabv8z4P1lkubT5wxL6LhocInkI?= X-MS-Exchange-CrossTenant-Network-Message-Id: 59c981db-aec3-492f-400f-08d90405d6e8 X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Apr 2021 14:08:57.7344 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: eVR66nzhXfqTRonEsSbQ+5DlN4SOQ5WTSvlsIy8GJT4gr7yvvY2x88W4gdbrNZHg0kV4slePprsf0padSXgOdA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR03MB6000 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) Add a new vlapic_set_irq_callback helper in order to inject a vector and set a callback to be executed when the guest performs the end of interrupt acknowledgment. Such functionality will be used to migrate the current ad hoc handling done in vlapic_handle_EOI for the vectors that require some logic to be executed when the end of interrupt is performed. The setter of the callback will be in charge for setting the callback again on guest restore, as callbacks are not saved as part of the vlapic state. That is the reason why vlapic_set_callback is not a static function. No current users are migrated to use this new functionality yet, so no functional change expected as a result. Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Jan Beulich --- Changes since v3: - Use xzalloc. - Drop printk on ENOMEM. - Add vcpu parameter to vlapic EOI callback. - Check that the vector is pending in ISR or IRR when printing a warning message because of an overriding callback. - Fix commit message regarding resume mention. Changes since v2: - Fix commit message typo. - Expand commit message. - Also print a warning if the callback data is overridden. - Properly free memory in case of error in vlapic_init. Changes since v1: - Make vlapic_set_irq an inline function on the header. - Clear the callback hook in vlapic_handle_EOI. - Introduce a helper to set the callback without injecting a vector. - Remove unneeded parentheses. - Reduce callback table by 16. - Use %pv to print domain/vcpu ID. --- xen/arch/x86/hvm/vlapic.c | 62 ++++++++++++++++++++++++++++++-- xen/include/asm-x86/hvm/vlapic.h | 19 +++++++++- 2 files changed, 78 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/hvm/vlapic.c b/xen/arch/x86/hvm/vlapic.c index 5e21fb4937d..4465beaeec1 100644 --- a/xen/arch/x86/hvm/vlapic.c +++ b/xen/arch/x86/hvm/vlapic.c @@ -144,7 +144,37 @@ bool vlapic_test_irq(const struct vlapic *vlapic, uint= 8_t vec) return vlapic_test_vector(vec, &vlapic->regs->data[APIC_IRR]); } =20 -void vlapic_set_irq(struct vlapic *vlapic, uint8_t vec, uint8_t trig) +void vlapic_set_callback(struct vlapic *vlapic, unsigned int vec, + vlapic_eoi_callback_t *callback, void *data) +{ + unsigned long flags; + unsigned int index =3D vec - 16; + + if ( !callback || vec < 16 || vec >=3D X86_NR_VECTORS ) + { + ASSERT_UNREACHABLE(); + return; + } + + spin_lock_irqsave(&vlapic->callback_lock, flags); + if ( vlapic->callbacks[index].callback && + (vlapic->callbacks[index].callback !=3D callback || + vlapic->callbacks[index].data !=3D data) && + (vlapic_test_vector(vec, &vlapic->regs->data[APIC_IRR]) || + vlapic_test_vector(vec, &vlapic->regs->data[APIC_ISR])) ) + printk(XENLOG_G_WARNING + "%pv overriding vector %#x callback %ps (%p) data %p " + "with %ps (%p) data %p\n", + vlapic_vcpu(vlapic), vec, vlapic->callbacks[index].callback, + vlapic->callbacks[index].callback, vlapic->callbacks[index]= .data, + callback, callback, data); + vlapic->callbacks[index].callback =3D callback; + vlapic->callbacks[index].data =3D data; + spin_unlock_irqrestore(&vlapic->callback_lock, flags); +} + +void vlapic_set_irq_callback(struct vlapic *vlapic, uint8_t vec, uint8_t t= rig, + vlapic_eoi_callback_t *callback, void *data) { struct vcpu *target =3D vlapic_vcpu(vlapic); =20 @@ -159,8 +189,12 @@ void vlapic_set_irq(struct vlapic *vlapic, uint8_t vec= , uint8_t trig) else vlapic_clear_vector(vec, &vlapic->regs->data[APIC_TMR]); =20 + if ( callback ) + vlapic_set_callback(vlapic, vec, callback, data); + if ( hvm_funcs.update_eoi_exit_bitmap ) - alternative_vcall(hvm_funcs.update_eoi_exit_bitmap, target, vec, t= rig); + alternative_vcall(hvm_funcs.update_eoi_exit_bitmap, target, vec, + trig || callback); =20 if ( hvm_funcs.deliver_posted_intr ) alternative_vcall(hvm_funcs.deliver_posted_intr, target, vec); @@ -461,11 +495,24 @@ void vlapic_handle_EOI(struct vlapic *vlapic, u8 vect= or) { struct vcpu *v =3D vlapic_vcpu(vlapic); struct domain *d =3D v->domain; + vlapic_eoi_callback_t *callback; + void *data; + unsigned long flags; + unsigned int index =3D vector - 16; =20 if ( vlapic_test_vector(vector, &vlapic->regs->data[APIC_TMR]) ) vioapic_update_EOI(d, vector); =20 hvm_dpci_msi_eoi(d, vector); + + spin_lock_irqsave(&vlapic->callback_lock, flags); + callback =3D vlapic->callbacks[index].callback; + vlapic->callbacks[index].callback =3D NULL; + data =3D vlapic->callbacks[index].data; + spin_unlock_irqrestore(&vlapic->callback_lock, flags); + + if ( callback ) + callback(v, vector, data); } =20 static bool_t is_multicast_dest(struct vlapic *vlapic, unsigned int short_= hand, @@ -1623,9 +1670,19 @@ int vlapic_init(struct vcpu *v) =20 clear_page(vlapic->regs); =20 + vlapic->callbacks =3D xzalloc_array(typeof(*vlapic->callbacks), + X86_NR_VECTORS - 16); + if ( !vlapic->callbacks ) + { + unmap_domain_page_global(vlapic->regs); + free_domheap_page(vlapic->regs_page); + return -ENOMEM; + } + vlapic_reset(vlapic); =20 spin_lock_init(&vlapic->esr_lock); + spin_lock_init(&vlapic->callback_lock); =20 tasklet_init(&vlapic->init_sipi.tasklet, vlapic_init_sipi_action, v); =20 @@ -1647,6 +1704,7 @@ void vlapic_destroy(struct vcpu *v) destroy_periodic_time(&vlapic->pt); unmap_domain_page_global(vlapic->regs); free_domheap_page(vlapic->regs_page); + XFREE(vlapic->callbacks); } =20 /* diff --git a/xen/include/asm-x86/hvm/vlapic.h b/xen/include/asm-x86/hvm/vla= pic.h index 8f908928c35..db71fa38b0b 100644 --- a/xen/include/asm-x86/hvm/vlapic.h +++ b/xen/include/asm-x86/hvm/vlapic.h @@ -73,6 +73,9 @@ #define vlapic_clear_vector(vec, bitmap) \ clear_bit(VEC_POS(vec), (uint32_t *)((bitmap) + REG_POS(vec))) =20 +typedef void vlapic_eoi_callback_t(struct vcpu *v, unsigned int vector, + void *data); + struct vlapic { struct hvm_hw_lapic hw; struct hvm_hw_lapic_regs *regs; @@ -89,6 +92,11 @@ struct vlapic { uint32_t icr, dest; struct tasklet tasklet; } init_sipi; + struct { + vlapic_eoi_callback_t *callback; + void *data; + } *callbacks; + spinlock_t callback_lock; }; =20 /* vlapic's frequence is 100 MHz */ @@ -111,7 +119,16 @@ void vlapic_reg_write(struct vcpu *v, unsigned int reg= , uint32_t val); bool_t is_vlapic_lvtpc_enabled(struct vlapic *vlapic); =20 bool vlapic_test_irq(const struct vlapic *vlapic, uint8_t vec); -void vlapic_set_irq(struct vlapic *vlapic, uint8_t vec, uint8_t trig); +void vlapic_set_callback(struct vlapic *vlapic, unsigned int vec, + vlapic_eoi_callback_t *callback, void *data); +void vlapic_set_irq_callback(struct vlapic *vlapic, uint8_t vec, uint8_t t= rig, + vlapic_eoi_callback_t *callback, void *data); + +static inline void vlapic_set_irq(struct vlapic *vlapic, uint8_t vec, + uint8_t trig) +{ + vlapic_set_irq_callback(vlapic, vec, trig, NULL, NULL); +} =20 int vlapic_has_pending_irq(struct vcpu *v); int vlapic_ack_pending_irq(struct vcpu *v, int vector, bool_t force_ack); --=20 2.30.1 From nobody Tue Apr 30 03:18:07 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1618927769; cv=pass; d=zohomail.com; s=zohoarc; b=X3rMcj+15JdfhAmIkpnM/hlefIjnVgdilblVNh2B4yhmmz6nRtebkO4CkmHblAWi4IHDvy0ZBWJ8lbM/slAP/cjEptPKNuXb069KC/UqH/4ao16upRrtLl+sPEzPwLc/kZ1GXKknUrXrWgCPpbqO9jxhjYn66zap/V4t5xjAJjA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618927769; 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=ZTznuj7Tf1xHDE+jz1fFRYaGylN7zYTwaHIzddWA0R0=; b=MzRxX06xOh3khOz1/F+qxpo5Z7wBBa+jmJie4cWN9cazBdmWfTwXumerYygqFZy67y6rX6BpCuLVUK6xo6vSiyAaZvOYxrnaft3L6LAGz0eA/82GrZEPFlsgS5WE2KiIVQZZ0Os4Q0vqURaS+bieyL9CEu359vfKEHxcfBPSiYo= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 161892776944468.66474546300765; Tue, 20 Apr 2021 07:09:29 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.113742.216769 (Exim 4.92) (envelope-from ) id 1lYr3u-0000lb-5l; Tue, 20 Apr 2021 14:09:10 +0000 Received: by outflank-mailman (output) from mailman id 113742.216769; Tue, 20 Apr 2021 14:09:10 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr3u-0000lR-21; Tue, 20 Apr 2021 14:09:10 +0000 Received: by outflank-mailman (input) for mailman id 113742; Tue, 20 Apr 2021 14:09:08 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr3s-0000kS-O2 for xen-devel@lists.xenproject.org; Tue, 20 Apr 2021 14:09:08 +0000 Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 07a2cb89-bb58-4469-a59c-7f88cc2d5cf3; Tue, 20 Apr 2021 14:09:07 +0000 (UTC) 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: 07a2cb89-bb58-4469-a59c-7f88cc2d5cf3 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1618927746; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=vpcN02cyzKID1HjeTihBXBv2NdWgJ2yP5FtMABZCCQk=; b=MRUAgkJk+CKpzCD0209jdxvocP5W4i+M6C/XR93iLL23t0KXariv6Jxn oEKmbJqtf5WzUH7BrFgNpjLL49jdLQyJ2keJi7RBaXHwvFsvRn9+7yON2 B4z5aDRfWCJu/bw1nRgOLYDEylOTS7vZy0pXP9cSlyKgtOWbBXJyXVrKG c=; Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: +5x+J5rIseA6HcAiGBM14IgKx4J6im0TqjO2/hpo0JP8Prh5tyDvsNRtNtOSCuC5EsXUl8frk+ I0nNB1rIRkTL7ZP5QtcmKIJ3xGbad1Oy/WDsVOPAWIVNyC2txZ6VjU4E4I4RfxeCJ6DbxEKNer 9jPVpMMXKT97B8rBdxBl8+yIDlYdU77KSsJPjqlSIF/NqeGL9knHsZO+hiWzGEjHdjMTMY7kBp YhKxEUdPL8pSmzCeVGkecCjuJmXi6LbBiQw+Oy4cF1p/cuPy8abDkJyAmXNi7I3X4ctxwWLm1g acM= X-SBRS: 5.2 X-MesageID: 41988218 X-Ironport-Server: esa3.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-HdrOrdr: A9a23:/7/lL6mdoUn1aQkqT1s+bGz6jWTpDfP2imdD5ilNYBxZY6Wkvu izgfUW0gL1gj4NWHcm3euNIrWEXGm0z/NIyKMWOqqvWxSjhXuwIOhZnO7f6hDDOwm7zO5S0q 98b7NzYeebMXFWhdv3iTPWL/8O29+CmZrHuc7771NACT5ncLth6QARMHf4LmRTSBNdDZQ0UL qwj/AmmxOadX4abtu2CxA+NoCum/TxmI/7ehlDPhY76WC15g+A0qLwEBSTw34lIlBy6IolmF KlryXJop+Nntv+4R/a2m/V4f1t6aHc4+oGPuOgoIw4Lj3tjyyheYhuXaaT1QpF3d2H2RIRv/ Tn5zsmIsRv+1PdF1vF3SfF6k3b/xsFr1/k1FOCjnPoraXCNU0HIvsEv611WF/9ySMbzbVB+Z MO5U21nd5rKCmFuyLH693BR3hR5zKJiEtnq8E/pThiS4cEAYUhyrA3zQduP7orOjn104wjGP kGNrCm2N9mNWmXaH3UpQBUsbqRd0V2Gh+HR34LsdCO3w5Xm2hkz1AZyNZ3pAZ4yK4A X-IronPort-AV: E=Sophos;i="5.82,237,1613451600"; d="scan'208";a="41988218" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GRrWBIH6ojGpu/aPPKeCaXHz2CYAspnQdAKXScak5jETzLSjrG0nGQV33oHaada9Koo269j4dPivxK49LdHciHLpTZdOjkHqg64nyxVTXxA02lH7SOWZstPMGc55bGHrYnjlhpqvg7pc3Il8V+ujm/oxLlpkLHbwJHFaNcyb5GTK/QKp3fZfed8ETzEFW8Y4Z3+k5toN/ITlG/fu8zIBLWlMvQ+kaq27skOOrCgd2/gmuya7g6NxDArGbGiug7VKvz8r2t/O0jzgY2N+cPM2MZ2FpZh44f9ALw9nbDyfMnM4zyA4t1PuYGvLgtCa8W/srxFEhYf3SxGYAEdJ1zCkjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZTznuj7Tf1xHDE+jz1fFRYaGylN7zYTwaHIzddWA0R0=; b=DebQwbQ7f4DYZeBKaUKQUS2uFv8TX7MsTaui0lh+JaVMI8p4xezElCLn3towVI6k5Tat6lJIhSf7vRopUXlDXEqQPiu8Xffb13J7ble05eDL+5Ilt1Azaa+B8WQoMh/86E7xkJhJ0U3j2IShbWmNc5qLPIxlA61c117oc/jqzt+5zshnbmdkjk4nmlPVKa/8QqdVx0Rv4+fDdab79cTCoW8dQ4GwUVH0ne2STq9LxlkED2osdtYpw/LxDysmmd+U0pfCOB/0q/+UY/6qcgJnH7pGUuwdfuryn2KfN0Mz0e7olwY9bjYeB9wMPluNMUt9snmsmOt8Ga4ieyf1b+b/2A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZTznuj7Tf1xHDE+jz1fFRYaGylN7zYTwaHIzddWA0R0=; b=bGqPax/egN9/2wWECbsMbLG/WuHVmHGydPpdT9Va3e1BChBlqEpD8jBYckdCw04oTmDLsk+7ueIJ00ovNeT+IKvLmkJGmYe6rFUMwkn0aLL9zNWwMUObS8tNkgISAvdBQawP+WEte5JTTNjzNO3fFFLZJDw7Rlh5tIgSa4ypRWg= From: Roger Pau Monne To: CC: Roger Pau Monne , Jan Beulich , Andrew Cooper , Wei Liu , Paul Durrant Subject: [PATCH v4 03/12] x86/vmsi: use the newly introduced EOI callbacks Date: Tue, 20 Apr 2021 16:07:14 +0200 Message-ID: <20210420140723.65321-4-roger.pau@citrix.com> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210420140723.65321-1-roger.pau@citrix.com> References: <20210420140723.65321-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR2P264CA0135.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:30::27) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8d0c21fc-f40d-4908-1426-08d90405dab4 X-MS-TrafficTypeDiagnostic: DM4PR03MB6000: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2000; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mSPRB/4y9lgb6gZRHBCKCj+aR4quO6VZ5RGnsyHTfR+E9/+Ne8H/zxRTNIJ493w3t+mp/6UBt5qEd0FcTdjtNcPF04Bj/yCavwWl7SEkDp8caJ91BV9RTbHF2VcSGVVbQnMdZdG1zrgu/Iy6BNjb5TkSkzOe46FlTzmRHI0x0LF9+4+/ZN0/6yeOPABl9iVuq7Wbo1OCVUS4SMWq/WinlEiYd1Zdxb5LGppJ8CO4Il0BaXh9OJXyvpHsWNQKpdHAuWqMZpwvPol2ArEPLUCZrcKTHRdqmHlUD66oV6lzb91WT1fmqzQiQLOKl2q4/1674YVM+c1nN/J9u1ImhP1Cpa5gy+FdQj461H+RYwXCvxlWq/kBNyNvBwZ/6k3UCCslAe3/tnWmSODvk4+0rGUr3VI9nccB2JigmiT8uvXoYr+fBnY6Btmq7iJO91ryD85vzFJ7RG07ytVXSL8H7uNJnDAZnh9rRuTaFbu2tbYYXBdIYEKg3zFvT4CeFNtjIUL+aV/lDnQgkKEPffywFlQtfVaMz85l2TaFvoYqAhUFLupyfDLtFX/SQiFyOZ/06twnLU4h+LvNmFqr/4nU7SpqNygkt+glzKMGuO6IwnHhhpI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(396003)(376002)(39850400004)(136003)(366004)(6916009)(83380400001)(4326008)(38100700002)(16526019)(36756003)(316002)(956004)(6486002)(2616005)(6496006)(478600001)(8676002)(26005)(186003)(5660300002)(8936002)(54906003)(2906002)(6666004)(66476007)(1076003)(66556008)(86362001)(66946007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?dHh1TnYvT2NGRDJtaEhOVHVGU1I0by9PV1ErVkdUVHdRTUdkNTFVaXR2Uk5H?= =?utf-8?B?UWpOM1ZKWmg2MGllNk5nQVh3YXdBL2hWTGl4OVh4MGFYYVY1WXpwMzd5MFk2?= =?utf-8?B?UlNKN2syb2xmMWxFaHltWlI4bi9UQjlwb1JBNjQvblF4Z29Jb1hZQUxXUS80?= =?utf-8?B?N29kV0p6UG8rTW9RdnlBVnp1ZFJiRmR2MWh4dnpZZDR3Z1ZvU1NoSFlVTXJD?= =?utf-8?B?MHdJeFR4b0ltazNVaENYTzU3TjZJYTlwREZzd0xVRXhHWDNtUis5a29LK1Ju?= =?utf-8?B?THNFU3FhY0hTNEpoQ25oZDQwVUo3aU45alZkSEdxNXRkMDZ5VlVSTVBURXJp?= =?utf-8?B?L1gvRnl3Vi9nMnNmWXJKanpYcTVINnVQKzVWT0RvL2J5N2luS3lqNEpkMDN4?= =?utf-8?B?NDhubjk3UHhIUW5TZUptZHNWYkVVQnRhcHlTOFFMeXFzb2YvaWRLeGozNGxv?= =?utf-8?B?K211VW04U3pub0ZjSmFsemVYc1pWSXFPcGJiZms3SUtNaUFyajBIbW5MekIz?= =?utf-8?B?djErWDVqNXUxZFFPUzRZMUNjL2VLTGViQjVSUm02MHo2WnJtUWh3N0J4Rkh4?= =?utf-8?B?WnZpdGtIZERxS3JHcENjaG9jZVZjcllDdTM1a0lMUUtRc1d0N2ptaDZVVzNP?= =?utf-8?B?ZGpwRmJsZzFpZDMvSVpkS0NEUzNJRlhkeXBPMkdURDNsdnIzTmJnL1Azb1U1?= =?utf-8?B?MmR4bjNIcDJsUUd5VnIrUGZDT3UzRzVlUFF6S3FEUFE4bkVtRzg2Y25OQWdp?= =?utf-8?B?dHM4ZDJCdktCb3RJZVQ5b3NPMTQ1cDJOa0hZSytEVlZDcVhqeWFYcDRkSjdG?= =?utf-8?B?WlpVSUlraXBKQUFiaVZMelhubFkrUkJ5V2lsOE01N08wUWhiSWlVTGxnQ2l0?= =?utf-8?B?R092MEljc2FlUCsydnBDL3luNWVNb3RBZGJsUm1jNG11NTkvT1VIbzZ6clRB?= =?utf-8?B?RTVKVGpGeHI3VDFVQU5tdzZFcEdnbkJ5cEtxbGNldk9YTW8zZHFLSUJnNjVu?= =?utf-8?B?UmJ1ZVROWldLTDJ3aVJQdXErdGV3VGlNU0dBZWlURUtTUUJzamFuL0t1K2Z1?= =?utf-8?B?c2U1elJQMWk2c1VzWk5iTFlhQmg5U0pZVmVkdGJieElaY2RMeStIaWpGQmtu?= =?utf-8?B?L3ZsOHVWaStWZlFONThJNzRRUW9SWEc2eWhsRDNoOUQ1cjR5cjg5dUNGWlVN?= =?utf-8?B?azZDVXlneXN3YVZydDJPWCtaenpVVXA3VXlGcFA4V0M3SlZBTmJpOWRxRjQ0?= =?utf-8?B?N1VyNXQ5NTdUamVIQzQ4ajFjWXdidGkzVHh5bit5MkN3aVk0Qi9JMG1VZjBP?= =?utf-8?B?bjRYQ1JLM0ljMjBkTnNXdFBMeDdIRUJpVHlTb0hhOW1ZYXJmMFAwNHVzSSs2?= =?utf-8?B?L0NlLzRsSnQzUFlUdFJrSEhXOXVsRk5EUkFFbmpINEgyM3U0NERyWTZsTnlk?= =?utf-8?B?dkFwdENESGkzSnJtSVJ1dklYQ1BSdWxPd2pweUZnMHRBVTRFeVJBamxlVzA3?= =?utf-8?B?VDZrZ1FXc25ibTkxVC8vTEc3d1o0cmdLbnlNY1hSWlpGWkorSnZ3U1g2OVZx?= =?utf-8?B?K0dIRFlUZWhHWFBtc0djSzlDa2xhcXJFaGxDRkdxOHVxWlE5UXR6clNnRVlY?= =?utf-8?B?N0o3bnFYRFBtM3QvWFNZUWJXd0pwQU9BTHc3MElyYko2dkpPbllFZE4wK29Y?= =?utf-8?B?OGtqMFM4V25Rc0UrVnJzUnl0NDVJTE5QNkI2blJVSzlIRHByaSt3L3VldVJt?= =?utf-8?Q?NPWGFjFKVvwm9820OSr2aike6C0XP67HrC6ec6e?= X-MS-Exchange-CrossTenant-Network-Message-Id: 8d0c21fc-f40d-4908-1426-08d90405dab4 X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Apr 2021 14:09:04.1134 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 1LCOWktncox3jELgWl5IjRr7f65D+6UspiDMbdMPqJ/XiBKwEvdUui2N4EzIWs1Ej1WDbXRgIk9frvcQRG0g6A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR03MB6000 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) Remove the unconditional call to hvm_dpci_msi_eoi in vlapic_handle_EOI and instead use the newly introduced EOI callback mechanism in order to register a callback for MSI vectors injected from passed through devices. This avoids having multiple callback functions open-coded in vlapic_handle_EOI, as there is now a generic framework for registering such callbacks. It also avoids doing an unconditional call to hvm_dpci_msi_eoi for each EOI processed by the local APIC. Note that now the callback is only registered (and thus executed) when there's an MSI interrupt originating from a PCI passthrough device being injected into the guest, so the check in hvm_dpci_msi_eoi can be removed as it's already done by hvm_dirq_assist which is the only caller of vmsi_deliver_pirq. Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Jan Beulich --- Changes since v3: - Fix the callback to take a vcpu parameter. Changes since v2: - Expand commit message. - Pass the domain as the callback data. - Remove the check in hvm_dpci_msi_eoi --- xen/arch/x86/hvm/vlapic.c | 2 -- xen/arch/x86/hvm/vmsi.c | 35 ++++++++++++++++++------------- xen/drivers/passthrough/x86/hvm.c | 6 ++---- xen/include/asm-x86/hvm/io.h | 2 +- 4 files changed, 24 insertions(+), 21 deletions(-) diff --git a/xen/arch/x86/hvm/vlapic.c b/xen/arch/x86/hvm/vlapic.c index 4465beaeec1..cfcbd732b16 100644 --- a/xen/arch/x86/hvm/vlapic.c +++ b/xen/arch/x86/hvm/vlapic.c @@ -503,8 +503,6 @@ void vlapic_handle_EOI(struct vlapic *vlapic, u8 vector) if ( vlapic_test_vector(vector, &vlapic->regs->data[APIC_TMR]) ) vioapic_update_EOI(d, vector); =20 - hvm_dpci_msi_eoi(d, vector); - spin_lock_irqsave(&vlapic->callback_lock, flags); callback =3D vlapic->callbacks[index].callback; vlapic->callbacks[index].callback =3D NULL; diff --git a/xen/arch/x86/hvm/vmsi.c b/xen/arch/x86/hvm/vmsi.c index 13e2a190b43..03ae0dfb3c5 100644 --- a/xen/arch/x86/hvm/vmsi.c +++ b/xen/arch/x86/hvm/vmsi.c @@ -44,11 +44,9 @@ #include #include =20 -static void vmsi_inj_irq( - struct vlapic *target, - uint8_t vector, - uint8_t trig_mode, - uint8_t delivery_mode) +static void vmsi_inj_irq(struct vlapic *target, uint8_t vector, + uint8_t trig_mode, uint8_t delivery_mode, + vlapic_eoi_callback_t *callback, void *data) { HVM_DBG_LOG(DBG_LEVEL_VLAPIC, "vmsi_inj_irq: vec %02x trig %d dm %d\n", vector, trig_mode, delivery_mode); @@ -57,17 +55,17 @@ static void vmsi_inj_irq( { case dest_Fixed: case dest_LowestPrio: - vlapic_set_irq(target, vector, trig_mode); + vlapic_set_irq_callback(target, vector, trig_mode, callback, data); break; default: BUG(); } } =20 -int vmsi_deliver( - struct domain *d, int vector, - uint8_t dest, uint8_t dest_mode, - uint8_t delivery_mode, uint8_t trig_mode) +static int vmsi_deliver_callback(struct domain *d, int vector, uint8_t des= t, + uint8_t dest_mode, uint8_t delivery_mode, + uint8_t trig_mode, + vlapic_eoi_callback_t *callback, void *da= ta) { struct vlapic *target; struct vcpu *v; @@ -78,7 +76,8 @@ int vmsi_deliver( target =3D vlapic_lowest_prio(d, NULL, 0, dest, dest_mode); if ( target !=3D NULL ) { - vmsi_inj_irq(target, vector, trig_mode, delivery_mode); + vmsi_inj_irq(target, vector, trig_mode, delivery_mode, callbac= k, + data); break; } HVM_DBG_LOG(DBG_LEVEL_VLAPIC, "null MSI round robin: vector=3D%02x= \n", @@ -89,8 +88,8 @@ int vmsi_deliver( for_each_vcpu ( d, v ) if ( vlapic_match_dest(vcpu_vlapic(v), NULL, 0, dest, dest_mode) ) - vmsi_inj_irq(vcpu_vlapic(v), vector, - trig_mode, delivery_mode); + vmsi_inj_irq(vcpu_vlapic(v), vector, trig_mode, delivery_m= ode, + callback, data); break; =20 default: @@ -103,6 +102,13 @@ int vmsi_deliver( return 0; } =20 +int vmsi_deliver(struct domain *d, int vector, uint8_t dest, uint8_t dest_= mode, + uint8_t delivery_mode, uint8_t trig_mode) +{ + return vmsi_deliver_callback(d, vector, dest, dest_mode, delivery_mode, + trig_mode, NULL, NULL); +} + void vmsi_deliver_pirq(struct domain *d, const struct hvm_pirq_dpci *pirq_= dpci) { uint32_t flags =3D pirq_dpci->gmsi.gflags; @@ -119,7 +125,8 @@ void vmsi_deliver_pirq(struct domain *d, const struct h= vm_pirq_dpci *pirq_dpci) =20 ASSERT(pirq_dpci->flags & HVM_IRQ_DPCI_GUEST_MSI); =20 - vmsi_deliver(d, vector, dest, dest_mode, delivery_mode, trig_mode); + vmsi_deliver_callback(d, vector, dest, dest_mode, delivery_mode, trig_= mode, + hvm_dpci_msi_eoi, NULL); } =20 /* Return value, -1 : multi-dests, non-negative value: dest_vcpu_id */ diff --git a/xen/drivers/passthrough/x86/hvm.c b/xen/drivers/passthrough/x8= 6/hvm.c index 351daafdc9b..8f78c0935b9 100644 --- a/xen/drivers/passthrough/x86/hvm.c +++ b/xen/drivers/passthrough/x86/hvm.c @@ -796,11 +796,9 @@ static int _hvm_dpci_msi_eoi(struct domain *d, return 0; } =20 -void hvm_dpci_msi_eoi(struct domain *d, int vector) +void hvm_dpci_msi_eoi(struct vcpu *v, unsigned int vector, void *unused) { - if ( !is_iommu_enabled(d) || - (!hvm_domain_irq(d)->dpci && !is_hardware_domain(d)) ) - return; + struct domain *d =3D v->domain; =20 spin_lock(&d->event_lock); pt_pirq_iterate(d, _hvm_dpci_msi_eoi, (void *)(long)vector); diff --git a/xen/include/asm-x86/hvm/io.h b/xen/include/asm-x86/hvm/io.h index 54e0161b492..7f30dfa7fea 100644 --- a/xen/include/asm-x86/hvm/io.h +++ b/xen/include/asm-x86/hvm/io.h @@ -142,7 +142,7 @@ struct hvm_hw_stdvga { void stdvga_init(struct domain *d); void stdvga_deinit(struct domain *d); =20 -extern void hvm_dpci_msi_eoi(struct domain *d, int vector); +void hvm_dpci_msi_eoi(struct vcpu *v, unsigned int vector, void *unused); =20 /* Decode a PCI port IO access into a bus/slot/func/reg. */ unsigned int hvm_pci_decode_addr(unsigned int cf8, unsigned int addr, --=20 2.30.1 From nobody Tue Apr 30 03:18:07 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1618927776; cv=pass; d=zohomail.com; s=zohoarc; b=iczv8RKXd1C/s7ETLL3VWBoWtmyfsyBltecmzMTt5hIDM/S2Bn2hNVurK+l9cK8D5HzGQlMWJSP01hE3upTYde+3den+PQXtLn0+7q6kHTQuqlatafdhbFhbadYBR9g4T+/K/CTIS87oy6sPT2UL8qI+UUyqByBIuNchRV01ero= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618927776; 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=EAVYWt8cwqiJEsl3boupKExscC+f1qGYrfZepi9qBqk=; b=WNaO+uczyy4FcP+I9Htxz0USZUJl6+IgJadZpYTfqthJEwUFm+LvLWjWtWV2B8h4UDi9tU2j8VlOAVZjiPfEj52NfoeV8m+gpDa9yOUyvsOK2QznoRSn86aLvY8GwB2B8MX144UhtLo8EKlBfimzEBmHR866znv/yx8jk1GTzKk= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1618927775822153.23958438203488; Tue, 20 Apr 2021 07:09:35 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.113744.216781 (Exim 4.92) (envelope-from ) id 1lYr41-0000ri-GF; Tue, 20 Apr 2021 14:09:17 +0000 Received: by outflank-mailman (output) from mailman id 113744.216781; Tue, 20 Apr 2021 14:09:17 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr41-0000ra-CP; Tue, 20 Apr 2021 14:09:17 +0000 Received: by outflank-mailman (input) for mailman id 113744; Tue, 20 Apr 2021 14:09:16 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr40-0000qj-6S for xen-devel@lists.xenproject.org; Tue, 20 Apr 2021 14:09:16 +0000 Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 4c5fcd7b-059d-449d-b6a1-1262e4332ba8; Tue, 20 Apr 2021 14:09:14 +0000 (UTC) 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: 4c5fcd7b-059d-449d-b6a1-1262e4332ba8 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1618927754; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=XQQo+UyiEnKDykIOKcT5B7KoIgTn/5t8tBBIxiebRuA=; b=g6cqSlbFp3MVGslZwwKsJiEicR4L1hZwVrC/AV/8BfUcHRVfBzMyr4EQ MEl1cQOEmnNKPZKR6O+ShJXWUJLHqmA715q+PjLEJm3D917jsK3D/GuXx LUcEgTOhIp4R/QFUdVi5/k+w6P4LinbdOrOFcjD2GnigE040yHby6J+tK M=; Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: 359FTVPIxL1i6dugwP4LUhyMs5FK4JZoP1ym8oRSVvpWIFa4+ZnzTylfETKc9HY+uIlcDujUdQ KfXnWa7VdX8YW5sP8znDRMdfMC2CVw5RslVckglmuC2x+wv6U7yn1GNT/fpLlPohsZJ7+nEUfp 4ScJiw50QlIywTohYy6rkEvqHoU/y4nfx6BRUqerQr/JJ6LRzAW9iaYfY62wmZQ2MhC7+kj/+X Euk53YKyOqu4jQw9pRc2CobWDe27Le3hmzEXEE/ObvxGPV5yBCws26J57Wop6unaxKDHxJPCZt lJs= X-SBRS: 5.2 X-MesageID: 43472900 X-Ironport-Server: esa4.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-HdrOrdr: A9a23:mAnh/Ku2wZb3A3DO4NdOgOZi7skC84Yji2hD6mlwRA09T+WxrO rrtOgH1BPylTYaUGwhn9fFA6WbXXbA7/dOjrU5FYyJGC3ronGhIo0n14vtxDX8Bzbzn9Qw6Y 5JSII7MtH5CDFB4PrSyBWkEtom3dmM+L2pg+Cb9Ht2UQR2cchbjjtRICzzKDwTeCBtA50lGJ 2Aovddrz27dngNKui9DH8JX+/Mzue76K7OSxgAGhIh9U2ynSqlgYSKbiSw8zU/d3d0wbkk+X XYiACR3Muemtyy1xO07R600714g93ko+EzZvCkqs9QETn0jxbtWYIJYcz4gBkQgMWCrGkni8 PNpRBIBbUC11r0cnuuqRXgnynMuQxekkPK8lOTjXv9rcGRfltTYKAg9OEpACfx0EYusMpx16 hGxQuixuBqJCjNgTjn4JzwXwxq/3DE0EYKq/IZjHBUTOIlGdhshLEYlXkldasoLWbR7YAqF/ RWF8fM5PpaWkPyVQGmgkBfhPOrRXg9BRGAXwwrvdGUySFfmDRDw1If39F3pAZNyLsND71/o8 jUOKVhk79DCucQcKJGHe8EBe+6EHbETx7gOH+bSG6XW50vCjbokdra8b817OaldNgj150pgq nMV1teqCobZ1/uIdfm5uwKzjn9BEGGGRj9wMBX4JZ0/pfmQqDwDCGFQFcy1+O9vvQkBNHBUf rbAuMWP9bTaU/VXapZ1Qz3XJdfbVMEVtcOh9o9U1WS5u3RLInHsfHabebzKLLhHS1MYBK8Pl IzGBzIYOlQ5EGiXXH1xDLLXWn2R0D59ZVsVIjWltJjjbQlB8lpiEw4mF657saEJXlpqaotZn ZzJ7vhj+eerWmy9mDY0nVxNnNmfwJoyYSld0kPiR4BMkvyf7pGkc6YY3pu0HyOIQI6aM/KDg hFpRBS9bisJ5KdgQAuYujXfF6yvj82njanXp0ckqqM6YPOYZUjFKsrX6R3CEHsDBx6mQFjrU 9Zcw8aTkrjFjfj4J/Vz6A8NaX6TZ1RkQ2rKclbpTb0rkOHv/wiQXMdQnqTS8KNuB0vQDBVn1 V11KcajNO76HGSAFp6pN59HExHaWyRDr4DKAiefo1blormfxxKQX6QiSaXjAwyfWTW51wf71 aRXhG8SLXuOB5wq3pY2qHl/BdPemKRc1lZR1p6vYd+fF628Upb4KuuXO6ewmGRYlwNzqUhKz nDeyIVOR4r7cuwzgSplDGLEmgGyp0iMvfGNqkqd6je1xqWWcu1vJBDO8UR0IduNdjovONObP mWfBWNKijkT8wuwA6Yqx8eSV9JgUhhtcmt/hLr7GK1hiFiRdXTJUlrXLEdLZW36XP+S/OBzZ V+ipYUsIKLQxHMQ+/D7ZuSSThJbi73iyqRacoDrJhPp6I8tLdpBfDgIHP1/UAC+C97Fdv+kU MVfb9y77/AMLJ+ZsB6QVMtwnMZ0PC0aHYxugP4AuUCbUggon/SMdSO+afJo9MUczq8jTq1HV Ge9iFHls21Jxer5Po/C6gqJ35RZ1V5wHN+/Pmaf4m4MnThS8hzuH67OGS6arlTVeysHqgRtA 9z55Wtk/WMfyT1nCDWsj0TGNMCz0+XBeezChmLA+hG7piTPkmNmLKj5IqLtwjMIAHLIngwtM libkwfbsNKlzkkgskW60GJO9PKi3NgtUBf7zFhnkPqwa687g7gbBh7DTE= X-IronPort-AV: E=Sophos;i="5.82,237,1613451600"; d="scan'208";a="43472900" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Gu0X2DVzl3E0kK4Np/h/hU8SvDl4Ca678/RO3FK1aG0q6bQ27S4f7ROA0pRh/UeAj5QcA75doN7BmBYoXyLXIOPDxTokzIA3F3jZBcbAAhaI7d1eN6KQ+maE8PrnInMjM7Po/yFQq/g8b5zgQ5ZGEqAVzRHPh0/4tDtloe0uwZbfqvH0ZthXi7ajmmk1li+Yob0Oh3GFIEJ/GQclFws12/XJR9Yp6hWSdM3TEXzuB0Kj/6sclLfWjTLL3ASd2aN979VowpH0Vn7mUbNF7/ImsMMKIrnsB/mkU0lguHA9NdOQu3tOsGa6/Vho4PlYVKgTxUZUG+h2W6zOAufvk30JUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=EAVYWt8cwqiJEsl3boupKExscC+f1qGYrfZepi9qBqk=; b=ffId/gFrMJM+wbLq/BZ/BtRueP6XgtizOpV3U1PwW+betf8xJ/LToNafZ72HQ6QXW0N/Gd4aSO25JjstDLfGy++z2l3DtCf5hSAgzB1SxZhOizBNX0uwLDS4MGATnZQphml9GJ8J/qdOIbOqqKaoZEnUo2bRiQyFTJ2Cq1ipI8yFn+MrINdA8cBehh8FQ/DmvQUWr/HcRQatYxX8bb1Z4cuMsqEiibuB8nR6JNMlTSI0TNLbEG8DIEVbOVw3V+Vh9mwL/nmX0Vty5NnecL9IER/4hVgmhPth/QYSSa3N9R/Z9tnWqS30VQu6seL52Y5cj6cvhACzLa6KH99ijp29LA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=EAVYWt8cwqiJEsl3boupKExscC+f1qGYrfZepi9qBqk=; b=KKiHhQ8YRqkbwnqWhyBYCH2UlyzT89xayMIHPi7NVuJ+pAXWSRb4ryvXTryuvQM4n4QxYRDE8TVedKP12DfakkV63Uj+VqdUfDOF+2m5jg0EwTIlkuhWxHhPUSW5RQZF62SJ8ZB4ucnJ3L3ya78OHo7fFP0IXtQqmpJN5xCX3hA= From: Roger Pau Monne To: CC: Roger Pau Monne , Jan Beulich , Andrew Cooper , Wei Liu Subject: [PATCH v4 04/12] x86/vioapic: switch to use the EOI callback mechanism Date: Tue, 20 Apr 2021 16:07:15 +0200 Message-ID: <20210420140723.65321-5-roger.pau@citrix.com> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210420140723.65321-1-roger.pau@citrix.com> References: <20210420140723.65321-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR2P264CA0057.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:31::21) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a7003a25-4ee1-4177-b819-08d90405dfa5 X-MS-TrafficTypeDiagnostic: DM4PR03MB6000: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2331; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Uv6DIkU1dneT/gasCrXcs9KaHNMbUpMZ+Qiyu5Ec9EDFqAIzzGAA6XXL9Ga6LLfBEKHfdHrgHywFUOwtxQlA51a8eEzG+7+uc9hdQ2ylOpfYYkQH3sbjpK53VtXNFPC/2EAbq3yU5fUsF7McJ4NyYGNIGXhES+t6jNzIBEf7sIEeKTRMFx7yYXjN5M7czFa9JF8Vg5g+uwBrPm/9jDKbZbBOwaFz1B0T0W8cCxJ7MoCWRK7SQlKzyeixpm2PLJvMRkx1+912SDR51VNYDjmGotdvt/DubvDJ4DKrw4u4HzbHMP3E3mIU1IdmixfUxJlp/JP7MiHsQYUHinz8j91raDHM7GehQ5SncJIZzyMCMSf6ZosoTZ0tKNDgGFgPjtndx7QSg0yy/C+tPIfZxM76SXCC026mnHe9vt4Ytp8uThLGcvKBO4/j3+HqgXl3AMUqEgLrVhtzeEGIkq5F5KFSCi2KXe+wgOOBV+WmUwgIB1iqpfU7m9A0LD1HaUFi4FCEq3QVPwHYpvuFY2TjFlFjSS4BJ21ciliNeIJKEfqGbnd2k+Vd7X4AY99M9Ke5zzuKhsUE3qM9FXsCFeLG7yiRLy35UcBeDBq+C+xrBVZB0fI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(396003)(376002)(39850400004)(136003)(366004)(6916009)(83380400001)(4326008)(38100700002)(16526019)(36756003)(316002)(956004)(6486002)(2616005)(6496006)(478600001)(8676002)(26005)(186003)(5660300002)(8936002)(54906003)(2906002)(66476007)(1076003)(66556008)(86362001)(66946007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?OU0zOW8yR09nV1EyY2Joc0pyTW90TFBHYzJEZWZvU2ZHRTJhdjdZeWlqdmFJ?= =?utf-8?B?a1g2TFhvZHZzSDVkVi9IREgvalVKRGpaMU5DZ1NXbFZXbFBXS0ZrZFpzUHZK?= =?utf-8?B?TVF4YS9HM09EUDhGMStQeDh0a2lKc3hZLytzcDBVeHh0aXVsSmNXRHhJeDhl?= =?utf-8?B?c3hNUWtIYUNBL3NWNWRTc1JWek01MmVtWjBmNjl3UUhJckFFK3dDQ3NnaEh4?= =?utf-8?B?T1RlTnp6ZGw1d00yTTd6RkpGd0RiS0x0dlp1TEU0MXFCWjVtSzRDZnQ3Lzdu?= =?utf-8?B?V0hYRjdVMXR5RnRBTExVT1M5QjRDaTFHNWpuMkZFeEpwYWlQcnNkQ2VLMlRR?= =?utf-8?B?bHFuKzIvRjNGL2gyUUJPNVoyYXJndWNhaHBFTEp6Y0FkKzBhR3grbGhLWldQ?= =?utf-8?B?empoTis2U1F6b1FIbTBNalhNZFpWaDhGNW5WZGFxdk1oVzMxcUtSZUhKUmVL?= =?utf-8?B?aFJVNSt6N2t2M1h5dXIwM1BiWDJ2ak5aSzRwNkJ1WkJPMGdFRW5XVkx1K3gx?= =?utf-8?B?VXpjRDE1WTZzZi82ckh1eEtpcHlYcWJCeUdVYlRvNU0rWi9uZ1JjZmVZYWNq?= =?utf-8?B?OUovNzN5RFlKWi90VTN2R1UyeU1QNGFBUEo2a25UZ25BZlBPczVtVE1Wd0E4?= =?utf-8?B?bHhnNlA3QUY4NUFJTlhYd0dTRm83ejJ3Q1ZleHpTZzlSWXYzVlhnS3IwREFi?= =?utf-8?B?MDlBVGRsOVQwQko1T3lWRm1hVTNPV3QrSHJPWTFYNzBsYWxRMjVMdmhkNlVZ?= =?utf-8?B?NmtWb2xEQi84WENwaHYyQ2ljYWozdHlRYlhlMXFSYmU3V3VUUTJEb1Axc01z?= =?utf-8?B?UXNWT2UzelplTzU5ZFhMNUhhZkVGN3JhT3Jra3JUZkw4RVVBT254T1dZV2du?= =?utf-8?B?TDd2YVFxb0xJSWJQTG1aKzRKOFRDNmgzN2R1bkM1SE11UXZMSlZLU3BqNkpU?= =?utf-8?B?OW9OSWtySGtiZmxOL09YRHIwaTZSRmUzSWg4L2NiYWE4ZHFGcjlXK2xKRktX?= =?utf-8?B?RW50eFZTUTlaOSt3QWVwMEcrcFdONlcyTURBNWlKd1RBTTdMTGFwMlF4ODlp?= =?utf-8?B?b3BwM3pWVFJQSXkwYzJUbk4zQzBITzBHR2hLbDJBcHpnV3B5aVRtTFZoMVF0?= =?utf-8?B?aXQxd0RhT0FWSU9sR0lCT2lZWGdHbFJ2d0p1MUtKQk1pL0NxTVlLZmRlU0pi?= =?utf-8?B?NDJYWVdVdXoyVEdaOWxWckZkNHNKUUdIazYrM1dFblFFYWFkYnNRVlRCYVBI?= =?utf-8?B?SlZQWmJWSkpadmFGWmlUKzJSeXoydW14OUg0cHZTVnF0elBTWlFuT2ZsNkJ4?= =?utf-8?B?ZmNObkQ1Zm9wSzVDVW9WTnd3bHc1dnIyN3ROOGwxUnpPR2s3LzAra2piZTI2?= =?utf-8?B?RTZuc3k1L2N6T0xSWk5VbmJFdkdsWGVkN29YQkpJbHY4S2dtTS85eEt1b2Nx?= =?utf-8?B?YXJrMStYTHRUcTZNUzN3REh6K0NmOFNVNjl3WUMxVWZsMlBFQ3QrMHl0TUFx?= =?utf-8?B?cHlHei9lU3k0d3JEa1dsU1RpelBEYTdjU3JHTWNBOGRmVzlIc1VaTFkrR0d2?= =?utf-8?B?RWxDWDZKLzZnRzQrZko3dGIvbGNpMlNCdW9BUTN2dWNYRWovMlF2QmdWZE5X?= =?utf-8?B?WWhXdThnUUdzbll6VVZXT3RCaXJWemhyTkFEdWt1VTdnUzFLQmYxZklLWGhm?= =?utf-8?B?NS9TUmpSNkt5eE5oWFNRbHllRTh0bjZySWxrd3NwNkxuazhIdVIycEJNSnBi?= =?utf-8?Q?1dzTBJ+jeFw0YUUGX+GQn8aNFd/6oDdlysjbr/B?= X-MS-Exchange-CrossTenant-Network-Message-Id: a7003a25-4ee1-4177-b819-08d90405dfa5 X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Apr 2021 14:09:12.4128 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: gV7CrDItzzwso2IBnLgM+8Is7ncmIpN6v4VLIe90XMifPGJ1Gk64hdNsGXvc257h39LcP8O+x8aIv4oGtig6bA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR03MB6000 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) Switch the emulated IO-APIC code to use the local APIC EOI callback mechanism. This allows to remove the last hardcoded callback from vlapic_handle_EOI. Removing the hardcoded vIO-APIC callback also allows to getting rid of setting the EOI exit bitmap based on the triggering mode, as now all users that require an EOI action use the newly introduced callback mechanism. Move and rename the vioapic_update_EOI now that it can be made static. Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Jan Beulich --- Changes since v3: - Remove assert in eoi_callback. - Cast callback to bool. - Simplify check in ioapic_load: GSIs < 16 and edge interrupts can also have callbacks. - Reword comment about casting to boolean. Changes since v2: - Explicitly convert the last alternative_vcall parameter to a boolean in vlapic_set_irq_callback. Changes since v1: - Remove the triggering check in the update_eoi_exit_bitmap call. - Register the vlapic callbacks when loading the vIO-APIC state. - Reduce scope of ent. --- xen/arch/x86/hvm/vioapic.c | 127 ++++++++++++++++++++++++------------- xen/arch/x86/hvm/vlapic.c | 12 ++-- 2 files changed, 89 insertions(+), 50 deletions(-) diff --git a/xen/arch/x86/hvm/vioapic.c b/xen/arch/x86/hvm/vioapic.c index 87370dd4172..1c2763fc2bf 100644 --- a/xen/arch/x86/hvm/vioapic.c +++ b/xen/arch/x86/hvm/vioapic.c @@ -394,6 +394,48 @@ static const struct hvm_mmio_ops vioapic_mmio_ops =3D { .write =3D vioapic_write }; =20 +static void eoi_callback(struct vcpu *v, unsigned int vector, void *data) +{ + struct domain *d =3D v->domain; + struct hvm_irq *hvm_irq =3D hvm_domain_irq(d); + unsigned int i; + + spin_lock(&d->arch.hvm.irq_lock); + + for ( i =3D 0; i < d->arch.hvm.nr_vioapics; i++ ) + { + struct hvm_vioapic *vioapic =3D domain_vioapic(d, i); + unsigned int pin; + + for ( pin =3D 0; pin < vioapic->nr_pins; pin++ ) + { + union vioapic_redir_entry *ent =3D &vioapic->redirtbl[pin]; + + if ( ent->fields.vector !=3D vector ) + continue; + + ent->fields.remote_irr =3D 0; + + if ( is_iommu_enabled(d) ) + { + spin_unlock(&d->arch.hvm.irq_lock); + hvm_dpci_eoi(d, vioapic->base_gsi + pin); + spin_lock(&d->arch.hvm.irq_lock); + } + + if ( (ent->fields.trig_mode =3D=3D VIOAPIC_LEVEL_TRIG) && + !ent->fields.mask && !ent->fields.remote_irr && + hvm_irq->gsi_assert_count[vioapic->base_gsi + pin] ) + { + ent->fields.remote_irr =3D 1; + vioapic_deliver(vioapic, pin); + } + } + } + + spin_unlock(&d->arch.hvm.irq_lock); +} + static void ioapic_inj_irq( struct hvm_vioapic *vioapic, struct vlapic *target, @@ -407,7 +449,8 @@ static void ioapic_inj_irq( ASSERT((delivery_mode =3D=3D dest_Fixed) || (delivery_mode =3D=3D dest_LowestPrio)); =20 - vlapic_set_irq(target, vector, trig_mode); + vlapic_set_irq_callback(target, vector, trig_mode, + trig_mode ? eoi_callback : NULL, NULL); } =20 static void vioapic_deliver(struct hvm_vioapic *vioapic, unsigned int pin) @@ -514,49 +557,6 @@ void vioapic_irq_positive_edge(struct domain *d, unsig= ned int irq) } } =20 -void vioapic_update_EOI(struct domain *d, u8 vector) -{ - struct hvm_irq *hvm_irq =3D hvm_domain_irq(d); - union vioapic_redir_entry *ent; - unsigned int i; - - ASSERT(has_vioapic(d)); - - spin_lock(&d->arch.hvm.irq_lock); - - for ( i =3D 0; i < d->arch.hvm.nr_vioapics; i++ ) - { - struct hvm_vioapic *vioapic =3D domain_vioapic(d, i); - unsigned int pin; - - for ( pin =3D 0; pin < vioapic->nr_pins; pin++ ) - { - ent =3D &vioapic->redirtbl[pin]; - if ( ent->fields.vector !=3D vector ) - continue; - - ent->fields.remote_irr =3D 0; - - if ( is_iommu_enabled(d) ) - { - spin_unlock(&d->arch.hvm.irq_lock); - hvm_dpci_eoi(d, vioapic->base_gsi + pin); - spin_lock(&d->arch.hvm.irq_lock); - } - - if ( (ent->fields.trig_mode =3D=3D VIOAPIC_LEVEL_TRIG) && - !ent->fields.mask && !ent->fields.remote_irr && - hvm_irq->gsi_assert_count[vioapic->base_gsi + pin] ) - { - ent->fields.remote_irr =3D 1; - vioapic_deliver(vioapic, pin); - } - } - } - - spin_unlock(&d->arch.hvm.irq_lock); -} - int vioapic_get_mask(const struct domain *d, unsigned int gsi) { unsigned int pin =3D 0; /* See gsi_vioapic */ @@ -610,6 +610,8 @@ static int ioapic_save(struct vcpu *v, hvm_domain_conte= xt_t *h) static int ioapic_load(struct domain *d, hvm_domain_context_t *h) { struct hvm_vioapic *s; + unsigned int i; + int rc; =20 if ( !has_vioapic(d) ) return -ENODEV; @@ -620,7 +622,42 @@ static int ioapic_load(struct domain *d, hvm_domain_co= ntext_t *h) d->arch.hvm.nr_vioapics !=3D 1 ) return -EOPNOTSUPP; =20 - return hvm_load_entry(IOAPIC, h, &s->domU); + rc =3D hvm_load_entry(IOAPIC, h, &s->domU); + if ( rc ) + return rc; + + for ( i =3D 0; i < ARRAY_SIZE(s->domU.redirtbl); i++ ) + { + const union vioapic_redir_entry *ent =3D &s->domU.redirtbl[i]; + unsigned int vector =3D ent->fields.vector; + unsigned int delivery_mode =3D ent->fields.delivery_mode; + struct vcpu *v; + + /* + * Add a callback for each possible vector injected by a redirecti= on + * entry. + */ + if ( delivery_mode !=3D dest_LowestPrio && delivery_mode !=3D dest= _Fixed ) + continue; + + for_each_vcpu ( d, v ) + { + struct vlapic *vlapic =3D vcpu_vlapic(v); + + /* + * NB: if the vlapic registers were restored before the vio-ap= ic + * ones we could test whether the vector is set in the vlapic = IRR + * or ISR registers before unconditionally setting the callbac= k. + * This is harmless as eoi_callback is capable of dealing with + * spurious callbacks. + */ + if ( vlapic_match_dest(vlapic, NULL, 0, ent->fields.dest_id, + ent->fields.dest_mode) ) + vlapic_set_callback(vlapic, vector, eoi_callback, NULL); + } + } + + return 0; } =20 HVM_REGISTER_SAVE_RESTORE(IOAPIC, ioapic_save, ioapic_load, 1, HVMSR_PER_D= OM); diff --git a/xen/arch/x86/hvm/vlapic.c b/xen/arch/x86/hvm/vlapic.c index cfcbd732b16..8f3a0a2e8f7 100644 --- a/xen/arch/x86/hvm/vlapic.c +++ b/xen/arch/x86/hvm/vlapic.c @@ -194,7 +194,13 @@ void vlapic_set_irq_callback(struct vlapic *vlapic, ui= nt8_t vec, uint8_t trig, =20 if ( hvm_funcs.update_eoi_exit_bitmap ) alternative_vcall(hvm_funcs.update_eoi_exit_bitmap, target, vec, - trig || callback); + /* + * NB: need to explicitly convert to boolean to = avoid + * truncation wrongly resulting in false getting + * passed, for example when the pointer sits on a + * page boundary. + */ + (bool)callback); =20 if ( hvm_funcs.deliver_posted_intr ) alternative_vcall(hvm_funcs.deliver_posted_intr, target, vec); @@ -494,15 +500,11 @@ void vlapic_EOI_set(struct vlapic *vlapic) void vlapic_handle_EOI(struct vlapic *vlapic, u8 vector) { struct vcpu *v =3D vlapic_vcpu(vlapic); - struct domain *d =3D v->domain; vlapic_eoi_callback_t *callback; void *data; unsigned long flags; unsigned int index =3D vector - 16; =20 - if ( vlapic_test_vector(vector, &vlapic->regs->data[APIC_TMR]) ) - vioapic_update_EOI(d, vector); - spin_lock_irqsave(&vlapic->callback_lock, flags); callback =3D vlapic->callbacks[index].callback; vlapic->callbacks[index].callback =3D NULL; --=20 2.30.1 From nobody Tue Apr 30 03:18:07 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1618927785; cv=pass; d=zohomail.com; s=zohoarc; b=Nh+qyI39/awxa4iU5HyIGJ2r4b3rT1nT9fxFoaa+pT15+JfWJUq9CZZ8cMkjjJl74oQPrk9FSp7xk1SBbZ354vj5+ffOMiXZDkO1jk5yYQCov00jihQHp1wzzJlvlybxY9aYqoZfYtKD7gKU3H6HWg/hlm5EhS6K0E4T3OJAoQU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618927785; 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=WuvrOYUoKMt59jYrBDWLY98/dORJ+acGdZP4gZpz1qE=; b=H3ghQL1/tWAI5lNBniWoxFmW5+aFglDIsIvIQk1FiQ3uw9UyJjWCYgmfL8XKiNzdPHuaHQiOm7G02Eu6EzdZkiNBSsH8FiEUxVbGFrZ2kap41KYzV//Xv0pQxF25FLGgmbgbP42uKAsssifUNKAKYkHrU1seMHIHWRGpuTfYb5g= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1618927785568464.2277994107733; Tue, 20 Apr 2021 07:09:45 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.113751.216793 (Exim 4.92) (envelope-from ) id 1lYr4B-0000zj-Vs; Tue, 20 Apr 2021 14:09:27 +0000 Received: by outflank-mailman (output) from mailman id 113751.216793; Tue, 20 Apr 2021 14:09: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 1lYr4B-0000zc-RP; Tue, 20 Apr 2021 14:09:27 +0000 Received: by outflank-mailman (input) for mailman id 113751; Tue, 20 Apr 2021 14:09:26 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr4A-0000xF-57 for xen-devel@lists.xenproject.org; Tue, 20 Apr 2021 14:09:26 +0000 Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 3cab99db-c0af-4678-860c-b9fc2fbe1bc7; Tue, 20 Apr 2021 14:09:23 +0000 (UTC) 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: 3cab99db-c0af-4678-860c-b9fc2fbe1bc7 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1618927763; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=0s7aVVBVS2fLG2pkS1fRgQ/80/jj5QyxHMvZXbRPV0E=; b=BufJS5iP07+tn/7klwMJPVDpAAKMLV7P7ydmYAavOc3/VwK6s5UMidvg Bi+AobmPjShrzOkeI2CeahzNRAYE7Dy6dudyyXkt1IGW0nAOT+/MPMyEr XwoNbwQbpmTFjTj8cnMQrrU7ShLY5uXbTvQTPyCiadX+82zrVm6t1JWth M=; Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: tilQJMXij9K0GXUMIJGD/a+1WX3Zh0iW5BWtQccAQqBlZIT9zEwRMOl+s5HtAyJBgy16+jrgit nUIg0lur4NopJ3XnmvJMVHRnbymKwfVWu/DtCvcR7uSSLKoXkLxZ/BHFIJJHusI6cZTy2c0/JU A9PE572qIQEuQUDKCmqnVNlAul9N9laQlL/SSLK2FdjNE3wUDJqXxTLs54iZXJ7wu3mMdL8agH AljpeovIO9GJt1eZ7J1a+K6uwq6m8XhwiUO6OMS6kbBH3Mq9JZjsH3mOWg8GC4Y1gM2xgIh+aF 9Jg= X-SBRS: 5.2 X-MesageID: 42368653 X-Ironport-Server: esa1.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-HdrOrdr: A9a23:IDnhf6tmfrwEyfF3v84ku8yQ7skC84Yji2hD6mlwRA09T+WxrO rrtOgH1BPylTYaUGwhn9fFA6WbXXbA7/dOjrU5FYyJGC3ronGhIo0n14vtxDX8Bzbzn9Qw6Y 5JSII7MtH5CDFB4PrSyBWkEtom3dmM+L2pg+Cb9Ht2UQR2cchbjjtRICzzKDwTeCBtA50lGJ 2Aovddrz27dngNKui9DH8JX+/Mzue76K7OSxgAGhIh9U2ynSqlgYSKbiSw8zU/d3d0wbkk+X XYiACR3Muemtyy1xO07R600714g93ko+EzZvCkqs9QETn0jxbtWYIJYcz4gBkQgMWCrGkni8 PNpRBIBbUC11r0cnuuqRXgnynMuQxekkPK8lOTjXv9rcGRfltTYKAg9OEpACfx0EYusMpx16 hGxQuixuBqJCjNgTjn4JzwXwxq/3DE0EYKq/IZjHBUTOIlGdhshLEYlXkldasoLWbR7YAqF/ RWF8fM5PpaWkPyVQGmgkBfhPOrRXg9BRGAXwwrvdGUySFfmDRDw1If39F3pAZNyLsND71/o8 jUOKVhk79DCucQcKJGHe8EBe+6EHbETx7gOH+bSG6XW50vCjbokdra8b817OaldNgj150pgq nMV1teqCobZ1/uIdfm5uwKzjn9BEGGGRj9wMBX4JZ0/pfmQqDwDCGFQFcy1+O9vvQkBNHBUf rbAuMWP9bTaU/VXapZ1Qz3XJdfbVMEVtcOh9o9U1WS5u3RLInHsfHabebzKLLhHS1MYBK8Pl IzGBzIYOlQ5EGiXXH1xDLLXWn2R0D59ZVsVIjWltJjjbQlB8lpiEw4mF657saEJXlpqaotZn ZzJ7vhj+eerWmy9mDY0nVxNnNmfwJoyYSld0kPiR4BMkvyf7pGkc6YY3pu0HyOIQI6aM/KDg hFpRBS9bisJ5KdgQAuYujXfF6yvj82njanXp0ckqqM6YPOYZUjFKsrX6R3CEHsDBx6mQFjrU 9Zcw8aTkrjFjfj4J/Vz6A8NaX6TZ1RkQ2rKclbpTb0rkOHv/wiQXMdQnqTS8KNuB0vQDBVn1 V11KcajNO76HGSAFp6pN59HExHaWyRDr4DKAiefo1blormfxxKQX6QiSaXjAwyfWTW51wf71 aRXhG8SLXuOB5wq3pY2qHl/BdPemKRc1lZR1p6vYd+fF628Upb4KuuXO6ewmGRYlwNzqUhKz nDeyIVOR4r7cuwzgSplDGLEmgGyp0iMvfGNqkqd6je1xqWWcu1vJBDO8UR0IduNdjovONObP mWfBWNKijkT8wuwA6Yqx8eSV9JgUhhtcmt/hLr7GK1hiFiRdXTJUlrXLEdLZW36XP+S/OBzZ V+ipYUsIKLQxHMQ+/D7ZuSSThJbi73iyqRacoDrJhPp6I8tLdpBfDgIHP1/UAC+C97Fdv+kU MVfb9y77/AMLJ+ZsB6QVMtwnMZ0PC0aHYxugP4AuUCbUggon/SMdSO+afJo9MUczq8jTq1HV Ge9iFHls21Jxer5Po/C6gqJ35RZ1V5wHN+/Pmaf4m4MnThS8hzuH67OGS6arlTVeysHqgRtA 9z55Wtk/WMfyT1nCDWsj0TGNMCz0+XBeezChmLA+hG7piTPkmNmLKj5IqLtwjMIAHLIngwtM libkwfbsNKlzkkgskW60GJO9PKi3NgtUBf7zFhnkPqwa687g7gbBh7DTE= X-IronPort-AV: E=Sophos;i="5.82,237,1613451600"; d="scan'208";a="42368653" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mDJsM29OGW7dknyQq0JtZV4q2jreQlTDwCeaXQHXYHZgqS8kcKuY/aGbbw6JKHMQz/HQrOQXQ3G4esXIOkx2xBkfr3EsNLkVR68vgr+kX1CYr1IhwHzYIECnNAJ/fGaQeAUTp3QrLrppZRWz3urY4VTEyAFIzEIAP7wZn2pIlZsCO1rBc/NG3yxqAJLDk0rXtd+mugKBNBhe7c2M1a4y13EJ1W2eWP2D8tcGDLX1S5KXCjIMUJDmM5N4ruCix1VjBrx4YscvuNbz2PglnPSXU+/LDCzVPMcmsa8Gq3kZ6KD5vs3ToOJWx6R1pVqC53KUC0bSp0sSEV4wa8K/9EVxPw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WuvrOYUoKMt59jYrBDWLY98/dORJ+acGdZP4gZpz1qE=; b=fBKYCarmsg4M+0OgSsjFiYFvJdoXkSI76c0DrXi73YtiE/vg4q7gQ/Emqb2XZL8uKYLWEHJypbstTOBMMQpU2Ij/MwTE9pq5jGnrMTRVnBcTRb3L+0G9JobrmLRQ/4+91uWf01nZRHEGJ3BKtA2iPeRizl+iwQrOAYVfTh8xzz8nYPIyewcGKFXnZtilx0zYRZRRsuv92RL6j2VZ2LU+NnN6zloHiGoUULFcP+tubpxsm4elbR6fe+67/GI8hAdi57XPApmBcWjvtvR1qYVh9mjxohEDCJ//qE32ULP1uVHtfCgm/m/6+6e2Bh0SQNtXNjjItXsNoBgiMlwxBSvtvw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WuvrOYUoKMt59jYrBDWLY98/dORJ+acGdZP4gZpz1qE=; b=J+al99CL923f2pPoNBVDPwF7HSTB7tjbJL2kubhE1FvUVQlOeBa2zBJpyK9CHy735xybmuOCfwlnfRS28oL0EUlOdQEOBDTiFQc8PIZlAxbrVrnUvQT0nUrg78j7h3nWNePuvVvBdPS8xj3xqFUeA+MmlFDei50drMZs1ZrncGY= From: Roger Pau Monne To: CC: Roger Pau Monne , Jan Beulich , Andrew Cooper , Wei Liu Subject: [PATCH v4 05/12] x86/hvm: allowing registering EOI callbacks for GSIs Date: Tue, 20 Apr 2021 16:07:16 +0200 Message-ID: <20210420140723.65321-6-roger.pau@citrix.com> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210420140723.65321-1-roger.pau@citrix.com> References: <20210420140723.65321-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR2P264CA0069.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:31::33) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: fc0491ed-6857-410d-b4a3-08d90405e3fc X-MS-TrafficTypeDiagnostic: DM4PR03MB6000: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: o822bY2QnQOlyMm4PJh6V4+Fn5jOb6uioDxSxc7GOeDsVN07idmFXntCSmFnVqgq9jYSuJX2HuPS1KO5CwcuW8wXyUaN78b5N45v9P6UbB3Lz3mSR/W5d1jzxwCEouVVN7UfJlDUVE4WYe25QdzsWc9XLl0GlHodACI2wANhdlaJ2HibgGK1LVVzGRH0kiECf4WneQltuiiLO0+2lgZY7EgWNFGhC7Jm58T+SSA5QVbJvW0ekDpmWH8S2lrEQmnHNzNrqEDI6SeCNUnYJhjq0B+QNk6M4Hg2yIRkfWlH7aIN8B7hayscxTqp/FxSBuqSPuvvKr7fsRM/utp+ANHZGgUaTxwrmmIlpJJLKE1HKdQlhOWnMsr3PkCpI+pOQGtfAmo68BsUwjhTHz6QexeTWq+j9wEnPukL3KwLDJ5i5srGeOxJh2sw8yXkt0wpvuaSjH1GerhOZf7LkWNRDtIhzlhxjGU2PA5a30s+2W+XnRmR74N37BHnvWgT1vyVtcFC8IZ5XmDtLpVoizTuMa2jTpgPuufUWONEd5kwgjCEliv31UDut2Yeiew2Et7n0JKW9ClVkf9xzz0KtBIkmTtYkqW5bjhKRtCh/E/lxtzIiFU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(396003)(376002)(39850400004)(136003)(366004)(6916009)(83380400001)(4326008)(38100700002)(16526019)(36756003)(316002)(956004)(6486002)(2616005)(6496006)(478600001)(8676002)(26005)(30864003)(186003)(5660300002)(8936002)(54906003)(2906002)(6666004)(66476007)(1076003)(66556008)(86362001)(66946007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?dTA1VlZRYVM3bUhUWU04eEFrREpOeDV4d1YrYXV2S1JzcVE4cnNZcld4RWJH?= =?utf-8?B?ajh4K0dIMmxYSVNZVzhUQ3YzRDlvVkJQUnFKbjN3K1I4UHdJa2VHNUQ5b2F4?= =?utf-8?B?ZzlpREFtOTh4M2lXU0xabmpGMndlSUV6TEVhN21mWlhBTEFnWmNadWRuK0VG?= =?utf-8?B?WHMyUHZFUXRCVjVFbFIzK0FqTHpqaXp6QysrNHc0ekhBOXZScTZGekxQTElE?= =?utf-8?B?YkhjMjV2elJSSHJmYWp1Rm96ZHhaM1lxM0F0Zmk3QXp2Rmx3Nk9NZzZVTFF1?= =?utf-8?B?NWFqK3dFMm9Ubk1xN2M1a01WaUZRL1ZBbjQwVk5Gc0liYWVUQTloakJMOUR4?= =?utf-8?B?ZWFvWi8yanI1Z0g3R0ltcUwyL0s4UGpQSGVUMVVDbkxqVmh6ejR4aGtZR0di?= =?utf-8?B?cTZUWnRZR3dRMkVUcG42YSsxcDg1WTIwaXRLSFBvelZXbGhkSXFYRVJ6ZGVv?= =?utf-8?B?b0dOVjZxZDlrMXVteFNCblFXOXRjNUpQVUNWazRwMnRsV0U5ZjRnd0JxWkJk?= =?utf-8?B?MFZoODZJUGtMN0N3RlVwdS9mVXZJcWdFck40WmpINVkrbnhzWDN5M0k1U2VZ?= =?utf-8?B?Q29Cb285eDY0R2JnaGVwVXNKZDh5RFByMm1jaVJFakhGL2hFRE5EZjhWNkNH?= =?utf-8?B?SkZncTRFcUxxK01LaS9nOUZwa0ljT2NwL1M5SXZwTXJ6VllzcExQczQvRkFq?= =?utf-8?B?VCtROHpjclRIZHo4Z2JyTmFOMXFVU1dRR20rdkRBV01aWU9nS2VXK21PcVF2?= =?utf-8?B?cFMrakxEWTdKbTdRTXJITmQwUzRVWlhXcUt1Q1VsK2RNV1c3RFRIekxyUFph?= =?utf-8?B?Mzk4RDd1TzB5WlZxclloZXMvalNOeG1Zakw2eG8xdnN6d1cvRDJneU1yUnFO?= =?utf-8?B?dzUwNGRZS2J4VnFZbHk0MjZjSDBkWGFsRGZVTGU2M0E3dWNWdDRrN0NHYnlN?= =?utf-8?B?VCtkOHdPaFBHcVZCVm94aEtoajlqdlZZNEZSeUIvQkl1elE4dDNnN0RldTZI?= =?utf-8?B?bnJqeVpSNjZaQ05hR2JndlZzUHJkRVRzUUkvd3lSblBOam80cEh3OTRLUHBi?= =?utf-8?B?TWs3U1FtMlV5MHNVOUJmK1RaL1luODJHbEdYK25ITTZ0am1uaWVDMURLY1Qz?= =?utf-8?B?TXUwQzdHVmlqTEkvYnZLb3NoYW1VRzE3NzVYTmttNlVsN042MTBtQVN0cld6?= =?utf-8?B?VDFUTlVkNWEzdHJvcTJPN2QzNXRqZ2pWZ2dwdVlFSDM5cXJoUTNxQ1N6dWE2?= =?utf-8?B?TjdDYXRjenlMSmZMS3RRUFQrNXhHUzBiaC85ZFB2VFNVVGdhTWlOMlVmdTJL?= =?utf-8?B?eTB4WVF5U2hhekpReXNtMytmbzdPVHhwcmhiYlJKM3ZNL2JkK3BOdmNZM3JH?= =?utf-8?B?VFliY3JoVmxLVDZoV2xuSEVGVmhXMUVsNWJIdTJDVS8wS1BHemY2Nis1Nnk2?= =?utf-8?B?SU95aGY4VUlQQW9UcTZwTmtNUGxqMllLWnJMYitrNlJEQTF1eFdDSUd0RGNH?= =?utf-8?B?L0dnNWxPRTdqSG12L3diQmxoOVdIUlJtalJQbEppektVb2JJcEF6ZDVjV20w?= =?utf-8?B?c0FxSm1wd09VOXlyQzVVWm1oYTBKYUV5dkU1eE8zSVRkUVhkSTlLa0lla3h3?= =?utf-8?B?dTcxRS9seG0wT2ZjM2Q2MlZ3NVNETFY2bTRSZy9qb0xnTFRGUmtmYjBmUTV6?= =?utf-8?B?cStIbGNtcXZ6SWdYUFVVYkNLUGFDQmxSckV3R3RKVzR4cThUa0RMZGxpUzRJ?= =?utf-8?Q?xH33IUcwDCwyXZUxvKjtc7piJJNDwNPrHsX5oqT?= X-MS-Exchange-CrossTenant-Network-Message-Id: fc0491ed-6857-410d-b4a3-08d90405e3fc X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Apr 2021 14:09:19.6948 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: xU8tmMK840JauyIdZNkeTtL9ap38E7qx6/dnIzptd0ZuDNFnz+27PJ2GvYfpTU0UWTgFs1iXLgVBIQSg0ipl+g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR03MB6000 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) Such callbacks will be executed once a EOI is performed by the guest, regardless of whether the interrupts are injected from the vIO-APIC or the vPIC, as ISA IRQs are translated to GSIs and then the corresponding callback is executed at EOI. The vIO-APIC infrastructure for handling EOIs is build on top of the existing vlapic EOI callback functionality, while the vPIC one is handled when writing to the vPIC EOI register. Note that such callbacks need to be registered and de-registered, and that a single GSI can have multiple callbacks associated. That's because GSIs can be level triggered and shared, as that's the case with legacy PCI interrupts shared between several devices. Strictly speaking this is a non-functional change, since there are no users of this new interface introduced by this change. Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Jan Beulich --- Changes since v3: - Make callback take a domain parameter. - Return whether the unregistered callback was found. - Add a comment regarding the result of hvm_gsi_has_callbacks being stable. Changes since v2: - Latch hvm_domain_irq in some functions. - Make domain parameter of hvm_gsi_has_callbacks const. - Add comment about dropping the lock around the hvm_gsi_execute_callbacks call. - Drop change to ioapic_load. Changes since v1: - New in this version. --- xen/arch/x86/hvm/hvm.c | 15 ++++++- xen/arch/x86/hvm/irq.c | 75 +++++++++++++++++++++++++++++++++++ xen/arch/x86/hvm/vioapic.c | 29 +++++++++++--- xen/arch/x86/hvm/vpic.c | 4 ++ xen/include/asm-x86/hvm/irq.h | 21 ++++++++++ 5 files changed, 137 insertions(+), 7 deletions(-) diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index ae37bc434ae..2c4dd1b86f2 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -608,7 +608,7 @@ static int hvm_print_line( =20 int hvm_domain_initialise(struct domain *d) { - unsigned int nr_gsis; + unsigned int nr_gsis, i; int rc; =20 if ( !hvm_enabled ) @@ -656,6 +656,14 @@ int hvm_domain_initialise(struct domain *d) BUILD_BUG_ON(NR_HVM_DOMU_IRQS < NR_ISAIRQS); ASSERT(hvm_domain_irq(d)->nr_gsis >=3D NR_ISAIRQS); =20 + /* Initialize the EOI callback list. */ + hvm_domain_irq(d)->gsi_callbacks =3D xmalloc_array(struct list_head, n= r_gsis); + if ( !hvm_domain_irq(d)->gsi_callbacks ) + goto fail1; + rwlock_init(&hvm_domain_irq(d)->gsi_callbacks_lock); + for ( i =3D 0; i < nr_gsis; i++ ) + INIT_LIST_HEAD(&hvm_domain_irq(d)->gsi_callbacks[i]); + /* need link to containing domain */ d->arch.hvm.pl_time->domain =3D d; =20 @@ -715,6 +723,8 @@ int hvm_domain_initialise(struct domain *d) fail1: if ( is_hardware_domain(d) ) xfree(d->arch.hvm.io_bitmap); + if ( hvm_domain_irq(d) ) + XFREE(hvm_domain_irq(d)->gsi_callbacks); XFREE(d->arch.hvm.params); XFREE(d->arch.hvm.irq); fail0: @@ -777,6 +787,9 @@ void hvm_domain_destroy(struct domain *d) vioapic_deinit(d); =20 XFREE(d->arch.hvm.pl_time); + + if ( hvm_domain_irq(d) ) + XFREE(hvm_domain_irq(d)->gsi_callbacks); XFREE(d->arch.hvm.irq); =20 list_for_each_safe ( ioport_list, tmp, &d->arch.hvm.g2m_ioport_list ) diff --git a/xen/arch/x86/hvm/irq.c b/xen/arch/x86/hvm/irq.c index 38ac5fb6c7c..4825a387bdc 100644 --- a/xen/arch/x86/hvm/irq.c +++ b/xen/arch/x86/hvm/irq.c @@ -595,6 +595,81 @@ int hvm_local_events_need_delivery(struct vcpu *v) return !hvm_interrupt_blocked(v, intack); } =20 +int hvm_gsi_register_callback(struct domain *d, unsigned int gsi, + struct hvm_gsi_eoi_callback *cb) +{ + struct hvm_irq *hvm_irq =3D hvm_domain_irq(d); + + if ( gsi >=3D hvm_irq->nr_gsis ) + { + ASSERT_UNREACHABLE(); + return -EINVAL; + } + + write_lock(&hvm_irq->gsi_callbacks_lock); + list_add(&cb->list, &hvm_irq->gsi_callbacks[gsi]); + write_unlock(&hvm_irq->gsi_callbacks_lock); + + return 0; +} + +int hvm_gsi_unregister_callback(struct domain *d, unsigned int gsi, + struct hvm_gsi_eoi_callback *cb) +{ + struct hvm_irq *hvm_irq =3D hvm_domain_irq(d); + const struct list_head *tmp; + bool found =3D false; + + if ( gsi >=3D hvm_irq->nr_gsis ) + { + ASSERT_UNREACHABLE(); + return -EINVAL; + } + + write_lock(&hvm_irq->gsi_callbacks_lock); + list_for_each ( tmp, &hvm_irq->gsi_callbacks[gsi] ) + if ( tmp =3D=3D &cb->list ) + { + list_del(&cb->list); + found =3D true; + break; + } + write_unlock(&hvm_irq->gsi_callbacks_lock); + + return found ? 0 : -ENOENT; +} + +void hvm_gsi_execute_callbacks(struct domain *d, unsigned int gsi) +{ + struct hvm_irq *hvm_irq =3D hvm_domain_irq(d); + struct hvm_gsi_eoi_callback *cb; + + read_lock(&hvm_irq->gsi_callbacks_lock); + list_for_each_entry ( cb, &hvm_irq->gsi_callbacks[gsi], list ) + cb->callback(d, gsi, cb->data); + read_unlock(&hvm_irq->gsi_callbacks_lock); +} + +bool hvm_gsi_has_callbacks(const struct domain *d, unsigned int gsi) +{ + struct hvm_irq *hvm_irq =3D hvm_domain_irq(d); + bool has_callbacks; + + /* + * Note that by the point the function returns the result could be sta= le, + * however the result is only used to decide whether a callback should= be + * added when injecting a vio-apic vector to the vlapic and all users = of + * the callbacks interface should always register the callback before + * triggering an interrupt. + */ + + read_lock(&hvm_irq->gsi_callbacks_lock); + has_callbacks =3D !list_empty(&hvm_irq->gsi_callbacks[gsi]); + read_unlock(&hvm_irq->gsi_callbacks_lock); + + return has_callbacks; +} + static void irq_dump(struct domain *d) { struct hvm_irq *hvm_irq =3D hvm_domain_irq(d); diff --git a/xen/arch/x86/hvm/vioapic.c b/xen/arch/x86/hvm/vioapic.c index 1c2763fc2bf..0824ede91ab 100644 --- a/xen/arch/x86/hvm/vioapic.c +++ b/xen/arch/x86/hvm/vioapic.c @@ -285,6 +285,7 @@ static void vioapic_write_redirent( ASSERT(prev_level); ASSERT(!top_word); hvm_dpci_eoi(d, gsi); + hvm_gsi_execute_callbacks(d, gsi); } =20 if ( is_hardware_domain(d) && unmasked ) @@ -410,6 +411,7 @@ static void eoi_callback(struct vcpu *v, unsigned int v= ector, void *data) for ( pin =3D 0; pin < vioapic->nr_pins; pin++ ) { union vioapic_redir_entry *ent =3D &vioapic->redirtbl[pin]; + unsigned int gsi =3D vioapic->base_gsi + pin; =20 if ( ent->fields.vector !=3D vector ) continue; @@ -419,13 +421,25 @@ static void eoi_callback(struct vcpu *v, unsigned int= vector, void *data) if ( is_iommu_enabled(d) ) { spin_unlock(&d->arch.hvm.irq_lock); - hvm_dpci_eoi(d, vioapic->base_gsi + pin); + hvm_dpci_eoi(d, gsi); spin_lock(&d->arch.hvm.irq_lock); } =20 + /* + * Callbacks don't expect to be executed with any lock held, so + * drop the lock that protects the vIO-APIC fields from changi= ng. + * + * Note that the redirection entry itself cannot go away, so u= pon + * retaking the lock we only need to avoid making assumptions = on + * redirection entry field values (ie: recheck the IRR field). + */ + spin_unlock(&d->arch.hvm.irq_lock); + hvm_gsi_execute_callbacks(d, gsi); + spin_lock(&d->arch.hvm.irq_lock); + if ( (ent->fields.trig_mode =3D=3D VIOAPIC_LEVEL_TRIG) && !ent->fields.mask && !ent->fields.remote_irr && - hvm_irq->gsi_assert_count[vioapic->base_gsi + pin] ) + hvm_irq->gsi_assert_count[gsi] ) { ent->fields.remote_irr =3D 1; vioapic_deliver(vioapic, pin); @@ -441,7 +455,8 @@ static void ioapic_inj_irq( struct vlapic *target, uint8_t vector, uint8_t trig_mode, - uint8_t delivery_mode) + uint8_t delivery_mode, + bool callback) { HVM_DBG_LOG(DBG_LEVEL_IOAPIC, "irq %d trig %d deliv %d", vector, trig_mode, delivery_mode); @@ -450,7 +465,7 @@ static void ioapic_inj_irq( (delivery_mode =3D=3D dest_LowestPrio)); =20 vlapic_set_irq_callback(target, vector, trig_mode, - trig_mode ? eoi_callback : NULL, NULL); + callback ? eoi_callback : NULL, NULL); } =20 static void vioapic_deliver(struct hvm_vioapic *vioapic, unsigned int pin) @@ -464,6 +479,7 @@ static void vioapic_deliver(struct hvm_vioapic *vioapic= , unsigned int pin) struct vlapic *target; struct vcpu *v; unsigned int irq =3D vioapic->base_gsi + pin; + bool callback =3D trig_mode || hvm_gsi_has_callbacks(d, irq); =20 ASSERT(spin_is_locked(&d->arch.hvm.irq_lock)); =20 @@ -490,7 +506,8 @@ static void vioapic_deliver(struct hvm_vioapic *vioapic= , unsigned int pin) target =3D vlapic_lowest_prio(d, NULL, 0, dest, dest_mode); if ( target !=3D NULL ) { - ioapic_inj_irq(vioapic, target, vector, trig_mode, delivery_mo= de); + ioapic_inj_irq(vioapic, target, vector, trig_mode, delivery_mo= de, + callback); } else { @@ -505,7 +522,7 @@ static void vioapic_deliver(struct hvm_vioapic *vioapic= , unsigned int pin) for_each_vcpu ( d, v ) if ( vlapic_match_dest(vcpu_vlapic(v), NULL, 0, dest, dest_mod= e) ) ioapic_inj_irq(vioapic, vcpu_vlapic(v), vector, trig_mode, - delivery_mode); + delivery_mode, callback); break; =20 case dest_NMI: diff --git a/xen/arch/x86/hvm/vpic.c b/xen/arch/x86/hvm/vpic.c index f465b7f9979..ef668f3668a 100644 --- a/xen/arch/x86/hvm/vpic.c +++ b/xen/arch/x86/hvm/vpic.c @@ -235,6 +235,8 @@ static void vpic_ioport_write( unsigned int pin =3D __scanbit(pending, 8); =20 ASSERT(pin < 8); + hvm_gsi_execute_callbacks(current->domain, + hvm_isa_irq_to_gsi((addr >> 7) ? (pin | 8) : pin)); hvm_dpci_eoi(current->domain, hvm_isa_irq_to_gsi((addr >> 7) ? (pin | 8) : = pin)); __clear_bit(pin, &pending); @@ -285,6 +287,8 @@ static void vpic_ioport_write( /* Release lock and EOI the physical interrupt (if any). */ vpic_update_int_output(vpic); vpic_unlock(vpic); + hvm_gsi_execute_callbacks(current->domain, + hvm_isa_irq_to_gsi((addr >> 7) ? (pin | 8) : pin)); hvm_dpci_eoi(current->domain, hvm_isa_irq_to_gsi((addr >> 7) ? (pin | 8) : = pin)); return; /* bail immediately */ diff --git a/xen/include/asm-x86/hvm/irq.h b/xen/include/asm-x86/hvm/irq.h index c4369ceb7aa..37b8d2ba8fb 100644 --- a/xen/include/asm-x86/hvm/irq.h +++ b/xen/include/asm-x86/hvm/irq.h @@ -21,6 +21,7 @@ #ifndef __ASM_X86_HVM_IRQ_H__ #define __ASM_X86_HVM_IRQ_H__ =20 +#include #include =20 #include @@ -79,6 +80,10 @@ struct hvm_irq { =20 struct hvm_irq_dpci *dpci; =20 + /* List of callbacks for GSI EOI events. Protected by irq_lock. */ + struct list_head *gsi_callbacks; + rwlock_t gsi_callbacks_lock; + /* * Number of wires asserting each GSI. * @@ -137,6 +142,14 @@ struct hvm_gmsi_info { bool posted; /* directly deliver to guest via VT-d PI? */ }; =20 +typedef void hvm_gsi_eoi_callback_t(struct domain *d, unsigned int gsi, + void *data); +struct hvm_gsi_eoi_callback { + hvm_gsi_eoi_callback_t *callback; + void *data; + struct list_head list; +}; + struct hvm_girq_dpci_mapping { struct list_head list; uint8_t bus; @@ -224,4 +237,12 @@ void hvm_set_callback_via(struct domain *d, uint64_t v= ia); struct pirq; bool hvm_domain_use_pirq(const struct domain *, const struct pirq *); =20 +int hvm_gsi_register_callback(struct domain *d, unsigned int gsi, + struct hvm_gsi_eoi_callback *cb); +int hvm_gsi_unregister_callback(struct domain *d, unsigned int gsi, + struct hvm_gsi_eoi_callback *cb); +/* NB: Callbacks are not allowed to modify the registered callback list. */ +void hvm_gsi_execute_callbacks(struct domain *d, unsigned int gsi); +bool hvm_gsi_has_callbacks(const struct domain *d, unsigned int gsi); + #endif /* __ASM_X86_HVM_IRQ_H__ */ --=20 2.30.1 From nobody Tue Apr 30 03:18:07 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1618927790; cv=pass; d=zohomail.com; s=zohoarc; b=V+r4jTlK6RvTisACqUFzK1No4rC955BCHuqNeyAVSim5Y+npOi3Tyw4+Wn1tiGLcOGghz27RxQDdUNGFsou2+hexKXDEgNmVfozCbppq4ypd1C6sOS7dShZFSjvh/HcmW0Z0FaHhIh36UmEvpsURvomwDNdOf3fkZvm4a7FX98Y= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618927790; 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=jpUsr/JnxQIEWmJlrtvNxTXkMm0vHvWvojx4g2pQUcc=; b=DCqXxYrOsmKM65d1XJ0GPrYvGtt4yNofeA+cDxcOp069j18NSrOdhLErOFy/35uJBVeRWNl3D+y4eJVoYxuLL352mrxOtCSTS541V+EkT78yJzTqxYyJZ26l2dD5F6M0A9tPdoSmCxy8HGtYSwGvvIhKoJYu0JBqJO9XgCjff94= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1618927790390445.5452718074216; Tue, 20 Apr 2021 07:09:50 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.113757.216805 (Exim 4.92) (envelope-from ) id 1lYr4H-00014E-8d; Tue, 20 Apr 2021 14:09:33 +0000 Received: by outflank-mailman (output) from mailman id 113757.216805; Tue, 20 Apr 2021 14:09:33 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr4H-000146-4d; Tue, 20 Apr 2021 14:09:33 +0000 Received: by outflank-mailman (input) for mailman id 113757; Tue, 20 Apr 2021 14:09:32 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr4G-0000zG-2V for xen-devel@lists.xenproject.org; Tue, 20 Apr 2021 14:09:32 +0000 Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id b40bcfae-143a-4654-8be5-2c212677886f; Tue, 20 Apr 2021 14:09:29 +0000 (UTC) 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: b40bcfae-143a-4654-8be5-2c212677886f DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1618927769; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=6L0j1iiPQW70GePi9+FEHwvdvq0ZaAVrpOxXuvH7hIQ=; b=byfWbq8+7g7HtmToX2U/qtSB3R7JWJlcji6Sa1xis5YRMY8d2hQTW9+9 IyF5xXek6ctTkqJ8JhJ5/M1mQL9eqWyy2AL5GvzVmLo4GLdkZxy/6sWCl zRDzev50k14YbG2+wXhzI80H/Q7/PVfsCZVTQ5/PcwazkNm+m3whINX46 4=; Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: zhkjseTqvvuYOwR7qST6apGvsxr6Xik8h2qGAqLUuc/iAtQJ3CsL2sFsACEtxUMm66VazzNgaf +/BoNIG2aZxbcwoEjF2sAEo2Y2834eR7/zE3DL7j9cK13rlC+0oHyWR2SdesZmlRdQ28zd65eO u2MxNxBI0Gc4QYoYRnJqSS2h6j/2EojTATrj9m1CKdnlWo9NWVwP9h/6ylVBAO4+Y/KQvbYPK2 KnfZ0PoDb+45F6YU32u7AxquHJvwpKNrdLjmIZx6VUXyJmUCjXJ7MpEKN3Sjq7hN+/OXl60G4U +eo= X-SBRS: 5.2 X-MesageID: 41988265 X-Ironport-Server: esa3.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-HdrOrdr: A9a23:YqHlVaF4bRfW4RtzpLqFMpHXdLJzesId70hD6mlYVQFVfsuEl8 qngfQc0lvOhCwMXWw78OrsBICrR3TA+ZlppbQAJLvKZniChEKEDqFHqbHjzTrpBjHk+odmv5 tIXqBiBLTLYmRSot395GCDfeoI5Pmi3OSWifzFz3FrJDsaCZ1IywtiEA6UHglXaWB9ZaYRL5 aX6spZqzfIQx1+AviTPXUZQ/PF4+TCiZOOW3U7LiQ64wqDhy7A0s+YLzGk2H4lMg9n8PMZ3k Xu1yf44aiitP/T8G6n60bjq654tfGk5t9KBMmngtUYJDP2mm+TFflccozHhh8ZiqWC70srjc ntrn4bTrhOwkKURE6Zi1/M3BTtyzkn4XOK8y7mvVLT5fbXaRh/Lugpv/M8TjLpr3AOkfs57Y dwm0WejJZTBQOoplWE2/H4EytEu2DxnWAvioco/htieLpbUpB9h6oF8nhYFZ8RdRiKk7wPIa 1VAMbQ6O0+SyL9U1np+m1mwNmbVn8uBBuxQk8bpsyP0zRN9UoJtncl+A== X-IronPort-AV: E=Sophos;i="5.82,237,1613451600"; d="scan'208";a="41988265" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MqQtk0CwPztfWf60ynG8Os+hHZs3pZ62aG7RaxLK5Mmq3EYMWfJbO4+0tc1TLZfoQ2iu+SqYtO5SFjZNiJ+zl9G4mrw6SdMzibA4JOHjgYV211dfiP4Frl5tn6yU1a4jPIid4uIsbW0s3MUt/3ZopiPXz3QOx5iMdXkeOlbqhZCGHEhpF/qStGd6Ic1FlntcQGR35JftIEmpwBjvrfJVyCncn+wkbrRZ2KuBso5klj8PiB+uQ6OZlFvQNZ7p+kDe0JoBNFOopIa0lUAQqmmOsdXVrugZQTzUnQepuxcRRl0KgoPvHhaaWdv2eFwrKLJYBK0AjNdj5t0hsWbZ6e+ueA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jpUsr/JnxQIEWmJlrtvNxTXkMm0vHvWvojx4g2pQUcc=; b=MIYlEK2t3m7btstQBZDo03dUwFN6brqNUK1zyp/FlkhtJXyBbDwvKfP0OlD9w+SM2OPlCacyzcd5WbiBxGEVGQS3DswGT4ABWIviP7wszuTWLAm416lRZ6saI+/tjMdr5yeqMhf91iu9sYRYamJLKmOqE/0bnwuHaSRQNd/+sY1zQvO4KeUMfkAPdWbsN7LQWEj1aEvdguO/Yd0tp8yOEPzKrhEd/n/4PyKRi1pBkwKMyYzTmYUq1xkpxSDN4MY7rxD6pylDJHxhBvQJY/wYB4jx/XuEYbrx6O0EdY1ci3pvHbeu5yGgd3RsXwVL0E22cwJAashi3BP6GeOPt/SPog== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jpUsr/JnxQIEWmJlrtvNxTXkMm0vHvWvojx4g2pQUcc=; b=LUceU/r6nVW8V3uurI3Cl57VJTvQaSvY6BRauUYHaaXP/8Pm3jqI0O5FJHvmY+DKS5hOoez7fnoE9RyHs8kHr9mG+NqTxabZbNkSKaaolBzg3EXy8zeyUT2LoYGXdU/Yd/n+PF37LVjOtIKVzZ4kGLMoMAZgAYvqljLUXSCr2GY= From: Roger Pau Monne To: CC: Roger Pau Monne , Jan Beulich , Paul Durrant Subject: [PATCH v4 06/12] x86/dpci: move code Date: Tue, 20 Apr 2021 16:07:17 +0200 Message-ID: <20210420140723.65321-7-roger.pau@citrix.com> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210420140723.65321-1-roger.pau@citrix.com> References: <20210420140723.65321-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR2P264CA0071.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:31::35) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cf3ad0de-373d-4716-2073-08d90405e7b8 X-MS-TrafficTypeDiagnostic: DM4PR03MB6000: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7691; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1tLRgrbaX5cc9IRLzM9BwJzsahNRZsJ93LOUczHqIDBGOJa+BvHfmC1+kzEU2McxOGFBGABV0Jj0wB+0cyLIyk/b56zVywMQSjNJqItUXqPiQzp+QinfLjB200E6Uq+bsXfODGVn9jIeDk4AFDJIQmuABW3iHEWUpai2qY5oDNs7U8yuIhbNHZ/lENosKAlbiQ0D+5RimtyPJiv+GQfWNEESuL/WrSGBeGAtkw2/CYfKdJSGVw309kQ4ib/22x6d1WfNiq1j/kvYRaZUyw8rPLmeBhBOdvQg70HkwmFFIROU5q3GsjVkYA7V8mIzWglbEfPA/imQnJU2ExxRtuMmGgVEdePzsHExEo6qkOc7BNzLQugyzpAWcBbJdJ3mIxDFE0PstLI+h6KEPbH+zxx1HA7FItT1SUIvZG+rSAga3co8KnXHvsxP94n7na10NAXmLVFwkhdP/9uvNdmsYOSo+SqVV4JrGTvuExnE5iFdw1RNUvaMz4qAGVjv2aXsubBVNn0yUTsWOb/xsAg61OIePa+P354eV74sr8PSoagcU07k5FLGvZDxmt7daJtrVRJuQX14DIWOx6mw248FNKU3RfJfmq5g5uS8VYL9mo+kXAg= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(396003)(376002)(39850400004)(136003)(366004)(6916009)(83380400001)(4326008)(38100700002)(16526019)(36756003)(316002)(956004)(6486002)(2616005)(6496006)(478600001)(8676002)(26005)(186003)(5660300002)(8936002)(54906003)(2906002)(6666004)(66476007)(1076003)(66556008)(86362001)(66946007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?dG5jaXIzMzVhYXVBUW5WRnREVEl3VnBEWU8wYjJESG9PQWk5bk9UcGNZUk0y?= =?utf-8?B?MnA5ejgrOVJ4VnFhU1dRczgzNk1FM1V0eGl1V3MrZHBKNVhHZHVubk05c21a?= =?utf-8?B?dTdMOTlMYWZhYVNpOHdsLzg1YXQzY2lPYlB0NFhaVC9PT1V2SzIzVlNUSWxv?= =?utf-8?B?bXZ6WjJKUVFLTmpCeHcxTmZYQlplamp3dzFlbG1kZnlhSk82K3NaVURkbDRj?= =?utf-8?B?blJPQktZbExkSys3Zmk3YXhQbGhaOHVRbkxvK1ZLcHI0RjgxRmlOUWk4SC83?= =?utf-8?B?QjNCVFhUVFNlOGwvQTIzSkJlNk5sRmluNXlxbDBmZkxkNTNseGxIOXhSZzdK?= =?utf-8?B?eWdqdGRDWVliT283OXptSmF3clZOTi9QQzF2amp0RVlyejFVaGNQaWFFZ0tO?= =?utf-8?B?QXNHMm00R21JUnB1UUdKUEdFenIyMlNySWtyWWtvamU3ZjZmYXVzZlhwZE9l?= =?utf-8?B?QUpVRFRueEtLNmdFOEFPNW9mczhtSkJVYkdlamRtaGZJakYxV0dMNmFwVXp5?= =?utf-8?B?U1g0bUNxV04vWmNQMlFHN2lUNWhJbjF4MjZ6YVMvUlRhTVBkRWtNTXdRcnVr?= =?utf-8?B?QkI4OFVIZEVaQ1NiZGtsdDRDMENwUm96RVAwRnlTRGhva3JkRHhJM2M1VUNG?= =?utf-8?B?M1NNM0s5dWlOZk01VlA1YmdOSzY4Z1JuTWF0NnN5dis4WWx6cFBYRFVyQkJI?= =?utf-8?B?S1kxeUUzY3VoSjE5YVRFTkFjQUI0aG40RmtVSFVQMU1TNEdOOEZwTmY1ME93?= =?utf-8?B?Z1l3SkVQdGZmSTBNcDBoOHFaNGRmT2xFaEYvK0JGeTV0NmdJTmNMeVA1Z1hl?= =?utf-8?B?NGMwUDYwaWRUK3p0Z0FmZTMrOUR4azhPNWlvU2ZORktidVllSnphVm43a3hV?= =?utf-8?B?WWxkN1BzY2NmV1hNSXBQVk5TREJxMVl1NFBnQXVITmJYMkVYK1lGb1BXNHRh?= =?utf-8?B?ckdOTk9TRk4xckZMakU1SlF1VVljR3g3QnJJNXltRDZkb2w1UStSSFFld09H?= =?utf-8?B?WDVKZkd6MGNSNXpVUjFlNVVEVW5Dam1ML1BsaUdDV003RzE5czVTME9Ua2pz?= =?utf-8?B?ZFVrRkJZM0tiNlpHbStGdU80MGd5cXhCVmRKY1huMWRDa2sybHZMeHhpVXdk?= =?utf-8?B?emdyVXVMZElkNTNHeElWdWphelZqUURGKy92YnR5ZGRmSkxCOVh3c01PMVZB?= =?utf-8?B?RjBLa3htU1Y3S3NQM0ZvUUVycXZjS0xhblBvdmUyZFc5OEU2Nk9zL3RSQU1n?= =?utf-8?B?RzFsVWZLbU42YlJvZUtRVTV4NElzaDZiRTNEUG5wOEx4NXFNeHMzdjhTUE8z?= =?utf-8?B?YitRYXhqVVpUVTJPRmdpY1pXMlFEMnhTekIwL3JjeFpUNGlTMXJDTE92Nlhi?= =?utf-8?B?OWNJYysrVmd5YXhFYUp2dTAwSHQrUGd3TXhPcHh3UU9KdkpqNG1wb2NSbGZU?= =?utf-8?B?dHl2cG9YeHZHcmZMd25kMHduUkhMVkFzV0pLSG5mZHdXakoxWlk4aHNrZUpx?= =?utf-8?B?dzJ2MlVPVVJjb0RVbzhQampXNWdxeS9idHF6SzRLcWJ1TWd0YzBmRWJjTlhy?= =?utf-8?B?dWhWL0pYVEZLMXJKVHdzZVFUbjhoV2dJQnVDRFVoOTJYdWFiSi9LUlJHRlJ0?= =?utf-8?B?ZStxanRnK3I1eExqWlFubG50eC9yekYycXNQcVE2UjdmMjFFUXhKRWdMQ3Rj?= =?utf-8?B?ZVhYeGpPaWxIbksxclZ3Uy91WVZtYkJJSWF1MDhzT1RLUHhqai9yZVU1Slll?= =?utf-8?Q?n8N7ctH4qhEPhkULMpaZUzPIPy4d9H+T01Lr5lt?= X-MS-Exchange-CrossTenant-Network-Message-Id: cf3ad0de-373d-4716-2073-08d90405e7b8 X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Apr 2021 14:09:25.9443 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 67TMlg6cG6+8pgAyISVinxZF4Pg8j8pCqtTngRllmZbVZSteeG3WnfHX+IvqMskAgIp4D8ywzBZ9clOALq6CXQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR03MB6000 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) This is code movement in order to simply further changes. No functional change intended. Signed-off-by: Roger Pau Monn=C3=A9 Acked-by: Jan Beulich --- Changes since v2: - Drop one of the leading underscores from __hvm_dpci_eoi. Changes since v1: - New in this version. --- xen/drivers/passthrough/x86/hvm.c | 162 +++++++++++++++--------------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/xen/drivers/passthrough/x86/hvm.c b/xen/drivers/passthrough/x8= 6/hvm.c index 8f78c0935b9..0db26e5dbb2 100644 --- a/xen/drivers/passthrough/x86/hvm.c +++ b/xen/drivers/passthrough/x86/hvm.c @@ -205,6 +205,87 @@ static struct vcpu *vector_hashing_dest(const struct d= omain *d, return dest; } =20 +static void hvm_pirq_eoi(struct pirq *pirq) +{ + struct hvm_pirq_dpci *pirq_dpci; + + if ( !pirq ) + { + ASSERT_UNREACHABLE(); + return; + } + + pirq_dpci =3D pirq_dpci(pirq); + + /* + * No need to get vector lock for timer + * since interrupt is still not EOIed + */ + if ( --pirq_dpci->pending || + /* When the interrupt source is MSI no Ack should be performed. */ + (pirq_dpci->flags & HVM_IRQ_DPCI_TRANSLATE) ) + return; + + pirq_guest_eoi(pirq); +} + +static void __hvm_dpci_eoi(struct domain *d, + const struct hvm_girq_dpci_mapping *girq) +{ + struct pirq *pirq =3D pirq_info(d, girq->machine_gsi); + + if ( !hvm_domain_use_pirq(d, pirq) ) + hvm_pci_intx_deassert(d, girq->device, girq->intx); + + hvm_pirq_eoi(pirq); +} + +static void hvm_gsi_eoi(struct domain *d, unsigned int gsi) +{ + struct pirq *pirq =3D pirq_info(d, gsi); + + /* Check if GSI is actually mapped. */ + if ( !pirq_dpci(pirq) ) + return; + + hvm_gsi_deassert(d, gsi); + hvm_pirq_eoi(pirq); +} + +void hvm_dpci_eoi(struct domain *d, unsigned int guest_gsi) +{ + const struct hvm_irq_dpci *hvm_irq_dpci; + const struct hvm_girq_dpci_mapping *girq; + + if ( !is_iommu_enabled(d) ) + return; + + if ( is_hardware_domain(d) ) + { + spin_lock(&d->event_lock); + hvm_gsi_eoi(d, guest_gsi); + goto unlock; + } + + if ( guest_gsi < NR_ISAIRQS ) + { + hvm_dpci_isairq_eoi(d, guest_gsi); + return; + } + + spin_lock(&d->event_lock); + hvm_irq_dpci =3D domain_get_irq_dpci(d); + + if ( !hvm_irq_dpci ) + goto unlock; + + list_for_each_entry ( girq, &hvm_irq_dpci->girq[guest_gsi], list ) + __hvm_dpci_eoi(d, girq); + +unlock: + spin_unlock(&d->event_lock); +} + int pt_irq_create_bind( struct domain *d, const struct xen_domctl_bind_pt_irq *pt_irq_bind) { @@ -860,87 +941,6 @@ static void hvm_dirq_assist(struct domain *d, struct h= vm_pirq_dpci *pirq_dpci) spin_unlock(&d->event_lock); } =20 -static void hvm_pirq_eoi(struct pirq *pirq) -{ - struct hvm_pirq_dpci *pirq_dpci; - - if ( !pirq ) - { - ASSERT_UNREACHABLE(); - return; - } - - pirq_dpci =3D pirq_dpci(pirq); - - /* - * No need to get vector lock for timer - * since interrupt is still not EOIed - */ - if ( --pirq_dpci->pending || - /* When the interrupt source is MSI no Ack should be performed. */ - (pirq_dpci->flags & HVM_IRQ_DPCI_TRANSLATE) ) - return; - - pirq_guest_eoi(pirq); -} - -static void __hvm_dpci_eoi(struct domain *d, - const struct hvm_girq_dpci_mapping *girq) -{ - struct pirq *pirq =3D pirq_info(d, girq->machine_gsi); - - if ( !hvm_domain_use_pirq(d, pirq) ) - hvm_pci_intx_deassert(d, girq->device, girq->intx); - - hvm_pirq_eoi(pirq); -} - -static void hvm_gsi_eoi(struct domain *d, unsigned int gsi) -{ - struct pirq *pirq =3D pirq_info(d, gsi); - - /* Check if GSI is actually mapped. */ - if ( !pirq_dpci(pirq) ) - return; - - hvm_gsi_deassert(d, gsi); - hvm_pirq_eoi(pirq); -} - -void hvm_dpci_eoi(struct domain *d, unsigned int guest_gsi) -{ - const struct hvm_irq_dpci *hvm_irq_dpci; - const struct hvm_girq_dpci_mapping *girq; - - if ( !is_iommu_enabled(d) ) - return; - - if ( is_hardware_domain(d) ) - { - spin_lock(&d->event_lock); - hvm_gsi_eoi(d, guest_gsi); - goto unlock; - } - - if ( guest_gsi < NR_ISAIRQS ) - { - hvm_dpci_isairq_eoi(d, guest_gsi); - return; - } - - spin_lock(&d->event_lock); - hvm_irq_dpci =3D domain_get_irq_dpci(d); - - if ( !hvm_irq_dpci ) - goto unlock; - - list_for_each_entry ( girq, &hvm_irq_dpci->girq[guest_gsi], list ) - __hvm_dpci_eoi(d, girq); - -unlock: - spin_unlock(&d->event_lock); -} - static int pci_clean_dpci_irq(struct domain *d, struct hvm_pirq_dpci *pirq_dpci, void *arg) { --=20 2.30.1 From nobody Tue Apr 30 03:18:07 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1618927797; cv=pass; d=zohomail.com; s=zohoarc; b=XTG6Ke8zZKF3X9uGbN1LkRJzhh6fXzwZtEhRFw6k9Cb+6t390WyBUjJySfPLgUYNexBQWdeJYaSJWSfq5++L6DISi1L3jl+Nvi7XXC6BvDy5avxmhU10DSOXSl8kR+NQ0jFzyFBGB4Jw0jLedyat8f8qAFtvSMApSS6T74/Lt3o= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618927797; 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=9LDC2BNSgnovQYjkqYHd80+wCvWWCbTTsmR77iMhVkU=; b=Xi4RsWF1vRU0dzIR6CE4OVxMeerh1+848Bt0wpE38VaU168lC9J83QRCIRfp854HgaJkg2YUgcSWA8lcHC1Ud0oSlw/Uv2cv6Cwo7q5AoSX7jZPOh6nynZMiqg8UIMoKvlGNdW92oU4V2dj3gjqXZNVZTTAd/yOGPIjJcfZnN+A= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1618927797078253.36895506517862; Tue, 20 Apr 2021 07:09:57 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.113760.216817 (Exim 4.92) (envelope-from ) id 1lYr4M-00019k-Qb; Tue, 20 Apr 2021 14:09:38 +0000 Received: by outflank-mailman (output) from mailman id 113760.216817; Tue, 20 Apr 2021 14:09:38 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr4M-00019Z-MD; Tue, 20 Apr 2021 14:09:38 +0000 Received: by outflank-mailman (input) for mailman id 113760; Tue, 20 Apr 2021 14:09:37 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr4L-00018c-CV for xen-devel@lists.xenproject.org; Tue, 20 Apr 2021 14:09:37 +0000 Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id fa8880a2-c10a-48e9-9912-2d4ce3aef538; Tue, 20 Apr 2021 14:09:36 +0000 (UTC) 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: fa8880a2-c10a-48e9-9912-2d4ce3aef538 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1618927775; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=d9eNGlxbpZj4dvsAgZL3dz33aHlsUcCZjL2r8PLyJfA=; b=AJ9eXkfTA3lgXWB+UvZPYfSSwayMN8lPIwW0Yl1ofwiu8wN8opfV9t1Q ptr6iimcwtdSgPQJ7kTbFhXwF2RZXF5E1LaViLvq5qVU5+sgmoZMf9eos O00zfOwuBxbApB9HtBxT/Ydgz5dYo+GCpzsst9gOIdwBtQs1JfVgGkodG c=; Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: YcNpxn66rI5n6ipxBlSKJWsGAeHcoyOZ2njU+wNodx3vMrVqQinO/t+lAfHuZC7/GVr4JAaPgQ cNgtjEGvM/Ut8t5dtN3gndsKBGIEuy4NrOMgbr/qFus42P47UjrkBbcdGSm1depn8CkUVmI7e0 sVxShpQibMSymDA5/nVORwkjCH8j6UoPLcm8mXiIFxKadeUtQpLqKPSwd1vm7RPk1uzSUjgxmO gW2sjNvKDwuy72ZMDRj8tyxt24Gz5Cxs11vfbOHXhFWabWrOXXg6Qhd4rkhyUDBnOw0n9FA7Ft +DQ= X-SBRS: 5.2 X-MesageID: 42368680 X-Ironport-Server: esa1.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-HdrOrdr: A9a23:6LMseKy1ofbJmcVjq4O5KrPxqe4kLtp033Aq2lEZdDV8Sebdv9 yynfgdyB//gCsQXnZlotybJKycWxrnmqJdybI6eZOvRhPvtmftFoFt6oP+3ybtcheTysd07o 0lSaR3DbTLYGRSpdrm4QW+DtYryMSG9qftvuvF03JxV2hRCp1IxS0RMHf+LmRdQg5aCZ0lUK eG7s1cqDa6PVgRZMK3Bn4KNtKz2+HjvpTgfBIAGlob+BCD5AnYlYLSPjq5+lMlUz1Jyao/6m StqWLEz4iqrv3T8G6760b99JJT8eGRqOdrJMvJscQNLyWptwDAXvUbZ5SnnBQY5N6i80wrlt 6kmWZRA+1W52nKdm+45TvBsjOQqQoG0HPpxV+GjXaLm6WQL1hbeqkx975xSRfX51Etu9txys twrhiknqFaEA/am2DF78XIPisa53acm2YokuIYkhVkIOwjQYJWxLZvmX99IdMrGSL3750fC+ 9+DM3Qz+Y+SyLlU1np+kZo29CiRXI1A1OvRVUDoNWc13xskGl+1FZw/r1Sol4wsLYGD7VU7e XNNapl0JlIU88tdKp4QMMMW9G+BGDhSQ/FWVjibmjPJeUiATbgupT36LI66KWBY5oT1qY/n5 zHTRdxqXMyU1iGM7zP4LR7tjT2BEmtVzXkzc9To7JjvKfnebbtOSqfDHgzjsqbpekFCMGzYY fzBLtmR9vYaUf+E4dA2APzH7NIL2MFbcETstEnH32UpMbmLZDrq/z7fP7fKKGFK0dnZkrPRl 84GBTjLsRJ6U6mHlXihgLKZn/rckvjubJ8eZKqutQ7+cwoDMlhowIVgVO26oWgMjtZqJE7e0 N4PffCmqO/rm+mwHbQ4wxSS15gJ3cQxI+lf2JBpAcMPU+xW60Eoc+jdWdb22bCARNjUcXMEk p6q05s8ay6a7ycrBpSRe6PAya/tT8+tXiKR5ATlumo/sH+YK41CZ4gRehWDgXEFxt8nC5ws2 ddYAo4RkvSfwmeypmNvdgxPqXyZtN8iACkLYp/snTEr3iRoskpWz8mRTK0aNWWhgwvXjJQoV V0/8Yk8f29sAfqDVF6rPUzMVVKZmjSJL5dFgyKaL9Zna3RdBhqQX2HgiGbjB8PanPnnn9i9V DJHGmxQ7XmE1BdsndX3uLR/FR4en60UmhwZnp52LcNXljuizJW66umd6Cz22yeZh8+2ekbKi jCeiZXCBhp3cqL2BmcnyuiGX0qyo41BPHUCK0uftjoqzWQAbzNsZtDM+5f/Z5jOtyrj/QCVv iHfRSJaBz/EOEk1mWu1wAYERgxjENht/zm2BfotjflmFE+BOffO1RgSfUwJcqG423tWvaP19 FYgLsOzJ+NG1S0TuTD76fdKwNnAFf0h0WdSukzs5Bava4ortJIbtHmeAqN8EsC5Qk0Kcf/qV gXT6t66o3QI4MHRb1mRwtpun4S0OmVJEQlsgbKEvYzUFEkgXjcJc6I6dPz2M0SK3zEgAPxPF WFmhcth8vtbm+m1bQADbg3LnkTQE8g6G569OfqTfybNCyaM8VC9kG9KHmzbft0T7WEA6wZql Jf78uTl+GaMwr+1wa4h0o3Hot+t0KmS9i1GgSCBKph9MG7I02Fhu+S2/GI5Q2HAAeTWgA/no 1KdUsZc8RFhH0DteQMo1ePY52yhFkknVtY6SxgjXj31OGdkT7mIX0= X-IronPort-AV: E=Sophos;i="5.82,237,1613451600"; d="scan'208";a="42368680" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bf8QqkI3NF3x9Si+1E9bN2tKcTOwYP5SrbBTvOBSAXjOGMxd6mKsd7/4+IT3OnCvf9ybF1n/19c/bs8ZV5lsg+GdTa4lSiKPwLPQXUdn3LR1DlAcokRNIm8BlpE+g5bOqkNT0oS1eRuKB9aT2aXuHpC9Tl35CEFPmuzox0O2cOpEvKfH5y5MCEvaO8lilNvnJoWKZ/rCJZx8HxPCGP6TZkYSoP3IsPjkzNFqDjSm74l+/6k0j8gn91fYrhMlF2NlNc7WehVM5W7lUZtDq1b+6ArxARI2KoCOr2EoYE2XQZ+T29QBi727smeg3744XXpstKjiIAj/4vXakq4V5iU2zA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9LDC2BNSgnovQYjkqYHd80+wCvWWCbTTsmR77iMhVkU=; b=m3OaoOD40xsbQJsfzwIi+COsnP4PCBBlTz+vfq7Q33yd4C9DPJ882ZrCuGj72bsw1uoJv+l9QtGmq9yTC3jjAStBiYqsNpLDXXoZG3Sof2a/ulXYpK7jm0bMmQ0ytU1nDU97Kks1DZhdhYd5hAjp0SxHBojFFuN8ysuyLfgaIqbGZ/zRP42Slfjing6ZWB/8yPYrl2b9T7muZy1TWLjzzFYfgUv8ec3hEqIfR4YY/HHNKSo5TYoj0bpoOY6vR9l3biPJSarNUU5jTa+SwYUoZgm/ywxiyGWG8sLHDkZfQUumOciVWYNnYXrBMy41iMVmZVT5L8MEt4IkySfFGJB96Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9LDC2BNSgnovQYjkqYHd80+wCvWWCbTTsmR77iMhVkU=; b=su2x3RlkaoacSzdXOx9xEFKk+lH6aSYaJfJExaJ/DETbHIcpJ9ziRt0GWJPdgXottj9+T5bjDQ8iy//AHuD1Mabr3B9TvS5uESeVCySPeOHZ1qIGgSp4dpyH/6gCuCfqquedScxmabZyN8/A/0P00KUWV6SEttQqaOTkxgmW/74= From: Roger Pau Monne To: CC: Roger Pau Monne , Jan Beulich , Andrew Cooper , Wei Liu , Paul Durrant Subject: [PATCH v4 07/12] x86/dpci: switch to use a GSI EOI callback Date: Tue, 20 Apr 2021 16:07:18 +0200 Message-ID: <20210420140723.65321-8-roger.pau@citrix.com> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210420140723.65321-1-roger.pau@citrix.com> References: <20210420140723.65321-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MRXP264CA0031.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:14::19) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4e8c01a7-2d04-4cb1-bcd4-08d90405ec2c X-MS-TrafficTypeDiagnostic: DM4PR03MB6000: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3513; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: FTHa6dtomBoqdQQgHKgYQ1XPOPRbjDiC15HFubPFpGP7xie/FOEZQ3jXeMgWD0JHDOUG8f1NSJEi+q8S7Qam7ojZNSJCskxPFQYMofyY4nd6TCbVW2g2LpT1Mg0LFZ40zqLOmkZHSdDmsL0LiEjRwS/dRkmuQQdy85fJAC2mpQbRiVc5qaT3MPe6B23y9qZDVWpoe/L8cd1+ECbXuKTnAotXPKaRsEhXqbxuxUaYTkPjmyuWpD/k95NrgPRymQUiiXbM0s4c3nNNZZzM8ru0J1omoRfaMqgihJucNpYQADhZV9Rgj0kYGipE4X0rT7TCt0/dt7fRWhNg/HuEHhJkTO92eQ3/y09FJXzBDKMtgWFstTbKedGootJus8UfcAaOZY0nTXs3R6jFnzV4jA6OLLCi+di9NYj/zH9vdXChoptV+/H9dg1PeA4Nk5ukLMzgTspmtZt68v/ccVRj6u2+wjQ4EPpZOVlqwgGBQY+4HKRDpRq0VzrRk6nYLklTKVxRo6VnLRrU6dYa8llM9Th6tLHPJSbs8Wgs/CVEXY37PFv915I5amvplkCEXCXEsjdyCh4wlXTiLGQYoaYt41BQCg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(396003)(376002)(39850400004)(136003)(366004)(6916009)(83380400001)(4326008)(38100700002)(16526019)(36756003)(316002)(956004)(6486002)(2616005)(6496006)(478600001)(8676002)(26005)(186003)(5660300002)(8936002)(54906003)(2906002)(6666004)(66476007)(1076003)(66556008)(86362001)(66946007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?T05peXVKRXk3STIyQ3VBUGNwN1ZmUUJLSnhvRmNMaWNOaDc1TEs2b2tOWVhp?= =?utf-8?B?WDd3cmtNQzRBUWRvVmFrcGZwMHd0djhtbmJNdmJJNFNDc2pneDMwTFMyd2VC?= =?utf-8?B?aTRXTGVPaW1HM2FKVEZyaEpraFVDaDBZaWg2VlRVUnd6WjBtUkRmM0E2cW9K?= =?utf-8?B?WWoxVFlzSjhQMW9xbVBSeGFxT21qRFF0eE94aWRzN09BZGc4T3dESFRlcC9m?= =?utf-8?B?Y1FhYU8zTjFEZHRnaVB0Uk92NmtqNXkwNjduWnlpNWI5NUNtUitUT1NOc3Jx?= =?utf-8?B?RDNQUktDNzM1dU5iRmVvQzMzdHA4dFZIVU80bURsTjJMTE9NZXlDMlV2WTJw?= =?utf-8?B?K0dGYjY1SjdTTDFIU1dKNTRISjJGWkVMOUE3RmhLK3ZGTXd6TUx0VmloUEp4?= =?utf-8?B?NXY5WEpqcTJ0WEE1ek5nVVpzRncyM05UeXBWMWNUMTBIY3JkRmRmVStHcEFF?= =?utf-8?B?SHUxTWltU0ZMck9ESWc4QkJxTDBHS3hpNkhzOExzdFUyNU95Q056bVBtRzhZ?= =?utf-8?B?ODRicFlRekxtUVlJRjk3QWFXc3l6bmVLVnprbmFKRHNKdFZWUkExaFVMYnVh?= =?utf-8?B?RURPTXNCSldHcHZzZHdCaGdmd1o3dnFzQUx1emlXMTlJRTJaZjA4c29WYVVI?= =?utf-8?B?eUVjZHBtdkk5MXB1czNBYkppdU9DMkNnbU9zWkVqOEM2Mzhzc0ZobFpFS3BU?= =?utf-8?B?b0dSUktUTTRkenFsQTdNZ3FmajJiR1B3ZDJGeENLL0VPczg4emdzQzhtN3RP?= =?utf-8?B?UkJGOXdDYURBdGNJS0hnd2xDdXNaN1JhQlQrb3JHbDZ0ZmJzT2ZTNThkald3?= =?utf-8?B?aW5sWWllbUpLSUlyZm9zNDJSK0xtNFlsWlE1cjZUY25wYlFSZGRydlhBaWhZ?= =?utf-8?B?NnM3SVBHMWQ2QnFNREUvVTVkWi9kL1B5a1pMNVoyVW9ZTC9jMmo3Yi9yMFQ0?= =?utf-8?B?QXI5TEpNblMyU3JQS0J0Y1YrWExteEhJbkFaVGlqdVpuQjNHOWVJS0IyaVFx?= =?utf-8?B?TVhzejZ2VnJmT3Z5allvRDJ2SEsrSjBKMG1zWk9jSHRCbllPbUtxTzB1ZTNl?= =?utf-8?B?QXpOS0VSQUF6SGJXWTZsRVRNb0syWnpJQ2FEdTVIcml1YWd5cXVleisvM1BM?= =?utf-8?B?WjN5aEVSQW9VRjF2Ti8vaWFCUjRUQXIxNXpka01YZjRUcmVVRG1yc1hMUWl5?= =?utf-8?B?bHlHcTVpZUVaaCtaZDBFekZ0SmFFR2pVZnFsZXZ0eWViaUxrSTdnQ3ZZZlFz?= =?utf-8?B?cDBLTG5kY2VEZmhER0pjNVI3dG14MUs1U0duQlhyeXhpa1lKTFcrU1RUcTBK?= =?utf-8?B?Ni9rK0dzRkZLVVRkeE1XS2gzMURIaDZISjJnemw0VG15dHFqMUNxcWVSQ21E?= =?utf-8?B?QlR5WWprellvSTFzSXpoc0lFek5zdWdyd3VlK2lGeTRjcG9ROFUrWlczRmtJ?= =?utf-8?B?blpwc3BaTkdnc1JBRXRXNGN2RnRsZ1V6cjhqMVVvWXhTSDVZckthSmZ6b0Yr?= =?utf-8?B?M1FIOS9VYkl0N2hvcDhrTC9QVzRnMDBWdDZLdEhrbis0TzhOUGc0aUIzUzdj?= =?utf-8?B?Q0ErMVEwbGVSUGlDLzZGLzZtc0EwV21PMkVzZlpWc0xHM0J6SXZ2dDZ2a1BN?= =?utf-8?B?SnVaZEFObFZMQVZtbzBhVGlkc29JK2I5UGMxUW9DcWx5b3BvQzZGZHIreHZO?= =?utf-8?B?T3YycHhtV1ovaGlqakt2U0hhTkxJNEpIcThKL2VBZi90K1k2eGUxV1ZRdWNv?= =?utf-8?Q?bQfvgEZhpPUbwuF01HtG3Lj4S1SvbFmY4Ms+4+C?= X-MS-Exchange-CrossTenant-Network-Message-Id: 4e8c01a7-2d04-4cb1-bcd4-08d90405ec2c X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Apr 2021 14:09:33.4513 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: sLaRwYHRF6Rve7G854DwtKixVif0F5nsK5ReHM39XHhVepgRqDqPP3/Yui7ppyeu4Yai1i7qa1DdnNM0dP+KNQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR03MB6000 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) Switch the dpci GSI EOI callback hooks to use the newly introduced generic callback functionality, and remove the custom dpci calls found on the vPIC and vIO-APIC implementations. Signed-off-by: Roger Pau Monn=C3=A9 --- Changes since v3: - Print a warning message if the EOI callback cannot be unregistered. Changes since v2: - Avoid leaking the allocated callback on error paths of pt_irq_create_bind. Changes since v1: - New in this version. --- xen/arch/x86/hvm/vioapic.c | 8 ----- xen/arch/x86/hvm/vpic.c | 4 --- xen/drivers/passthrough/x86/hvm.c | 57 ++++++++++++++++++++++++++++--- xen/include/asm-x86/hvm/io.h | 1 - xen/include/asm-x86/hvm/irq.h | 1 + 5 files changed, 54 insertions(+), 17 deletions(-) diff --git a/xen/arch/x86/hvm/vioapic.c b/xen/arch/x86/hvm/vioapic.c index 0824ede91ab..4f844965423 100644 --- a/xen/arch/x86/hvm/vioapic.c +++ b/xen/arch/x86/hvm/vioapic.c @@ -284,7 +284,6 @@ static void vioapic_write_redirent( */ ASSERT(prev_level); ASSERT(!top_word); - hvm_dpci_eoi(d, gsi); hvm_gsi_execute_callbacks(d, gsi); } =20 @@ -418,13 +417,6 @@ static void eoi_callback(struct vcpu *v, unsigned int = vector, void *data) =20 ent->fields.remote_irr =3D 0; =20 - if ( is_iommu_enabled(d) ) - { - spin_unlock(&d->arch.hvm.irq_lock); - hvm_dpci_eoi(d, gsi); - spin_lock(&d->arch.hvm.irq_lock); - } - /* * Callbacks don't expect to be executed with any lock held, so * drop the lock that protects the vIO-APIC fields from changi= ng. diff --git a/xen/arch/x86/hvm/vpic.c b/xen/arch/x86/hvm/vpic.c index ef668f3668a..60d6740f69a 100644 --- a/xen/arch/x86/hvm/vpic.c +++ b/xen/arch/x86/hvm/vpic.c @@ -237,8 +237,6 @@ static void vpic_ioport_write( ASSERT(pin < 8); hvm_gsi_execute_callbacks(current->domain, hvm_isa_irq_to_gsi((addr >> 7) ? (pin | 8) : pin)); - hvm_dpci_eoi(current->domain, - hvm_isa_irq_to_gsi((addr >> 7) ? (pin | 8) : = pin)); __clear_bit(pin, &pending); } return; @@ -289,8 +287,6 @@ static void vpic_ioport_write( vpic_unlock(vpic); hvm_gsi_execute_callbacks(current->domain, hvm_isa_irq_to_gsi((addr >> 7) ? (pin | 8) : pin)); - hvm_dpci_eoi(current->domain, - hvm_isa_irq_to_gsi((addr >> 7) ? (pin | 8) : = pin)); return; /* bail immediately */ case 6: /* Set Priority */ vpic->priority_add =3D (val + 1) & 7; diff --git a/xen/drivers/passthrough/x86/hvm.c b/xen/drivers/passthrough/x8= 6/hvm.c index 0db26e5dbb2..02e027cff8c 100644 --- a/xen/drivers/passthrough/x86/hvm.c +++ b/xen/drivers/passthrough/x86/hvm.c @@ -252,7 +252,7 @@ static void hvm_gsi_eoi(struct domain *d, unsigned int = gsi) hvm_pirq_eoi(pirq); } =20 -void hvm_dpci_eoi(struct domain *d, unsigned int guest_gsi) +static void dpci_eoi(struct domain *d, unsigned int guest_gsi, void *data) { const struct hvm_irq_dpci *hvm_irq_dpci; const struct hvm_girq_dpci_mapping *girq; @@ -476,6 +476,7 @@ int pt_irq_create_bind( { struct dev_intx_gsi_link *digl =3D NULL; struct hvm_girq_dpci_mapping *girq =3D NULL; + struct hvm_gsi_eoi_callback *cb =3D NULL; unsigned int guest_gsi; =20 /* @@ -489,7 +490,7 @@ int pt_irq_create_bind( unsigned int link; =20 digl =3D xmalloc(struct dev_intx_gsi_link); - girq =3D xmalloc(struct hvm_girq_dpci_mapping); + girq =3D xzalloc(struct hvm_girq_dpci_mapping); =20 if ( !digl || !girq ) { @@ -502,11 +503,22 @@ int pt_irq_create_bind( girq->bus =3D digl->bus =3D pt_irq_bind->u.pci.bus; girq->device =3D digl->device =3D pt_irq_bind->u.pci.device; girq->intx =3D digl->intx =3D pt_irq_bind->u.pci.intx; - list_add_tail(&digl->list, &pirq_dpci->digl_list); + girq->cb.callback =3D dpci_eoi; =20 guest_gsi =3D hvm_pci_intx_gsi(digl->device, digl->intx); link =3D hvm_pci_intx_link(digl->device, digl->intx); =20 + rc =3D hvm_gsi_register_callback(d, guest_gsi, &girq->cb); + if ( rc ) + { + spin_unlock(&d->event_lock); + xfree(girq); + xfree(digl); + return rc; + } + + list_add_tail(&digl->list, &pirq_dpci->digl_list); + hvm_irq_dpci->link_cnt[link]++; =20 girq->machine_gsi =3D pirq; @@ -514,17 +526,43 @@ int pt_irq_create_bind( } else { + /* + * NB: the callback structure allocated below will never be fr= eed + * once setup because it's used by the hardware domain and will + * never be unregistered. + */ + cb =3D xzalloc(struct hvm_gsi_eoi_callback); + ASSERT(is_hardware_domain(d)); =20 + if ( !cb ) + { + spin_unlock(&d->event_lock); + return -ENOMEM; + } + /* MSI_TRANSLATE is not supported for the hardware domain. */ if ( pt_irq_bind->irq_type !=3D PT_IRQ_TYPE_PCI || pirq >=3D hvm_domain_irq(d)->nr_gsis ) { spin_unlock(&d->event_lock); - + xfree(cb); return -EINVAL; } guest_gsi =3D pirq; + + cb->callback =3D dpci_eoi; + /* + * IRQ binds created for the hardware domain are never destroy= ed, + * so it's fine to not keep a reference to cb here. + */ + rc =3D hvm_gsi_register_callback(d, guest_gsi, cb); + if ( rc ) + { + spin_unlock(&d->event_lock); + xfree(cb); + return rc; + } } =20 /* Bind the same mirq once in the same domain */ @@ -596,12 +634,17 @@ int pt_irq_create_bind( list_del(&digl->list); link =3D hvm_pci_intx_link(digl->device, digl->intx); hvm_irq_dpci->link_cnt[link]--; + hvm_gsi_unregister_callback(d, guest_gsi, &girq->cb); } + else + hvm_gsi_unregister_callback(d, guest_gsi, cb); + pirq_dpci->flags =3D 0; pirq_cleanup_check(info, d); spin_unlock(&d->event_lock); xfree(girq); xfree(digl); + xfree(cb); return rc; } } @@ -699,6 +742,7 @@ int pt_irq_destroy_bind( unsigned int link =3D hvm_pci_intx_link(device, intx); struct hvm_girq_dpci_mapping *girq; struct dev_intx_gsi_link *digl, *tmp; + int rc; =20 list_for_each_entry ( girq, &hvm_irq_dpci->girq[guest_gsi], list ) { @@ -708,6 +752,11 @@ int pt_irq_destroy_bind( girq->machine_gsi =3D=3D machine_gsi ) { list_del(&girq->list); + rc =3D hvm_gsi_unregister_callback(d, guest_gsi, &girq->cb= ); + if ( rc ) + printk(XENLOG_G_WARNING + "%pd: unable to remove callback for GSI %u: %d\= n", + d, guest_gsi, rc); xfree(girq); girq =3D NULL; break; diff --git a/xen/include/asm-x86/hvm/io.h b/xen/include/asm-x86/hvm/io.h index 7f30dfa7fea..977a857f729 100644 --- a/xen/include/asm-x86/hvm/io.h +++ b/xen/include/asm-x86/hvm/io.h @@ -101,7 +101,6 @@ bool handle_mmio_with_translation(unsigned long gla, un= signed long gpfn, struct npfec); bool handle_pio(uint16_t port, unsigned int size, int dir); void hvm_interrupt_post(struct vcpu *v, int vector, int type); -void hvm_dpci_eoi(struct domain *d, unsigned int guest_irq); void msix_write_completion(struct vcpu *); =20 #ifdef CONFIG_HVM diff --git a/xen/include/asm-x86/hvm/irq.h b/xen/include/asm-x86/hvm/irq.h index 37b8d2ba8fb..57d51c15863 100644 --- a/xen/include/asm-x86/hvm/irq.h +++ b/xen/include/asm-x86/hvm/irq.h @@ -156,6 +156,7 @@ struct hvm_girq_dpci_mapping { uint8_t device; uint8_t intx; uint8_t machine_gsi; + struct hvm_gsi_eoi_callback cb; }; =20 #define NR_ISAIRQS 16 --=20 2.30.1 From nobody Tue Apr 30 03:18:07 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1618927816; cv=pass; d=zohomail.com; s=zohoarc; b=ZqoVSs1fAAFkb6Zu/qFTp3mbp5iUpaLQ/YgZGTZ81rS+wuOqxGOtiZ8WpSlqYCZl+WhSSN9lWhl6CK/Q2smcQE3YACg8kmYKkvraCFykdb4GD7fcSTxrhxn1TyHavxA40/gOZADLP4J78NLHzXq97gDIsXOIEF4guF4h1gVaQmU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618927816; 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=TZm9Z2BEw31KJoXCeDJY/oKkesXv/TagNzRHxADW6kk=; b=gB/pn3dT9VMRbyQ2rXacUwOfEioiNSrdjTrCzqjAzB7gYnBcXA+sS7RqYdU5kTip84Ab5ryF4zdmqPR7PDR0NkAbGI5IFfWpp/HRBLKEEwLjwtNF2n80j8fAYg8uLLuyexrclO29nl046wP1CZ/D7B+IROBMn31kGp/8W2+Adzg= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1618927816059770.7354073714579; Tue, 20 Apr 2021 07:10:16 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.113770.216829 (Exim 4.92) (envelope-from ) id 1lYr4g-0001M8-5v; Tue, 20 Apr 2021 14:09:58 +0000 Received: by outflank-mailman (output) from mailman id 113770.216829; Tue, 20 Apr 2021 14:09:58 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr4g-0001M1-11; Tue, 20 Apr 2021 14:09:58 +0000 Received: by outflank-mailman (input) for mailman id 113770; Tue, 20 Apr 2021 14:09:56 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr4e-0000xF-6F for xen-devel@lists.xenproject.org; Tue, 20 Apr 2021 14:09:56 +0000 Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 205abebf-5a61-4251-8bde-b19d566079d9; Tue, 20 Apr 2021 14:09:47 +0000 (UTC) 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: 205abebf-5a61-4251-8bde-b19d566079d9 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1618927787; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=YBD6WHtBwNT4LEPxSJMdcqPjdNC2NyZPlUGjf1NdB+g=; b=OF/WZQySTanLpc+siGVKKcv8JPohpEawvWH/BQ7Kr5S7Y6kIwhWzDld2 Cc711QWZUuiY7cY+f4ST9yrWN5ryDhAEv0dSLmz6c82cIV9u+5b5UX7f5 pWOeZoofzrkx+LJh0QIdum0lumtzQ7pzfE/YjSBpDQ63yTpS6jRCPwMqE Q=; Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: 6oeFlPQ2+RxIP59tl6MTRLunsvAtArlIo6vv6STKIkDOBxCDLFHVUZkLreIsrPO5Eha9MRt/St Nhnzd8zbdog0YESY0vSTQ4tdeAIWNIWAO2vExrbHpt3CoHwwl3EzHczTlFeLLzNt9D4LMqIlwL 8xZG6d9r8t4oueg7aH+bOZnN/AG84HSzzkGHSo9q8OFjTMzIDmcsOD4YBjUTfliDGuqpK5B7Z1 gSgp/MLpR2oxjSfAaF9GEQcWWMzFl+jTmOZNJJxVv0Kg0CSljWy+OQSA9+loTv845PD+cVupex BRg= X-SBRS: 5.2 X-MesageID: 41817646 X-Ironport-Server: esa5.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-HdrOrdr: A9a23:yRlHQ6tnj2t0i0W5QkmpQo/27skC84Yji2hD6mlwRA09T+WxrO rrtOgH1BPylTYaUGwhn9fFA6WbXXbA7/dOjrU5FYyJGC3ronGhIo0n14vtxDX8Bzbzn9Qw6Y 5JSII7MtH5CDFB4PrSyBWkEtom3dmM+L2pg+Cb9Ht2UQR2cchbjjtRICzzKDwTeCBtA50lGJ 2Aovddrz27dngNKui9DH8JX+/Mzue76K7OSxgAGhIh9U2ynSqlgYSKbiSw8zU/d3d0wbkk+X XYiACR3Muemtyy1xO07R600714g93ko+EzZvCkqs9QETn0jxbtWYIJYcz4gBkQgMWCrGkni8 PNpRBIBbUC11r0cnuuqRXgnynMuQxekkPK8lOTjXv9rcGRfltTYKAg9OEpACfx0EYusMpx16 hGxQuixuBqJCjNgTjn4JzwXwxq/3DE0EYKq/IZjHBUTOIlGdhshLEYlXkldasoLWbR7YAqF/ RWF8fM5PpaWkPyVQGmgkBfhPOrRXg9BRGAXwwrvdGUySFfmDRDw1If39F3pAZNyLsND71/o8 jUOKVhk79DCucQcKJGHe8EBe+6EHbETx7gOH+bSG6XW50vCjbokdra8b817OaldNgj150pgq nMV1teqCobZ1/uIdfm5uwKzjn9BEGGGRj9wMBX4JZ0/pfmQqDwDCGFQFcy1+O9vvQkBNHBUf rbAuMWP9bTaU/VXapZ1Qz3XJdfbVMEVtcOh9o9U1WS5u3RLInHsfHabebzKLLhHS1MYBK8Pl IzGBzIYOlQ5EGiXXH1xDLLXWn2R0D59ZVsVIjWltJjjbQlB8lpiEw4mF657saEJXlpqaotZn ZzJ7vhj+eerWmy9mDY0nVxNnNmfwJoyYSld0kPiR4BMkvyf7pGkc6YY3pu0HyOIQI6aM/KDg hFpRBS9bisJ5KdgQAuYujXfF6yvj82njanXp0ckqqM6YPOYZUjFKsrX6R3CEHsDBx6mQFjrU 9Zcw8aTkrjFjfj4J/Vz6A8NaX6TZ1RkQ2rKclbpTb0rkOHv/wiQXMdQnqTS8KNuB0vQDBVn1 V11KcajNO76HGSAFp6pN59HExHaWyRDr4DKAiefo1blormfxxKQX6QiSaXjAwyfWTW51wf71 aRXhG8SLXuOB5wq3pY2qHl/BdPemKRc1lZR1p6vYd+fF628Upb4KuuXO6ewmGRYlwNzqUhKz nDeyIVOR4r7cuwzgSplDGLEmgGyp0iMvfGNqkqd6je1xqWWcu1vJBDO8UR0IduNdjovONObP mWfBWNKijkT8wuwA6Yqx8eSV9JgUhhtcmt/hLr7GK1hiFiRdXTJUlrXLEdLZW36XP+S/OBzZ V+ipYUsIKLQxHMQ+/D7ZuSSThJbi73iyqRacoDrJhPp6I8tLdpBfDgIHP1/UAC+C97Fdv+kU MVfb9y77/AMLJ+ZsB6QVMtwnMZ0PC0aHYxugP4AuUCbUggon/SMdSO+afJo9MUczq8jTq1HV Ge9iFHls21Jxer5Po/C6gqJ35RZ1V5wHN+/Pmaf4m4MnThS8hzuH67OGS6arlTVeysHqgRtA 9z55Wtk/WMfyT1nCDWsj0TGNMCz0+XBeezChmLA+hG7piTPkmNmLKj5IqLtwjMIAHLIngwtM libkwfbsNKlzkkgskW60GJO9PKi3NgtUBf7zFhnkPqwa687g7gbBh7DTE= X-IronPort-AV: E=Sophos;i="5.82,237,1613451600"; d="scan'208";a="41817646" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=enUI6efuJ2qhYL++64c5VNUhpeqIotcyjim2Bn9YoZZa0MOXSNXHtWw0tESjU16CtTMQXxEX+IIM3GV2Vu2q7K3MnmTrfiSVrw2SAHe5lq7SK8F6ZSaKUSAO7mIJUl1PH3PelAX5iMIvGQ9GqLcp8cTDyDVC443ADwlmowq4MIz+8ynkuBX+ZJ6Ng6k9HzdQvsM2EzLP5huVKI8gKqcF7XxwuRRUofyccLFQhVaeIg8z93SgvxNZm2ZbJOf1FbwEesWqBEeMOcF3FdC+jf0MjlABXti9ZIjH8vWuDjf1q2REF+eE9eM3cY2lmeJjc1o57MhQqjB4kg+AmRsJEBpm4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TZm9Z2BEw31KJoXCeDJY/oKkesXv/TagNzRHxADW6kk=; b=b9sOtdhaCFTtr5RjDhlQT2FIfOgnZiQUuQT2qf7yCY9lzJliZbxTA2GYEozg9ITG80DAlrqHfwo2SA01pRy2NvG2ALYMkfpNlha3LZ4p82RA5kPMaqUX+gBWyDRNTbnjaxX//bbNCPJb0fc+8C4MzBhlTuDlRlQLouik61q0VhR9O/wdhXezEIV7gwzXX+Th01dKtxsLT+pOBtQh1xqIZM5tsBoa4MHtaporwxb4LvKxkxdqY17ZYDOA//dts0JV06TCBnfgBWKZE9jyKkKn+PaWbh+TTAxZb+ytArWiWH3ddMjnLQ9d7Rcx8AybswnzhAB8TZnNwA/Z5V6IzCDLnw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TZm9Z2BEw31KJoXCeDJY/oKkesXv/TagNzRHxADW6kk=; b=fTcnKjkYdH+aSL6M5giqMVt9dhfRDC4AtCmuQiR0SzVtohwADntqTajspGUOlay3NdGXAVRJQtzhA4WvcAY5NeWlP/TQi6WM+07j41uaWLNhCRUEQCJep4H9+A+iceeI5sFhKlJ8/e8fFWESBcNzZIhYD/EmF82q4zG5kgguDEQ= From: Roger Pau Monne To: CC: Roger Pau Monne , Jan Beulich , Andrew Cooper , Wei Liu , Jun Nakajima , Kevin Tian Subject: [PATCH v4 08/12] x86/vpt: switch interrupt injection model Date: Tue, 20 Apr 2021 16:07:19 +0200 Message-ID: <20210420140723.65321-9-roger.pau@citrix.com> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210420140723.65321-1-roger.pau@citrix.com> References: <20210420140723.65321-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR2P264CA0165.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:1::28) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 446954f9-17ee-4155-4bad-08d90405efd7 X-MS-TrafficTypeDiagnostic: DM4PR03MB6000: X-LD-Processed: 335836de-42ef-43a2-b145-348c2ee9ca5b,ExtAddr X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5797; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: oNIh4v/H5ehtwQ3obmoTDUAJmmc58gPc5ORprHjqHt88Nbuoq5riYu0xF7aAajI3d5CkmJR90ursPi4LjQp7PuwOT6CdAJIJRhJg8InGM144FrhpKVtjH989chiGju2/fvUOmKAlfjOYEJDlDsfsFKAMHRsPX6DTV8zLmrfOFpn9lLXBXoU2lBYgWzKIx+a4RtFD/EZraFJKfgrl0x4W5D1bh1pqVnttfXZifK8A63AbB7Qxz2ck6ebFTQbT/CG9gtiQVE8MP31GAtt+yZeEvEfLqPwJapyN7jFc7pbWiRm8bJPTKCaklIKiROkUg+yIUap+mhrrvXNt/SCNkKlL6WICrKYAOVN3K/B6+9avofaHFm2nIxSIi4uxPXMWsnvOJqFWXBL8hVl8mfj3Jg+ejg0hkz11HXKL34NLdPPtFZ8gRJ6hZAmLyb1fdZvupVQ6Y2bUd+K0yqxJhxfhk0QmG7bb7P0nqbatPuNGUd1p+UFjKBaOglWRK8c/0P6DfivhG1Ksd6mtWC9F41pt0luv0E3H76tHhtDGbiFramW/vEXfj7LcR0YTg2M62xcjnTkqmuaHQNBf5pwlXb3uSI8eD5d3BJg3a4nlN9PARDocnvI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(396003)(376002)(39850400004)(136003)(366004)(6916009)(83380400001)(4326008)(38100700002)(16526019)(36756003)(316002)(956004)(6486002)(2616005)(6496006)(478600001)(8676002)(26005)(30864003)(186003)(5660300002)(8936002)(54906003)(2906002)(6666004)(66476007)(1076003)(66556008)(86362001)(66946007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?TmJxamZEVzR1K0Q2N3puSFZmaXNFa015UUtkTXJGdFJQL0MzTWdYaGtGNFJ3?= =?utf-8?B?aTJTSVZUWS9WNG93L1ZGUENacXc3clprZ3dETUJrL1BDK2JCM3p0TTB2aXkr?= =?utf-8?B?YlFYUUYvNk1STDhWcmpVOTRmZk9jUEorOEszS3FUbUdQb2hWbnFCL2lvRHlU?= =?utf-8?B?UlV1TytUODRDTDg1QVhnMWJPZXpLT1FHQ0NTRVR0WkRlWVRmTzJBNmpiK1da?= =?utf-8?B?THlmeXArbEw0bFZ3OXp6N2NQTlVZV09mVEdqNzVlNzd0UVplNlFzMjNrQW9Q?= =?utf-8?B?bEJ2OU9POTFya0FCdjVzTmFmcW1BMlJoWXZocnZtNU96L0V6Rlk1eEhxU29R?= =?utf-8?B?S2pVb09TNVdKT3p5bGx2MHg0bzh3cFdGWVdmZlZ0NWwwNUdPQTNQZTIyT3NH?= =?utf-8?B?UlE3Nzc3MmgyZzROMzdpVHdON0lVRUVrK2tWSEJHUVowVlBBWm9ManByMjBQ?= =?utf-8?B?dWRCMm5QTGtsbjcra1FLQkRDV3BWZzB2dXVsNjVLNTdJdFpRRmxXNy8zQjN4?= =?utf-8?B?TVB3R3NSNmhMYXlIeUloWVZXaXJOaXYrVXhaTktMK21LYjFySStLNW9oaDJ6?= =?utf-8?B?QXJaQm5jUDdwbTA4TWNObllIdkpsRzd5WHlIZ290cHR0UGRCajNmWkE3dC9F?= =?utf-8?B?Q2RkaTZsVlNoZFBUOU1LNFozSjNPUGpjQm0xMFZUSWlpQ0tvZ3Zxa0wxNW9n?= =?utf-8?B?NVA2R1dKdG10SU1FcEhyanN4Qm1EMmNjZ25IMCtFMDJ5dys4YVpyS3hrRURy?= =?utf-8?B?ZEFnQllSTStZZzBpZEdmeUExaGxpZ3RVanZKdnlXamprMnRseVNkOStzUDk0?= =?utf-8?B?OHUzYXI3cFFCbkRaL2p3UUNwbHJ0c3gwU2dYZFNXYlg0a0M5M2VtN3Jsa1lj?= =?utf-8?B?TmVpb0dybTNsZk8zZThvNGtub3JnNlZUaHBjZXE1STVINmRpYkFsNDR2T2Fa?= =?utf-8?B?TERXdjJjZUhDRkd2REYyU3FiVEhmUVB6bWh6U1c5ZGZmYkVrdys4bDcxZjdM?= =?utf-8?B?UUJJRk43anM0QTVCMng4MGJkbFdtUGNrN2VKdm03SVh4cFZRaUVaZzVVQWQr?= =?utf-8?B?QUJuVkFQZnZiWUdpc1Z4SmY4U2FyYXBlaklYcnppMUJ0bFdQUEhqVDEwM0Mw?= =?utf-8?B?alZxMkViVk1QNmZ6V2ZBYjJWOTlQcTJmNmhwZjNtQVdxM0pGbTI4Rkc3Zzk0?= =?utf-8?B?M2dlQUppMHZUaGNrR0Q4VWxCeW5ycGw5Vi93ekVGZXpEdk5QRHhaLzFjbGR5?= =?utf-8?B?aFJpRVBmYW5rS09UZVNnMEU2a296M2d5YVU0YlNUY2FJWEJ2TC9ibUhBby9P?= =?utf-8?B?N2g3eFo2ZU5SZlpSdVBuWW9TM0dqb0Q5blFSSFkzRytpOVNMOVNsd3ljNGp6?= =?utf-8?B?OEh3Sm5LR0dxb2ltd3AxZWxIc3B2aXFFZTY3YTgrckhaeDlDSkNlV2M0NVhx?= =?utf-8?B?cktoMk1ySFFXSkZLRXJsY1YzUlNUZUtDeW5TdlNPNURVV2NyY0Rqb1QwRito?= =?utf-8?B?Nk1GNUlIR1d2a09QcVpLeFdWRnZQQ1k2NklLbm1JOHltRi80cFJxdk80K2tJ?= =?utf-8?B?czdmQXVsV3o5NERlT1QrT21IdEhHNjNwWG5XQmdiZjNkeXlRQ0ZXcFVYYXZ6?= =?utf-8?B?ejJNNk5HR3lnQmUwVFpwT0RvTEhKK0ZMNDNzZ1d6YjRrYXBnNEJCYlJXSlA3?= =?utf-8?B?ZEU0WDRKUElFRkxYRUFab2RwS0JkYkkyTVFPY1NTMnhtQ3c3Z3hLS280Wk9F?= =?utf-8?Q?ZdaqX3pZCgPElLzQo9gVp7av3/IVgrpYBmVbQcp?= X-MS-Exchange-CrossTenant-Network-Message-Id: 446954f9-17ee-4155-4bad-08d90405efd7 X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Apr 2021 14:09:39.6779 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: IO3hCH3YPk4W0IVUGbeBh8SgMprYtS68LbqGCJSbgyaNRSDW9nzo24VGu+hc+a5lnIxBp19qOduRDERtxmS5aA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR03MB6000 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) Currently vPT relies on timers being assigned to a vCPU and performing checks on every return to HVM guest in order to check if an interrupt from a vPT timer assigned to the vCPU is currently being injected. This model doesn't work properly since the interrupt destination vCPU of a vPT timer can be different from the vCPU where the timer is currently assigned, in which case the timer would get stuck because it never sees the interrupt as being injected. Knowing when a vPT interrupt is injected is relevant for the guest timer modes where missed vPT interrupts are not discarded and instead are accumulated and injected when possible. This change aims to modify the logic described above, so that vPT doesn't need to check on every return to HVM guest if a vPT interrupt is being injected. In order to achieve this the vPT code is modified to make use of the new EOI callbacks, so that virtual timers can detect when a interrupt has been serviced by the guest by waiting for the EOI callback to execute. This model also simplifies some of the logic, as when executing the timer EOI callback Xen can try to inject another interrupt if the timer has interrupts pending for delivery. Note that timers are still bound to a vCPU for the time being, this relation however doesn't limit the interrupt destination anymore, and will be removed by further patches. This model has been tested with Windows 7 guests without showing any timer delay, even when the guest was limited to have very little CPU capacity and pending virtual timer interrupts accumulate. Signed-off-by: Roger Pau Monn=C3=A9 --- Changes since v3: - Rename pt_irq_fired to irq_eoi and adjust the logic. - Initialize v and cb_priv in eoi_callback. Changes since v2: - Avoid and explicit !=3D NULL check. - Use a switch in inject_interrupt to evaluate the timer mode. - Print the pt->source field on error in create_periodic_time. Changes since v1: - New in this version. --- xen/arch/x86/hvm/svm/intr.c | 3 - xen/arch/x86/hvm/vmx/intr.c | 59 ------ xen/arch/x86/hvm/vpt.c | 352 +++++++++++++++------------------- xen/include/asm-x86/hvm/vpt.h | 5 +- 4 files changed, 157 insertions(+), 262 deletions(-) diff --git a/xen/arch/x86/hvm/svm/intr.c b/xen/arch/x86/hvm/svm/intr.c index 7f815d23078..2ee2332253b 100644 --- a/xen/arch/x86/hvm/svm/intr.c +++ b/xen/arch/x86/hvm/svm/intr.c @@ -146,8 +146,6 @@ void svm_intr_assist(void) return; =20 /* Crank the handle on interrupt state. */ - pt_update_irq(v); - do { intack =3D hvm_vcpu_has_pending_irq(v); if ( likely(intack.source =3D=3D hvm_intsrc_none) ) @@ -219,7 +217,6 @@ void svm_intr_assist(void) { HVMTRACE_2D(INJ_VIRQ, intack.vector, /*fake=3D*/ 0); svm_inject_extint(v, intack.vector); - pt_intr_post(v, intack); } =20 /* Is there another IRQ to queue up behind this one? */ diff --git a/xen/arch/x86/hvm/vmx/intr.c b/xen/arch/x86/hvm/vmx/intr.c index 80bfbb47878..3fcc7073db2 100644 --- a/xen/arch/x86/hvm/vmx/intr.c +++ b/xen/arch/x86/hvm/vmx/intr.c @@ -203,7 +203,6 @@ static int nvmx_intr_intercept(struct vcpu *v, struct h= vm_intack intack) { /* for now, duplicate the ack path in vmx_intr_assist */ hvm_vcpu_ack_pending_irq(v, intack); - pt_intr_post(v, intack); =20 intack =3D hvm_vcpu_has_pending_irq(v); if ( unlikely(intack.source !=3D hvm_intsrc_none) ) @@ -242,7 +241,6 @@ void vmx_intr_assist(void) struct vcpu *v =3D current; unsigned int tpr_threshold =3D 0; enum hvm_intblk intblk; - int pt_vector; =20 /* Block event injection when single step with MTF. */ if ( unlikely(v->arch.hvm.single_step) ) @@ -263,8 +261,6 @@ void vmx_intr_assist(void) #endif =20 /* Crank the handle on interrupt state. */ - pt_vector =3D pt_update_irq(v); - do { unsigned long intr_info; =20 @@ -337,58 +333,6 @@ void vmx_intr_assist(void) { unsigned long status; =20 - /* - * intack.vector is the highest priority vector. So we set eoi_exit= _bitmap - * for intack.vector - give a chance to post periodic time interrup= ts when - * periodic time interrupts become the highest one - */ - if ( pt_vector !=3D -1 ) - { -#ifndef NDEBUG - /* - * We assert that intack.vector is the highest priority vector= for - * only an interrupt from vlapic can reach this point and the - * highest vector is chosen in hvm_vcpu_has_pending_irq(). - * But, in fact, the assertion failed sometimes. It is suspect= ed - * that PIR is not synced to vIRR which makes pt_vector is lef= t in - * PIR. In order to verify this suspicion, dump some informati= on - * when the assertion fails. - */ - if ( unlikely(intack.vector < pt_vector) ) - { - const struct vlapic *vlapic; - const struct pi_desc *pi_desc; - const uint32_t *word; - unsigned int i; - - printk(XENLOG_ERR "%pv: intack: %u:%02x pt: %02x\n", - current, intack.source, intack.vector, pt_vector); - - vlapic =3D vcpu_vlapic(v); - if ( vlapic && vlapic->regs ) - { - word =3D (const void *)&vlapic->regs->data[APIC_IRR]; - printk(XENLOG_ERR "vIRR:"); - for ( i =3D X86_NR_VECTORS / 32; i-- ; ) - printk(" %08x", word[i*4]); - printk("\n"); - } - - pi_desc =3D &v->arch.hvm.vmx.pi_desc; - if ( pi_desc ) - { - word =3D (const void *)&pi_desc->pir; - printk(XENLOG_ERR " PIR:"); - for ( i =3D X86_NR_VECTORS / 32; i-- ; ) - printk(" %08x", word[i]); - printk("\n"); - } - } -#endif - ASSERT(intack.vector >=3D pt_vector); - vmx_set_eoi_exit_bitmap(v, intack.vector); - } - /* we need update the RVI field */ __vmread(GUEST_INTR_STATUS, &status); status &=3D ~VMX_GUEST_INTR_STATUS_SUBFIELD_BITMASK; @@ -397,14 +341,11 @@ void vmx_intr_assist(void) __vmwrite(GUEST_INTR_STATUS, status); =20 vmx_sync_exit_bitmap(v); - - pt_intr_post(v, intack); } else { HVMTRACE_2D(INJ_VIRQ, intack.vector, /*fake=3D*/ 0); vmx_inject_extint(intack.vector, intack.source); - pt_intr_post(v, intack); } =20 /* Is there another IRQ to queue up behind this one? */ diff --git a/xen/arch/x86/hvm/vpt.c b/xen/arch/x86/hvm/vpt.c index 24d90c0a186..6744b88d20c 100644 --- a/xen/arch/x86/hvm/vpt.c +++ b/xen/arch/x86/hvm/vpt.c @@ -26,6 +26,8 @@ #define mode_is(d, name) \ ((d)->arch.hvm.params[HVM_PARAM_TIMER_MODE] =3D=3D HVMPTM_##name) =20 +static bool inject_interrupt(struct periodic_time *pt); + void hvm_init_guest_time(struct domain *d) { struct pl_time *pl =3D d->arch.hvm.pl_time; @@ -75,35 +77,6 @@ void hvm_set_guest_time(struct vcpu *v, u64 guest_time) } } =20 -static int pt_irq_vector(struct periodic_time *pt, enum hvm_intsrc src) -{ - struct vcpu *v =3D pt->vcpu; - unsigned int gsi, isa_irq; - int vector; - - if ( pt->source =3D=3D PTSRC_lapic ) - return pt->irq; - - isa_irq =3D pt->irq; - - if ( src =3D=3D hvm_intsrc_pic ) - return (v->domain->arch.hvm.vpic[isa_irq >> 3].irq_base - + (isa_irq & 7)); - - ASSERT(src =3D=3D hvm_intsrc_lapic); - gsi =3D pt->source =3D=3D PTSRC_isa ? hvm_isa_irq_to_gsi(isa_irq) : pt= ->irq; - vector =3D vioapic_get_vector(v->domain, gsi); - if ( vector < 0 ) - { - dprintk(XENLOG_WARNING, "d%u: invalid GSI (%u) for platform timer\= n", - v->domain->domain_id, gsi); - domain_crash(v->domain); - return -1; - } - - return vector; -} - static int pt_irq_masked(struct periodic_time *pt) { struct vcpu *v =3D pt->vcpu; @@ -257,35 +230,15 @@ void pt_restore_timer(struct vcpu *v) pt_vcpu_lock(v); =20 list_for_each_entry ( pt, head, list ) - { if ( pt->pending_intr_nr =3D=3D 0 ) - { - pt_process_missed_ticks(pt); set_timer(&pt->timer, pt->scheduled); - } - } =20 pt_thaw_time(v); =20 pt_vcpu_unlock(v); } =20 -static void pt_timer_fn(void *data) -{ - struct periodic_time *pt =3D data; - - pt_lock(pt); - - pt->pending_intr_nr++; - pt->scheduled +=3D pt->period; - pt->do_not_freeze =3D 0; - - vcpu_kick(pt->vcpu); - - pt_unlock(pt); -} - -static void pt_irq_fired(struct vcpu *v, struct periodic_time *pt) +static void irq_eoi(struct periodic_time *pt) { pt->irq_issued =3D false; =20 @@ -295,188 +248,153 @@ static void pt_irq_fired(struct vcpu *v, struct per= iodic_time *pt) list_del(&pt->list); pt->on_list =3D false; pt->pending_intr_nr =3D 0; + + return; } - else if ( mode_is(v->domain, one_missed_tick_pending) || - mode_is(v->domain, no_missed_ticks_pending) ) - { - pt->last_plt_gtime =3D hvm_get_guest_time(v); - pt_process_missed_ticks(pt); - pt->pending_intr_nr =3D 0; /* 'collapse' all missed ticks */ - set_timer(&pt->timer, pt->scheduled); - } - else + + pt_process_missed_ticks(pt); + /* 'collapse' missed ticks according to the selected mode. */ + switch ( pt->vcpu->domain->arch.hvm.params[HVM_PARAM_TIMER_MODE] ) { - pt->last_plt_gtime +=3D pt->period; - if ( --pt->pending_intr_nr =3D=3D 0 ) - { - pt_process_missed_ticks(pt); - if ( pt->pending_intr_nr =3D=3D 0 ) - set_timer(&pt->timer, pt->scheduled); - } + case HVMPTM_one_missed_tick_pending: + pt->pending_intr_nr =3D min(pt->pending_intr_nr, 1u); + break; + + case HVMPTM_no_missed_ticks_pending: + pt->pending_intr_nr =3D 0; + break; } =20 - if ( mode_is(v->domain, delay_for_missed_ticks) && - (hvm_get_guest_time(v) < pt->last_plt_gtime) ) - hvm_set_guest_time(v, pt->last_plt_gtime); + if ( !pt->pending_intr_nr ) + set_timer(&pt->timer, pt->scheduled); } =20 -int pt_update_irq(struct vcpu *v) +static void pt_timer_fn(void *data) { - struct list_head *head =3D &v->arch.hvm.tm_list; - struct periodic_time *pt, *temp, *earliest_pt; - uint64_t max_lag; - int irq, pt_vector =3D -1; - bool level; + struct periodic_time *pt =3D data; + struct vcpu *v; + time_cb *cb =3D NULL; + void *cb_priv; + unsigned int irq; =20 - pt_vcpu_lock(v); + pt_lock(pt); =20 - earliest_pt =3D NULL; - max_lag =3D -1ULL; - list_for_each_entry_safe ( pt, temp, head, list ) + v =3D pt->vcpu; + irq =3D pt->irq; + + if ( inject_interrupt(pt) ) { - if ( pt->pending_intr_nr ) - { - if ( pt_irq_masked(pt) && - /* Level interrupts should be asserted even if masked. */ - !pt->level ) - { - /* suspend timer emulation */ - list_del(&pt->list); - pt->on_list =3D 0; - } - else - { - if ( (pt->last_plt_gtime + pt->period) < max_lag ) - { - max_lag =3D pt->last_plt_gtime + pt->period; - earliest_pt =3D pt; - } - } - } + pt->scheduled +=3D pt->period; + pt->do_not_freeze =3D 0; + cb =3D pt->cb; + cb_priv =3D pt->priv; } - - if ( earliest_pt =3D=3D NULL ) + else { - pt_vcpu_unlock(v); - return -1; + /* Masked. */ + if ( pt->on_list ) + list_del(&pt->list); + pt->on_list =3D false; + pt->pending_intr_nr++; } =20 - earliest_pt->irq_issued =3D 1; - irq =3D earliest_pt->irq; - level =3D earliest_pt->level; + pt_unlock(pt); =20 - pt_vcpu_unlock(v); + if ( cb ) + cb(v, cb_priv); +} =20 - switch ( earliest_pt->source ) - { - case PTSRC_lapic: - /* - * If periodic timer interrupt is handled by lapic, its vector in - * IRR is returned and used to set eoi_exit_bitmap for virtual - * interrupt delivery case. Otherwise return -1 to do nothing. - */ - vlapic_set_irq(vcpu_vlapic(v), irq, 0); - pt_vector =3D irq; - break; +static void eoi_callback(struct periodic_time *pt) +{ + struct vcpu *v =3D NULL; + time_cb *cb =3D NULL; + void *cb_priv =3D NULL; =20 - case PTSRC_isa: - hvm_isa_irq_deassert(v->domain, irq); - if ( platform_legacy_irq(irq) && vlapic_accept_pic_intr(v) && - v->domain->arch.hvm.vpic[irq >> 3].int_output ) - hvm_isa_irq_assert(v->domain, irq, NULL); - else + pt_lock(pt); + + irq_eoi(pt); + if ( pt->pending_intr_nr ) + { + if ( inject_interrupt(pt) ) { - pt_vector =3D hvm_isa_irq_assert(v->domain, irq, vioapic_get_v= ector); - /* - * hvm_isa_irq_assert may not set the corresponding bit in vIRR - * when mask field of IOAPIC RTE is set. Check it again. - */ - if ( pt_vector < 0 || !vlapic_test_irq(vcpu_vlapic(v), pt_vect= or) ) - pt_vector =3D -1; + pt->pending_intr_nr--; + cb =3D pt->cb; + cb_priv =3D pt->priv; + v =3D pt->vcpu; } - break; - - case PTSRC_ioapic: - pt_vector =3D hvm_ioapic_assert(v->domain, irq, level); - if ( pt_vector < 0 || !vlapic_test_irq(vcpu_vlapic(v), pt_vector) ) + else { - pt_vector =3D -1; - if ( level ) - { - /* - * Level interrupts are always asserted because the pin as= sert - * count is incremented regardless of whether the pin is m= asked - * or the vector latched in IRR, so also execute the callb= ack - * associated with the timer. - */ - time_cb *cb =3D NULL; - void *cb_priv =3D NULL; - - pt_vcpu_lock(v); - /* Make sure the timer is still on the list. */ - list_for_each_entry ( pt, &v->arch.hvm.tm_list, list ) - if ( pt =3D=3D earliest_pt ) - { - pt_irq_fired(v, pt); - cb =3D pt->cb; - cb_priv =3D pt->priv; - break; - } - pt_vcpu_unlock(v); - - if ( cb !=3D NULL ) - cb(v, cb_priv); - } + /* Masked. */ + if ( pt->on_list ) + list_del(&pt->list); + pt->on_list =3D false; } - break; } =20 - return pt_vector; + pt_unlock(pt); + + if ( cb ) + cb(v, cb_priv); } =20 -static struct periodic_time *is_pt_irq( - struct vcpu *v, struct hvm_intack intack) +static void vlapic_eoi_callback(struct vcpu *unused, unsigned int unused2, + void *data) { - struct list_head *head =3D &v->arch.hvm.tm_list; - struct periodic_time *pt; - - list_for_each_entry ( pt, head, list ) - { - if ( pt->pending_intr_nr && pt->irq_issued && - (intack.vector =3D=3D pt_irq_vector(pt, intack.source)) ) - return pt; - } + eoi_callback(data); +} =20 - return NULL; +static void vioapic_eoi_callback(struct domain *unused, unsigned int unuse= d2, + void *data) +{ + eoi_callback(data); } =20 -void pt_intr_post(struct vcpu *v, struct hvm_intack intack) +static bool inject_interrupt(struct periodic_time *pt) { - struct periodic_time *pt; - time_cb *cb; - void *cb_priv; + struct vcpu *v =3D pt->vcpu; + struct domain *d =3D v->domain; + unsigned int irq =3D pt->irq; =20 - if ( intack.source =3D=3D hvm_intsrc_vector ) - return; + /* Level interrupts should be asserted even if masked. */ + if ( pt_irq_masked(pt) && !pt->level ) + return false; =20 - pt_vcpu_lock(v); - - pt =3D is_pt_irq(v, intack); - if ( pt =3D=3D NULL ) + switch ( pt->source ) { - pt_vcpu_unlock(v); - return; + case PTSRC_lapic: + vlapic_set_irq_callback(vcpu_vlapic(v), pt->irq, 0, vlapic_eoi_cal= lback, + pt); + break; + + case PTSRC_isa: + hvm_isa_irq_deassert(d, irq); + hvm_isa_irq_assert(d, irq, NULL); + break; + + case PTSRC_ioapic: + hvm_ioapic_assert(d, irq, pt->level); + break; } =20 - pt_irq_fired(v, pt); + switch ( d->arch.hvm.params[HVM_PARAM_TIMER_MODE] ) + { + case HVMPTM_one_missed_tick_pending: + case HVMPTM_no_missed_ticks_pending: + pt->last_plt_gtime =3D hvm_get_guest_time(v); + break; =20 - cb =3D pt->cb; - cb_priv =3D pt->priv; + case HVMPTM_delay_for_missed_ticks: + pt->last_plt_gtime +=3D pt->period; + if ( hvm_get_guest_time(v) < pt->last_plt_gtime ) + hvm_set_guest_time(v, pt->last_plt_gtime); + break; =20 - pt_vcpu_unlock(v); + default: + pt->last_plt_gtime +=3D pt->period; + break; + } =20 - if ( cb !=3D NULL ) - cb(v, cb_priv); + return true; } =20 void pt_migrate(struct vcpu *v) @@ -552,6 +470,24 @@ void create_periodic_time( pt->cb =3D cb; pt->priv =3D data; =20 + switch ( pt->source ) + { + int rc; + + case PTSRC_isa: + irq =3D hvm_isa_irq_to_gsi(irq); + /* fallthrough */ + case PTSRC_ioapic: + pt->eoi_cb.callback =3D vioapic_eoi_callback; + pt->eoi_cb.data =3D pt; + rc =3D hvm_gsi_register_callback(v->domain, irq, &pt->eoi_cb); + if ( rc ) + gdprintk(XENLOG_WARNING, + "unable to register callback for timer GSI %u source = %u: %d\n", + irq, pt->source, rc); + break; + } + pt_vcpu_lock(v); pt->on_list =3D 1; list_add(&pt->list, &v->arch.hvm.tm_list); @@ -565,6 +501,8 @@ void create_periodic_time( =20 void destroy_periodic_time(struct periodic_time *pt) { + unsigned int gsi; + /* Was this structure previously initialised by create_periodic_time()= ? */ if ( pt->vcpu =3D=3D NULL ) return; @@ -574,6 +512,17 @@ void destroy_periodic_time(struct periodic_time *pt) list_del(&pt->list); pt->on_list =3D 0; pt->pending_intr_nr =3D 0; + + gsi =3D pt->irq; + switch ( pt->source ) + { + case PTSRC_isa: + gsi =3D hvm_isa_irq_to_gsi(pt->irq); + /* fallthrough */ + case PTSRC_ioapic: + hvm_gsi_unregister_callback(pt->vcpu->domain, gsi, &pt->eoi_cb); + break; + } pt_unlock(pt); =20 /* @@ -641,20 +590,29 @@ void pt_adjust_global_vcpu_target(struct vcpu *v) write_unlock(&pl_time->vhpet.lock); } =20 - static void pt_resume(struct periodic_time *pt) { + struct vcpu *v; + time_cb *cb =3D NULL; + void *cb_priv; + if ( pt->vcpu =3D=3D NULL ) return; =20 pt_lock(pt); - if ( pt->pending_intr_nr && !pt->on_list ) + if ( pt->pending_intr_nr && !pt->on_list && inject_interrupt(pt) ) { + pt->pending_intr_nr--; + cb =3D pt->cb; + cb_priv =3D pt->priv; + v =3D pt->vcpu; pt->on_list =3D 1; list_add(&pt->list, &pt->vcpu->arch.hvm.tm_list); - vcpu_kick(pt->vcpu); } pt_unlock(pt); + + if ( cb ) + cb(v, cb_priv); } =20 void pt_may_unmask_irq(struct domain *d, struct periodic_time *vlapic_pt) diff --git a/xen/include/asm-x86/hvm/vpt.h b/xen/include/asm-x86/hvm/vpt.h index 74c0cedd11c..384d2e02039 100644 --- a/xen/include/asm-x86/hvm/vpt.h +++ b/xen/include/asm-x86/hvm/vpt.h @@ -23,6 +23,7 @@ #include #include #include +#include =20 /* * Abstract layer of periodic time, one short time. @@ -50,6 +51,7 @@ struct periodic_time { struct timer timer; /* ac_timer */ time_cb *cb; void *priv; /* point back to platform time source */ + struct hvm_gsi_eoi_callback eoi_cb; /* EOI callback registration data = */ }; =20 =20 @@ -151,9 +153,6 @@ struct pl_time { /* platform time */ =20 void pt_save_timer(struct vcpu *v); void pt_restore_timer(struct vcpu *v); -int pt_update_irq(struct vcpu *v); -struct hvm_intack; -void pt_intr_post(struct vcpu *v, struct hvm_intack intack); void pt_migrate(struct vcpu *v); =20 void pt_adjust_global_vcpu_target(struct vcpu *v); --=20 2.30.1 From nobody Tue Apr 30 03:18:07 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1618927822; cv=pass; d=zohomail.com; s=zohoarc; b=Xo0ZV6LU5lHJbFLC8DC2j6rG232ImpayHtmMe/wQIEONNS+pMfv8utFBvjwG4BwIfSVFU6T2roIXH5v19K0pMs/f5lSr2OoAXLg20/TiY/tjTDcme7e4gu+DYlyww3nhs4ci9JnmbVEavNu2+0hX7v0DOMb7v6GWCQ5CIEq8xUI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618927822; 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=bszQ+bQrryson/MDnymvuIoXuzehE71ihmfPFljnugg=; b=GU9qNQe/nxdq1yrlOz6ASXRSqAS7q0V9+AHGyUpZUd+aonlJzdOTWT9wj+wb7afug1tyClhPmzZ2z77IpF8pZXex/IMYTtwPWuJuOALwcqu45Q2opYGh1ynvuqt8easfTTT+jSk3PG1z944lo0s265Fn31rD0DBqk7wWb+v2yIk= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1618927822677662.6754279185647; Tue, 20 Apr 2021 07:10:22 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.113775.216841 (Exim 4.92) (envelope-from ) id 1lYr4k-0001XU-Nf; Tue, 20 Apr 2021 14:10:02 +0000 Received: by outflank-mailman (output) from mailman id 113775.216841; Tue, 20 Apr 2021 14:10: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 1lYr4k-0001Wn-Gw; Tue, 20 Apr 2021 14:10:02 +0000 Received: by outflank-mailman (input) for mailman id 113775; Tue, 20 Apr 2021 14:10:01 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr4j-0000xF-6P for xen-devel@lists.xenproject.org; Tue, 20 Apr 2021 14:10:01 +0000 Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 91416c04-4b23-4ec2-a787-16f6647b10eb; Tue, 20 Apr 2021 14:09:49 +0000 (UTC) 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: 91416c04-4b23-4ec2-a787-16f6647b10eb DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1618927789; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=7GEPKb6ncYPoPihoILUyCWuStYhcu43arsQB5CIFPFU=; b=L3O5rcUGxVJtogKyOrG5gl6O2s3OPSnVhiQjVDuDFjzvUqtKH1aLEcFE zNGF6U6peVAcfP9jJnQi1wZAAK28IDsNbej+jJx/0qPHgA2MOPefZzbk5 g67A9qTEdAtQfur6az5Rn6gTBl6vTRmkJNFK+wxSIOETmg1EK47ItR5sj 8=; Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: VEEtpjlqf4G1++BClyikDs0Ls7k7Zt6xpVSuR1O/bHuqiPtT7hm68g6WfXeRCKNb5gdPhWo8ey Ns8U9Ejo2FXD3AYYO+saKO0YOwSFV7NytP+WJ2AxubI9aCxslz/T6zz+vVcG/jp1H94f6Ae4bi uamO87zMne5P0ljwKB/jq72qwpHvxtDsDE7f9bduTROSLcHb6/fktusw5bH6xM3Vse5/22PyHb s9NjYINPow6nNtQnso6HkyMFXRyuRCuRca4dW+Gz9lxUy32PisygU0HklI4EtFZkZQNlO6LUJW 5So= X-SBRS: 5.2 X-MesageID: 41981586 X-Ironport-Server: esa2.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-HdrOrdr: A9a23:i1GYUq4SOFICYuRVegPXwU2EI+orLtY04lQ7vn1ZYSd+NuSFis Gjm+ka3xfoiDAXHEotg8yEJbPoexzh3LZPy800Ma25VAfr/FGpIoZr8Jf4z1TbdxHW3tV2kZ 1te60WMrDNJHBnkMf35xS5Gd48wN+BtJuln/va0m0Fd2BXQotLhj0JbjqzOEtwWQVAGN4FD5 Ka/MVKvH6Nfn4QY8S9CBA+LpT+jvfMk4/rZgNDOg4/5GC1/E6VwZPZMzzd5BcRVDtT3awvmF KqryXV7riu2svLrCP0+HTU6/1t6bnc4/tFQPeBk80Ebgjr4zzYH7hJf52nkHQLrPq06FAs+e O80ysIG8ho8XveciWUjHLWqnDd+Q0j4XPj1lOU6EGLyaeSJENYerh8rLlUfRfD500rsMsU6t Mw40uju4dKFhSFpSzh5rHzJmBXv3Cpqnkvm/N7tQ05baIibtZq3Oki1XIQOpIBECXm0ZsgAe ljAerNjcwmD2+yXjT3uHJiz8erWWl2NhCaQlIassjQ6DROmmtlpnFoiPA3rzMlztYQWpNE7+ PLPuBBk6xPdNYfaeZYCP0aScW6J2TRSXv3QS2vCGWiMJtCF2PGqpbx7rlwzvqtYoY0wJw7n4 mEeE9EtEYpEnieSfGm7dluyFTgUW+9VTPixoV1/J5ioIDxQ7LtLGmqVE0uqc29uP8Sa/erGs qbCdZzObvOPGHuEYFG00nVQJ9JM0QTV8UTp5IVQFSLjsXXKpD7l+DSffrJTYCdUwoMayfaOD 8uTTLzLMJP4gSAQXnjmiXcXHvrZwje8PtLYe3n1tlW7LJIGpxHswATh1j8zNqMMyd+vqs/e1 Y7BLvml6i8tFSn5Gqg1RQsBjNtSmJupJnwWXJDogEHd2nud6wYhtmZcWdOmFyKOwF4VMGTNA JEvVx49eaWIvWrtG4fIuPiFljfo2oYpXqMQZtZsLaE/93ZdpQxCYtjfrdwGwXNHxlcgh1rt2 9HVQ8BSibkZ3DToJTgqKZRKPDUdtF6jgvuC9VTs2jjuUKVotxqemEWRAe0UcmcgR8nQh1dgl EZyd5ZvJOw3RKUbUcviuUxN1NBLECaGqhPAgi+aIJIobzzYw1rQWCWhTuVtgErdgPRhjYvr1 2kCRfRVeDAA1JbtHwd6Krs/V9uXki2fk57aBlBwMZAPFWDnkw2/f6AZ6K13WfUV0ALxfsFNi rZJREIJBl1+tyx3BmJuTqLGHk83K8yNujFALlLScCU5lqdbKmz0Y0WFf5d+5hocO30uugQSO SFZku7Kij7B+5B4X3iml8VfA1P7F8qnvPj1Ee7sCyW3HsjDeHTJ1ojbbcBON2Y53XlQfHN8J gRt6NAgcKAdkHKLviBwuXrShQGDDX5i2u/VfspppBZprhajso6I7DrFR/zkEha1xA/JvrunE wQQK5H8KnMU7UfCvA6SmZ8xB4Vj9yBI0sgjxzuDsI/dV8riWXHP9nh2cu+lZMfRmmIpA79Ij CkglVg1saAeyuIzrgBDa0sZUxQdUgn8XxnldnyPbH4OUGPd+tZ+kC9PWL4WLhBSLKdEbFVih ph+dmHk6u2cCX/sTqg8AdTE+Zr82y9R9m1Dx/JMelU88aiMVDJu5CU2qeI/X7KYAr+TV8Zi4 1DfVERacoGqgBKtvxJ7gGCDortokwklFNC5ypAjVCF4Pn+3Fvm X-IronPort-AV: E=Sophos;i="5.82,237,1613451600"; d="scan'208";a="41981586" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QiNqsrpIfT41HYdDcTVnK7WR1Y+ZytSUowSN9FihNKTwKBkleiykZ6UYts2wiDVeScg0dL3wD7GaLgjr5Z3JyPrN2o2WXbVCFWkzYxNqhQPj5eVwXbelPA5aQnnLqj64IUTLR+rLxEiAdcVA6unVQL9yq6ljpZXExuXRvaesMR4sCrOIM90jcfXicQ90cogaGmpuIueCvIPnypjeCAJBSU1WtHRFf4zjK906v6xXxs2IE9WSDiR9wCN2oAvijIw7Iv+agZ2uCFhtfDuQfom0sdwLHkuXh/0TI/Gdxf2ETRbv2qQk0gM1mI30QMuiBxBxZ0Ghzy68TJVaPW4gTooDkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bszQ+bQrryson/MDnymvuIoXuzehE71ihmfPFljnugg=; b=nwpqGMLb1LMOkt/YQhPx1gd3IZX3gejEV8pG4eFPpT7cjz8ms+W9iW5S5bLUHiUFjRvE3qoL5uJqkXBdi+mnclF69FCqbYacY2leFkLwQICsIztKPQd9rxldUykI/WBexWyP9VTMe7qqTepeV4jKWgiDaXDOZbbF5x8VxeMQF+EOfzZam0ka8yq66NoV09w8HhlMKSUjZocCh0n4w4//ykXdsO0UN6InhU0oTAkJ1438kCstCSkcnMD2rUROUul2PPpsKGmG6SxwMHthrhADxnhqQ4G9ykK1FDqdi4JWm8IFX7e8Lo0XhWgcW3tlHk5XbmJKnq1wBWTy/wOOAFNqyA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bszQ+bQrryson/MDnymvuIoXuzehE71ihmfPFljnugg=; b=Q5vqNM/UX7TkqqDh+Ox44YFOZnKbHEUvtxU7cpQWXw3nPd1KeF0xvQPqt6Fg4t16RIepOLiSGPl9352CeMJJDJoXpBPupnBb3KUjFBh0F2U/i92OoyfL6USaFM5bMz0VjlQLeBD62ob9ArSr5pBfgfg9uJa6whsvs6WA9nVFfo8= From: Roger Pau Monne To: CC: Roger Pau Monne , Jan Beulich , Andrew Cooper , Wei Liu Subject: [PATCH v4 09/12] x86/irq: remove unused parameter from hvm_isa_irq_assert Date: Tue, 20 Apr 2021 16:07:20 +0200 Message-ID: <20210420140723.65321-10-roger.pau@citrix.com> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210420140723.65321-1-roger.pau@citrix.com> References: <20210420140723.65321-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MRXP264CA0045.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500:14::33) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1bbd9453-e694-445c-1e81-08d90405f37f X-MS-TrafficTypeDiagnostic: DM4PR03MB6000: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:785; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: yrp19vMbdgSLoMYRN5sFOM/aW2kCSa3UfvBF91iX5B4wbnjoVo3XAq0I6MYRRhmX4FAoJw5gxmWCbn/nJ/+WrpexoMZkDW8lhuuoow+Qx4JGm3yoEUDVoBeGtxMx0spsJO5rEtuFZh2GNTGMXislvEvJWzUPsi2Tr15Dk4byy/oDNadBWvYj/arzDtELdoDUsLgrkHQUb7ykvJADh5MTlhYDTJFqBDkMpLPiorbcMMewLQx4esMTS7hKvJNsFRvcaxPhRIvgkHI6dHBJGsI03BXLlN3gRkocdN1X13jNYyiqTUf1S4MBNbSNPfuPM1ZmTOrbMsgJRqgvNmLt93UtJ7eegRwoce1RqSr32cJmWQK//26I4qLUWvUtM8APESIvxQsjYGto/nw3tzeZ2Fpx1lCc9VXih1+0CV3nifpeAODGhLw1GkEdxrP1b6vQ7lzOft5IEJBSaUe6Nk/R1oibarlbznvf9ihdk4UVBZbsZItn1Vl7qG+zCPsXE0ZZsC3MfHdL4Hn79YdMwA/oaILwUQkEaKZLHqVbptLiXHqUnvVGeRe88PxCdtQFhWlpxPspQJq0ahWJ0mTr/ny3wKUosOWAcymT1YMIFQUvLsT0Aco= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(396003)(376002)(39850400004)(136003)(366004)(6916009)(83380400001)(4326008)(38100700002)(16526019)(36756003)(316002)(956004)(6486002)(2616005)(6496006)(478600001)(8676002)(26005)(186003)(5660300002)(8936002)(54906003)(2906002)(6666004)(66476007)(1076003)(66556008)(86362001)(66946007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?eFAyRUQ4VTFWOG85OHNaTUlwd3A2TUEwVVdIZjUvUFA4OWFhVnBkYVIzWm8r?= =?utf-8?B?NVcreGdLZzhVdmFuSnViTklmbXFoWkcwZ21UU1FPZStEMXhKeEJHMUx5OFZB?= =?utf-8?B?Nm5KRDErMnBMeWVzbmpyc0Zvb0t6S1FJVElicUx0aG5IMldQV2ZjdXlPdkpM?= =?utf-8?B?cWhjamJGcFRCVUtMSWZQTVlTY2ZjR1JCbzVYT1p4OGpXV1NWWXF1Tm1aeGJC?= =?utf-8?B?V25tMTRORlgvYjBKY3dTLzRvWUZvWWp6RmprRHF1RXBQeGFzU3FYY1R5bnBJ?= =?utf-8?B?VTdld0R6QnUvTk04QVhyQlhTMjF5L2dGU1h0eFdhb0ZyaGJBa0NER3Vhbnda?= =?utf-8?B?RSt3VXhzblJUejdSQlR2Q3c1dmJHb3JobXFqeUlYU3hHdzFicHhhLzc5NmVR?= =?utf-8?B?TFpEWitKZ1drOFNGZW0wNXZHemM0d2FueUZoQXpnQmJacThMRFNtSVdYNHF1?= =?utf-8?B?anpKRkYwTlRlcFliNTRCaEpQVU1RYTAwWmttb1I2bmV0eDhJR21hY1djOTMz?= =?utf-8?B?ZHVLVjBid3huTEt1eFhhMzdlbXNPV1dtbkFoQTJEQzRRK0p5V2taYjUxSzFE?= =?utf-8?B?aVMrZytLV3JBa2Z3Rzk0aWJLS2N1bG5zMXczWllrZ2xveXBIV2s3N0JBdUlZ?= =?utf-8?B?cTFGaW5uMTFvL3BPK0FnK1Z4cFB2MVowL1VOTWJoeUxaS3BhYmZWbVdjSmJU?= =?utf-8?B?TUJPU0JLNVd4N3R6bzJIVEpERms2S3k3ZTZQOGU3Z3V2UE14ODdIZ0NkOVFG?= =?utf-8?B?ekRKakgrNCtiWDk1VjhJcTVJRXo2K0Uxanc0blduNTl5YTY4NWdvQVM1cXJk?= =?utf-8?B?aTNEcS8yaEIrOU9DbGFka2h6VWMwTjRKellHTmNuSkNhRnVGM2ZEYk9NVEVy?= =?utf-8?B?MThwRDRQYjk3V0xLb3h5STVEV1lqczdPS1FPSi9MNXdaRHMyVHFUQkFaWm5p?= =?utf-8?B?WnFGaHl5NnJLN3JpcExSTlMvZW85MjNtbXdtRDJUcXB5am1EZlVmUkhybWNw?= =?utf-8?B?V29NU25EZGNZQnhWSVFGUCtFeHlBbG03MUZNZmx2b0RiTXNXQnBRT1ZWK2g1?= =?utf-8?B?VUZKT003a0drQzkySndKbUpYWmtpS3NnL0lpTWo0TXVFYnNGNlBPSXBJTU1n?= =?utf-8?B?NFZoazBiandlMlVxZ1BiOUVVK1p3RytSWFFtYmhzVmlyUXVBNE9hSmVlak1m?= =?utf-8?B?WkV4V29lNmMwbUFaRWR4cm96aUNZUmZDazZ6ZVpKMEpZL2l5cEJrQ2hJRTI2?= =?utf-8?B?OHVRNFRvOVVWTzR6dWo0Y3hPL0hIYXFld2laWVZ4ZzI0QXErZ2dOclowaWhS?= =?utf-8?B?TVZic3E5bnVQVExSbmwyK0NIYWVrVzRRaElaa1ZhZ2JmRGRyc3FoMEVSSTFn?= =?utf-8?B?aVUrZHczdWxRZHpMUkR4YkFxZzMwVkQrWXNKQjVRSU5TN1pycENkak9DaHhP?= =?utf-8?B?ZVBTaGIrTk5lQkZnRytEM3RJRytFcFgwUEtTVXdsWVlZWE5sMURubUJFZXF3?= =?utf-8?B?STNTVGN1QXBkMmora0FScTF5M2p0NVRzRHJYODFjRFE1akRJRWRDL3lYTVFW?= =?utf-8?B?VksvUm80dldGbVRtRkp6RndPL1FHWTF4dysvTE1Lb09FNExTdk5mS0pwQnV5?= =?utf-8?B?T0NiU1ArbUl5R0pJYkh5bHdNRWFsc3dqWnUxSDFIWkEzQWhqSllOWlF4QTQ0?= =?utf-8?B?bzZvMzdEalROQ0lTZEpBQytNZWlBT1RydndFM25MMGZrN0FwclhuWS9HRjRP?= =?utf-8?Q?Y+Hy+MK8jJM61yVo/AHlkWCgelHo2dIWxGHi/bG?= X-MS-Exchange-CrossTenant-Network-Message-Id: 1bbd9453-e694-445c-1e81-08d90405f37f X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Apr 2021 14:09:45.7034 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Br+6PV/vvVSV4s/znOhGu+1M1wygWtaVzVywUtgtGf5otv2d7FRQpCy2ikUCYz2UxaFeTzULB/SuVpwYJANHog== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR03MB6000 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) There are no callers anymore passing a get_vector function pointer to hvm_isa_irq_assert, so drop the parameter. No functional change expected. Signed-off-by: Roger Pau Monn=C3=A9 Acked-by: Jan Beulich --- Changes since v3: - New in this version. --- xen/arch/x86/hvm/dm.c | 2 +- xen/arch/x86/hvm/irq.c | 10 +--------- xen/arch/x86/hvm/pmtimer.c | 2 +- xen/arch/x86/hvm/rtc.c | 2 +- xen/arch/x86/hvm/vpt.c | 2 +- xen/include/asm-x86/hvm/irq.h | 4 +--- 6 files changed, 6 insertions(+), 16 deletions(-) diff --git a/xen/arch/x86/hvm/dm.c b/xen/arch/x86/hvm/dm.c index b60b9f3364a..c62a259b7fc 100644 --- a/xen/arch/x86/hvm/dm.c +++ b/xen/arch/x86/hvm/dm.c @@ -110,7 +110,7 @@ static int set_isa_irq_level(struct domain *d, uint8_t = isa_irq, hvm_isa_irq_deassert(d, isa_irq); break; case 1: - hvm_isa_irq_assert(d, isa_irq, NULL); + hvm_isa_irq_assert(d, isa_irq); break; default: return -EINVAL; diff --git a/xen/arch/x86/hvm/irq.c b/xen/arch/x86/hvm/irq.c index 4825a387bdc..c3d8f2a786a 100644 --- a/xen/arch/x86/hvm/irq.c +++ b/xen/arch/x86/hvm/irq.c @@ -212,13 +212,10 @@ void hvm_gsi_deassert(struct domain *d, unsigned int = gsi) spin_unlock(&d->arch.hvm.irq_lock); } =20 -int hvm_isa_irq_assert(struct domain *d, unsigned int isa_irq, - int (*get_vector)(const struct domain *d, - unsigned int gsi)) +void hvm_isa_irq_assert(struct domain *d, unsigned int isa_irq) { struct hvm_irq *hvm_irq =3D hvm_domain_irq(d); unsigned int gsi =3D hvm_isa_irq_to_gsi(isa_irq); - int vector =3D -1; =20 ASSERT(isa_irq <=3D 15); =20 @@ -228,12 +225,7 @@ int hvm_isa_irq_assert(struct domain *d, unsigned int = isa_irq, (hvm_irq->gsi_assert_count[gsi]++ =3D=3D 0) ) assert_irq(d, gsi, isa_irq); =20 - if ( get_vector ) - vector =3D get_vector(d, gsi); - spin_unlock(&d->arch.hvm.irq_lock); - - return vector; } =20 void hvm_isa_irq_deassert( diff --git a/xen/arch/x86/hvm/pmtimer.c b/xen/arch/x86/hvm/pmtimer.c index 97b9e41712f..9d30b145f60 100644 --- a/xen/arch/x86/hvm/pmtimer.c +++ b/xen/arch/x86/hvm/pmtimer.c @@ -61,7 +61,7 @@ static void pmt_update_sci(PMTState *s) ASSERT(spin_is_locked(&s->lock)); =20 if ( acpi->pm1a_en & acpi->pm1a_sts & SCI_MASK ) - hvm_isa_irq_assert(s->vcpu->domain, SCI_IRQ, NULL); + hvm_isa_irq_assert(s->vcpu->domain, SCI_IRQ); else hvm_isa_irq_deassert(s->vcpu->domain, SCI_IRQ); } diff --git a/xen/arch/x86/hvm/rtc.c b/xen/arch/x86/hvm/rtc.c index 9992595c45a..b66ca6f64f1 100644 --- a/xen/arch/x86/hvm/rtc.c +++ b/xen/arch/x86/hvm/rtc.c @@ -63,7 +63,7 @@ static void rtc_update_irq(RTCState *s) =20 s->hw.cmos_data[RTC_REG_C] |=3D RTC_IRQF; hvm_isa_irq_deassert(vrtc_domain(s), RTC_IRQ); - hvm_isa_irq_assert(vrtc_domain(s), RTC_IRQ, NULL); + hvm_isa_irq_assert(vrtc_domain(s), RTC_IRQ); } =20 /* Called by the VPT code after it's injected a PF interrupt for us. diff --git a/xen/arch/x86/hvm/vpt.c b/xen/arch/x86/hvm/vpt.c index 6744b88d20c..639e45c520e 100644 --- a/xen/arch/x86/hvm/vpt.c +++ b/xen/arch/x86/hvm/vpt.c @@ -368,7 +368,7 @@ static bool inject_interrupt(struct periodic_time *pt) =20 case PTSRC_isa: hvm_isa_irq_deassert(d, irq); - hvm_isa_irq_assert(d, irq, NULL); + hvm_isa_irq_assert(d, irq); break; =20 case PTSRC_ioapic: diff --git a/xen/include/asm-x86/hvm/irq.h b/xen/include/asm-x86/hvm/irq.h index 57d51c15863..4e3534d4eb4 100644 --- a/xen/include/asm-x86/hvm/irq.h +++ b/xen/include/asm-x86/hvm/irq.h @@ -214,9 +214,7 @@ void hvm_pci_intx_deassert(struct domain *d, unsigned i= nt device, * allows us to get the interrupt vector in the protection of irq_lock. * For most cases, just set get_vector to NULL. */ -int hvm_isa_irq_assert(struct domain *d, unsigned int isa_irq, - int (*get_vector)(const struct domain *d, - unsigned int gsi)); +void hvm_isa_irq_assert(struct domain *d, unsigned int isa_irq); void hvm_isa_irq_deassert(struct domain *d, unsigned int isa_irq); =20 /* Modify state of GSIs. */ --=20 2.30.1 From nobody Tue Apr 30 03:18:07 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1618928113; cv=pass; d=zohomail.com; s=zohoarc; b=Al3PXPeyAPgLCRnMorFVvnFmM/T65IqIZFB9gDQ8UaR1Fufx6pBqKDldogRTfk+No59n3zDu17RHawFOos0dgwD9Vry2aLTACEFoxWMPT7vrtSSt3Y0trFD0mO83iabZyiOEy48MZ20o9KjdUDLg7KmNEIwQGmdeEzhZwJMGUQk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618928113; 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=/8G6ZphiMwjkLCnh/B+N1lg5s23KSmnn5KG1LwIN6mo=; b=UUJAlWBko1lm6M9fMGdnt1JNrHbo6CF0GUn9lr+ObE9agsWNuvxFqL/dM28s4v8rdzHritEE02VzG6++dxYZjgFsBCwmqA+B+7SZqF1MaEl8twbMW1OcOidQ5fRfufd4T03I+CQFPc2/hkWm5tx/cnF7aDVxiiL4gnLrZ30RZm0= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1618928113210163.433146146357; Tue, 20 Apr 2021 07:15:13 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.113804.216877 (Exim 4.92) (envelope-from ) id 1lYr9Q-0002lB-W7; Tue, 20 Apr 2021 14:14:52 +0000 Received: by outflank-mailman (output) from mailman id 113804.216877; Tue, 20 Apr 2021 14:14:52 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr9Q-0002l2-SZ; Tue, 20 Apr 2021 14:14:52 +0000 Received: by outflank-mailman (input) for mailman id 113804; Tue, 20 Apr 2021 14:14:52 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr4t-0000xF-6u for xen-devel@lists.xenproject.org; Tue, 20 Apr 2021 14:10:11 +0000 Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 2858213d-19f3-4c16-9308-28276496afce; Tue, 20 Apr 2021 14:09:56 +0000 (UTC) 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: 2858213d-19f3-4c16-9308-28276496afce DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1618927796; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=Vi/QQviJCSIXptO4sworOuxdl1wg4QnJXyCQBTzDZmg=; b=Eq4W+FvUTKSMUJkFf7EHCzAlYxJ77psNlup+w0owGfpBwqyBpzEYn/d2 vZXk7VFPUhgJuI0XaOl7qUMxjJDnhJev0sDDJffslsOW1WrkXGSHhMKkD 3fi/o7iXTvoEAIcqLICk8tmq7ZTWE/pG5QzEeIcI778a0NaAZfrWoLRk3 4=; Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: Wpx9aLvW0BGxBvCyrN1RMQg0zwqNHwOZN+CS7E4WCV3wl+ZIqT6SExzetTAnrXVVTAxaUrXIN2 jRsA7Znf3E6DIy2Lk1u9jkyt7R4xe/ZfQnFCpjbxmJp1Ev9ITkqpL5vrz6lDqoBgfVbVcapUdQ jjf7dkZMEf0lwwcY0aB+ztX/WSeK1kv7iS7/aJuvLDBZMF7NzKFDf6uKTFYxj+dI24j7MpKeY5 XcdMHxsk5EqVgEOCrKf6sXFUOzmzyI+lA5nj6LTcADBRqe9dwsamNfVnjNf6m1eP2FxfcGTprl x00= X-SBRS: 5.2 X-MesageID: 41981601 X-Ironport-Server: esa2.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-HdrOrdr: A9a23:/yCU7q2NXLufcIbxjpmRQwqjBWhyeYIsi2QD101hICF9WtCEls yogfQQ3QL1jjFUY307hdWcIsC7LE/035hz/IUXIPOeTBDr0VHYSb1KwKnD53nbGyP4/vNAzq sIScJDIfD5EFQSt6nHySaiFdJI+re62YSJocub8Ht3VwFtbMhbnmVEIyKWCFd/SgUDJbdRLv qhz/FKrTahZngbB/7TbhU4dtPOusHRk9beaQMGbiRN1CC1kTiq5LTmeiLovSs2bjUn+9Yf2F mAqSPVzOGJs/a3yhjTvlWjlah+qZ/a5fZoQOCJgsgRAD3whgivf5QJYcz+gBkF5NuBxXxvvN 7QowoxH8kb0QKsQkiF5SHD9iOl8DEy52TswVWV6EGT3vDRdXYBJOdqwad6GyGpj3YIjZVH/4 9gm1+9jd5xCyjNmSzsjuK4Ly1Cpw6PjlcJ1dIIg2c3a/p4VJZh6bYx0WlyC5k6ECfz+OkcYZ JTJfCZ3vpQfF+ABkqp2FVH8ZipVnQ3KB+MXlIPjMyTyyRXh3B01SIjtbUioks= X-IronPort-AV: E=Sophos;i="5.82,237,1613451600"; d="scan'208";a="41981601" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=njg1+i2ZTvkXEpkBMEL9xAtNWk3HTTXOh7kGvvpPWR3jT1rk+AsTeZfrCvyMWh/Eb2dhgP5XD5nJXCdbCo7NuDK1X8gpnrO0AahVnpkNLeOGBLH2SWGjLnCuBFrZp3DmZgXsyrRRuzHsVtDINz9BydBgK37CN4+SjotINOwZf5zumGADZzOJbrT36d4dkG8J1DDitgW1XE4WiImwLi9q+sGeaj8yq6MD9TMeEIHWU5ef0nDf/0QLmPMDNfNkMU47nr3ejBbDnKexXhzWNUKLnc2eMh4ltNOVpy0O8TVmJu8UN405gN3WnCBMduH3Bwm4pbbxfQGC+jwSLTC/pjXcNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/8G6ZphiMwjkLCnh/B+N1lg5s23KSmnn5KG1LwIN6mo=; b=oOpWZDQ5Txt/jQ6LUxPL1ulf/uUzALQKZkkrvtmnj/cfgjHMhGvr4J0V/Kf3LzWuOMplwxqP3+0HJ1FfRIP2eoOxiWmhbFmzc73BSRDTrfKRg6sgl5cpTZ+CJt1NJqFjDF/BUuNUL52ulIi93BWZZAiF2HdHwEmRtQFlB74tm/ZFkQDa2QjRHqwD6BvhElER3QvZ1OYSfPouY+IT4531m9B2hLpiL8HkBPA77QiWTZDvFTBFdske28+W0WuB+AuKwAy1Xe7mhThv1zPvY6d0W7xW/yhO+G++IOYP1GvPTbqkQgvYrl4prIxHcHtP9qFljJpfqBNZ0FU5smowNs2pQg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/8G6ZphiMwjkLCnh/B+N1lg5s23KSmnn5KG1LwIN6mo=; b=I/Lg/N8OWifczWXAsx6tCB93Je1iVplFFrk4iIgiwrb5EBr3ooIUVBbHvCNS1mAhmZcrJGUyhuzYD3+PlkzDXVPAgARGt5vy1DZ1Bf+LA3TnXCK2TBNikGL10DRBkYfhl0I/iPOO4pjUbvHSKr0evqagh6KYI5XPuVBJYm7V9HM= From: Roger Pau Monne To: CC: Roger Pau Monne , Jan Beulich , Andrew Cooper , Wei Liu Subject: [PATCH v4 10/12] x86/irq: drop return value from hvm_ioapic_assert Date: Tue, 20 Apr 2021 16:07:21 +0200 Message-ID: <20210420140723.65321-11-roger.pau@citrix.com> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210420140723.65321-1-roger.pau@citrix.com> References: <20210420140723.65321-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR2P264CA0040.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500::28) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 53b0597c-efe7-48fb-b2cd-08d90405f7c5 X-MS-TrafficTypeDiagnostic: DM4PR03MB6000: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4941; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: koAqw+I5BsffFXgWodMN8KdbC/X0ogyAWjRXM5+7xSwBBuC1Zg1X2v6t9hWvfND1QpFTZng+E8f5vujtno+Ow0ISOS/JP3Uod65p0BQlDNjOcswIggaFFrMyso7w+7DnDlcjG+wZLZ43SCURgXd2DkyBL+nYtTPWung+4VE0lEBi03+cMSgOQI3Ik1SlTbgiUxzCOYZ9BX7yEfsWx3OFASBwbnbA7YIjsOqxtPmEbehzD4O6wg3JS7kumd14tLq2M6CQnFBZTHmwRxCHsF8jOJrMQSzxdoDtzNo/Dki26FG5m5TaU+90/0MFjmSwKxkGmfIPP+mRAuMAt8AjOjT3aA8BkpIT0gAPKJiGhV4rpSB3zBtPoKTvLNDm7oCTjDOyaEowCeaiUeVKYT9li94mI8tvTc9iIM7fP2kiYB1F7aJe85LmAMN3PnazDbCu5Z6p5/I52eJq2dl7Yeod5bZJ5cva1ceqvHxIRL0RJVhOsDeSee4gH6TZb7aRNnUu2rxCEarDuOem6rZxPSjShUcRDpB8hTN6QmkGcOdqXRLeaYrLGMT/+XdxcMFoqlbjoWw4TwyUbw0jbO0mU+4qWxjPezw1lH4fr4/n1D/7eKBAd3I= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(396003)(376002)(39850400004)(136003)(366004)(6916009)(83380400001)(4326008)(38100700002)(16526019)(36756003)(316002)(956004)(6486002)(2616005)(6496006)(478600001)(8676002)(26005)(186003)(5660300002)(8936002)(54906003)(2906002)(6666004)(66476007)(1076003)(66556008)(86362001)(66946007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?VXQvWVVlNkpPVUtlTGsxdEsvSW04QkZjMGhhMytBamVLN0lIV3ZZSFRDR296?= =?utf-8?B?a3pTRzhad2NmOXM2d2ZGN2luMzFXdmhQdjltaWZ5dWVOa21yZTdjY3cvb1BS?= =?utf-8?B?M1JGaUxlZjd0d0lhSkFjVkZGdGZjeWRhaTlack1zeGRLNnVLYTMxeW1kMHRR?= =?utf-8?B?eDF0NFczcFZJYXhxeEE4cEM2YytIWTBEK05pSmxraXFrSG9tVHN3WlN4aXFh?= =?utf-8?B?b2JqZmhMNkVGVUlOek00RWRjeEh0Nm1MT1BUMnpMT3BtRWVYRmpTV3VFNndF?= =?utf-8?B?b094ak9xZDRyc21uaUlTUis3RGYxZ1lYTHVRajdUSnJrUG9GZGFWMXhBLy8w?= =?utf-8?B?TGRYcWFSNSt4TndIV2lXVzRoNUdNV25wYmtMbElrK3phdjRXMHk3T2htUjFr?= =?utf-8?B?cjlqdkRRR2dFaUtKWTNhSGxWdkx4bDgxOEp5dmNTaUFTSEJJS2JXZ3pHZDB6?= =?utf-8?B?em95YlNZS2RpMTJ6d1d5dlNxQlFRUWlEb0dvbytWTHIyYkg5L0hoeXJ6cmNs?= =?utf-8?B?WmI2MXBtVmtxblpJVXIrZ1A4NXByR09lcXh5RTIzTU9lZHJHWjlrQjBYUWxF?= =?utf-8?B?c2gwRDF0T2xENzZlQi9FSVU0dGM2SURSYVp6aHpvaTJqallUcUdXam9wajdQ?= =?utf-8?B?L2Fpd3RuQjJhNjN4NUF4V2s5bG1QUDZHMWxPdjJtTkpXVTBIYUxHSmQrM0dB?= =?utf-8?B?RHF1T0taZGVGeXNvRzZ4cjNmMEFWUEFRWG9BdnNvNzJxT0NMencyTnBqMS82?= =?utf-8?B?Rys5elhNRk9oaTA2MDNUZ2g0NUx2YmhQUjRBYk1uQStDTmp0eUhXem9KMWpX?= =?utf-8?B?UzFlN3JRVUdKNHFad2d4amlnaldHNnRQb0Z2K1cvUG4zeHRJcDdzZ2F2YTZt?= =?utf-8?B?SU9sTzNkRFQ5TlZHTlk3REh1Q0JMU2F1ZUlGK2t2dlgxZklqQitRV0FYcjFM?= =?utf-8?B?ejdXMnJ6QVIrMnB2YklLWU9JOU9BSDNDM2dTKzd5WWtmdSs3YjF5RTVUbjQv?= =?utf-8?B?OFlFL05LZ3U4OVdjV2xIQ09PTk9XdFhTL2ZNZ1ZqTW5KbnJjTDRHQmxLcm1r?= =?utf-8?B?clpHTGxuZ3VJL0h3Zk4xZW9LTE8yM0NZTnkvZnQ2NGNuUkZHL2lLQ0h1YitZ?= =?utf-8?B?RXJ5ejhWZktHY3V5NjBOZTdMMlpUMnZoam1ZRWRDZnluMTE3Vm5iKzdnN2U2?= =?utf-8?B?Q2pZbUtNUmVSWWxMeWRmc3hlTkZ2dENibElBT3NPRENqdG9IYTdRb1NkRjY5?= =?utf-8?B?bGdiaXhBTlI4V3JmelpDS080bHFzY2ZQclQ5YnVYRHZhTStrNmRyT1BmZlBO?= =?utf-8?B?eG81MjV4QVNxeTU4ekQ0SHBwbFNEMTlZSmk5QzVjdEsySmRvU0VrTWdVbUlt?= =?utf-8?B?b2lnOCtLNkZ3TW0rNUVYd1I0N1NlaHlBV2dlYWxuWFBwNHVvU004ZnkxOGpl?= =?utf-8?B?RHg5RHZ1VUFiWkV5KzRHZ1pDeWliaHRNTzVBeWlWTlFRVkU2eFBiZ2ZwTnVN?= =?utf-8?B?QW1TMFJLNTdVa2dtVjFlbFAxc1dlc0lnd1o0SGt2ZEEyZEFiWFpHZUJYRWZF?= =?utf-8?B?NU5ld2VjTnVQRW82ZmFSZFZYWlZUWUUyMG1lMTczaXIzbTBsTjRCUFRVSWRn?= =?utf-8?B?YVBDNG1ZNzVNTkxkZHowbUFtTUN5Q1lHRmtEVjZLa2hHSUVySVN2WXhUQTh4?= =?utf-8?B?cEMvUWtYbG9HUlBkWEhZa0ZROUdsZWxLSmhXUk1Xdm1sSGFGTGNvWGxFaGlI?= =?utf-8?Q?jw1Yk2uUJ8vbeXsUf5IVSABSoJaRD4//EbdHo1c?= X-MS-Exchange-CrossTenant-Network-Message-Id: 53b0597c-efe7-48fb-b2cd-08d90405f7c5 X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Apr 2021 14:09:52.9813 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: VXlOPkzeDOFCHxI57qG4RSNE2TSYXYksCxc0KlSuE871wK//5mKNVpTucPK5wNoYOI1YppoXDwutKNVMgNr8Zg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR03MB6000 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) There's no caller anymore that cares about the injected vector, so drop the returned vector from the function. No functional change indented. Signed-off-by: Roger Pau Monn=C3=A9 Acked-by: Jan Beulich --- Changes since v3: - New in this version. --- xen/arch/x86/hvm/irq.c | 8 ++------ xen/include/asm-x86/hvm/irq.h | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/xen/arch/x86/hvm/irq.c b/xen/arch/x86/hvm/irq.c index c3d8f2a786a..1c588e212f9 100644 --- a/xen/arch/x86/hvm/irq.c +++ b/xen/arch/x86/hvm/irq.c @@ -47,24 +47,20 @@ static void assert_gsi(struct domain *d, unsigned ioapi= c_gsi) vioapic_irq_positive_edge(d, ioapic_gsi); } =20 -int hvm_ioapic_assert(struct domain *d, unsigned int gsi, bool level) +void hvm_ioapic_assert(struct domain *d, unsigned int gsi, bool level) { struct hvm_irq *hvm_irq =3D hvm_domain_irq(d); - int vector; =20 if ( gsi >=3D hvm_irq->nr_gsis ) { ASSERT_UNREACHABLE(); - return -1; + return; } =20 spin_lock(&d->arch.hvm.irq_lock); if ( !level || hvm_irq->gsi_assert_count[gsi]++ =3D=3D 0 ) assert_gsi(d, gsi); - vector =3D vioapic_get_vector(d, gsi); spin_unlock(&d->arch.hvm.irq_lock); - - return vector; } =20 void hvm_ioapic_deassert(struct domain *d, unsigned int gsi) diff --git a/xen/include/asm-x86/hvm/irq.h b/xen/include/asm-x86/hvm/irq.h index 4e3534d4eb4..fda2f8e8ebf 100644 --- a/xen/include/asm-x86/hvm/irq.h +++ b/xen/include/asm-x86/hvm/irq.h @@ -226,7 +226,7 @@ int hvm_set_pci_link_route(struct domain *d, u8 link, u= 8 isa_irq); int hvm_inject_msi(struct domain *d, uint64_t addr, uint32_t data); =20 /* Assert/deassert an IO APIC pin. */ -int hvm_ioapic_assert(struct domain *d, unsigned int gsi, bool level); +void hvm_ioapic_assert(struct domain *d, unsigned int gsi, bool level); void hvm_ioapic_deassert(struct domain *d, unsigned int gsi); =20 void hvm_maybe_deassert_evtchn_irq(void); --=20 2.30.1 From nobody Tue Apr 30 03:18:07 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1618927824; cv=pass; d=zohomail.com; s=zohoarc; b=ZWr6LSBBip8q7wyfIU0BbPKaRa/8CKuTVqzHq591e17Ui5sIMLXzelF6qBSL3BvSzYvEL6A+QgvY4emZK3MFT6+CqAbMtiq2TUdv3Wd5KG8wc9CdHQiTpNdR/j5pj2FQkN0grgOsA7D1UlSTe6pOFcI1Vff87TnU27A6EBoO9IU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618927824; 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=KpczQuO47SkhWWpbzazODSpFWqenkbs2N4Y7huesY2k=; b=GXu7KI4Q/kHKYj7yXb7mpY0Dynk96ngZNH5blbdbqB1txMxmAyYeRoGutRP6QkyM48QJglqu/ZW5w2yJl/pHDhOLRHuOe/sClY2DbZ7wunY9SmsIHIrRHtb3pECUMyyCykqxqJMghsF/Uy3cRd+PWS9FdUKflNk1zRTleMRXrUI= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1618927824539295.4417442006577; Tue, 20 Apr 2021 07:10:24 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.113779.216853 (Exim 4.92) (envelope-from ) id 1lYr4o-00023g-V2; Tue, 20 Apr 2021 14:10:06 +0000 Received: by outflank-mailman (output) from mailman id 113779.216853; Tue, 20 Apr 2021 14:10:06 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr4o-00023V-QW; Tue, 20 Apr 2021 14:10:06 +0000 Received: by outflank-mailman (input) for mailman id 113779; Tue, 20 Apr 2021 14:10:05 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr4n-0001lG-2b for xen-devel@lists.xenproject.org; Tue, 20 Apr 2021 14:10:05 +0000 Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 90bd426b-64ac-423a-b518-259ed8123f39; Tue, 20 Apr 2021 14:10:03 +0000 (UTC) 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: 90bd426b-64ac-423a-b518-259ed8123f39 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1618927803; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=EawpHgaCPssKy0w03Zn3vt1Po3SOLbn8R3gB+qDePj0=; b=UTaIBj+dJjxLFd8eUtvLtlec3RqQVOIRyUFy/dIYF+jgQvgjR5HPwCMe 9lZHC9MkvnmpQI7m8ufPedLjhHrDGg0qgBqi2SwkC3aPBdDZHGi07Qe8O 2LFJuc22UihR8u7UOeMrn+lmbBvQqbolHoxZwyqvtEbuREGpQQgGEd6dr o=; Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: XOe7fnT/5ubb+lD/7lVLeXqTOp8nPSdy0sXX8INu0wjghZKVflCXppAuSAmdK1O3bjuT8Nw0LB u82cNySaWZL35V6TdxA942yXs3NPGBrvslKzs0Syw0JscaP64ERKvO79BFMlpPlxulFEk1l5N7 UpchroWs+AbTEgMvmcfnIFaIr/NaPCQFgYwf1OizZ+b8TkAmdWCf0QvqvNhWS1cHTFizgB0rbv OCUPWnogOFNJXLIQRUara5A0JRTU4H9dsrwqWsQsAbUOu2g4jQXhc1W+XAT0vnLGsSCQjVpYH4 IYA= X-SBRS: 5.2 X-MesageID: 42368720 X-Ironport-Server: esa1.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-HdrOrdr: A9a23:6JPnbq5p3dhQW7a7ewPXwU2EI+orLtY04lQ7vn1ZYSd+NuSFis Gjm+ka3xfoiDAXHEotg8yEJbPoexzh3LZPy800Ma25VAfr/FGpIoZr8Jf4z1TbdxHW3tV2kZ 1te60WMrDNJHBnkMf35xS5Gd48wN+BtJuln/va0m0Fd2BXQotLhj0JbjqzOEtwWQVAGN4FD5 Ka/MVKvH6Nfn4QY8S9CBA+LpT+jvfMk4/rZgNDOg4/5GC1/E6VwZPZMzzd5BcRVDtT3awvmF KqryXV7riu2svLrCP0+HTU6/1t6bnc4/tFQPeBk80Ebgjr4zzYH7hJf52nkHQLrPq06FAs+e O80ysIG8ho8XveciWUjHLWqnDd+Q0j4XPj1lOU6EGLyaeSJENYerh8rLlUfRfD500rsMsU6t Mw40uju4dKFhSFpSzh5rHzJmBXv3Cpqnkvm/N7tQ05baIibtZq3Oki1XIQOpIBECXm0ZsgAe ljAerNjcwmD2+yXjT3uHJiz8erWWl2NhCaQlIassjQ6DROmmtlpnFoiPA3rzMlztYQWpNE7+ PLPuBBk6xPdNYfaeZYCP0aScW6J2TRSXv3QS2vCGWiMJtCF2PGqpbx7rlwzvqtYoY0wJw7n4 mEeE9EtEYpEnieSfGm7dluyFTgUW+9VTPixoV1/J5ioIDxQ7LtLGmqVE0uqc29uP8Sa/erGs qbCdZzObvOPGHuEYFG00nVQJ9JM0QTV8UTp5IVQFSLjsXXKpD7l+DSffrJTYCdUwoMayfaOD 8uTTLzLMJP4gSAQXnjmiXcXHvrZwje8PtLYe3n1tlW7LJIGpxHswATh1j8zNqMMyd+vqs/e1 Y7BLvml6i8tFSn5Gqg1RQsBjNtSmJupJnwWXJDogEHd2nud6wYhtmZcWdOmFyKOwF4VMGTNA JEvVx49eaWIvWrtG4fIuPiFljfo2oYpXqMQZtZsLaE/93ZdpQxCYtjfrdwGwXNHxlcgh1rt2 9HVQ8BSibkZ3DToJTgqKZRKPDUdtF6jgvuC9VTs2jjuUKVotxqemEWRAe0UcmcgR8nQh1dgl EZyd5ZvJOw3RKUbUcviuUxN1NBLECaGqhPAgi+aIJIobzzYw1rQWCWhTuVtgErdgPRhjYvr1 2kCRfRVeDAA1JbtHwd6Krs/V9uXki2fk57aBlBwMZAPFWDnkw2/f6AZ6K13WfUV0ALxfsFNi rZJREIJBl1+tyx3BmJuTqLGHk83K8yNujFALlLScCU5lqdbKmz0Y0WFf5d+5hocO30uugQSO SFZku7Kij7B+5B4X3iml8VfA1P7F8qnvPj1Ee7sCyW3HsjDeHTJ1ojbbcBON2Y53XlQfHN8J gRt6NAgcKAdkHKLviBwuXrShQGDDX5i2u/VfspppBZprhajso6I7DrFR/zkEha1xA/JvrunE wQQK5H8KnMU7UfCvA6SmZ8xB4Vj9yBI0sgjxzuDsI/dV8riWXHP9nh2cu+lZMfRmmIpA79Ij CkglVg1saAeyuIzrgBDa0sZUxQdUgn8XxnldnyPbH4OUGPd+tZ+kC9PWL4WLhBSLKdEbFVih ph+dmHk6u2cCX/sTqg8AdTE+Zr82y9R9m1Dx/JMelU88aiMVDJu5CU2qeI/X7KYAr+TV8Zi4 1DfVERacoGqgBKtvxJ7gGCDortokwklFNC5ypAjVCF4Pn+3Fvm X-IronPort-AV: E=Sophos;i="5.82,237,1613451600"; d="scan'208";a="42368720" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QwMWEJR/YE+3blOd47hlIhfmIPlZpXJ5H2c2BwwA4FlWQTskJIF5KGgiFBXrazoWUZ+Mpg+3rAFo9LSCZew+tK4Rx525mzjMtMn8ZTByTk5QIrMBoyBWprEscBb3hK2gFBMIaqKQiyfuvVq4hOIVE2Y8xg43RFP/OOtrzz64Ub/CP4m6E9zdS0A1TFRlBQZwQ1wgVItWHAkEJotwIi36xNSQjBKnfEGmFUqYtt+gajLTmHaT7h9OBbU/9RKd7xfVDArY1W4EEpY3h4qFVZwJSCZ+nojrApjJyduxVu1SGIRXaAbtCZRSkWUxTJWUgOR6j2xkZFPnIvol5DkUdzxiqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KpczQuO47SkhWWpbzazODSpFWqenkbs2N4Y7huesY2k=; b=YrPtwHcnZZi3xe/GGmkFOE4HqBUWbGGlQ+Gb+ImyX+t9+k5lPwpP8+XlsGV4VWtyTsStwEbyt7vOz9EfaM6i+sE+UEpjGc0Xq89BEYwb2JSBfyZhIkOn6/a9ivuaHtyMpQtM0cqYZM8MgN8IAW4XuP86MqkfwPtEvgA9TWnTW1x5/MUoVA9TaMOI690rUikSR7dj1i1Cfs4Yp17Zc3lqOksuDQVCTXYBdDclvRYSoafuv3DKBiIfxmhZdWVgUu4v2DzNjtsXVIq+K3jCxK6J3FUpKA08wlBSEB1nUj+u40ih0UlRpJETilpQ4ViOx/GxvPl2GtQ9dAqRMV7PLymWmg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KpczQuO47SkhWWpbzazODSpFWqenkbs2N4Y7huesY2k=; b=YA/riF+sNtVKRT/Yz4IZjIxeKWlRDsACPRSDCmaSiMuiha1OH+7tV1Q73LkjYY2RbabqtNibvhoKtWMMppDkyOF3zQX/AVjTJ6xZTCo7M/FXodoAGvjZaT+WacQp+B4sOlPNKPVK6d3qPRExF6i/bCoHGMxgMhRVu9D/oWEUHrA= From: Roger Pau Monne To: CC: Roger Pau Monne , Jan Beulich , Andrew Cooper , Wei Liu Subject: [PATCH v4 11/12] x86/vpt: remove vPT timers per-vCPU lists Date: Tue, 20 Apr 2021 16:07:22 +0200 Message-ID: <20210420140723.65321-12-roger.pau@citrix.com> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210420140723.65321-1-roger.pau@citrix.com> References: <20210420140723.65321-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR2P264CA0177.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501::16) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3e8d0619-2564-4581-8b16-08d90405fbae X-MS-TrafficTypeDiagnostic: DM5PR03MB3068: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:227; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ot903jG5ohElQrZBEWVAxJj1c9HSJ3w1/sHAADpXPis0O5bnR4cWah9w1MuGRJzzITEMEvIPSg4H05VqniJLtQSrAEsT3bp/ggbe7x86oRZr6SJeg+sQnMshLp+Gq16tohFgYizczOpyRRitCatN/13MW4eikCfNvbTX4pglwYA1t4IaLMg9EYAfyuSBSx2T7HcU/06uuyRBoZrWuCVYjsRd7OeyJkq3xBz9fAaEQ0l5Ic2DRe2n4//CQuAyPSAZvIe6MgyMnMC7oKL9g4DlpOiHphejarCsGXMeIat3S6Gpims2HGnKLKQzCFgtSCNDTQtlMI+RaOuMk2VCGmjgsvn+z+lHQliUYn5Fk2PWsvEcifPEEgBEvx0InYBogbkrBWXnnSAhenbB3XneSDQoMx1mOBZTsfx01U7d92emPPvSuUo5Xb9V8XtHxddwff8OCmW9PsWaB/QVWf3CjYcvgByblBiHjrTh3OUuXg+H2A0VheuUpasIUG1V/IUWIrW7UrHQSW+hZ7ZrpB6fTEW3slL2MqNo9GtyvcpQHqJ8tQ14XiafCJDGBT5SZ3SBjSPLdqOaXP3IDrspIreU0XUJvW32xgUgRUPYC7X3Ha2wp1k= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(346002)(366004)(39860400002)(136003)(396003)(54906003)(316002)(2906002)(6486002)(30864003)(956004)(1076003)(38100700002)(36756003)(2616005)(16526019)(5660300002)(6496006)(83380400001)(4326008)(8676002)(26005)(66556008)(66946007)(66476007)(186003)(8936002)(86362001)(6666004)(478600001)(6916009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?MStEdzRJcUkxWG9acWJvTXF2Wlc4aHo1OCtGdFA3d3prUVBReVRHSXBFby81?= =?utf-8?B?dG5PeXpTTjk0TFBUcTQyWlI2Si8xMys4WWVMS0lqd1BLeVQza3l1dmlxT1g1?= =?utf-8?B?V01RU1lOS010eTl5c3g4Z1VsU2dMVSszOUNZcDBtbEVXT3pMR2pJZ1NmRm9K?= =?utf-8?B?TW1IaGMveDFoVUlHOEsvZEFIdGZmWkN6NzZDc1JHakhDZU5HRFI0V3JDejlq?= =?utf-8?B?dWpuWi8vaEhtZndiWXlCMU1YcW9hN09EMk1TQ2NMQ0ZKVGVaTW1lallmV2t6?= =?utf-8?B?Kzg5T3d4TWZlUGh6eGNUdENhRUVmeUg3MHZtVE1ZeUdxZ24zei9QQldaTGFU?= =?utf-8?B?S2ZpeVRqTnVtYnhFSnNNanh2Wlk4cHd1aFVhUHNJSlZsbUVMZUlpZ09yQ0c3?= =?utf-8?B?b1pWVW5JSWZSdmtYQ0t2dlRjV3RpSlBvQXFkOFBva3NlWFJtN0tyckdENkxp?= =?utf-8?B?YnJxaVNWaUxPVjVkeEM4d213RXJDbjNKazdNbjdhU0o4d0dHWHIyTFZJVUpI?= =?utf-8?B?cnk4WHR3b3hxeCtISVhUODcwWXl2UlJUcm4xVGkrUnlUTjFoNmVidTFxMWwx?= =?utf-8?B?Q0U5NzJqbzc1RmtmRVgzcWlNZTlNcnNMZzNvRUpzbWdsZ3RNNTZPbTFLSkt6?= =?utf-8?B?SU9UTThNUjdhWXJyZEhhQlk5RVlNTTZDaW5UN3NKK0xTaWJHR2tuZG1xM0J2?= =?utf-8?B?ZmJnSnNQZFhvS1Z2d012aVo2NXpRaGlPZHUycVRsOUpWRStNR2ZPdHl1MlEx?= =?utf-8?B?NksxK1haR1FqTlBpdVltVmROUDVSWVN1Slo4RmpNcDAxaEVwQ0g1UFMvVTJ5?= =?utf-8?B?L2NxejNmdmNYR0E0M3JhWFVlRFdxaDZER3BBUHh6aGE5bzVFS3hPWWg3Y1NV?= =?utf-8?B?QjErRmFlWko0ZkZqc1U5V21SNVpHemsyWFQxdlZ0aUpTRWxXQzdDT0RWcnUz?= =?utf-8?B?aGZJakdBSkJvcUliM0pJN0hFUEVkNGRGZWNMeFlYMXB0bGtQeTBjdm4xUkJy?= =?utf-8?B?bjZGNndkaStVWS9Ybk4yclNLL1ZDbjNJa05Mc21CTmtjVTB2SjloNi94VU9C?= =?utf-8?B?RG9IQ0VCdlU5RkR5T2JwR1hSdmprK2dkSDk2NEljU3hjYVFzNDUyOWY1cTQ0?= =?utf-8?B?Y0RNeGZaUFFxUSsxQmZLRXVUVlozMkdvcTJ3WVJsN3Q2MHZOa05IMjNnMHBT?= =?utf-8?B?dDZEeGVXWHptY2dxdFVYUlFxOXRMckJzSnlzc1g1QjhDYUZwekxZaDBHWGdV?= =?utf-8?B?Qk1DQ3lycHBMRVhqWEdLZjdaK0MxcHllWWVhV0I2LzJRY2JFaS9rYlZEeGwx?= =?utf-8?B?bWJ2QVpwcU03TmRObU1PY2dhajd3VUVIRXExUW1lODNvRU9BSGdWcDFJR0FO?= =?utf-8?B?V2FObzlXNDlHTXBXN0E1OFU5eTZVVGpNYkNtTmdwNHk0UW01aGp6L2tzOGx4?= =?utf-8?B?dTZlWlRnMkhma1h3T3JXWU5CN2RKd05ObGQzck5zOUFaQlRTK2t6L1dzWEl6?= =?utf-8?B?OFpDeVZhYlJHdXZKSjM3dGU0M1NPc0xKR0FpejRoWVI1Vi9uMDlSS3JhUVRz?= =?utf-8?B?SEJRZVpWMXY5Vi8ybHJRc2NiZ3o3djNkVUs2NkJMdTlMSWtMSnhVamYyN2Y1?= =?utf-8?B?N0FneWZBYitHaWdkL1pUZ0M2OHdHbjdSYmVCV2UxRWJXQlpqQU9xQmVvQ3ho?= =?utf-8?B?NkV4SDJ6RVQwQzMyMEV6V1k3NWhPaUkwWEM4Ty9DUnJEbmFtYkFSN2oraXl0?= =?utf-8?Q?PJf8LWTRDSYbnC/lzrt4kOQRtnN/1MC4UJW6x0B?= X-MS-Exchange-CrossTenant-Network-Message-Id: 3e8d0619-2564-4581-8b16-08d90405fbae X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Apr 2021 14:09:59.4807 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 7VlPeKNLGt6z5IN3PjjXlqE71FQFDsAomWRlaVsOeK2UZZ3dAfc26CaT5LG6TJGEH9XRExjsAQ8eDzT2zO9rDg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR03MB3068 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) No longer add vPT timers to lists on specific vCPUs, since there's no need anymore to check if timer interrupts have been injected on return to HVM guest. Such change allows to get rid of virtual timers vCPU migration, and also cleanup some of the virtual timers fields that are no longer required. The model is also slightly different now in that timers are not stopped when a vCPU is de-scheduled. Such timers will continue running, and when triggered the function will try to inject the corresponding interrupt to the guest (which might be different than the currently running one). Note that the timer triggering when the guest is no longer running can only happen once, as the timer callback will not reset the interrupt to fire again. Such resetting if required will be done by the EOI callback. Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Jan Beulich --- Changes since v3: - Remove stale commit log paragrpah. Changes since v2: - Remove pt_{save/restore}_timer and instead use pt_{freeze/thaw}_time. - Remove the introduction of the 'masked' field, it's not needed. - Rework pt_active to use timer_is_active. Changes since v1: - New in this version. --- xen/arch/x86/domain.c | 4 +- xen/arch/x86/hvm/hvm.c | 4 +- xen/arch/x86/hvm/vlapic.c | 1 - xen/arch/x86/hvm/vpt.c | 192 ++++----------------------------- xen/include/asm-x86/hvm/vcpu.h | 3 +- xen/include/asm-x86/hvm/vpt.h | 12 +-- 6 files changed, 25 insertions(+), 191 deletions(-) diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index 4dc27f798e7..b6cd715dce9 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -2039,8 +2039,8 @@ void context_switch(struct vcpu *prev, struct vcpu *n= ext) vpmu_switch_from(prev); np2m_schedule(NP2M_SCHEDLE_OUT); =20 - if ( is_hvm_domain(prevd) && !list_empty(&prev->arch.hvm.tm_list) ) - pt_save_timer(prev); + if ( is_hvm_domain(prevd) ) + pt_freeze_time(prev); =20 local_irq_disable(); =20 diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index 2c4dd1b86f2..ec4ab1f5199 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -489,7 +489,6 @@ void hvm_set_info_guest(struct vcpu *v) void hvm_migrate_timers(struct vcpu *v) { rtc_migrate_timers(v); - pt_migrate(v); } =20 void hvm_migrate_pirq(struct hvm_pirq_dpci *pirq_dpci, const struct vcpu *= v) @@ -544,7 +543,7 @@ void hvm_do_resume(struct vcpu *v) { check_wakeup_from_wait(); =20 - pt_restore_timer(v); + pt_thaw_time(v); =20 if ( !vcpu_ioreq_handle_completion(v) ) return; @@ -1559,7 +1558,6 @@ int hvm_vcpu_initialise(struct vcpu *v) hvm_asid_flush_vcpu(v); =20 spin_lock_init(&v->arch.hvm.tm_lock); - INIT_LIST_HEAD(&v->arch.hvm.tm_list); =20 rc =3D hvm_vcpu_cacheattr_init(v); /* teardown: vcpu_cacheattr_destroy= */ if ( rc !=3D 0 ) diff --git a/xen/arch/x86/hvm/vlapic.c b/xen/arch/x86/hvm/vlapic.c index 8f3a0a2e8f7..2af24989dd5 100644 --- a/xen/arch/x86/hvm/vlapic.c +++ b/xen/arch/x86/hvm/vlapic.c @@ -1342,7 +1342,6 @@ void vlapic_adjust_i8259_target(struct domain *d) if ( d->arch.hvm.i8259_target =3D=3D v ) return; d->arch.hvm.i8259_target =3D v; - pt_adjust_global_vcpu_target(v); } =20 int vlapic_has_pending_irq(struct vcpu *v) diff --git a/xen/arch/x86/hvm/vpt.c b/xen/arch/x86/hvm/vpt.c index 639e45c520e..6a8d216c7b5 100644 --- a/xen/arch/x86/hvm/vpt.c +++ b/xen/arch/x86/hvm/vpt.c @@ -125,24 +125,6 @@ static int pt_irq_masked(struct periodic_time *pt) return 1; } =20 -/* - * Functions which read (maybe write) all periodic_time instances - * attached to a particular vCPU use pt_vcpu_{un}lock locking helpers. - * - * Such users are explicitly forbidden from changing the value of the - * pt->vcpu field, because another thread holding the pt_migrate lock - * may already be spinning waiting for your vcpu lock. - */ -static void pt_vcpu_lock(struct vcpu *v) -{ - spin_lock(&v->arch.hvm.tm_lock); -} - -static void pt_vcpu_unlock(struct vcpu *v) -{ - spin_unlock(&v->arch.hvm.tm_lock); -} - /* * Functions which want to modify a particular periodic_time object * use pt_{un}lock locking helpers. @@ -176,14 +158,12 @@ static void pt_process_missed_ticks(struct periodic_t= ime *pt) return; =20 missed_ticks =3D missed_ticks / (s_time_t) pt->period + 1; - if ( mode_is(pt->vcpu->domain, no_missed_ticks_pending) ) - pt->do_not_freeze =3D !pt->pending_intr_nr; - else + if ( !mode_is(pt->vcpu->domain, no_missed_ticks_pending) ) pt->pending_intr_nr +=3D missed_ticks; pt->scheduled +=3D missed_ticks * pt->period; } =20 -static void pt_freeze_time(struct vcpu *v) +void pt_freeze_time(struct vcpu *v) { if ( !mode_is(v->domain, delay_for_missed_ticks) ) return; @@ -191,7 +171,7 @@ static void pt_freeze_time(struct vcpu *v) v->arch.hvm.guest_time =3D hvm_get_guest_time(v); } =20 -static void pt_thaw_time(struct vcpu *v) +void pt_thaw_time(struct vcpu *v) { if ( !mode_is(v->domain, delay_for_missed_ticks) ) return; @@ -203,52 +183,11 @@ static void pt_thaw_time(struct vcpu *v) v->arch.hvm.guest_time =3D 0; } =20 -void pt_save_timer(struct vcpu *v) -{ - struct list_head *head =3D &v->arch.hvm.tm_list; - struct periodic_time *pt; - - if ( v->pause_flags & VPF_blocked ) - return; - - pt_vcpu_lock(v); - - list_for_each_entry ( pt, head, list ) - if ( !pt->do_not_freeze ) - stop_timer(&pt->timer); - - pt_freeze_time(v); - - pt_vcpu_unlock(v); -} - -void pt_restore_timer(struct vcpu *v) -{ - struct list_head *head =3D &v->arch.hvm.tm_list; - struct periodic_time *pt; - - pt_vcpu_lock(v); - - list_for_each_entry ( pt, head, list ) - if ( pt->pending_intr_nr =3D=3D 0 ) - set_timer(&pt->timer, pt->scheduled); - - pt_thaw_time(v); - - pt_vcpu_unlock(v); -} - static void irq_eoi(struct periodic_time *pt) { - pt->irq_issued =3D false; - if ( pt->one_shot ) { - if ( pt->on_list ) - list_del(&pt->list); - pt->on_list =3D false; pt->pending_intr_nr =3D 0; - return; } =20 @@ -266,7 +205,11 @@ static void irq_eoi(struct periodic_time *pt) } =20 if ( !pt->pending_intr_nr ) + { + /* Make sure timer follows vCPU. */ + migrate_timer(&pt->timer, current->processor); set_timer(&pt->timer, pt->scheduled); + } } =20 static void pt_timer_fn(void *data) @@ -282,21 +225,15 @@ static void pt_timer_fn(void *data) v =3D pt->vcpu; irq =3D pt->irq; =20 - if ( inject_interrupt(pt) ) + pt->scheduled +=3D pt->period; + + if ( !inject_interrupt(pt) ) + pt->pending_intr_nr++; + else { - pt->scheduled +=3D pt->period; - pt->do_not_freeze =3D 0; cb =3D pt->cb; cb_priv =3D pt->priv; } - else - { - /* Masked. */ - if ( pt->on_list ) - list_del(&pt->list); - pt->on_list =3D false; - pt->pending_intr_nr++; - } =20 pt_unlock(pt); =20 @@ -313,22 +250,12 @@ static void eoi_callback(struct periodic_time *pt) pt_lock(pt); =20 irq_eoi(pt); - if ( pt->pending_intr_nr ) + if ( pt->pending_intr_nr && inject_interrupt(pt) ) { - if ( inject_interrupt(pt) ) - { - pt->pending_intr_nr--; - cb =3D pt->cb; - cb_priv =3D pt->priv; - v =3D pt->vcpu; - } - else - { - /* Masked. */ - if ( pt->on_list ) - list_del(&pt->list); - pt->on_list =3D false; - } + pt->pending_intr_nr--; + cb =3D pt->cb; + cb_priv =3D pt->priv; + v =3D pt->vcpu; } =20 pt_unlock(pt); @@ -397,19 +324,6 @@ static bool inject_interrupt(struct periodic_time *pt) return true; } =20 -void pt_migrate(struct vcpu *v) -{ - struct list_head *head =3D &v->arch.hvm.tm_list; - struct periodic_time *pt; - - pt_vcpu_lock(v); - - list_for_each_entry ( pt, head, list ) - migrate_timer(&pt->timer, v->processor); - - pt_vcpu_unlock(v); -} - void create_periodic_time( struct vcpu *v, struct periodic_time *pt, uint64_t delta, uint64_t period, uint8_t irq, time_cb *cb, void *data, bool level) @@ -429,8 +343,6 @@ void create_periodic_time( write_lock(&v->domain->arch.hvm.pl_time->pt_migrate); =20 pt->pending_intr_nr =3D 0; - pt->do_not_freeze =3D 0; - pt->irq_issued =3D 0; =20 /* Periodic timer must be at least 0.1ms. */ if ( (period < 100000) && period ) @@ -488,11 +400,6 @@ void create_periodic_time( break; } =20 - pt_vcpu_lock(v); - pt->on_list =3D 1; - list_add(&pt->list, &v->arch.hvm.tm_list); - pt_vcpu_unlock(v); - init_timer(&pt->timer, pt_timer_fn, pt, v->processor); set_timer(&pt->timer, pt->scheduled); =20 @@ -508,9 +415,6 @@ void destroy_periodic_time(struct periodic_time *pt) return; =20 pt_lock(pt); - if ( pt->on_list ) - list_del(&pt->list); - pt->on_list =3D 0; pt->pending_intr_nr =3D 0; =20 gsi =3D pt->irq; @@ -532,64 +436,6 @@ void destroy_periodic_time(struct periodic_time *pt) kill_timer(&pt->timer); } =20 -static void pt_adjust_vcpu(struct periodic_time *pt, struct vcpu *v) -{ - ASSERT(pt->source =3D=3D PTSRC_isa || pt->source =3D=3D PTSRC_ioapic); - - if ( pt->vcpu =3D=3D NULL ) - return; - - write_lock(&v->domain->arch.hvm.pl_time->pt_migrate); - - if ( pt->vcpu =3D=3D v ) - goto out; - - pt_vcpu_lock(pt->vcpu); - if ( pt->on_list ) - list_del(&pt->list); - pt_vcpu_unlock(pt->vcpu); - - pt->vcpu =3D v; - - pt_vcpu_lock(v); - if ( pt->on_list ) - { - list_add(&pt->list, &v->arch.hvm.tm_list); - migrate_timer(&pt->timer, v->processor); - } - pt_vcpu_unlock(v); - - out: - write_unlock(&v->domain->arch.hvm.pl_time->pt_migrate); -} - -void pt_adjust_global_vcpu_target(struct vcpu *v) -{ - struct PITState *vpit; - struct pl_time *pl_time; - int i; - - if ( !v || !has_vpit(v->domain) ) - return; - - vpit =3D &v->domain->arch.vpit; - - spin_lock(&vpit->lock); - pt_adjust_vcpu(&vpit->pt0, v); - spin_unlock(&vpit->lock); - - pl_time =3D v->domain->arch.hvm.pl_time; - - spin_lock(&pl_time->vrtc.lock); - pt_adjust_vcpu(&pl_time->vrtc.pt, v); - spin_unlock(&pl_time->vrtc.lock); - - write_lock(&pl_time->vhpet.lock); - for ( i =3D 0; i < HPET_TIMER_NUM; i++ ) - pt_adjust_vcpu(&pl_time->vhpet.pt[i], v); - write_unlock(&pl_time->vhpet.lock); -} - static void pt_resume(struct periodic_time *pt) { struct vcpu *v; @@ -600,14 +446,12 @@ static void pt_resume(struct periodic_time *pt) return; =20 pt_lock(pt); - if ( pt->pending_intr_nr && !pt->on_list && inject_interrupt(pt) ) + if ( pt->pending_intr_nr && inject_interrupt(pt) ) { pt->pending_intr_nr--; cb =3D pt->cb; cb_priv =3D pt->priv; v =3D pt->vcpu; - pt->on_list =3D 1; - list_add(&pt->list, &pt->vcpu->arch.hvm.tm_list); } pt_unlock(pt); =20 diff --git a/xen/include/asm-x86/hvm/vcpu.h b/xen/include/asm-x86/hvm/vcpu.h index 8adf4555c2a..9a756964fb0 100644 --- a/xen/include/asm-x86/hvm/vcpu.h +++ b/xen/include/asm-x86/hvm/vcpu.h @@ -148,9 +148,8 @@ struct hvm_vcpu { s64 cache_tsc_offset; u64 guest_time; =20 - /* Lock and list for virtual platform timers. */ + /* Lock for virtual platform timers. */ spinlock_t tm_lock; - struct list_head tm_list; =20 bool flag_dr_dirty; bool debug_state_latch; diff --git a/xen/include/asm-x86/hvm/vpt.h b/xen/include/asm-x86/hvm/vpt.h index 384d2e02039..323afa605e7 100644 --- a/xen/include/asm-x86/hvm/vpt.h +++ b/xen/include/asm-x86/hvm/vpt.h @@ -31,11 +31,7 @@ typedef void time_cb(struct vcpu *v, void *opaque); =20 struct periodic_time { - struct list_head list; - bool on_list; bool one_shot; - bool do_not_freeze; - bool irq_issued; bool warned_timeout_too_short; bool level; #define PTSRC_isa 1 /* ISA time source */ @@ -151,11 +147,9 @@ struct pl_time { /* platform time */ struct domain *domain; }; =20 -void pt_save_timer(struct vcpu *v); -void pt_restore_timer(struct vcpu *v); -void pt_migrate(struct vcpu *v); +void pt_freeze_time(struct vcpu *v); +void pt_thaw_time(struct vcpu *v); =20 -void pt_adjust_global_vcpu_target(struct vcpu *v); #define pt_global_vcpu_target(d) \ (is_hvm_domain(d) && (d)->arch.hvm.i8259_target ? \ (d)->arch.hvm.i8259_target : \ @@ -164,7 +158,7 @@ void pt_adjust_global_vcpu_target(struct vcpu *v); void pt_may_unmask_irq(struct domain *d, struct periodic_time *vlapic_pt); =20 /* Is given periodic timer active? */ -#define pt_active(pt) ((pt)->on_list || (pt)->pending_intr_nr) +#define pt_active(pt) ((pt)->pending_intr_nr || timer_is_active(&(pt)->tim= er)) =20 /* * Create/destroy a periodic (or one-shot!) timer. --=20 2.30.1 From nobody Tue Apr 30 03:18:07 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1618928413; cv=pass; d=zohomail.com; s=zohoarc; b=lEZmiCyW0BDInc2XQskHY0qeFSEHs9TB5otrcqbW31o23qRe1LuXAjoonVycGpiD4l8Kr8nuYxwHRE12cJwFvUMmnlBSxl4cNnleW6Ghl8hXzewJXdqFpSEHs8amho5ETukgJewRnaylbUlksLsbvMX2yj7iGMILSDEbQAgsY7M= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1618928413; 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=cPLww0jyAC3ZvVT3vwHc3Orw5CsWBNndVX/YLz+UW6g=; b=X1sHNKAec9ugZGiFVvO59/+a/uOn/A1rSOaGO3XEwvmrIi7gziYRB0TILl5A8VvDBfRtrP1wezMOg8l+/hPav0UDVj+EGKriljwTO7vISaTjNd7ObICHxWstYFRcAUgqO7sL2N5yDCy7WokhZ2EGx8O06AJuLiC8dFDpmjr3Ofs= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1618928413115493.5977677609767; Tue, 20 Apr 2021 07:20:13 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.113802.216865 (Exim 4.92) (envelope-from ) id 1lYr9J-0002gK-OK; Tue, 20 Apr 2021 14:14:45 +0000 Received: by outflank-mailman (output) from mailman id 113802.216865; Tue, 20 Apr 2021 14:14:45 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr9J-0002g2-K9; Tue, 20 Apr 2021 14:14:45 +0000 Received: by outflank-mailman (input) for mailman id 113802; Tue, 20 Apr 2021 14:14:44 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lYr53-0000xF-70 for xen-devel@lists.xenproject.org; Tue, 20 Apr 2021 14:10:21 +0000 Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 3dd5d826-5ad6-44e3-8a3f-2d0e32d1be67; Tue, 20 Apr 2021 14:10:11 +0000 (UTC) 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: 3dd5d826-5ad6-44e3-8a3f-2d0e32d1be67 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1618927811; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=6coVnkxQH01xuYysdoaEe/x+kf4TGmb+qk9wPm0DpYI=; b=gRzxMhFd67R4tVsUFhUQaU0nfqMm5s0ftACVBK2bYMUTd+LukGv8Di8y aZ+B/7rSG8aT5zROm6r/RW0KAux2d2s9Jy3DuKlMoaokgARzMIPIqqBID n5suIQJLlUJK04bZZPX9caopa5dcSOGDWHxAIUL4RCMIBUkWQDd8SjEH0 A=; Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com IronPort-SDR: vAFnK7NDiRRwYOPcJH1dCdLhVEwDl3eyU+HorpVhmf8rPqfLDOpZvbbCy9mtmGO6G8Pc0nGasi UOPRa1wWfa6nr5J0uFJquPziEXWMn1mPex1CwqZOis1C1vZQSAU03KIWyR3GluGBz1AMGCvf4X wlRjqiBxf2byANfBSa8SG9wa+6LEFVwhnBCkr9ZHB0eoaWZWOnNMf6+ad4E34CKgucF56A0GTY heNinqBjzao3jGLdFAig53LqvWnTjzFaKqgVYTV8TMKTW0U2hKcska6CrCjvmBktOgpfXtyhjP LVE= X-SBRS: 5.2 X-MesageID: 41988343 X-Ironport-Server: esa3.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-HdrOrdr: A9a23:siYtua4ViwGSh4VEBwPXwRKBI+orLtY04lQ7vn1ZYQBJc8Ceis CllOka0xixszoKRHQ8g7m7VZWoa3Xa6JJz/M0tLa6vNTOW3VeAAaNDyc/ZwzPmEzDj7eI178 1dWoV3FdGYNzdHpOng5g3QKbgd6f2m1IztuuvE1XdqSmhRGsNdxiN0EBySHEEzZCQuP/oEPa GR7MZGuDasEE5/BqiGL0IIQvTZoJnznI/mCCRsOzcc9AKMgTm0gYSKcCSw4xF2aVJy6IZny0 fpuUjT5qKvs/a0oyWsrVP73tBtt/bKjvdGDMyIoMAJJjvrkRbAXvUdZ5Sy+AobjcvqxFE2kM TdgxpIBbUO11rhOlubjDGo+w783C0g43XvoGXo/kfLkIjCax8RT+9i7LgpFifx2g4bk/xXlJ 9v5Sa/saFaCBvR9R6Nn+TgZlVRuWef5UY5nfV7tQ05baIuLIV/gKY4501vHJIJDEvBmfsaOd grNs3a6fpMGGnqCUzxjy1qyNyoaHw5Ag2LdEgEotCUyDhbhhlCvjIl+PA= X-IronPort-AV: E=Sophos;i="5.82,237,1613451600"; d="scan'208";a="41988343" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Fi25bHQT0LD5RxwOA4yFInRufE5sq6cNZpJl7fuf1oR7zhppTP7OCUen6/1UPRT2nL3CszZm4DpxpVZ8udQ1drAjHnIwDF3hb7XkDGPhF4tPOxUBeFEo2XUrKKZGwbb87LcOwJwqNmHBBbARHtEgX+AtS5/voyhXx2MOh0lFM9LTb0ovJKW5KXTm89yrF+nLnW7rFU4RzSbmdKo9jYZZAtBLxrXRIiiciT5n1qe/z4iVQbMHWkKIFUlkJRv7zXdA9dskqLJYP+QGpg7IWNdDqgUF4t1HOYKnczRwcszZavyRA4+Jr5N9T5n8s3ZGKvG+Pg1gH+U0t2IkfZKLWbu/8A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cPLww0jyAC3ZvVT3vwHc3Orw5CsWBNndVX/YLz+UW6g=; b=OFDv3eBg/qd+EmvxMRs4fj2k+y+xIlx8X/+SKmsyKG1Q0Md4gGHat98so81NMqUauv6CHYsEV6Sit+jcncz0ebSmSZ0nMV6/f1DYTqdrTeOp7RzUqpeH0crqTwXy7TokkA9+HkUkQznok3j9wyF4un/+fAXJlIxPNUdz4062qPcYvEJb6keL2+DukVeZwwJL+zhU8Cvpcgy/GJVFRH5rIo353C3Y31lqMuVb9Xmnl/3NKhMb5muiW8UcXx6uPYKsHum0L0rV1FJw9ZL2otTMoHAJ2cIs3J2q5XthondDNTR8dsspvrhqzIquNNUym02Ohw8yBeUmIoYpACUEGe99CQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.onmicrosoft.com; s=selector2-citrix-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cPLww0jyAC3ZvVT3vwHc3Orw5CsWBNndVX/YLz+UW6g=; b=oIfbfM9RMSyu2Ajz4Y6I1M83MQttJWwX5dWIZj2ivXG6oG1I/VMTs5XcM5h3gc/esxjF5cWg9hQvkJ72EYSOV6bytJk6KlNWjhmIrBaVCJhLiGtwg2Uo3D2F/LJ4dfV5EjXDz89Qy+GhnKY1kVEP/ua4Wh+69Oma3kcziZCfgOs= From: Roger Pau Monne To: CC: Roger Pau Monne , Jan Beulich , Andrew Cooper , Wei Liu Subject: [PATCH v4 12/12] x86/vpt: introduce a per-vPT lock Date: Tue, 20 Apr 2021 16:07:23 +0200 Message-ID: <20210420140723.65321-13-roger.pau@citrix.com> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210420140723.65321-1-roger.pau@citrix.com> References: <20210420140723.65321-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MR2P264CA0048.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500::36) To DS7PR03MB5608.namprd03.prod.outlook.com (2603:10b6:5:2c9::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e043e9ca-7e03-4ba0-2268-08d90405ffee X-MS-TrafficTypeDiagnostic: DM5PR03MB3068: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:451; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: CS3Mp09alfYJWF+bDJKlOFi4CXzVTj5yYSBEupyawzjBmaYn7kfCBVHbtgHr9lrGtw2tuZIivjSfrmnRER0bVLWfTHSky0cN5+MGJFRqlUoAroceMRsiDYAEEJ7qEAqfVBx05tMSVpESsEc6f1lhXEeYhV34DcszYCiOPc39m624ISo3OiqX9nKr4UJc/QXSud5a65mduDwm60B9ecXkmLepRmK3tjXp2wagGT5wrfIa9vnsXxtxHSBCon3Vb3LxxBfvNm87POfkPXdxz4A7lxxL5KCTpMY0PpnwfLscXD1kIyAPo6wVSUiRJFV6PdWB7LI2Btyvz1229Sb5QmfBkG9qEC2FZt2Ti5px6G4pwonGqEkZsPJGYvQQXhlyYc3I9Lp0G9pUX+iK2LivlAdLUw13WfeQ26uYlJI6D4yvSUIpAP+EkscfST8VGfIbwfOCgBTycFQiHrGUQm2LtBGda6KFlstwxpmBywSeSghSkpYLimsXgCe2awqfMrnqgjhy9PmpDKCksh3OVz/3W73j7nybUVN1r1TNP29UATz8ab/mvG8hkn6/iAvFBEqveDbIovv33hjFLJjRjrspHatesg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR03MB5608.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(346002)(366004)(39860400002)(136003)(396003)(54906003)(316002)(2906002)(6486002)(956004)(1076003)(38100700002)(36756003)(2616005)(16526019)(5660300002)(6496006)(83380400001)(4326008)(8676002)(26005)(66556008)(66946007)(66476007)(186003)(8936002)(86362001)(6666004)(478600001)(6916009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?aG5FVFdNZFB4RFhLTENBb0R2QmxhRld0TjRJSWVwS3JIU3dhYVpGZFF6L2Zo?= =?utf-8?B?dmhwVkQ3TDluNTl5VHUvbFc5VERzVlVKNzg2cVJ4bWZyTXNZVGRsZ2N1Nm9Q?= =?utf-8?B?NzMxdEc3bTEyYUVUVTJidUlZMVZhUTBzTk1RRE1yOUlEOEZxckhPem41TzJK?= =?utf-8?B?QUF6eS9yUUJVTXYwRGcwVmZZcm9MdTlWcWJoQmJ3NXF0R1JOMENkSWh4bzFE?= =?utf-8?B?eS8zZGEydDE2Z3N1MS8wSUdiWHNnajgxeGRuRHp0YXREVUpMRUlzZnBWRTF6?= =?utf-8?B?aW82Njk0YzFidEtyYVFVUURmM3dGTUpiMTNETVNqbmZYTzFWbjgzQzdhaFJ1?= =?utf-8?B?Ym9wQjMzU0FYNDUycS9IZFdvMnRpTjNjbW0wQTk1T2dPc2tDYzVZbXg2RXJP?= =?utf-8?B?TGtUeWtDd2ZVYkhGL2hxdnpNY0xWSWtnVkp1am1maVpjZHZRR2xTMVZTcVIy?= =?utf-8?B?Sm10QTZiMExycENySzZpKy9qSjlGeWI4cDg1MWpxc1o3ZnZDT0Z3eFpDS0xX?= =?utf-8?B?ZlZjUGJXMXBJSmYzYUtvOUp5Qk5CTFF2K29DSTc4OUw4RXFuQ1NQM0Z6bitl?= =?utf-8?B?N2JINEpYaVVhRDVJVjdvSWZaQU8vRWZRL0EwSVMwM05FY0RJVUhraCt1NUpC?= =?utf-8?B?Zi9QSVhvZGMwaVNNcXd5bFZQRmoxek5BN3VlMHNJRGxIV0Ezc1pIbStDZFps?= =?utf-8?B?eXZGSjUxc2xQRm8ybnBOK1ovYmZpRVVIRzFjbS9mTFh6YnhhM1ExaTJSZHFE?= =?utf-8?B?aEdNMHYrYkpVMVFITDVobDU1d2RQL0dMYnJrU3VoZTRwUVVSaVVadytLc252?= =?utf-8?B?eWZ3MUN6MmsreEJvaDB2MDdWdzNTck5RUFRNUUxvcUlLTDl4b2Y4dDVkamta?= =?utf-8?B?RGE0NkhJTGs0bEdSbHUySjNPR0twMm4ya2hMVTN5UGh1WEF2enIvanBNWVpy?= =?utf-8?B?TFM1Z3lGZXVpVnJHY0pSaWM4REZlaXR3S0hGd2ZZdnZRV2dqYlQzZ3pOZ2J0?= =?utf-8?B?VFpUMHZxelhOdkNZNzhBV01nYXJpNGl5ek8vRGs5YjI5bG1RVGhMQzNtWmZZ?= =?utf-8?B?c3crY0RuQzRnL1JFYUcxWSsvMGdZakFTYnF5ejQ5OHludFZoeGlNWTB2alNF?= =?utf-8?B?a0ZWMEM2VUZkNTE0NVNNU0RoZm5kSldscFFOeFZaOGwzc2JDWGYvZzVqQVEr?= =?utf-8?B?ZjhVb0pjaUd4Uno1VUlwdzNhaG5waGNaWDhFbDhiTTZaNnBKcUxRRHcrZ2tn?= =?utf-8?B?ZXpHWWZmWUM4UHdYbXB3MWZFc3RhWHNWd1doZjNHMHJhanBrSGZSSjhLOGNy?= =?utf-8?B?KzZyT3ZodUw2bnFQSVJnVnNtY0ovdUhWSGpsS3J5amdsY0U2M0drZzNRak96?= =?utf-8?B?THFjbEtnWkVHYW5YaUcyTGF3ZGNwN1o1Ujl0L2grT2s4dlZOZWFLRm9rbTR0?= =?utf-8?B?N2NTZDNYL21nZWhBWHk1eGJLUi9TekpWSUVBOW9hMS9MMkFGMk1BMnVVM3BD?= =?utf-8?B?R1I3NkpVWUNFQ1BVQy93eDNieDVMMFhUSFFDVDB1T0dNQTFsL3R2WFNFUEV4?= =?utf-8?B?THl5dkQ0VWkwZTNrT2ZRRnNZUDJqYjVyaGpXaGNCaUNZR3lEOFI4VVBYaXBT?= =?utf-8?B?NXAvaTZoaDlacWhtUWF4ZnRTeE5aSjI2RGVOYnhGWXNzRG5MRXd6dzJCa2U3?= =?utf-8?B?Q0lOSjM5ZHdxK2hTNTV5NmR1bXlKbGorZUZhN0hZSTZkU2ZqZ0RTb2hDNzJv?= =?utf-8?Q?uBx9c8rd/xKai1zO7WHt4F7ph2zVwPS3l3vzRzU?= X-MS-Exchange-CrossTenant-Network-Message-Id: e043e9ca-7e03-4ba0-2268-08d90405ffee X-MS-Exchange-CrossTenant-AuthSource: DS7PR03MB5608.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Apr 2021 14:10:06.5795 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ectUjC0k1VlVfVYgK0ktZYjSrZ1RCZo/P5u0v/jvxWgTB4TJjJyyxiOIUChH1FnXdNgSD4BovjeTBD+0eoHVUA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR03MB3068 X-OriginatorOrg: citrix.com X-ZohoMail-DKIM: pass (identity @citrix.com) Introduce a per virtual timer lock that replaces the existing per-vCPU and per-domain vPT locks. Since virtual timers are no longer assigned or migrated between vCPUs the locking can be simplified to a in-structure spinlock that protects all the fields. This requires introducing a helper to initialize the spinlock, and that could be used to initialize other virtual timer fields in the future. Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Jan Beulich --- Changes since v1: - New in his version. --- xen/arch/x86/emul-i8254.c | 1 + xen/arch/x86/hvm/hpet.c | 8 +++++- xen/arch/x86/hvm/hvm.c | 4 --- xen/arch/x86/hvm/rtc.c | 1 + xen/arch/x86/hvm/vlapic.c | 1 + xen/arch/x86/hvm/vpt.c | 52 ++++++++++++++-------------------- xen/include/asm-x86/hvm/vcpu.h | 3 -- xen/include/asm-x86/hvm/vpt.h | 15 ++-------- 8 files changed, 33 insertions(+), 52 deletions(-) diff --git a/xen/arch/x86/emul-i8254.c b/xen/arch/x86/emul-i8254.c index 73be4188ad4..a47138cbab7 100644 --- a/xen/arch/x86/emul-i8254.c +++ b/xen/arch/x86/emul-i8254.c @@ -484,6 +484,7 @@ void pit_init(struct domain *d, unsigned long cpu_khz) { register_portio_handler(d, PIT_BASE, 4, handle_pit_io); register_portio_handler(d, 0x61, 1, handle_speaker_io); + init_periodic_timer(&pit->pt0); } =20 pit_reset(d); diff --git a/xen/arch/x86/hvm/hpet.c b/xen/arch/x86/hvm/hpet.c index ca94e8b4538..20593c3862d 100644 --- a/xen/arch/x86/hvm/hpet.c +++ b/xen/arch/x86/hvm/hpet.c @@ -739,12 +739,18 @@ static void hpet_set(HPETState *h) =20 void hpet_init(struct domain *d) { + HPETState *h =3D domain_vhpet(d); + unsigned int i; + if ( !has_vhpet(d) ) return; =20 - hpet_set(domain_vhpet(d)); + hpet_set(h); register_mmio_handler(d, &hpet_mmio_ops); d->arch.hvm.params[HVM_PARAM_HPET_ENABLED] =3D 1; + + for ( i =3D 0; i < HPET_TIMER_NUM; i++ ) + init_periodic_timer(&h->pt[i]); } =20 void hpet_deinit(struct domain *d) diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index ec4ab1f5199..0498c3b02e2 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -666,8 +666,6 @@ int hvm_domain_initialise(struct domain *d) /* need link to containing domain */ d->arch.hvm.pl_time->domain =3D d; =20 - rwlock_init(&d->arch.hvm.pl_time->pt_migrate); - /* Set the default IO Bitmap. */ if ( is_hardware_domain(d) ) { @@ -1557,8 +1555,6 @@ int hvm_vcpu_initialise(struct vcpu *v) =20 hvm_asid_flush_vcpu(v); =20 - spin_lock_init(&v->arch.hvm.tm_lock); - rc =3D hvm_vcpu_cacheattr_init(v); /* teardown: vcpu_cacheattr_destroy= */ if ( rc !=3D 0 ) goto fail1; diff --git a/xen/arch/x86/hvm/rtc.c b/xen/arch/x86/hvm/rtc.c index b66ca6f64f1..8c8b4ed4018 100644 --- a/xen/arch/x86/hvm/rtc.c +++ b/xen/arch/x86/hvm/rtc.c @@ -821,6 +821,7 @@ void rtc_init(struct domain *d) init_timer(&s->update_timer, rtc_update_timer, s, smp_processor_id()); init_timer(&s->update_timer2, rtc_update_timer2, s, smp_processor_id()= ); init_timer(&s->alarm_timer, rtc_alarm_cb, s, smp_processor_id()); + init_periodic_timer(&s->pt); =20 register_portio_handler(d, RTC_PORT(0), 2, handle_rtc_io); =20 diff --git a/xen/arch/x86/hvm/vlapic.c b/xen/arch/x86/hvm/vlapic.c index 2af24989dd5..5c60bf66584 100644 --- a/xen/arch/x86/hvm/vlapic.c +++ b/xen/arch/x86/hvm/vlapic.c @@ -1654,6 +1654,7 @@ int vlapic_init(struct vcpu *v) return 0; } =20 + init_periodic_timer(&vlapic->pt); vlapic->pt.source =3D PTSRC_lapic; =20 vlapic->regs_page =3D alloc_domheap_page(v->domain, MEMF_no_owner); diff --git a/xen/arch/x86/hvm/vpt.c b/xen/arch/x86/hvm/vpt.c index 6a8d216c7b5..e4ecb98d3a4 100644 --- a/xen/arch/x86/hvm/vpt.c +++ b/xen/arch/x86/hvm/vpt.c @@ -125,27 +125,6 @@ static int pt_irq_masked(struct periodic_time *pt) return 1; } =20 -/* - * Functions which want to modify a particular periodic_time object - * use pt_{un}lock locking helpers. - * - * These users lock whichever vCPU the periodic_time is attached to, - * but since the vCPU could be modified without holding any lock, they - * need to take an additional lock that protects against pt->vcpu - * changing. - */ -static void pt_lock(struct periodic_time *pt) -{ - read_lock(&pt->vcpu->domain->arch.hvm.pl_time->pt_migrate); - spin_lock(&pt->vcpu->arch.hvm.tm_lock); -} - -static void pt_unlock(struct periodic_time *pt) -{ - spin_unlock(&pt->vcpu->arch.hvm.tm_lock); - read_unlock(&pt->vcpu->domain->arch.hvm.pl_time->pt_migrate); -} - static void pt_process_missed_ticks(struct periodic_time *pt) { s_time_t missed_ticks, now =3D NOW(); @@ -220,7 +199,7 @@ static void pt_timer_fn(void *data) void *cb_priv; unsigned int irq; =20 - pt_lock(pt); + spin_lock(&pt->lock); =20 v =3D pt->vcpu; irq =3D pt->irq; @@ -235,7 +214,7 @@ static void pt_timer_fn(void *data) cb_priv =3D pt->priv; } =20 - pt_unlock(pt); + spin_unlock(&pt->lock); =20 if ( cb ) cb(v, cb_priv); @@ -247,7 +226,7 @@ static void eoi_callback(struct periodic_time *pt) time_cb *cb =3D NULL; void *cb_priv =3D NULL; =20 - pt_lock(pt); + spin_lock(&pt->lock); =20 irq_eoi(pt); if ( pt->pending_intr_nr && inject_interrupt(pt) ) @@ -258,7 +237,7 @@ static void eoi_callback(struct periodic_time *pt) v =3D pt->vcpu; } =20 - pt_unlock(pt); + spin_unlock(&pt->lock); =20 if ( cb ) cb(v, cb_priv); @@ -324,6 +303,11 @@ static bool inject_interrupt(struct periodic_time *pt) return true; } =20 +void init_periodic_timer(struct periodic_time *pt) +{ + spin_lock_init(&pt->lock); +} + void create_periodic_time( struct vcpu *v, struct periodic_time *pt, uint64_t delta, uint64_t period, uint8_t irq, time_cb *cb, void *data, bool level) @@ -340,7 +324,7 @@ void create_periodic_time( =20 destroy_periodic_time(pt); =20 - write_lock(&v->domain->arch.hvm.pl_time->pt_migrate); + spin_lock(&pt->lock); =20 pt->pending_intr_nr =3D 0; =20 @@ -403,18 +387,21 @@ void create_periodic_time( init_timer(&pt->timer, pt_timer_fn, pt, v->processor); set_timer(&pt->timer, pt->scheduled); =20 - write_unlock(&v->domain->arch.hvm.pl_time->pt_migrate); + spin_unlock(&pt->lock); } =20 void destroy_periodic_time(struct periodic_time *pt) { unsigned int gsi; =20 + spin_lock(&pt->lock); /* Was this structure previously initialised by create_periodic_time()= ? */ if ( pt->vcpu =3D=3D NULL ) + { + spin_unlock(&pt->lock); return; + } =20 - pt_lock(pt); pt->pending_intr_nr =3D 0; =20 gsi =3D pt->irq; @@ -427,7 +414,7 @@ void destroy_periodic_time(struct periodic_time *pt) hvm_gsi_unregister_callback(pt->vcpu->domain, gsi, &pt->eoi_cb); break; } - pt_unlock(pt); + spin_unlock(&pt->lock); =20 /* * pt_timer_fn() can run until this kill_timer() returns. We must do t= his @@ -442,10 +429,13 @@ static void pt_resume(struct periodic_time *pt) time_cb *cb =3D NULL; void *cb_priv; =20 + spin_lock(&pt->lock); if ( pt->vcpu =3D=3D NULL ) + { + spin_unlock(&pt->lock); return; + } =20 - pt_lock(pt); if ( pt->pending_intr_nr && inject_interrupt(pt) ) { pt->pending_intr_nr--; @@ -453,7 +443,7 @@ static void pt_resume(struct periodic_time *pt) cb_priv =3D pt->priv; v =3D pt->vcpu; } - pt_unlock(pt); + spin_unlock(&pt->lock); =20 if ( cb ) cb(v, cb_priv); diff --git a/xen/include/asm-x86/hvm/vcpu.h b/xen/include/asm-x86/hvm/vcpu.h index 9a756964fb0..fe3d0e10426 100644 --- a/xen/include/asm-x86/hvm/vcpu.h +++ b/xen/include/asm-x86/hvm/vcpu.h @@ -148,9 +148,6 @@ struct hvm_vcpu { s64 cache_tsc_offset; u64 guest_time; =20 - /* Lock for virtual platform timers. */ - spinlock_t tm_lock; - bool flag_dr_dirty; bool debug_state_latch; bool single_step; diff --git a/xen/include/asm-x86/hvm/vpt.h b/xen/include/asm-x86/hvm/vpt.h index 323afa605e7..5628cff8f7a 100644 --- a/xen/include/asm-x86/hvm/vpt.h +++ b/xen/include/asm-x86/hvm/vpt.h @@ -48,6 +48,7 @@ struct periodic_time { time_cb *cb; void *priv; /* point back to platform time source */ struct hvm_gsi_eoi_callback eoi_cb; /* EOI callback registration data = */ + spinlock_t lock; }; =20 =20 @@ -126,19 +127,6 @@ struct pl_time { /* platform time */ struct RTCState vrtc; struct HPETState vhpet; struct PMTState vpmt; - /* - * Functions which want to modify the vcpu field of the vpt need - * to hold the global lock (pt_migrate) in write mode together - * with the per-vcpu locks of the lists being modified. Functions - * that want to lock a periodic_timer that's possibly on a - * different vCPU list need to take the lock in read mode first in - * order to prevent the vcpu field of periodic_timer from - * changing. - * - * Note that two vcpu locks cannot be held at the same time to - * avoid a deadlock. - */ - rwlock_t pt_migrate; /* guest_time =3D Xen sys time + stime_offset */ int64_t stime_offset; /* Ensures monotonicity in appropriate timer modes. */ @@ -173,6 +161,7 @@ void create_periodic_time( struct vcpu *v, struct periodic_time *pt, uint64_t delta, uint64_t period, uint8_t irq, time_cb *cb, void *data, bool level); void destroy_periodic_time(struct periodic_time *pt); +void init_periodic_timer(struct periodic_time *pt); =20 int pv_pit_handler(int port, int data, int write); void pit_reset(struct domain *d); --=20 2.30.1