From nobody Mon Apr 29 18:34:21 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1638177039; cv=pass; d=zohomail.com; s=zohoarc; b=nj06Hq6CE9tiDQ8PvD16gJTqJYxFfnUhMdNX9XWZH29W0gQNBrUE+9KdWVBSV9Vzrh94Ji027X9zzlwofJvfQ3ujAY3j6BL+LhAY0XSeMa/sFLbEu6rCKhLsUM1kehPmoeLGINXTdhHxMDK2v6Z4Bk0eJeGp9dxlIzsVjwktXZw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1638177039; 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=7QkaCIQzisRqxKoxe93GeFU157LBKSiuLUmcqzfECJc=; b=kzEqko+StWgDVG7VH+szMk/6bqwIXqIQ08Tw7E/68FLuAehSAj1jrnRruEpxkxoBD9THRldo77ajQ/iZNLsWpubCSmNnqawMYRvbuSzBVs+CNQ9ECj/PE3KEvo2CFr4c/lzf9EWxS7Q9Ua7iVszlOCG76ImQnLemBh4uTxJrhi4= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1638177039128140.83276140219766; Mon, 29 Nov 2021 01:10:39 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.234357.406728 (Exim 4.92) (envelope-from ) id 1mrcfq-0000oG-2C; Mon, 29 Nov 2021 09:10:10 +0000 Received: by outflank-mailman (output) from mailman id 234357.406728; Mon, 29 Nov 2021 09:10: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 1mrcfp-0000o9-VX; Mon, 29 Nov 2021 09:10:09 +0000 Received: by outflank-mailman (input) for mailman id 234357; Mon, 29 Nov 2021 09:10:09 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mrcfp-0000jv-1c for xen-devel@lists.xenproject.org; Mon, 29 Nov 2021 09:10:09 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 25903fcb-50f4-11ec-976b-d102b41d0961; Mon, 29 Nov 2021 10:10:07 +0100 (CET) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05lp2110.outbound.protection.outlook.com [104.47.18.110]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-32-TyxLkeyRPVqHZn3K1tze_Q-1; Mon, 29 Nov 2021 10:10:06 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR04MB5469.eurprd04.prod.outlook.com (2603:10a6:803:cf::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4734.20; Mon, 29 Nov 2021 09:10:05 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%5]) with mapi id 15.20.4734.024; Mon, 29 Nov 2021 09:10:04 +0000 Received: from [10.156.60.236] (37.24.206.209) by AS8PR04CA0138.eurprd04.prod.outlook.com (2603:10a6:20b:127::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4734.22 via Frontend Transport; Mon, 29 Nov 2021 09:10:04 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 25903fcb-50f4-11ec-976b-d102b41d0961 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1638177007; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7QkaCIQzisRqxKoxe93GeFU157LBKSiuLUmcqzfECJc=; b=Bjs83jBs9Y08xxPJazotLLlYqEuUQpRz+kasJl5BW8TpWTLefNrhY1IoMIeytAAp4yfeV2 BwEfm3xzivFNPHl6tVpacqngZ2DhgSAyBGyOueQd45r2+c9ubQVIaHAc6mozYeK+JFzvOr VgcoQfWIErHWhLwpV9Zzi5MgBaQBu+U= X-MC-Unique: TyxLkeyRPVqHZn3K1tze_Q-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kBO98Z+12SbOgPZxGojMvPyDMrDkB9HPra82NDPo2R8c5bW04TbYGQIT/UBQN55IZbpIna7Ffs5G/9t/MVG/Hp4CW7u/fO8vyexsGTFME49NaqgX2qIEk83ADehqvTkxFskzk8ijhu/keH5CT/oc1Z30g+LCDvlmqy/lN+U3XUl+anG7xO9HDRn6wUMegvb32Ee7BOvbLTHhLaL42sos6aqNywG2nPyVvI6sr7KZquJo1UbeRiv8ELc3up4ex+4VTHcynfAXfgZGIkFKQviPZBwc8E7N1DN4mxaF/Ibnq8U8Jt6ub/oNCT76tauu+LE0gUq8eZov5LugFKYzCvqxHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=7QkaCIQzisRqxKoxe93GeFU157LBKSiuLUmcqzfECJc=; b=f+XLDRzBWc6AfvumJqzAkqzDRiHe6NPYFzKnJ+coXdXEGrvLaRoQwTzXFR+J8G0ud2fRWBpzBgi1upX1+HXZV3loOlu1mYp49DLqXWzeFk4Fn+XbIED46yAk8nLOzuYy63jJLhQEix4J5/I8MZfpOXogfs2AeBwH7iDlnF9Nz6Ed3gv1MRIY965zneuzi5zjf5+qQkt69qt+uHdnP2GQuNS68jiJXUvUgAyll7uqyQhnXoFFqxYhCXA9EugWdC/4Ulqm3iqtjBhnlwtSxhJ1byPVOqBCPEzUE7rCwZ5D/yJKp0abnc3U+doZtU+bG2ms/bjaFtYL3/F2vsWbo4kXWg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Mon, 29 Nov 2021 10:10:06 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.3.2 Subject: [PATCH 1/3] x86/vPMU: convert vendor hook invocations to altcall Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , Kevin Tian , Jun Nakajima References: In-Reply-To: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS8PR04CA0138.eurprd04.prod.outlook.com (2603:10a6:20b:127::23) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 33472705-3384-4936-fce2-08d9b3180818 X-MS-TrafficTypeDiagnostic: VI1PR04MB5469: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6430; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: SDQ+uVTQAN9IpUVMh1H/U8st9K+VnQ8yQRiOKWKjR+g/sxhf7f1dBFW8clCrW5/W7A+OyamL9HW/VEbINKulA6oLN9yOqLZGJEexB4LM/HbdXTukCfO77WTyTvMJF5eePq2hMXM69zDv9fSeX9x+oaLD38Nb5kyyc3zfby2bQC7NWVwWc87FmDgHFQc4snrjS6lTcXTpUgRjXVLO9YclAeqknmbmvplNK6w1sdmg19oVX9SVX6TIul2fjI8si0OqTkOha0L6zJ+BhQUUAkSvSHNC0Ala0otgYWi7SY6ueeKtz9vv6ifC0xSpfHkGsd7UQxF4dkFlEF1XHVkXQl5lSkG1CfM2ztt4QryGif/IaBunbAwpnot8cYAb5jtatssUPjkSneneollmQxQnHleFv8NSpnmEhkkjxNsrCRbyV/zZTz++xgFGV34jCNzKeMUppk20MTfe8H3qrKD6PkhL2nqlrDXLuO7EnlP4bMnLTyBedWdQkOVftMWqVjyMQnUnQByMDfP22RyL6Pb7A2Abw3evVr7oi4AHVoLYuwQ83107M5s/ZkCAZlKh6soFRStvjIlHfdSpDdMJfqXM0Ox8oRk9i+EnUqIIqk5/JnnOET750RQD5t4WZiOqRbMbCig/x1KszvEnBdJ1FNWrgfx5XNojq2j3T2QvAE2toKXcBbPKyj18erk80VqI1N24+OFxZYOb/Hlbh/ljBWTNEcOPAyjK2XVpkHdeynUkvn+Xh162yofNlJboV1+at5Nf/Ot7 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(8676002)(5660300002)(31696002)(956004)(2616005)(2906002)(186003)(316002)(36756003)(54906003)(16576012)(26005)(31686004)(8936002)(6486002)(38100700002)(508600001)(30864003)(4326008)(66556008)(66946007)(83380400001)(66476007)(86362001)(6916009)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RGwrWlowVzc4SkhZa2JBT3dUamJPdGdBNUFVUUFlVkZ6SWh0K1dmcDVIOGJT?= =?utf-8?B?M1lUNWFGMWdEVVhLdVZETHlxUWJjaFRzeUxwcHVWR0tYeVpPL2FYRlNtaGVu?= =?utf-8?B?bkhwTUdnR2pvY0Zmekk0emZtUFhMWVJ3dFh1R0ZLeW5hRW1PQTh0bmRTQTVD?= =?utf-8?B?N2NHUGRDSFhYWXNZck9TcnF3N0k0VWM4dXZTMHV5aytSQkZBVk1FbTVSQWY4?= =?utf-8?B?VmFXNmZyRm11U3JYaUxMbzRXM0R1QW50VjJuMHRJSnNyUlpxRFVDT1M0UVN4?= =?utf-8?B?NG9PRzNIMkowRDZ1ZzB5L0VtMWZLU2pSUXhXaURsbDN0MkEyeXVkYlVnUEgx?= =?utf-8?B?ekNsSlpsamxrZE40b0pHdkg0c0NOMkUyYjBzRXJDSGNJb1pzem9OZFhIRTNZ?= =?utf-8?B?NFRKeW1lYW8wV0pIUWZENm9HOTRZWENNV2w2clNJMk5VWGs4Rmk4UkxuMW9m?= =?utf-8?B?TUJncHVkTmhjOFptTGxsZHpTOWxLZUhPZkpWemkvb1hxVUgxL2ZVVkYxZ1VO?= =?utf-8?B?cGZFY01ZdXhyODk1WlZua2h6SVRGTC9tZUh4WHZQdU9YWWoyWHg3cnBwUXhn?= =?utf-8?B?eTFmRGZ4c3RVQmpiQkJ2T2JQYlEzdjl0cnlyMzU5bVlCbkJoaTIxbUloTWJh?= =?utf-8?B?dkxWNFpvcnhLMis5UCs3azBtNGlKakpZa0c0SUZNUEk4Wk4xUStSS3ArOHZ4?= =?utf-8?B?TWllSDZZRTlOamFVQ3NYZEF6T0NsQi8vcnpWTStBS2Y2dDVwT0RON3lvWFpM?= =?utf-8?B?KzJ6VFdpT0N5aHB3Q2VXTWlJczBuQ3NiWEJPZElOTlFRL011SFA3QkxzNnA4?= =?utf-8?B?SHQ0OVUwN1ZIU2t5ME9tc1hVYlk5NUJYYktIQWswUTlMLy9yV3h3eWxKQ3U1?= =?utf-8?B?RXkyc01odGNPQUpXZ1B2OExEaGIyMCtYdlhXaFR4NDhNRjRPVytodURTQmhw?= =?utf-8?B?Q0ZWWXpmTFZJT05mWmlSbGJyNHFxUDNSQ0xFUFNTaXNWNWczOWwrbGkxTDVE?= =?utf-8?B?RFJSdWJ1U2tFa0hETWhiWVFUQlFZV0NUeGI4amdVREVLNXhBK3Nka29ST2Mz?= =?utf-8?B?VTd4MDZDVDNCUGRZWXV1RXhpbHJua0tHR21aRllkUFFaMzBOWU5RaTNFYUlW?= =?utf-8?B?cGp5RGFKMUdQRTNZWmlCK1dqc01CMzNrUFRFSUh3UTFtenZQSUk4bjdjcGVj?= =?utf-8?B?cDV6d0EySFVuaEZjWXBEVUhseG1OcGZMSVIwclZuM3dxOU9BWXpwejdkUXhI?= =?utf-8?B?TzYwNG5YZXY3ZHRsVDhPNEtEdlE2R1hwSFpycEQzVmRDaUtIWUR3em9hSGxh?= =?utf-8?B?c0tnekNvcnd0WWVBSElEa21RMVhJYkhoNWtXZEtSN2Z4aTE2N0Z2MDBEQVNt?= =?utf-8?B?SXpkNkttVVZKYnMzT2t1WTZXSzMzTWpQa1FnMXYxN3ZRSEpmaVZzdUtZMHNO?= =?utf-8?B?MGJldVRUbXN3Uk1la0FTZGpwRXdPZ2w5QmhCV3dOdnl4eU5FQUk1ZTBlODdK?= =?utf-8?B?Q0NySVZlQ3AxcTJQNEZSR0FqMkg2aDc4UEl2WTl3dS9Ra0FLMFhVaEFjN1hz?= =?utf-8?B?algzejkwZXNwVFJWN1NCRXB0cWVHcGtXdkZJaXRQYUtiZHMwU0VMYTcwTnJS?= =?utf-8?B?QlJaT3RWOU5YQTBlYWFaM0F1alR4dzg3dWJNOE1GMlBQSS9YRC9MUHVzR05N?= =?utf-8?B?dGtYT2l5NTE1dWVBKzM4Wkg5L1VhQzFvTzk0T1VBdjZvdGVjbW1yeTI3T0lC?= =?utf-8?B?VFZNclRiT1VjMTVmeWN0V3Vqcnp5WnNTcmZxdkJPcExkdjBmcTBUZjlVRHda?= =?utf-8?B?a3MxWWZrUmNIb2g0VUJ5N1l0dEZlYlY0d1BmRUdZQWpWTEE3TjE4SlFzemZ2?= =?utf-8?B?Q2haZmFrcmdMTEIyL2MyeEtkNU9mTXZ6Vjh6R2NwQmJsT21kSzlZUEc2QkMw?= =?utf-8?B?T3Mva3FtVkpOMzlaUVQ3Zm9YOStlbit4Wjlna09udjAxVTk3eW5WYXZuYjVK?= =?utf-8?B?T0haSERRRXdhUEVFMmEyOGxFZ1JNWUplTkJQdjZGd0tkd3hXQ3hSd3dqaGVQ?= =?utf-8?B?MFpNaktpWFNVcVdhaW1rQmhLaGlrRjk5elQ2c2tHM1V5RDVKSTVNSXpQQnR1?= =?utf-8?B?UkJvNThiSjlja2p4MjAzeU5HYnhBUmZYSjJXQ1ZKV2ozaVJrb1pHOE9PTGxy?= =?utf-8?Q?MBbje+XWbHN9UlJ4s7IXbTc=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 33472705-3384-4936-fce2-08d9b3180818 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Nov 2021 09:10:04.7927 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: FzNQ63osYpsuATXUMZPaA6TGtkhFzLs3mF5k5/jkQhqp9gn6WD4PzGRmvxtgohoKXV26XvovWKAPrCtHPIkFDg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5469 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1638177040204100001 Content-Type: text/plain; charset="utf-8" At least some vPMU functions will be invoked (and hence can further be speculated into) even in the vPMU-disabled case. Convert vpmu_ops to the standard single-instance model being a prerequisite to engaging the alternative_call() machinery, and convert all respective calls. Note that this requires vpmu_init() to become a pre-SMP initcall. This change then also helps performance. To replace a few vpmu->arch_vpmu_ops NULL checks, introduce a new VPMU_INITIALIZED state, such that in the absence of any other suitable vmpu_is_set() checks this state can be checked for. While adding the inclusion of xen/err.h, also prune other xen/*.h inclusions. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper --- a/xen/arch/x86/cpu/vpmu.c +++ b/xen/arch/x86/cpu/vpmu.c @@ -17,12 +17,12 @@ * * Author: Haitao Shan */ -#include -#include -#include -#include #include +#include #include +#include +#include +#include #include #include #include @@ -49,6 +49,7 @@ CHECK_pmu_params; static unsigned int __read_mostly opt_vpmu_enabled; unsigned int __read_mostly vpmu_mode =3D XENPMU_MODE_OFF; unsigned int __read_mostly vpmu_features =3D 0; +static struct arch_vpmu_ops __read_mostly vpmu_ops; =20 static DEFINE_SPINLOCK(vpmu_lock); static unsigned vpmu_count; @@ -120,7 +121,6 @@ int vpmu_do_msr(unsigned int msr, uint64 { struct vcpu *curr =3D current; struct vpmu_struct *vpmu; - const struct arch_vpmu_ops *ops; int ret =3D 0; =20 /* @@ -133,14 +133,13 @@ int vpmu_do_msr(unsigned int msr, uint64 goto nop; =20 vpmu =3D vcpu_vpmu(curr); - ops =3D vpmu->arch_vpmu_ops; - if ( !ops ) + if ( !vpmu_is_set(vpmu, VPMU_INITIALIZED) ) goto nop; =20 - if ( is_write && ops->do_wrmsr ) - ret =3D ops->do_wrmsr(msr, *msr_content, supported); - else if ( !is_write && ops->do_rdmsr ) - ret =3D ops->do_rdmsr(msr, msr_content); + if ( is_write && vpmu_ops.do_wrmsr ) + ret =3D alternative_call(vpmu_ops.do_wrmsr, msr, *msr_content, sup= ported); + else if ( !is_write && vpmu_ops.do_rdmsr ) + ret =3D alternative_call(vpmu_ops.do_rdmsr, msr, msr_content); else goto nop; =20 @@ -153,7 +152,7 @@ int vpmu_do_msr(unsigned int msr, uint64 vpmu_is_set(vpmu, VPMU_CACHED) ) { vpmu_set(vpmu, VPMU_CONTEXT_SAVE); - ops->arch_vpmu_save(curr, 0); + alternative_vcall(vpmu_ops.arch_vpmu_save, curr, 0); vpmu_reset(vpmu, VPMU_CONTEXT_SAVE | VPMU_CONTEXT_LOADED); } =20 @@ -202,7 +201,7 @@ void vpmu_do_interrupt(struct cpu_user_r sampling =3D sampled; =20 vpmu =3D vcpu_vpmu(sampling); - if ( !vpmu->arch_vpmu_ops ) + if ( !vpmu_is_set(vpmu, VPMU_INITIALIZED) ) return; =20 /* PV(H) guest */ @@ -220,7 +219,7 @@ void vpmu_do_interrupt(struct cpu_user_r =20 /* PV guest will be reading PMU MSRs from xenpmu_data */ vpmu_set(vpmu, VPMU_CONTEXT_SAVE | VPMU_CONTEXT_LOADED); - vpmu->arch_vpmu_ops->arch_vpmu_save(sampling, 1); + alternative_vcall(vpmu_ops.arch_vpmu_save, sampling, 1); vpmu_reset(vpmu, VPMU_CONTEXT_SAVE | VPMU_CONTEXT_LOADED); =20 if ( is_hvm_vcpu(sampled) ) @@ -321,7 +320,7 @@ void vpmu_do_interrupt(struct cpu_user_r /* We don't support (yet) HVM dom0 */ ASSERT(sampling =3D=3D sampled); =20 - if ( !vpmu->arch_vpmu_ops->do_interrupt(regs) || + if ( !alternative_call(vpmu_ops.do_interrupt, regs) || !is_vlapic_lvtpc_enabled(vlapic) ) return; =20 @@ -349,8 +348,7 @@ static void vpmu_save_force(void *arg) =20 vpmu_set(vpmu, VPMU_CONTEXT_SAVE); =20 - if ( vpmu->arch_vpmu_ops ) - (void)vpmu->arch_vpmu_ops->arch_vpmu_save(v, 0); + alternative_vcall(vpmu_ops.arch_vpmu_save, v, 0); =20 vpmu_reset(vpmu, VPMU_CONTEXT_SAVE); =20 @@ -368,9 +366,8 @@ void vpmu_save(struct vcpu *v) vpmu->last_pcpu =3D pcpu; per_cpu(last_vcpu, pcpu) =3D v; =20 - if ( vpmu->arch_vpmu_ops ) - if ( vpmu->arch_vpmu_ops->arch_vpmu_save(v, 0) ) - vpmu_reset(vpmu, VPMU_CONTEXT_LOADED); + if ( alternative_call(vpmu_ops.arch_vpmu_save, v, 0) ) + vpmu_reset(vpmu, VPMU_CONTEXT_LOADED); =20 apic_write(APIC_LVTPC, PMU_APIC_VECTOR | APIC_LVT_MASKED); } @@ -426,13 +423,13 @@ int vpmu_load(struct vcpu *v, bool_t fro vpmu_is_set(vpmu, VPMU_CACHED)) ) return 0; =20 - if ( vpmu->arch_vpmu_ops && vpmu->arch_vpmu_ops->arch_vpmu_load ) + if ( vpmu_ops.arch_vpmu_load ) { int ret; =20 apic_write(APIC_LVTPC, vpmu->hw_lapic_lvtpc); /* Arch code needs to set VPMU_CONTEXT_LOADED */ - ret =3D vpmu->arch_vpmu_ops->arch_vpmu_load(v, from_guest); + ret =3D alternative_call(vpmu_ops.arch_vpmu_load, v, from_guest); if ( ret ) { apic_write(APIC_LVTPC, vpmu->hw_lapic_lvtpc | APIC_LVT_MASKED); @@ -572,7 +569,7 @@ static void vpmu_arch_destroy(struct vcp on_selected_cpus(cpumask_of(vpmu->last_pcpu), vpmu_clear_last, v, 1); =20 - if ( vpmu->arch_vpmu_ops && vpmu->arch_vpmu_ops->arch_vpmu_destroy ) + if ( vpmu_ops.arch_vpmu_destroy ) { /* * Unload VPMU first if VPMU_CONTEXT_LOADED being set. @@ -582,7 +579,7 @@ static void vpmu_arch_destroy(struct vcp on_selected_cpus(cpumask_of(vcpu_vpmu(v)->last_pcpu), vpmu_save_force, v, 1); =20 - vpmu->arch_vpmu_ops->arch_vpmu_destroy(v); + alternative_vcall(vpmu_ops.arch_vpmu_destroy, v); } =20 vpmu_reset(vpmu, VPMU_CONTEXT_ALLOCATED); @@ -689,10 +686,9 @@ static void pvpmu_finish(struct domain * /* Dump some vpmu information to console. Used in keyhandler dump_domains(= ). */ void vpmu_dump(struct vcpu *v) { - struct vpmu_struct *vpmu =3D vcpu_vpmu(v); - - if ( vpmu->arch_vpmu_ops && vpmu->arch_vpmu_ops->arch_vpmu_dump ) - vpmu->arch_vpmu_ops->arch_vpmu_dump(v); + if ( vpmu_is_set(vcpu_vpmu(v), VPMU_INITIALIZED) && + vpmu_ops.arch_vpmu_dump ) + alternative_vcall(vpmu_ops.arch_vpmu_dump, v); } =20 long do_xenpmu_op(unsigned int op, XEN_GUEST_HANDLE_PARAM(xen_pmu_params_t= ) arg) @@ -870,6 +866,7 @@ static struct notifier_block cpu_nfb =3D { static int __init vpmu_init(void) { int vendor =3D current_cpu_data.x86_vendor; + const struct arch_vpmu_ops *ops =3D NULL; =20 if ( !opt_vpmu_enabled ) return 0; @@ -886,36 +883,36 @@ static int __init vpmu_init(void) switch ( vendor ) { case X86_VENDOR_AMD: - if ( amd_vpmu_init() ) - vpmu_mode =3D XENPMU_MODE_OFF; + ops =3D amd_vpmu_init(); break; =20 case X86_VENDOR_HYGON: - if ( hygon_vpmu_init() ) - vpmu_mode =3D XENPMU_MODE_OFF; + ops =3D hygon_vpmu_init(); break; =20 case X86_VENDOR_INTEL: - if ( core2_vpmu_init() ) - vpmu_mode =3D XENPMU_MODE_OFF; + ops =3D core2_vpmu_init(); break; =20 default: printk(XENLOG_WARNING "VPMU: Unknown CPU vendor: %d. " "Turning VPMU off.\n", vendor); - vpmu_mode =3D XENPMU_MODE_OFF; break; } =20 - if ( vpmu_mode !=3D XENPMU_MODE_OFF ) + if ( !IS_ERR_OR_NULL(ops) ) { + vpmu_ops =3D *ops; register_cpu_notifier(&cpu_nfb); printk(XENLOG_INFO "VPMU: version " __stringify(XENPMU_VER_MAJ) "." __stringify(XENPMU_VER_MIN) "\n"); } else + { + vpmu_mode =3D XENPMU_MODE_OFF; opt_vpmu_enabled =3D 0; + } =20 return 0; } -__initcall(vpmu_init); +presmp_initcall(vpmu_init); --- a/xen/arch/x86/cpu/vpmu_amd.c +++ b/xen/arch/x86/cpu/vpmu_amd.c @@ -21,9 +21,9 @@ * */ =20 -#include +#include #include -#include +#include #include #include #include @@ -483,7 +483,7 @@ static void amd_vpmu_dump(const struct v } } =20 -static const struct arch_vpmu_ops amd_vpmu_ops =3D { +static const struct arch_vpmu_ops __initconstrel amd_vpmu_ops =3D { .do_wrmsr =3D amd_vpmu_do_wrmsr, .do_rdmsr =3D amd_vpmu_do_rdmsr, .do_interrupt =3D amd_vpmu_do_interrupt, @@ -529,13 +529,12 @@ int svm_vpmu_initialise(struct vcpu *v) offsetof(struct xen_pmu_amd_ctxt, regs)); } =20 - vpmu->arch_vpmu_ops =3D &amd_vpmu_ops; + vpmu_set(vpmu, VPMU_INITIALIZED | VPMU_CONTEXT_ALLOCATED); =20 - vpmu_set(vpmu, VPMU_CONTEXT_ALLOCATED); return 0; } =20 -static int __init common_init(void) +static const struct arch_vpmu_ops *__init common_init(void) { unsigned int i; =20 @@ -543,7 +542,7 @@ static int __init common_init(void) { printk(XENLOG_WARNING "VPMU: Unsupported CPU family %#x\n", current_cpu_data.x86); - return -EINVAL; + return ERR_PTR(-EINVAL); } =20 if ( sizeof(struct xen_pmu_data) + @@ -553,7 +552,7 @@ static int __init common_init(void) "VPMU: Register bank does not fit into VPMU shared page\n"); counters =3D ctrls =3D NULL; num_counters =3D 0; - return -ENOSPC; + return ERR_PTR(-ENOSPC); } =20 for ( i =3D 0; i < num_counters; i++ ) @@ -562,10 +561,10 @@ static int __init common_init(void) ctrl_rsvd[i] &=3D CTRL_RSVD_MASK; } =20 - return 0; + return &amd_vpmu_ops; } =20 -int __init amd_vpmu_init(void) +const struct arch_vpmu_ops *__init amd_vpmu_init(void) { switch ( current_cpu_data.x86 ) { @@ -592,7 +591,7 @@ int __init amd_vpmu_init(void) return common_init(); } =20 -int __init hygon_vpmu_init(void) +const struct arch_vpmu_ops *__init hygon_vpmu_init(void) { switch ( current_cpu_data.x86 ) { --- a/xen/arch/x86/cpu/vpmu_intel.c +++ b/xen/arch/x86/cpu/vpmu_intel.c @@ -18,9 +18,9 @@ * Author: Haitao Shan */ =20 +#include #include #include -#include #include #include #include @@ -819,7 +819,7 @@ static void core2_vpmu_destroy(struct vc vpmu_clear(vpmu); } =20 -static const struct arch_vpmu_ops core2_vpmu_ops =3D { +static const struct arch_vpmu_ops __initconstrel core2_vpmu_ops =3D { .do_wrmsr =3D core2_vpmu_do_wrmsr, .do_rdmsr =3D core2_vpmu_do_rdmsr, .do_interrupt =3D core2_vpmu_do_interrupt, @@ -893,12 +893,12 @@ int vmx_vpmu_initialise(struct vcpu *v) if ( is_pv_vcpu(v) && !core2_vpmu_alloc_resource(v) ) return -EIO; =20 - vpmu->arch_vpmu_ops =3D &core2_vpmu_ops; + vpmu_set(vpmu, VPMU_INITIALIZED); =20 return 0; } =20 -int __init core2_vpmu_init(void) +const struct arch_vpmu_ops *__init core2_vpmu_init(void) { unsigned int version =3D 0; unsigned int i; @@ -921,13 +921,13 @@ int __init core2_vpmu_init(void) default: printk(XENLOG_WARNING "VPMU: PMU version %u is not supported\n", version); - return -EINVAL; + return ERR_PTR(-EINVAL); } =20 if ( current_cpu_data.x86 !=3D 6 ) { printk(XENLOG_WARNING "VPMU: only family 6 is supported\n"); - return -EINVAL; + return ERR_PTR(-EINVAL); } =20 arch_pmc_cnt =3D core2_get_arch_pmc_count(); @@ -972,9 +972,9 @@ int __init core2_vpmu_init(void) printk(XENLOG_WARNING "VPMU: Register bank does not fit into VPMU share page\n"); arch_pmc_cnt =3D fixed_pmc_cnt =3D 0; - return -ENOSPC; + return ERR_PTR(-ENOSPC); } =20 - return 0; + return &core2_vpmu_ops; } =20 --- a/xen/include/asm-x86/vpmu.h +++ b/xen/include/asm-x86/vpmu.h @@ -49,10 +49,10 @@ struct arch_vpmu_ops { void (*arch_vpmu_dump)(const struct vcpu *); }; =20 -int core2_vpmu_init(void); +const struct arch_vpmu_ops *core2_vpmu_init(void); int vmx_vpmu_initialise(struct vcpu *); -int amd_vpmu_init(void); -int hygon_vpmu_init(void); +const struct arch_vpmu_ops *amd_vpmu_init(void); +const struct arch_vpmu_ops *hygon_vpmu_init(void); int svm_vpmu_initialise(struct vcpu *); =20 struct vpmu_struct { @@ -61,25 +61,25 @@ struct vpmu_struct { u32 hw_lapic_lvtpc; void *context; /* May be shared with PV guest */ void *priv_context; /* hypervisor-only */ - const struct arch_vpmu_ops *arch_vpmu_ops; struct xen_pmu_data *xenpmu_data; spinlock_t vpmu_lock; }; =20 /* VPMU states */ -#define VPMU_CONTEXT_ALLOCATED 0x1 -#define VPMU_CONTEXT_LOADED 0x2 -#define VPMU_RUNNING 0x4 -#define VPMU_CONTEXT_SAVE 0x8 /* Force context save */ -#define VPMU_FROZEN 0x10 /* Stop counters while V= CPU is not running */ -#define VPMU_PASSIVE_DOMAIN_ALLOCATED 0x20 +#define VPMU_INITIALIZED 0x1 +#define VPMU_CONTEXT_ALLOCATED 0x2 +#define VPMU_CONTEXT_LOADED 0x4 +#define VPMU_RUNNING 0x8 +#define VPMU_CONTEXT_SAVE 0x10 /* Force context save */ +#define VPMU_FROZEN 0x20 /* Stop counters while V= CPU is not running */ +#define VPMU_PASSIVE_DOMAIN_ALLOCATED 0x40 /* PV(H) guests: VPMU registers are accessed by guest from shared page */ -#define VPMU_CACHED 0x40 -#define VPMU_AVAILABLE 0x80 +#define VPMU_CACHED 0x80 +#define VPMU_AVAILABLE 0x100 =20 /* Intel-specific VPMU features */ -#define VPMU_CPU_HAS_DS 0x100 /* Has Debug Store */ -#define VPMU_CPU_HAS_BTS 0x200 /* Has Branch Trace Stor= e */ +#define VPMU_CPU_HAS_DS 0x1000 /* Has Debug Store */ +#define VPMU_CPU_HAS_BTS 0x2000 /* Has Branch Trace Sto= re */ =20 static inline void vpmu_set(struct vpmu_struct *vpmu, const u32 mask) { From nobody Mon Apr 29 18:34:21 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1638177072; cv=pass; d=zohomail.com; s=zohoarc; b=oBxNej9IDl3h85pyvUXGsq4lArYC775zABFw/bJ+rpw0a3itdF3x/D8a7CEapCHZ1U9lgq23IqYBFEJV2hze79Oe2bvKCfOrs/x/xkbloVqy8FUnVOAAzu/Gx2cnCv4cmEqgtO3zNNb8sIjbpNx5DTbw+Wi00VUDhvDhAMswwxc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1638177072; 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=KqEtdF6b8e6P1Mb32jkTsVPi0STtOfseFIL0jFb6joo=; b=BevzPP1GFGtmWl+jwHt4axIUl0wbT56PD1C0005xFPVs/go72ALoSDJX/mdpm5xcvD1JswFv13X/ZK9Y1MoFma8dGg7ft5eONbplynCy4QY3klt9wHarHwj5w+e0ulSPHoXOSvOxe1Op6x7XnQxH8x6PKmUeS98VD7kjU8GaNdk= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1638177072086169.64532732644727; Mon, 29 Nov 2021 01:11:12 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.234360.406739 (Exim 4.92) (envelope-from ) id 1mrcgV-0001L6-Cw; Mon, 29 Nov 2021 09:10:51 +0000 Received: by outflank-mailman (output) from mailman id 234360.406739; Mon, 29 Nov 2021 09:10:51 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mrcgV-0001Kz-8T; Mon, 29 Nov 2021 09:10:51 +0000 Received: by outflank-mailman (input) for mailman id 234360; Mon, 29 Nov 2021 09:10:50 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mrcgU-0001Km-CF for xen-devel@lists.xenproject.org; Mon, 29 Nov 2021 09:10:50 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 3e05ee6c-50f4-11ec-b941-1df2895da90e; Mon, 29 Nov 2021 10:10:48 +0100 (CET) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05lp2109.outbound.protection.outlook.com [104.47.18.109]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-31-50_XIFP6N5isC5GZoBPbFw-1; Mon, 29 Nov 2021 10:10:47 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR04MB5469.eurprd04.prod.outlook.com (2603:10a6:803:cf::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4734.20; Mon, 29 Nov 2021 09:10:46 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%5]) with mapi id 15.20.4734.024; Mon, 29 Nov 2021 09:10:46 +0000 Received: from [10.156.60.236] (37.24.206.209) by AS8PR04CA0143.eurprd04.prod.outlook.com (2603:10a6:20b:127::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4734.21 via Frontend Transport; Mon, 29 Nov 2021 09:10:45 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 3e05ee6c-50f4-11ec-b941-1df2895da90e DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1638177049; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=KqEtdF6b8e6P1Mb32jkTsVPi0STtOfseFIL0jFb6joo=; b=dnm6cdsNpeBJHqQIyGJ7G3H18Sd4s7F6g+FIsj8/BAVeHJsA0bZy9w1TkvTNrbBhacn3rK tnGJvFetQeXKEQzbzNsSWYOHcQM18NzeWdjNn5DyE10LmOA/zq74fV6uBRO1OQ8v0HWm8t mp7vh3kikkQ3anMDVI2+05skWsNBpDk= X-MC-Unique: 50_XIFP6N5isC5GZoBPbFw-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Sz8BlGsnmconm4WglBK+B/KkwvoyhB9TmMABC20VlhFblBwHWiLk0U+Iu1pxMOFGxfL/P/ndFYKesKlcVdl7tRdA1CS0+j7Oa2IFsxCTDdCT16vf/XzOyHBxP2SaCKXyy1fkmGhQZBIWMJw2OIsAA2GdgmuQlmqAwQxOvitA5SmrT89UTjNElyPdGWlmL+jUYw+nC6xVmx8bGXqM0mrqlQTDYHcctJw/kR+zCdJLVilhhReiIfZuAFXn7C6Q0wE6gW5E9t6UP7bbR2JBSPwr8BtMfnk3K/y7LE++BQw1RnMtFhS2iz/4Fkdzw2V4hCmEJUa9LSLsLBBsldwxo4d1Yw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=KqEtdF6b8e6P1Mb32jkTsVPi0STtOfseFIL0jFb6joo=; b=OMy1jTIhHadUs/+JNMP7qpE3s5TTxGGXwflvMNltM5OH/7HyZ29LzSAQ2Y3E5MBZWx7A/KdJBWbPvf4ydepe1uDFFDKP21rQe3U1M8uaY2kE36kxxY2AxnoWxwNXfE2ogXAxByYafhUs2PpDv0hplztO8SpF6DPcZBRsfWSftx/uQ/N+n+1scfEsVzA+TYsixX9xoPoHC6LAR3C7aCRGIS8KYIiVTOpOkjOtkdAS+wra6TLSu5WO6+GDEwscyIWPtq4nv9ENyCNJiFl7c/IdDyDvav/GdzUfS278hRk8OO3XS1UEHvVpqT4unPe4HrWV0gADqliU8AFW1SqnOx7Y4g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <66e64fc5-34f1-7877-42b1-3533136f56ab@suse.com> Date: Mon, 29 Nov 2021 10:10:48 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.3.2 Subject: [PATCH 2/3] x86/vPMU: invoke _vpmu_initialise() through a hook as well Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , Kevin Tian , Jun Nakajima References: In-Reply-To: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS8PR04CA0143.eurprd04.prod.outlook.com (2603:10a6:20b:127::28) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 06afb1c9-779e-4930-e0b8-08d9b31820c9 X-MS-TrafficTypeDiagnostic: VI1PR04MB5469: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:489; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: MfQI6+XlGO/KOaJ1UUv+//QxtbUdeWxF3bTpSW+dgR5rVRDuFBJIt5rj/HmBKgRq86ASG3wnXimDsMn3weVAx/OjyevJ0Y6sZiDINVZ1unHB+qo4oxEBBpbwmaGaZy/iwvy7h4fB48pfskvEFd1koSav7NUKYfERDPNzji8J7GIT2+qNMDu4WjrZUGq64gzyBgRwTa6TmrDP4FoyN8UeFIsP7O51Gn+UA4RBg1g1ctjdNuXAAYgTIl/1Bvj8K8cYDBvLi1g6yMFtCc06g4KmVtC5xMXMdoGkJfucWoiKXXtvmFCPpYo6K8O74fngoUIZeIaep3CgXAi0naqFYLDqDNipSNk/++Z+zClyw9EF0jq6BhFR9Viyno+JFKbtqV9/qUssrDh+ZPQTMGtr0fcxnFghTmUHz6dPL0naUt9oqzEhwjNCnStF86l0wiWKsLN9V+dCEfpc9EvWLznfjs9ncaAAIvqnarDaX/3+h2VbzB5MPTC2ROY4EdC6qZ9TJjTqSeyg9pTcZgpTgxpjnRusENL3ofsiS1OIkqopMH2JOXstL0FL+TWP+BYUpdkz20Ym6v+Nsk056Q4oyS4FuwSHAGm9vMX6i9QUkutGd9MfwJuCFjEVXtha6m+CcvLKWsUGfWzfaUuapJt+Xx8rIINF8k9eoy9dviqbKTIMw0RO4krNHCUO9CG8nmJi/Rau316Mw0SolU7Hvsy2uPM7Jcht0wAjiDCNXKBmiQjjSxkYK6tHcNtGLdsrrWQGiZNDds2O X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(8676002)(5660300002)(31696002)(956004)(2616005)(2906002)(186003)(316002)(36756003)(54906003)(16576012)(26005)(31686004)(8936002)(6486002)(38100700002)(508600001)(4326008)(66556008)(66946007)(83380400001)(66476007)(86362001)(6916009)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?REpDZUI0RkdvWHhoQXV1bS82Q05qVnlidkp6RUJEQytFYnVnR2ZxbFQxRlpU?= =?utf-8?B?MmM0dVZNZ01XRzU0ZFhURDdOSWluSmhJUUlHa0lwWWpRL2N4MlNJVFZ5ZVJi?= =?utf-8?B?Y0o0UUtwZkxuejhFbUtVc042RkZ2RUo3NEg0cEZ2OVhLSzJhcUR4dW5zM0pV?= =?utf-8?B?UXc4eXpTY2hOOWd6ZjR6TkQ0ODlEdVJyZjB3ZGhtUEY1ZTlyd25GQk5qWlU3?= =?utf-8?B?N0Z0SVhpaXhrMGNjdS9wS3NuOEhOblZBMjZydDg5NVhrNmM5Slhwc1RVa3lG?= =?utf-8?B?OUtrUjlQSTVOM0VlaSs2bnNJWEZPY3Z6R2d5cHc2WU9iTGp6VktWWFpreUdF?= =?utf-8?B?TSt2VVJYNzFMYTBnRlJBSTJMaTMwQUF2anRiNGJ6ZC82R3Q0YXAzekIxWXE0?= =?utf-8?B?S09ha2xJaVBvT1VPTlhkQXhBWW0wYVNRNjNCY05IZ0tmd25WdEUxUmJ5Wkdi?= =?utf-8?B?b21TdmxvR3BMN1ZGWUJOMHVDSGZaNjZ2SWNHMTZVa1NCUmtQZ3pLUDhITklW?= =?utf-8?B?YWMvc21ZdW9JVUpFRzJFQ05TeFpuRGFzUzlucE95cmJ2d2hSVitFd0d2WDBP?= =?utf-8?B?NVVDNVcwTnpWcFZKby9aM3l0Ulk1TzV0b1I0VFBOUU1FWjBZWXo5MlJkSGxu?= =?utf-8?B?Ri9YaGR6V0NVSTVvREx2bWx1R3JJSkVZaTRMRzExckE4dGc5KzdGOUVSSzhR?= =?utf-8?B?aE4xSmR2VHd0ODYwcFBhdnFlR1dId2EydXhrZEpSbXNFUHdxdzY5dWhaWFh4?= =?utf-8?B?dmhnL1RVVC9OMFJ2VUFGZ0MrZHhId2ZNOGZoS0J5Rk1vTExBZloweGxyeUwv?= =?utf-8?B?eml4Um0zZk9OaXpMODFoUEZlYVlDYnhIYlVyOUM3N1BkRk1Rbkd0T0EzNDkv?= =?utf-8?B?OFpQM1REZnNhK3dxM2RzK2VMZFpvT0NVNERSSUhmQ1BIbWhURGpwYURsQWMw?= =?utf-8?B?YkMxQlo1UDBMRGd5UXB2WisvV2wwaWRLRWJOWFJEeSs2Qk1EWndqRkR4OHRk?= =?utf-8?B?QXdWRTdCZ1BlUGNpUVdSaWg0VE5EZGx5TEJ6U3NkRCtmODJQS2lUVTFPMi82?= =?utf-8?B?K2hzN3NoR3ZaR3Y4WUtld2tkZ2V1L2RtS0Y0Q2x3bVV3V29DNHN1VE4wM25h?= =?utf-8?B?T1ZaMnluRzArVjFNeGVWMzhPN3dqTk5QK0ZTcnBIU2Z1bkNLbFZ1cDRRWlBK?= =?utf-8?B?VzN2cFlpajEvZjVncW42K2k4aHFlMiswRmVzUVV1T0tuUkxQUFR4WUFDRHR6?= =?utf-8?B?NS9HeTAwcGZJTGg2VGVHQnFHczBOWWcyUCtIallOcTZ0TUFvQUlmK0lMYmNM?= =?utf-8?B?SlpEbTMxQmZ3VVA1eDd0Z0o1d3lBTUVvK216TG81L1Z5RHR6OXNvYnZ4Ylp6?= =?utf-8?B?VlAybDBKc3BJOEpWaHFCa0Y0U1FYUVFQVzJLNy8xNkhnNEZPaXA5c0tBcVBV?= =?utf-8?B?Tmh1YndLb3RLNlFrdS9KZzJkWHdKeHlhVXhRUmthemVvdXBIVHdMRHVOWU1U?= =?utf-8?B?aHBVNzE3L3ZpWHZYbnR1SEk1VFo3cW15UVhWbkpBeHhWL0JRNnM0bWYyd2l6?= =?utf-8?B?QWR4bURsY0Nrd2E4N2RMbDRDNWlWbVdxSmJNbmxxK1VaT3lSL0M4YXZzd0Jo?= =?utf-8?B?N0VSTU9kUDBodi9oZjZzN21LOFlDUEpVWktRYnZkMTBOeW5zRnRMVmttTXZ1?= =?utf-8?B?b2tsMHVCZk90L1NBcFZiZEgvUEt3VXZ1OGFMOWR0TjFvMVo1ZlJKWXc2U3ZH?= =?utf-8?B?M3ArdDJpNUJ2dWhKSERndmhDbVF2OGFiVGs0RHVkNmdhRnluOXJpSXRHWThC?= =?utf-8?B?OG1PUGdtcTIxNnJUbnd1R3czdWlubTlCaEhXbWtMNVNLdHlGRUpzWDdWN0xF?= =?utf-8?B?cjhSNTJCRVhDNHIyWEZZU0RPMzZsVHhhblUzWjZCSnlNc3dhc3NjRkluZ1gr?= =?utf-8?B?bmpNYi9FMTBVZWwvNmNMWjc2S0dCZzlEc0NsVUZQUDI2U2FTL0xIaFcwMXgw?= =?utf-8?B?b05Kd1dqY2d3VWdGU09WVnlWcVBmK252a2huMWpoMlNHdXdlSy9WY1JIVlVF?= =?utf-8?B?aTRxWVd0Vm11ajRTQnlDNkVJMVp6MmJXRGRMV3FOanJ5dGY1TW5uQ1crOUUw?= =?utf-8?B?Y0xwVEdBRytDbXpweUFJOUVabitIeW1janNpaVVZd2FMMkNxcit1a09ERG94?= =?utf-8?Q?o/g86ztVZwHouQaKtAhxQoA=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 06afb1c9-779e-4930-e0b8-08d9b31820c9 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Nov 2021 09:10:46.1813 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: wuzpchk4NJLEegX/gxtoOcia4S18TLBgfwOQs7SBQi+7qbjEwq6BaPe3RlX6KhSem7hGz+Dg/m/2uDAOkZDMWA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5469 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1638177074266100001 Content-Type: text/plain; charset="utf-8" I see little point in having an open-coded switch() statement to achieve the same; like other vendor-specific operations the function can be supplied in the respective ops structure instances. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper , although --- a/xen/arch/x86/cpu/vpmu.c +++ b/xen/arch/x86/cpu/vpmu.c @@ -455,21 +455,11 @@ static int vpmu_arch_initialise(struct v =20 ASSERT(!(vpmu->flags & ~VPMU_AVAILABLE) && !vpmu->context); =20 - if ( !vpmu_available(v) ) + if ( !vpmu_available(v) || vpmu_mode =3D=3D XENPMU_MODE_OFF ) return 0; =20 - switch ( vendor ) + if ( !vpmu_ops.initialise ) { - case X86_VENDOR_AMD: - case X86_VENDOR_HYGON: - ret =3D svm_vpmu_initialise(v); - break; - - case X86_VENDOR_INTEL: - ret =3D vmx_vpmu_initialise(v); - break; - - default: if ( vpmu_mode !=3D XENPMU_MODE_OFF ) { printk(XENLOG_G_WARNING "VPMU: Unknown CPU vendor %d. " @@ -480,12 +470,17 @@ static int vpmu_arch_initialise(struct v return -EINVAL; } =20 - vpmu->hw_lapic_lvtpc =3D PMU_APIC_VECTOR | APIC_LVT_MASKED; - + ret =3D alternative_call(vpmu_ops.initialise, v); if ( ret ) + { printk(XENLOG_G_WARNING "VPMU: Initialization failed for %pv\n", v= ); + return ret; + } + + vpmu->hw_lapic_lvtpc =3D PMU_APIC_VECTOR | APIC_LVT_MASKED; + vpmu_set(vpmu, VPMU_INITIALIZED); =20 - return ret; + return 0; } =20 static void get_vpmu(struct vcpu *v) --- a/xen/arch/x86/cpu/vpmu_amd.c +++ b/xen/arch/x86/cpu/vpmu_amd.c @@ -483,24 +483,11 @@ static void amd_vpmu_dump(const struct v } } =20 -static const struct arch_vpmu_ops __initconstrel amd_vpmu_ops =3D { - .do_wrmsr =3D amd_vpmu_do_wrmsr, - .do_rdmsr =3D amd_vpmu_do_rdmsr, - .do_interrupt =3D amd_vpmu_do_interrupt, - .arch_vpmu_destroy =3D amd_vpmu_destroy, - .arch_vpmu_save =3D amd_vpmu_save, - .arch_vpmu_load =3D amd_vpmu_load, - .arch_vpmu_dump =3D amd_vpmu_dump -}; - -int svm_vpmu_initialise(struct vcpu *v) +static int svm_vpmu_initialise(struct vcpu *v) { struct xen_pmu_amd_ctxt *ctxt; struct vpmu_struct *vpmu =3D vcpu_vpmu(v); =20 - if ( vpmu_mode =3D=3D XENPMU_MODE_OFF ) - return 0; - if ( !counters ) return -EINVAL; =20 @@ -529,11 +516,22 @@ int svm_vpmu_initialise(struct vcpu *v) offsetof(struct xen_pmu_amd_ctxt, regs)); } =20 - vpmu_set(vpmu, VPMU_INITIALIZED | VPMU_CONTEXT_ALLOCATED); + vpmu_set(vpmu, VPMU_CONTEXT_ALLOCATED); =20 return 0; } =20 +static const struct arch_vpmu_ops __initconstrel amd_vpmu_ops =3D { + .initialise =3D svm_vpmu_initialise, + .do_wrmsr =3D amd_vpmu_do_wrmsr, + .do_rdmsr =3D amd_vpmu_do_rdmsr, + .do_interrupt =3D amd_vpmu_do_interrupt, + .arch_vpmu_destroy =3D amd_vpmu_destroy, + .arch_vpmu_save =3D amd_vpmu_save, + .arch_vpmu_load =3D amd_vpmu_load, + .arch_vpmu_dump =3D amd_vpmu_dump +}; + static const struct arch_vpmu_ops *__init common_init(void) { unsigned int i; --- a/xen/arch/x86/cpu/vpmu_intel.c +++ b/xen/arch/x86/cpu/vpmu_intel.c @@ -819,25 +819,12 @@ static void core2_vpmu_destroy(struct vc vpmu_clear(vpmu); } =20 -static const struct arch_vpmu_ops __initconstrel core2_vpmu_ops =3D { - .do_wrmsr =3D core2_vpmu_do_wrmsr, - .do_rdmsr =3D core2_vpmu_do_rdmsr, - .do_interrupt =3D core2_vpmu_do_interrupt, - .arch_vpmu_destroy =3D core2_vpmu_destroy, - .arch_vpmu_save =3D core2_vpmu_save, - .arch_vpmu_load =3D core2_vpmu_load, - .arch_vpmu_dump =3D core2_vpmu_dump -}; - -int vmx_vpmu_initialise(struct vcpu *v) +static int vmx_vpmu_initialise(struct vcpu *v) { struct vpmu_struct *vpmu =3D vcpu_vpmu(v); u64 msr_content; static bool_t ds_warned; =20 - if ( vpmu_mode =3D=3D XENPMU_MODE_OFF ) - return 0; - if ( v->domain->arch.cpuid->basic.pmu_version <=3D 1 || v->domain->arch.cpuid->basic.pmu_version >=3D 6 ) return -EINVAL; @@ -893,11 +880,20 @@ int vmx_vpmu_initialise(struct vcpu *v) if ( is_pv_vcpu(v) && !core2_vpmu_alloc_resource(v) ) return -EIO; =20 - vpmu_set(vpmu, VPMU_INITIALIZED); - return 0; } =20 +static const struct arch_vpmu_ops __initconstrel core2_vpmu_ops =3D { + .initialise =3D vmx_vpmu_initialise, + .do_wrmsr =3D core2_vpmu_do_wrmsr, + .do_rdmsr =3D core2_vpmu_do_rdmsr, + .do_interrupt =3D core2_vpmu_do_interrupt, + .arch_vpmu_destroy =3D core2_vpmu_destroy, + .arch_vpmu_save =3D core2_vpmu_save, + .arch_vpmu_load =3D core2_vpmu_load, + .arch_vpmu_dump =3D core2_vpmu_dump +}; + const struct arch_vpmu_ops *__init core2_vpmu_init(void) { unsigned int version =3D 0; --- a/xen/include/asm-x86/vpmu.h +++ b/xen/include/asm-x86/vpmu.h @@ -39,6 +39,7 @@ =20 /* Arch specific operations shared by all vpmus */ struct arch_vpmu_ops { + int (*initialise)(struct vcpu *v); int (*do_wrmsr)(unsigned int msr, uint64_t msr_content, uint64_t supported); int (*do_rdmsr)(unsigned int msr, uint64_t *msr_content); @@ -50,10 +51,8 @@ struct arch_vpmu_ops { }; =20 const struct arch_vpmu_ops *core2_vpmu_init(void); -int vmx_vpmu_initialise(struct vcpu *); const struct arch_vpmu_ops *amd_vpmu_init(void); const struct arch_vpmu_ops *hygon_vpmu_init(void); -int svm_vpmu_initialise(struct vcpu *); =20 struct vpmu_struct { u32 flags; From nobody Mon Apr 29 18:34:21 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1638177133; cv=pass; d=zohomail.com; s=zohoarc; b=EpLlobOOpnszYp+EYTGiVUCLV8w9PePgtR7lTaPNau3qYsx2P0wCT5bFWLpiUcysfJKq+JFjJqInajUS3cJG/42UlPf6VdSjEULKom4N9LOiIZ43LNNfZe85UYCul2TFbraVTV9AmCfbFncVlv0+eYRukTfZ3w5dNwzmTbU07UY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1638177133; 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=VzBI2412mUYvVTF6nElIfuplOF2xNQD6sD5YCcOEANA=; b=HzHdwWI2EeobvhFw7rttx24os6e9OLwUfj6L9T2pSuBhMpjDLcRyYtKjoXbcqZ2py1mF8u0nva4lu5E0uAMOKc6Nr3bCtrT5GwwrGbVyEHeTTuca2Y72pRomEMufcjIA3u/R2N5avvAr++rPMoXlJxD4yIsmTPnxDCdpVHsizxo= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1638177133214321.6104524737593; Mon, 29 Nov 2021 01:12:13 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.234367.406750 (Exim 4.92) (envelope-from ) id 1mrchU-00021U-P8; Mon, 29 Nov 2021 09:11:52 +0000 Received: by outflank-mailman (output) from mailman id 234367.406750; Mon, 29 Nov 2021 09:11: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 1mrchU-00021N-MA; Mon, 29 Nov 2021 09:11:52 +0000 Received: by outflank-mailman (input) for mailman id 234367; Mon, 29 Nov 2021 09:11:51 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mrchT-0001Km-4T for xen-devel@lists.xenproject.org; Mon, 29 Nov 2021 09:11:51 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 626debbf-50f4-11ec-b941-1df2895da90e; Mon, 29 Nov 2021 10:11:49 +0100 (CET) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01lp2059.outbound.protection.outlook.com [104.47.0.59]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-8-tJzzrkJEMqaeOpyx4GPydg-1; Mon, 29 Nov 2021 10:11:49 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR04MB4384.eurprd04.prod.outlook.com (2603:10a6:803:6f::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4734.22; Mon, 29 Nov 2021 09:11:46 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%5]) with mapi id 15.20.4734.024; Mon, 29 Nov 2021 09:11:46 +0000 Received: from [10.156.60.236] (37.24.206.209) by AM6P195CA0099.EURP195.PROD.OUTLOOK.COM (2603:10a6:209:86::40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4734.20 via Frontend Transport; Mon, 29 Nov 2021 09:11:46 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 626debbf-50f4-11ec-b941-1df2895da90e DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1638177110; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=VzBI2412mUYvVTF6nElIfuplOF2xNQD6sD5YCcOEANA=; b=I2WH7rpI218ypVBDE/62Z5TN7fqLHB5Vf+Uc86sMrFIQRWXL6lQeDWyO3GktKhNwfGHTh/ LNjlOhf1Ww2xIA1BA/97ZqCNiHkU/EhsOESyfGs0ZBHDChKPuszGs7HgieJtL0cDDQZ9PE 7f0U4UBdfeqh6X2ETEQ3ZH7BsTD5fRs= X-MC-Unique: tJzzrkJEMqaeOpyx4GPydg-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HoG6/To2SBx+7al80e3b1H81UjFOPeKkHK3u+fKBcHQZtuefNlG0fV6v4umptnjiCv8e4EwQv27IfztWGx1WVGUZRoOCr8JsGRWK3wdhuPSNWBkah/dGDLYgF0wccGPOf/U2oU+nFDAc50hqHRmFObnw9eF92BCMOz3PC+Fuv0k12/YGH4z2Ya1sG3dtDMmw/AeLbrpAm1/fs+UtBVc+tJGvFmVn8pircrZEYm4MjImFbWVZgwPIulKcAo0SdzVCEgCrnXeeqi7oqjsnkXDjR5m5yO4iqvGdvm/dRkLPb66MAfY0BpzhwTHTxjAU5uBj8Q4tYvYZUuf56u1ETQ0b3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=VzBI2412mUYvVTF6nElIfuplOF2xNQD6sD5YCcOEANA=; b=Wu8YiNb8EZZBHPULvmB6saEBd96N2WY0rMT7Ir4aFqwb95mEgXfSlWTYbf8pfXr0+YfpHUHgJdX3xQxcURaytjZlOOHp4Ygy3kVvAHFVzQLtVKw1HONiNVgzvc/GPg4ZKtdMJUYYHvgKrVCDFGh4tpRmbqEvCLNpCiXI4yiYpPgArMj2tVp939I6HUTTHOtq8JjSCGw8iKVgUeujNrzDD0k6WDpapkYgg9tL3CKwj2BvOQTV9KUXptmyuvwbaHvXQ96NMj+zStaoJNiHAkGO1JiaVS58prvNKSOB07KoqBEOo4ZAgis+h4u7SNrP5B5qAl9xh+Tl2mLpnhuk3/vaTA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Mon, 29 Nov 2021 10:11:47 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.3.2 Subject: [PATCH 3/3] x86/vPMU: move vpmu_ops to .init.data Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: In-Reply-To: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6P195CA0099.EURP195.PROD.OUTLOOK.COM (2603:10a6:209:86::40) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a5a186a0-59b6-44dd-0ce2-08d9b31844fa X-MS-TrafficTypeDiagnostic: VI1PR04MB4384: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1728; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2a6ZEHShZmcdwXADy55F1Q3DwECYzGqzsID2CSM1N98MYnwO8N2n+XXuABUBDPCwCflc0hRoWNSXO7WIqN6XXbqVGvlE4igJLvswDQJsNhzDVvlDAW0IW8ULHaQ5PXPaFMY+e/rS9nap+Kxpa4d8wAmLa3eAZgJq6I2nmaEekaIpoXkU/QQdE7/FaSFYi6BdWM4RhdcSW6kIZFNTuXiyK3vYXuyBEkX5ctRhBvY9FTKxCvrAJaQIYml14MTmULtDn7rzJ2J5eM1LoNHYgPfeoplQI7foQP98GspKwAkOdW+ZPrrUw/NTUS7UCHInvT+CBDfONHANSanFVXEO4pQ4sLKDDUykgDhxqE5wM7KxX/DJUH/2IvCnjAkLpiQdeVI5BTHPJlS2uBW/My9v7xz10YfwJa5g3HYGs+Isu9nBZxo9uQh8iKm5VX0FEyhYeR5mMB7UAwFiAYpAoaPwd9S8+KzVXrxFVIm5Ry2H8ZFyHgQRWJmuvI4Oo4t0/Ev3RtiJAt5uRt/YdGpWrpiG5JRS4vRFkMceuEteZga/UgIfJWvDJyAxVAlr2M2nlpkiorVQiqQuYF+W8U99j0JPWz2Amh5++3G+LmPLa7UA07OC7kn27pT3D5+LA4f0ZKbE113KYHUwrZgEu3gegzARJIVO0gTQPjelFxuKZrlOh8YNg4McQKFA5y7Z6+FtIHO8/DMUEjLEXf++Vi2V4ewnYIFW1H3xzstkSl8e6olivOuBNfUVqiXILqr6egQ6eTCfgZaxl4DBF7uvhNfqfkNueiMsLA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(5660300002)(38100700002)(8936002)(2616005)(6916009)(8676002)(26005)(316002)(956004)(186003)(16576012)(31686004)(36756003)(508600001)(66946007)(4326008)(86362001)(2906002)(6486002)(31696002)(54906003)(83380400001)(66556008)(66476007)(142923001)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?S0V5bTNSdDZUWjlwSU52VVg4YjMxM3Iza3cwbEFJVktXN2xhdVExQ0xyNXph?= =?utf-8?B?aHZmYTVNczdBdGZXTFYrczlUUHB2NE9Yakx1L1VDSnRsd1ZodkY3d0NsZHZC?= =?utf-8?B?OVdya2o3VkdBc0VIbFp0aDVpQlg1TWhmeExWYUtRZU12dnphVHJRcGlzVUtZ?= =?utf-8?B?eG9RNXY1Z3hETng4UFhyaWNuV04vTXY1ZzNUWjNha1ozdTgyZ3MvcUIvWlcx?= =?utf-8?B?TlpsZG5XMW1Od2lkWGxpU0dHWm5RVWhpV1FrelBmeFdiNm5PWG9XK2dQamNP?= =?utf-8?B?V1RIaGg3ZFlsdE9HRG5qNjg5LzNiOGlZK0Q1YkpRdjJVdjNrTGdaU2d5b3Ax?= =?utf-8?B?NmJ5aWZRTVAxcHB4L3V1RjJ4eVlTWlM4eEpqS2c0UzNQWnNEcERLZStFZ1BQ?= =?utf-8?B?aVdCTnBNak9Lc2lTZUZqVWpuMWVXSDB2RExOdWNUR0FUTGRYSVRjRi9adVpS?= =?utf-8?B?b1grUTJobEFCczF6VUJIOG9uT0NQSTBmbEJwMlhLWm50andxWndHZWs1RCtH?= =?utf-8?B?RWU4K3AzOXloQ2tkK05yN1dONCtrbUdTRXluNlBTMmFJZFdQRUp2RHZLam5U?= =?utf-8?B?YkRSd1lFT3pmeXpqajJFTUhUL085UE5rdlppOVRacDJndFA2N0tjVWE0ai9I?= =?utf-8?B?YzZOSjcvV2lQc1lqWEpRU0g2VVhraHRteE5zMFhWeHlXZHJvRFVTT1ZXR3Y2?= =?utf-8?B?aDdaQytXUkR2Z0EzcDFxdGpIWDY3YW93Vzh5STQrblgrN2FJMEc4Yms1LzFT?= =?utf-8?B?QWZ1YWdyQnNNN2xlU1lmN0ZhODF1QzdmVTl0aG9TVFozNGZCSjVLdnk5eUFO?= =?utf-8?B?bEk0N3FXbHpWYkljcTVIZ2xEdHBic3UyL1Y4VUIrK3JXTmErbTVyTTcvT0E2?= =?utf-8?B?K3VXbWRXNHlrRXRJdjZqTXU0Q3d0ZlV3dm9zYkZ3aU9ubEVQYVdSc001SGFG?= =?utf-8?B?SGJDeXdtZHBRMWhLYm5yQzdGMXVmRXhici8xQUUyYVlna0dqVlA0VnlBNm5W?= =?utf-8?B?K2JyN3FrS1Uwdklad0R1c2lVdVp5VklpWWpldmNrRDY3UFVncHRCRXdoUk4z?= =?utf-8?B?YWtGamNXZ2tCRzNiNkxCUk93eDlISE05YUpEdzhRb3BtYnk3ZW9ZbEJyY2xw?= =?utf-8?B?dS9tR0ZZS1V3bW56dmwzQ2oyQUFvdnVvMmZXSy9JVXcvV2lJUnhzNUY2SEJW?= =?utf-8?B?VmNmUi9YTjZHOWptN3JnZitKdkppTEFmZlFheWc2VGRSVnNuNVRZS2ttenpW?= =?utf-8?B?SUxMYkJXWGlqT3FhN3o1bXllYUF2VzQxSTE1Z0FHRjB3a1U2cll3NDM4UDFU?= =?utf-8?B?OHpPUTdGT3lTc3NycGdLSnIyZ0FIT2FOSjBpY2xUYm5pc1J2Tk8ycys3VG5B?= =?utf-8?B?SzdlMXJiZndsU0pxZDdMcW5PQkp5cE5mRFZtQTd2Wk9SeGVnbkdtZ2dRUyt2?= =?utf-8?B?Vm5KRTJYS2JRL1l4RU5maXJCQVJnKzRHQVNHV0IrcWZKa3ZuU3Uzb3FlSVJQ?= =?utf-8?B?dWZrZ25yWXF5QnMza0NZenVYcnBvaURiazl4Zms4QllWbk1NSHlJZTBjMG9T?= =?utf-8?B?UmVidjNhcit0V1ZDdjZFQ1QxYW9NL3haeUZteXN2ZHRLdFczSnRkZGVmVkpC?= =?utf-8?B?bVVMUlljTXA5YzFnQXhRNkYzZEVEM0NGcWwvRmRRRW9SRHRVUUlMbE9KdkFQ?= =?utf-8?B?OTIxajBNQU1iUFd4VHhzQlF2WnlFYUg1TUQyQnZnbm1ZZXAwVnR1OVhYL2JL?= =?utf-8?B?d1dZNkFXSjZxWWN1elJqckpseVNGSWUzODFEaGxUSGh4NXI5Uzg5NXF6dnFo?= =?utf-8?B?YkZoQ2ZXS3hMdUFpVEhVK1o5NUtDL0dWMlBTcFhHQjRuZHd5R09zeHNtQ2pL?= =?utf-8?B?TC8rWmJuYTRzR2h5S2czV0ZhVFg0TmI4V0l0Q01zcjNoN1pzZjJPYlBGU2Vs?= =?utf-8?B?RHZ3Z3ZtSllLODcyZzhFV09Oa1hJZzJEdEowejNVcVA5aTh5SFJGSEhraC9P?= =?utf-8?B?bEpXSlpON0N0MnZzWENHUXhmR3MzT1VWM3BJTHNZbVNyTU5Ta1JRdGhubExl?= =?utf-8?B?Z09LajM5UkxOTitEcW4xQW5EWHYzK3AzQ0wzVTk5cTJHa25POU1OZTkyV2Jz?= =?utf-8?B?cm00S2hVS2NKbDhENWt1ZkQ0TXZLKzFFTGNiNEJhdXRicFpaL0FxemRkZ0Jr?= =?utf-8?Q?K3l6Dok+WCqOofLeKufRktk=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: a5a186a0-59b6-44dd-0ce2-08d9b31844fa X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Nov 2021 09:11:46.8800 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: PLDI6gPzbXbVex81UrU07MzDxIW80KNft6GQVlW7OXEQaAukJ09GlbeAVlnSYKF1LxRpSTVOZkfuiny2NfQzvg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4384 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1638177135428100001 Content-Type: text/plain; charset="utf-8" Both vendors' code populates all hooks, so there's no need to have any NULL checks before invoking the hook functions. With that the only remaining uses of the object are in alternative_{,v}call(), i.e. none after alternatives patching. In vpmu_arch_initialise() the check gets replaced by an opt_vpmu_enabled one, as I couldn't convince myself that the pre-existing checks would be sufficient to cover all possible cases. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper --- a/xen/arch/x86/cpu/vpmu.c +++ b/xen/arch/x86/cpu/vpmu.c @@ -49,7 +49,7 @@ CHECK_pmu_params; static unsigned int __read_mostly opt_vpmu_enabled; unsigned int __read_mostly vpmu_mode =3D XENPMU_MODE_OFF; unsigned int __read_mostly vpmu_features =3D 0; -static struct arch_vpmu_ops __read_mostly vpmu_ops; +static struct arch_vpmu_ops __initdata vpmu_ops; =20 static DEFINE_SPINLOCK(vpmu_lock); static unsigned vpmu_count; @@ -136,12 +136,10 @@ int vpmu_do_msr(unsigned int msr, uint64 if ( !vpmu_is_set(vpmu, VPMU_INITIALIZED) ) goto nop; =20 - if ( is_write && vpmu_ops.do_wrmsr ) + if ( is_write ) ret =3D alternative_call(vpmu_ops.do_wrmsr, msr, *msr_content, sup= ported); - else if ( !is_write && vpmu_ops.do_rdmsr ) - ret =3D alternative_call(vpmu_ops.do_rdmsr, msr, msr_content); else - goto nop; + ret =3D alternative_call(vpmu_ops.do_rdmsr, msr, msr_content); =20 /* * We may have received a PMU interrupt while handling MSR access @@ -375,7 +373,7 @@ void vpmu_save(struct vcpu *v) int vpmu_load(struct vcpu *v, bool_t from_guest) { struct vpmu_struct *vpmu =3D vcpu_vpmu(v); - int pcpu =3D smp_processor_id(); + int pcpu =3D smp_processor_id(), ret; struct vcpu *prev =3D NULL; =20 if ( !vpmu_is_set(vpmu, VPMU_CONTEXT_ALLOCATED) ) @@ -423,21 +421,13 @@ int vpmu_load(struct vcpu *v, bool_t fro vpmu_is_set(vpmu, VPMU_CACHED)) ) return 0; =20 - if ( vpmu_ops.arch_vpmu_load ) - { - int ret; - - apic_write(APIC_LVTPC, vpmu->hw_lapic_lvtpc); - /* Arch code needs to set VPMU_CONTEXT_LOADED */ - ret =3D alternative_call(vpmu_ops.arch_vpmu_load, v, from_guest); - if ( ret ) - { - apic_write(APIC_LVTPC, vpmu->hw_lapic_lvtpc | APIC_LVT_MASKED); - return ret; - } - } + apic_write(APIC_LVTPC, vpmu->hw_lapic_lvtpc); + /* Arch code needs to set VPMU_CONTEXT_LOADED */ + ret =3D alternative_call(vpmu_ops.arch_vpmu_load, v, from_guest); + if ( ret ) + apic_write(APIC_LVTPC, vpmu->hw_lapic_lvtpc | APIC_LVT_MASKED); =20 - return 0; + return ret; } =20 static int vpmu_arch_initialise(struct vcpu *v) @@ -458,7 +448,7 @@ static int vpmu_arch_initialise(struct v if ( !vpmu_available(v) || vpmu_mode =3D=3D XENPMU_MODE_OFF ) return 0; =20 - if ( !vpmu_ops.initialise ) + if ( !opt_vpmu_enabled ) { if ( vpmu_mode !=3D XENPMU_MODE_OFF ) { @@ -564,18 +554,15 @@ static void vpmu_arch_destroy(struct vcp on_selected_cpus(cpumask_of(vpmu->last_pcpu), vpmu_clear_last, v, 1); =20 - if ( vpmu_ops.arch_vpmu_destroy ) - { - /* - * Unload VPMU first if VPMU_CONTEXT_LOADED being set. - * This will stop counters. - */ - if ( vpmu_is_set(vpmu, VPMU_CONTEXT_LOADED) ) - on_selected_cpus(cpumask_of(vcpu_vpmu(v)->last_pcpu), - vpmu_save_force, v, 1); + /* + * Unload VPMU first if VPMU_CONTEXT_LOADED being set. + * This will stop counters. + */ + if ( vpmu_is_set(vpmu, VPMU_CONTEXT_LOADED) ) + on_selected_cpus(cpumask_of(vcpu_vpmu(v)->last_pcpu), + vpmu_save_force, v, 1); =20 - alternative_vcall(vpmu_ops.arch_vpmu_destroy, v); - } + alternative_vcall(vpmu_ops.arch_vpmu_destroy, v); =20 vpmu_reset(vpmu, VPMU_CONTEXT_ALLOCATED); } @@ -681,8 +668,7 @@ static void pvpmu_finish(struct domain * /* Dump some vpmu information to console. Used in keyhandler dump_domains(= ). */ void vpmu_dump(struct vcpu *v) { - if ( vpmu_is_set(vcpu_vpmu(v), VPMU_INITIALIZED) && - vpmu_ops.arch_vpmu_dump ) + if ( vpmu_is_set(vcpu_vpmu(v), VPMU_INITIALIZED) ) alternative_vcall(vpmu_ops.arch_vpmu_dump, v); } =20 From nobody Mon Apr 29 18:34:21 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; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1638309727; cv=none; d=zohomail.com; s=zohoarc; b=U3d4IVCYj8hnIeyS6URPT+2LpiXytdFiH9WYyfg6w1meFywTNNQBEtdVI/LlTDIv2XMRYvWL2GvzkwK3+AZ2MYUsrSJnveG8spkVN9XNg3kEGLFtUCzA1RhB4Cv3k+RwJanHA7sH8Ym0rAweWF391LEwy7PbswK7mNk/YahoQL0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1638309727; 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=WYcbpBS+qIcBS5uHZsbfyXZ6TWCwiXReo6KVBiHPV30=; b=f3WrD0n3Jsqfj8DGsBy8OT+DX3BHghLiXi9hVW1nf5V2urzYRAGHe9fF8ahtWhXwDd6JA49THwxJcy4g0DBNG3vLwLAAk+pjKGnU4DGMf62E7jRiE6ITOIUC1MXznLyJFXCmfU8bYP0CclDnefYmDABEIGdQFl/Zp/Xk/OeNYFQ= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1638309727875840.556515335439; Tue, 30 Nov 2021 14:02:07 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.235536.408578 (Exim 4.92) (envelope-from ) id 1msBBy-0005l1-8o; Tue, 30 Nov 2021 22:01:38 +0000 Received: by outflank-mailman (output) from mailman id 235536.408578; Tue, 30 Nov 2021 22:01: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 1msBBy-0005ku-5c; Tue, 30 Nov 2021 22:01:38 +0000 Received: by outflank-mailman (input) for mailman id 235536; Tue, 30 Nov 2021 22:01:36 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1msBBw-0005ko-Kb for xen-devel@lists.xenproject.org; Tue, 30 Nov 2021 22:01:36 +0000 Received: from esa1.hc3370-68.iphmx.com (esa1.hc3370-68.iphmx.com [216.71.145.142]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 13f8aa71-5229-11ec-976b-d102b41d0961; Tue, 30 Nov 2021 23:01:34 +0100 (CET) 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: 13f8aa71-5229-11ec-976b-d102b41d0961 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1638309694; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=xJavKuZ2gqDnL/81JHfSY0GJ+QSSKkIKh/Cof+NDXsI=; b=frwyV+G3cjWwwANQcWo7QixeMDGlfe4xG6SN92NRdFWW0LI5sWapSUiU UXtJMKq/F7tIKIYGVlBfjNqWxlYH8+C4bHiUN8W46VGJfco5AwsgN2Pby /9GtZZihpvQmWmuiYqXT6CA8nn3HeFwCs+1O+9ReNeZGuFCx94EcwBqad 0=; Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none IronPort-SDR: kZswpjAKp8ZNxKmvpuRLn8muEF4gBCHWyAeXEtEkmDuT/UdEWgHKJYgBdMlitBwByQhzEnmsxi Jx5ow19ewQf5gvoFa7NhpOLsVrrNUPgnclOzA5KOXMlnEGim1AQJK1lygU0xWlCrxZOUsTzyUB uJ4zxrJn1H5MC/YLFQu+tTO/WrXIrieSDKbzkd/sFBlR3bnNcLhDY+PavDhzCrFcJfR/p3dLtT aH4k96dI/c2iqWPMzVNk4SKXGIvII+CIg0tsSJF05PmX254+CcDECcQpVSv37iMUv9qLW0Ck6T xquniOyeIZflVYw6LiQZC5yt X-SBRS: 5.1 X-MesageID: 59346727 X-Ironport-Server: esa1.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:KbPGwqnyOa30uJh7TXJ4owzo5gxMIURdPkR7XQ2eYbSJt1+Wr1Gzt xJNDWmOPfjcNDGmf493bo2+9x9QsZDdzdBqT1E+rCxgRCMWpZLJC+rCIxarNUt+DCFioGGLT Sk6QoOdRCzhZiaE/n9BClVlxJVF/fngqoDUUYYoAQgsA187IMsdoUg7wbdg29Uw2YPR7z6l4 rseneWOYDdJ5BYsWo4kw/rrRMRH5amaVJsw5zTSVNgT1LPsvyB94KE3fMldG0DQUIhMdtNWc s6YpF2PEsE1yD92Yj+tuu6TnkTn2dc+NyDW4pZdc/DKbhSvOkXee0v0XRYRQR4/ttmHozx+4 OVtmqaPQFwjAqzdgqdCYiFFKj57OLITrdcrIVDn2SCS50jPcn+qyPRyFkAme4Yf/46bA0kXq 6ZecmpUKEne2aTmm9pXScE17ignBODtMJkSpTdLyjbBAOx9aZvCX7/L9ZlT2zJYasVmQKeFO 5RGM2UHgBLofjhmGXoyFskElv6vnSntdRJ+s3e5uv9ii4TU5FMoi+W8WDbPQfSVQe1Fk0Deo XjJl0zbKBwHMN2UyRKe72mhwOTImEvTSI8UUbG16PNuqFmS3XAITg0bU0Ohpvu0gVL4XMhQQ 3H44QJ38/J0rhbyCICgAVvo+xZooyLwRfJgM8IA1wjWwJbV8hzaWVk8Uwdebdk54ZpeqSMR6 neFmNbgBDpKubKTSG6A+rr8kQ5eKRT5PkdZO3ZaEFJtD83L5dhq00mRFooL/Lud14WtQVnNL ya2QD/Sbln5peoCzO2F8F/OmFpATbCZH1dutm07so9Ihz6VhbJJhaT0uTA3Dt4ade51q2VtW lBfwKByC8hUUPmweNSlGrllIV1Qz6/t3MfgqVBuBYI90D+m5mSue4tdiBknehw5aJdbIW+0P BKO0e+02HO1FCDxBUOQS9jsY/nGMIC6TYi1PhwqRoQmjmdNmP+vo3g1OB/4M5HFm0kwi6AvU ap3gu73ZUv2/Z9PlWLsL89EiOdD7nlnmQv7GMCqpzz6gOH2TCPEFt843K6mM7lRAFWs+16Or b6y9qKiln1ibQEJSnWNrNNIcwlVdSNT6FKfg5U/S9Nv6zFOQAkJY8I9C5t9E2C8t6gKxOrO4 F+nXUpUlAj2iXHdcF3YYXF/crL/G514qCtjbyArOF+p3VklYJqus/hDJ8dmI+F/+bwx1+NwQ tkEZ96EXqZFRAPY9mlPdpL6toFjKkim3FrcIyq/bTEjVJd8XAiVqMT8dw7i+XBWXCq6vMczu ZO60QbfTcZRTghuFp+OOvmu00mwrT4Wn+crBxnEJdxaeUPN9ol2KnOu0q9rcp9UcRian2mUz QebBxsctNLhmY5t/Ymbn72AoqeoD/B6QhhQEV7E4OvkLiLd5Gein9NNCb7aYTDHWWro06y+f uEJnerkOfgKkVsW4YpxF7FnkfA369f1/uIIyw1lGDPAbkixC6MmKX6DhJEduqpIz75fmA23R kPQpYUKZeTXYJvoQAwLOQ4oTuWfzvVFyDDd4MM8LFj++CIqrqGMVl9fPkXUhSFQRFev3FjJH Qv1VBYq1jGC IronPort-HdrOrdr: A9a23:NI0h36t4AZ9Ct53yowfPx8nl7skDeNV00zEX/kB9WHVpm62j+/ xG+c5x6faaslkssR0b9+xoWpPhfZqsz/9ICOAqVN/JMTUO01HYT72Kg7GSpgHIKmnT8fNcyL clU4UWMqyVMbGit7eZ3DWF X-IronPort-AV: E=Sophos;i="5.87,277,1631592000"; d="scan'208";a="59346727" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Wei Liu Subject: [PATCH 4/3] x86/vPMU: Drop supported parameter from the wrmsr path Date: Tue, 30 Nov 2021 22:01:11 +0000 Message-ID: <20211130220111.23815-1-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1638309729162100001 The supported parameter was added in 2d9b91f1aeaa ("VMX/vPMU: fix DebugCtl = MSR handling"), it laid the groundwork for XSA-269, and in the meantime 2a8a8e99feb9 ("x86/vtx: Fix the checking for unknown/invalid MSR_DEBUGCTL bits") totally rewrote MSR_DEBUGCTL handling. Strip out the parameter again. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 CC: Wei Liu --- xen/arch/x86/cpu/vpmu.c | 5 ++--- xen/arch/x86/cpu/vpmu_amd.c | 5 +---- xen/arch/x86/cpu/vpmu_intel.c | 5 +---- xen/arch/x86/hvm/svm/svm.c | 2 +- xen/arch/x86/hvm/vmx/vmx.c | 2 +- xen/arch/x86/pv/emul-priv-op.c | 2 +- xen/include/asm-x86/vpmu.h | 13 +++++-------- 7 files changed, 12 insertions(+), 22 deletions(-) diff --git a/xen/arch/x86/cpu/vpmu.c b/xen/arch/x86/cpu/vpmu.c index 7fd69a2a58e3..8ec4547bedf4 100644 --- a/xen/arch/x86/cpu/vpmu.c +++ b/xen/arch/x86/cpu/vpmu.c @@ -116,8 +116,7 @@ void vpmu_lvtpc_update(uint32_t val) apic_write(APIC_LVTPC, vpmu->hw_lapic_lvtpc); } =20 -int vpmu_do_msr(unsigned int msr, uint64_t *msr_content, - uint64_t supported, bool_t is_write) +int vpmu_do_msr(unsigned int msr, uint64_t *msr_content, bool is_write) { struct vcpu *curr =3D current; struct vpmu_struct *vpmu; @@ -137,7 +136,7 @@ int vpmu_do_msr(unsigned int msr, uint64_t *msr_content, goto nop; =20 if ( is_write ) - ret =3D alternative_call(vpmu_ops.do_wrmsr, msr, *msr_content, sup= ported); + ret =3D alternative_call(vpmu_ops.do_wrmsr, msr, *msr_content); else ret =3D alternative_call(vpmu_ops.do_rdmsr, msr, msr_content); =20 diff --git a/xen/arch/x86/cpu/vpmu_amd.c b/xen/arch/x86/cpu/vpmu_amd.c index b28c78b81109..903fe1887ef0 100644 --- a/xen/arch/x86/cpu/vpmu_amd.c +++ b/xen/arch/x86/cpu/vpmu_amd.c @@ -348,16 +348,13 @@ static void context_update(unsigned int msr, u64 msr_= content) } } =20 -static int amd_vpmu_do_wrmsr(unsigned int msr, uint64_t msr_content, - uint64_t supported) +static int amd_vpmu_do_wrmsr(unsigned int msr, uint64_t msr_content) { struct vcpu *v =3D current; struct vpmu_struct *vpmu =3D vcpu_vpmu(v); unsigned int idx =3D 0; int type =3D get_pmu_reg_type(msr, &idx); =20 - ASSERT(!supported); - if ( (type =3D=3D MSR_TYPE_CTRL ) && ((msr_content & CTRL_RSVD_MASK) !=3D ctrl_rsvd[idx]) ) return -EINVAL; diff --git a/xen/arch/x86/cpu/vpmu_intel.c b/xen/arch/x86/cpu/vpmu_intel.c index 63e798b9edac..076882c615f4 100644 --- a/xen/arch/x86/cpu/vpmu_intel.c +++ b/xen/arch/x86/cpu/vpmu_intel.c @@ -522,8 +522,7 @@ static int core2_vpmu_msr_common_check(u32 msr_index, i= nt *type, int *index) return 1; } =20 -static int core2_vpmu_do_wrmsr(unsigned int msr, uint64_t msr_content, - uint64_t supported) +static int core2_vpmu_do_wrmsr(unsigned int msr, uint64_t msr_content) { int i, tmp; int type =3D -1, index =3D -1; @@ -535,8 +534,6 @@ static int core2_vpmu_do_wrmsr(unsigned int msr, uint64= _t msr_content, if ( !core2_vpmu_msr_common_check(msr, &type, &index) ) return -EINVAL; =20 - ASSERT(!supported); - if ( (type =3D=3D MSR_TYPE_COUNTER) && (msr_content & fixed_counters_m= ask) ) /* Writing unsupported bits to a fixed counter */ return -EINVAL; diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c index f0e10dec046e..fae39c4b4cbd 100644 --- a/xen/arch/x86/hvm/svm/svm.c +++ b/xen/arch/x86/hvm/svm/svm.c @@ -2113,7 +2113,7 @@ static int svm_msr_write_intercept(unsigned int msr, = uint64_t msr_content) case MSR_AMD_FAM15H_EVNTSEL3: case MSR_AMD_FAM15H_EVNTSEL4: case MSR_AMD_FAM15H_EVNTSEL5: - if ( vpmu_do_wrmsr(msr, msr_content, 0) ) + if ( vpmu_do_wrmsr(msr, msr_content) ) goto gpf; break; =20 diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index 37c31c08b984..a7a0d662342a 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -3487,7 +3487,7 @@ static int vmx_msr_write_intercept(unsigned int msr, = uint64_t msr_content) case MSR_CORE_PERF_FIXED_CTR_CTRL...MSR_CORE_PERF_GLOBAL_OVF_CTRL: case MSR_IA32_PEBS_ENABLE: case MSR_IA32_DS_AREA: - if ( vpmu_do_wrmsr(msr, msr_content, 0) ) + if ( vpmu_do_wrmsr(msr, msr_content) ) goto gp_fault; break; =20 diff --git a/xen/arch/x86/pv/emul-priv-op.c b/xen/arch/x86/pv/emul-priv-op.c index 7f4279a0517b..8ba65178e98f 100644 --- a/xen/arch/x86/pv/emul-priv-op.c +++ b/xen/arch/x86/pv/emul-priv-op.c @@ -1163,7 +1163,7 @@ static int write_msr(unsigned int reg, uint64_t val, !is_hardware_domain(currd) ) return X86EMUL_OKAY; =20 - if ( vpmu_do_wrmsr(reg, val, 0) ) + if ( vpmu_do_wrmsr(reg, val) ) break; return X86EMUL_OKAY; } diff --git a/xen/include/asm-x86/vpmu.h b/xen/include/asm-x86/vpmu.h index ccf5a0cf90b9..80656891e5a3 100644 --- a/xen/include/asm-x86/vpmu.h +++ b/xen/include/asm-x86/vpmu.h @@ -40,8 +40,7 @@ /* Arch specific operations shared by all vpmus */ struct arch_vpmu_ops { int (*initialise)(struct vcpu *v); - int (*do_wrmsr)(unsigned int msr, uint64_t msr_content, - uint64_t supported); + int (*do_wrmsr)(unsigned int msr, uint64_t msr_content); int (*do_rdmsr)(unsigned int msr, uint64_t *msr_content); int (*do_interrupt)(struct cpu_user_regs *regs); void (*arch_vpmu_destroy)(struct vcpu *v); @@ -104,8 +103,7 @@ static inline bool_t vpmu_are_all_set(const struct vpmu= _struct *vpmu, } =20 void vpmu_lvtpc_update(uint32_t val); -int vpmu_do_msr(unsigned int msr, uint64_t *msr_content, - uint64_t supported, bool_t is_write); +int vpmu_do_msr(unsigned int msr, uint64_t *msr_content, bool is_write); void vpmu_do_interrupt(struct cpu_user_regs *regs); void vpmu_initialise(struct vcpu *v); void vpmu_destroy(struct vcpu *v); @@ -113,14 +111,13 @@ void vpmu_save(struct vcpu *v); int vpmu_load(struct vcpu *v, bool_t from_guest); void vpmu_dump(struct vcpu *v); =20 -static inline int vpmu_do_wrmsr(unsigned int msr, uint64_t msr_content, - uint64_t supported) +static inline int vpmu_do_wrmsr(unsigned int msr, uint64_t msr_content) { - return vpmu_do_msr(msr, &msr_content, supported, 1); + return vpmu_do_msr(msr, &msr_content, 1); } static inline int vpmu_do_rdmsr(unsigned int msr, uint64_t *msr_content) { - return vpmu_do_msr(msr, msr_content, 0, 0); + return vpmu_do_msr(msr, msr_content, 0); } =20 extern unsigned int vpmu_mode; --=20 2.11.0 From nobody Mon Apr 29 18:34:21 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; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1638309939; cv=none; d=zohomail.com; s=zohoarc; b=V3cG/nwaiDfd5ZdJ6nL2uwfkYj1eiMzcmTuBw7UQG5C/hXNesCEy6Qls7oblVRrScqT4kN8zoCy8FWafteMYcXP/BT+L+5pFVQcy4n+jZo1n0nn1rvKjZv3n7kc/SeW/kpfIMVbdwgw1ZCzK+eWpV++MQp27tVssycV3o7FnPUM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1638309939; 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=M9EgPkGkD2jYdx+s3AibjqZilc7jbK8Gvux4n/0I71k=; b=FwBSYpScm6AQ0Daalzl+wU4aWjaJQTz64oocF1HE466QiyoW+UDvfYWIO1Y5xkeMWBwv/6kGxToH48Vv3xCa+e0+5sl+JyWDju+k62i6E1JFrVKL7rIG5Wt5p/wFeALrwYu+AoTKJyGd/aprT3ILzVgEX+fEY4+ivnylyT8Q4AM= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1638309939401288.95985967182946; Tue, 30 Nov 2021 14:05:39 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.235546.408599 (Exim 4.92) (envelope-from ) id 1msBFe-0006vM-1A; Tue, 30 Nov 2021 22:05:26 +0000 Received: by outflank-mailman (output) from mailman id 235546.408599; Tue, 30 Nov 2021 22:05:25 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1msBFd-0006vF-UQ; Tue, 30 Nov 2021 22:05:25 +0000 Received: by outflank-mailman (input) for mailman id 235546; Tue, 30 Nov 2021 22:05:24 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1msBFc-0006Ns-8T for xen-devel@lists.xenproject.org; Tue, 30 Nov 2021 22:05:24 +0000 Received: from esa2.hc3370-68.iphmx.com (esa2.hc3370-68.iphmx.com [216.71.145.153]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 9bfa2e5c-5229-11ec-976b-d102b41d0961; Tue, 30 Nov 2021 23:05:23 +0100 (CET) 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: 9bfa2e5c-5229-11ec-976b-d102b41d0961 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1638309923; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=NkPuMSX3r/ujI6gCVPCjBIaJRCROcysn6Lkkj2dT76U=; b=Ksnvfn+Va/8sgdhJRGFva6xYxiPlmupVOZxBKI2q9P7VIuxDtghZfE/b 6rGZlR1CvazPqaoIdxYNs+sweLQwXraJMrWH9HD5Aw8WUubexnLkkWYM9 4oydeWoIYQFiU8gTMo0xCdPh8iMRqVaAbbxMki9OR1P3UKr01jtdV2bEf Y=; Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none IronPort-SDR: eg/JkXseT3Qwu2qWHnh8WV/+Aajv9BwpI3pG4xevyJQ1hxzwdUTrH+uIKcOlbMntgXI4ES3qK+ qnOmhZ9xKjpdfLzlvjmWEN/KrECotd66bIfOOtWbRiByGSSHmAoK4HCK9abz0nLK4DDOkqt8AE 9uCKjKISekOBFnaL5OHwsjuqUwHmCIa5jw9E/U3rIuzofDY0wMiTJupldSgbuSfOgOFFN9uOBn ZugDY4qu0q3T49yHbDdWcfviGINvTGVsEu+c4agAJ/HwsvPpWhhMJiODJZu1o5c4VXbr4HANvW VbNR7XmDH3UYLAmfcW2Cmx91 X-SBRS: 5.1 X-MesageID: 58954803 X-Ironport-Server: esa2.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:y6p+raDdERQ4mRVW/+Xkw5YqxClBgxIJ4kV8jS/XYbTApDMi3zRVz DFMUDjTbKreYWekeo8iPou1/R9U7MOBx9ExQQY4rX1jcSlH+JHPbTi7wuYcHM8wwunrFh8PA xA2M4GYRCwMo/u1Si6FatANl1ElvU2zbue6WLGs1hxZH1c+EX540ko7wIbVv6Yz6TSHK1LV0 T/Ni5W31G+Ng1aY5UpNtspvADs21BjDkGtwUm4WPJinj3eH/5UhN7oNJLnZEpfNatI88thW5 Qr05OrREmvxp3/BAz4++1rxWhVirrX6ZWBihpfKMkQLb9crSiEai84G2PQghUh/pASumeAu+ fF28t+UUQ4iD7XRtt8PXEwNe81+FfUuFL7vJHG+tYqYzlHccmuqyPJrZK00FdRGoKAtWzgIr KFGbmBWBvyAr7veLLaTY+9gnMk8auLsO5sSoCpIxjDFF/c2B5vERs0m4PcFjGZt2pAWRp4yY eI9NCh3LwqafSRfYHY7JbkjsuWTgSfGJmgwRFW9+vNsvjm7IBZK+KfpGMrYfJqNX8o9tmSyq 3/C/m/5KgoHL9HZwj2Amlq8i+mKkS7lVYY6ELyj6uUskFCV3nYUChAdSR28u/bRt6Klc4sBc QpOoHNo9PVsshzwJjXgY/GmiFG1mRgsBOt0KKp5zBmEwZvM/iiiFGdRG1atd+canMMxQDUr0 HqAkNXoGSFjvdWpdJ6NyluHhWjsYHZIdAfucQdBFFJYuIe7/OnfmzqWFo47eJNZmOEZDt0ZL 9qiiCElz4segscQv0lQ1QCW2mn8znQlo+Nc2+k2Yo5Hxl8pDGJGT9bxgbQ+0RqmBN3CJrVml CJZ8/VyFMhUUfmweNWlGY3h5o2B6fefKyH7ilVyBZQn/DnF0yf9JtAKsW4mdBo1b5tsldrVj Kn74lg5CHh7ZibCUEOKS9jpV5RCIVbIS7wJqcw4nvIRO8MsJWdrDQllZFKK3nCFraTfufpXB HtvSu71VSxyIf0+lFKeHr5BuZd2lnFW7T6CHvjTkkX4uYdykVbIEN/pxnPVNbtnhE5FyS2Im +ti2zyil08CDbagO3aPqub+7zkidBAGOHw/kOQPHsbrH+asMDp+YxMI6b9+KYFjgYpPkeLEo iO0VkNCkQKtjnzbMwSaLHtkbeq3D5p4qHs6Ow0qPEqphCd/Mdr+sv9HestlZ6Qj+cxi0eVwE 6sPdfKfD6kdUT/A4TkcM8Xw9dQwaBSxiAuSFCO5ezxjLYV4TgnE94a8LAvi/SUDFAStss46r +Hy3w/XW8NbFQ9jENzXeLSkyFbo5SoRn+d7Xk3pJNhPeRqzrNg2enKp1vJuepMCMxTOwDeex j26OxZAqLmfuZIx/fnImbuA89WjHdxhExcIBGLc97u3a3XXpzLx3Y9aXe+UVjnBT2eoqr66b OBYwvygYv0KmFFG79h1H7pxlP9s4tLuo/lRzxh+HWWNZFOuU+syLn6D1MhJl6tM2r4G5lfmB hPRooFXaeeTJcfoMF8NPw50PO2M2MYdliTW8flocl7x4zV6/ebfXEhfV/VWZPex8Feh3FsZ/ Noc IronPort-HdrOrdr: A9a23:BodlAK+9Qp+Q2Q6Wx7Vuk+DgI+orL9Y04lQ7vn2YSXRuHPBw8P re5cjztCWE7gr5N0tBpTntAsW9qDbnhPtICOoqTNCftWvdyQiVxehZhOOIqVDd8m/Fh4pgPM 9bAtBD4bbLbGSS4/yU3ODBKadD/OW6 X-IronPort-AV: E=Sophos;i="5.87,277,1631592000"; d="scan'208";a="58954803" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Wei Liu Subject: [PATCH 5/3] x86/vPMU: Harden indirect branches Date: Tue, 30 Nov 2021 22:05:02 +0000 Message-ID: <20211130220502.27624-1-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1638309941231100001 As all function pointer calls are resoved to direct calls on boot, clobber = the endbr64 instructions too to make life harder for an attacker which has mana= ged to hijack a function pointer. Signed-off-by: Andrew Cooper --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 CC: Wei Liu --- xen/arch/x86/cpu/vpmu_amd.c | 2 +- xen/arch/x86/cpu/vpmu_intel.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/cpu/vpmu_amd.c b/xen/arch/x86/cpu/vpmu_amd.c index 903fe1887ef0..e26f4f584e88 100644 --- a/xen/arch/x86/cpu/vpmu_amd.c +++ b/xen/arch/x86/cpu/vpmu_amd.c @@ -518,7 +518,7 @@ static int svm_vpmu_initialise(struct vcpu *v) return 0; } =20 -static const struct arch_vpmu_ops __initconstrel amd_vpmu_ops =3D { +static struct arch_vpmu_ops __initdata_cf_clobber amd_vpmu_ops =3D { .initialise =3D svm_vpmu_initialise, .do_wrmsr =3D amd_vpmu_do_wrmsr, .do_rdmsr =3D amd_vpmu_do_rdmsr, diff --git a/xen/arch/x86/cpu/vpmu_intel.c b/xen/arch/x86/cpu/vpmu_intel.c index 076882c615f4..98a93d1f3c41 100644 --- a/xen/arch/x86/cpu/vpmu_intel.c +++ b/xen/arch/x86/cpu/vpmu_intel.c @@ -880,7 +880,7 @@ static int vmx_vpmu_initialise(struct vcpu *v) return 0; } =20 -static const struct arch_vpmu_ops __initconstrel core2_vpmu_ops =3D { +static struct arch_vpmu_ops __initdata_cf_clobber core2_vpmu_ops =3D { .initialise =3D vmx_vpmu_initialise, .do_wrmsr =3D core2_vpmu_do_wrmsr, .do_rdmsr =3D core2_vpmu_do_rdmsr, --=20 2.11.0