From nobody Fri Dec 19 21:35:47 2025 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=none dis=none) header.from=zytor.com ARC-Seal: i=1; a=rsa-sha256; t=1745310224; cv=none; d=zohomail.com; s=zohoarc; b=YbcYa+UHfS3b5Lm2s11AN9zX/z21A0vigR9BnJ67kP/RKyIlUANL+URpgBMnLba9N80jpI427i9qSRQy2QV2WWY2Cx+h5L6cFSdKSv20GP17oI0FrgnurJPicXDI70vlOFTJWomh6o5kp2/9E+GqhKWY3RGacwFgBPQqGvmxitk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1745310224; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=LVsPA2fgI6zP2WHSw0Nia0LCB15Xp7S+WVy/cleUJE0=; b=bSQd4XH8rCCA0LkmNSsvfkIqxFPb470P2sAZadiW/BTnlh1wX1ase9eVnZmSMg2Mkpd3SppqQJHed7BIjoi9S0lPCoSOBeWxLe6REc628NrK8cMz+pRTUDxhI5g/KnLGcKJWNxgQJdGiSJmlkbe+NtfZNrZn3tLy3QZJ1mCC1sU= 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=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1745310224205160.30604188032908; Tue, 22 Apr 2025 01:23:44 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.961779.1353118 (Exim 4.92) (envelope-from ) id 1u78uZ-0005DO-Be; Tue, 22 Apr 2025 08:23:23 +0000 Received: by outflank-mailman (output) from mailman id 961779.1353118; Tue, 22 Apr 2025 08:23:23 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1u78uZ-0005Cb-3w; Tue, 22 Apr 2025 08:23:23 +0000 Received: by outflank-mailman (input) for mailman id 961779; Tue, 22 Apr 2025 08:23:21 +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 1u78uX-0004wX-Pf for xen-devel@lists.xenproject.org; Tue, 22 Apr 2025 08:23:21 +0000 Received: from mail.zytor.com (unknown [2607:7c80:54:3::138]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 0a8edea2-1f53-11f0-9ffb-bf95429c2676; Tue, 22 Apr 2025 10:23:18 +0200 (CEST) Received: from terminus.zytor.com (terminus.zytor.com [IPv6:2607:7c80:54:3:0:0:0:136]) (authenticated bits=0) by mail.zytor.com (8.18.1/8.17.1) with ESMTPSA id 53M8MG9I1954391 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Tue, 22 Apr 2025 01:22:29 -0700 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: 0a8edea2-1f53-11f0-9ffb-bf95429c2676 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.zytor.com 53M8MG9I1954391 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zytor.com; s=2025042001; t=1745310150; bh=LVsPA2fgI6zP2WHSw0Nia0LCB15Xp7S+WVy/cleUJE0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QGVnEjv8tkGkgZOr/+y8tNZXRRi8XZB8ZUa+hfPMwgCsh/bvO2xAJc9VhI65ltj5f LMenRE/fk3S5bW+6vEW/9EjVTjmw+65DjmMvRnz6VuJvvPndtokirGhHIMxOWUzT2M bIUKmTb6xJsOQYxjwZVpD51rGRaiashhG0EWnYIoNFDkiI2ospc66RIjCIqRJWJ/CP +fpEFOvt1EWqbNyzTmd3AOW9kLnosooHZzpFKsuIPLbiVSdFUwzHvJkSu7shtN70qV rM9/AEtTfOcxs3bRd6Mxjf9DlDoUk5oHlzv2vYsxQwfHSorx8cOLau0HjwAXgZ8ds3 mK4Mot9OoKckQ== From: "Xin Li (Intel)" To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-hyperv@vger.kernel.org, virtualization@lists.linux.dev, linux-pm@vger.kernel.org, linux-edac@vger.kernel.org, xen-devel@lists.xenproject.org, linux-acpi@vger.kernel.org, linux-hwmon@vger.kernel.org, netdev@vger.kernel.org, platform-driver-x86@vger.kernel.org Cc: tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, acme@kernel.org, jgross@suse.com, andrew.cooper3@citrix.com, peterz@infradead.org, namhyung@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, irogers@google.com, adrian.hunter@intel.com, kan.liang@linux.intel.com, wei.liu@kernel.org, ajay.kaher@broadcom.com, bcm-kernel-feedback-list@broadcom.com, tony.luck@intel.com, pbonzini@redhat.com, vkuznets@redhat.com, seanjc@google.com, luto@kernel.org, boris.ostrovsky@oracle.com, kys@microsoft.com, haiyangz@microsoft.com, decui@microsoft.com Subject: [RFC PATCH v2 04/34] x86/msr: Convert rdpmcq() into a function Date: Tue, 22 Apr 2025 01:21:45 -0700 Message-ID: <20250422082216.1954310-5-xin@zytor.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250422082216.1954310-1-xin@zytor.com> References: <20250422082216.1954310-1-xin@zytor.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @zytor.com) X-ZM-MESSAGEID: 1745310226388019100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Xin Li (Intel) Acked-by: Dave Hansen --- arch/x86/events/amd/uncore.c | 2 +- arch/x86/events/core.c | 2 +- arch/x86/events/intel/core.c | 4 ++-- arch/x86/events/intel/ds.c | 2 +- arch/x86/include/asm/msr.h | 5 ++++- arch/x86/include/asm/paravirt.h | 4 +--- arch/x86/kernel/cpu/resctrl/pseudo_lock.c | 12 ++++++------ 7 files changed, 16 insertions(+), 15 deletions(-) diff --git a/arch/x86/events/amd/uncore.c b/arch/x86/events/amd/uncore.c index b9933ab3116c..f2601c662783 100644 --- a/arch/x86/events/amd/uncore.c +++ b/arch/x86/events/amd/uncore.c @@ -152,7 +152,7 @@ static void amd_uncore_read(struct perf_event *event) if (hwc->event_base_rdpmc < 0) rdmsrq(hwc->event_base, new); else - rdpmcq(hwc->event_base_rdpmc, new); + new =3D rdpmcq(hwc->event_base_rdpmc); =20 local64_set(&hwc->prev_count, new); delta =3D (new << COUNTER_SHIFT) - (prev << COUNTER_SHIFT); diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c index 3da1f0b3446c..0a3939b9965e 100644 --- a/arch/x86/events/core.c +++ b/arch/x86/events/core.c @@ -139,7 +139,7 @@ u64 x86_perf_event_update(struct perf_event *event) */ prev_raw_count =3D local64_read(&hwc->prev_count); do { - rdpmcq(hwc->event_base_rdpmc, new_raw_count); + new_raw_count =3D rdpmcq(hwc->event_base_rdpmc); } while (!local64_try_cmpxchg(&hwc->prev_count, &prev_raw_count, new_raw_count)); =20 diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c index ba623e6cae1b..4370d0d86013 100644 --- a/arch/x86/events/intel/core.c +++ b/arch/x86/events/intel/core.c @@ -2739,12 +2739,12 @@ static u64 intel_update_topdown_event(struct perf_e= vent *event, int metric_end, =20 if (!val) { /* read Fixed counter 3 */ - rdpmcq((3 | INTEL_PMC_FIXED_RDPMC_BASE), slots); + slots =3D rdpmcq(3 | INTEL_PMC_FIXED_RDPMC_BASE); if (!slots) return 0; =20 /* read PERF_METRICS */ - rdpmcq(INTEL_PMC_FIXED_RDPMC_METRICS, metrics); + metrics =3D rdpmcq(INTEL_PMC_FIXED_RDPMC_METRICS); } else { slots =3D val[0]; metrics =3D val[1]; diff --git a/arch/x86/events/intel/ds.c b/arch/x86/events/intel/ds.c index 4074567219de..845439fd9c03 100644 --- a/arch/x86/events/intel/ds.c +++ b/arch/x86/events/intel/ds.c @@ -2279,7 +2279,7 @@ intel_pmu_save_and_restart_reload(struct perf_event *= event, int count) WARN_ON(this_cpu_read(cpu_hw_events.enabled)); =20 prev_raw_count =3D local64_read(&hwc->prev_count); - rdpmcq(hwc->event_base_rdpmc, new_raw_count); + new_raw_count =3D rdpmcq(hwc->event_base_rdpmc); local64_set(&hwc->prev_count, new_raw_count); =20 /* diff --git a/arch/x86/include/asm/msr.h b/arch/x86/include/asm/msr.h index ed32637b1df6..01dc8e61ef97 100644 --- a/arch/x86/include/asm/msr.h +++ b/arch/x86/include/asm/msr.h @@ -234,7 +234,10 @@ static inline int rdmsrq_safe(u32 msr, u64 *p) return err; } =20 -#define rdpmcq(counter, val) ((val) =3D native_read_pmc(counter)) +static __always_inline u64 rdpmcq(int counter) +{ + return native_read_pmc(counter); +} =20 #endif /* !CONFIG_PARAVIRT_XXL */ =20 diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravir= t.h index 63ca099f8368..590824916394 100644 --- a/arch/x86/include/asm/paravirt.h +++ b/arch/x86/include/asm/paravirt.h @@ -239,13 +239,11 @@ static inline int rdmsrq_safe(unsigned msr, u64 *p) return err; } =20 -static inline u64 paravirt_read_pmc(int counter) +static __always_inline u64 rdpmcq(int counter) { return PVOP_CALL1(u64, cpu.read_pmc, counter); } =20 -#define rdpmcq(counter, val) ((val) =3D paravirt_read_pmc(counter)) - static inline void paravirt_alloc_ldt(struct desc_struct *ldt, unsigned en= tries) { PVOP_VCALL2(cpu.alloc_ldt, ldt, entries); diff --git a/arch/x86/kernel/cpu/resctrl/pseudo_lock.c b/arch/x86/kernel/cp= u/resctrl/pseudo_lock.c index a5e21f44b0ca..276ffab194f6 100644 --- a/arch/x86/kernel/cpu/resctrl/pseudo_lock.c +++ b/arch/x86/kernel/cpu/resctrl/pseudo_lock.c @@ -1019,8 +1019,8 @@ static int measure_residency_fn(struct perf_event_att= r *miss_attr, * used in L1 cache, second to capture accurate value that does not * include cache misses incurred because of instruction loads. */ - rdpmcq(hit_pmcnum, hits_before); - rdpmcq(miss_pmcnum, miss_before); + hits_before =3D rdpmcq(hit_pmcnum); + miss_before =3D rdpmcq(miss_pmcnum); /* * From SDM: Performing back-to-back fast reads are not guaranteed * to be monotonic. @@ -1028,8 +1028,8 @@ static int measure_residency_fn(struct perf_event_att= r *miss_attr, * before proceeding. */ rmb(); - rdpmcq(hit_pmcnum, hits_before); - rdpmcq(miss_pmcnum, miss_before); + hits_before =3D rdpmcq(hit_pmcnum); + miss_before =3D rdpmcq(miss_pmcnum); /* * Use LFENCE to ensure all previous instructions are retired * before proceeding. @@ -1051,8 +1051,8 @@ static int measure_residency_fn(struct perf_event_att= r *miss_attr, * before proceeding. */ rmb(); - rdpmcq(hit_pmcnum, hits_after); - rdpmcq(miss_pmcnum, miss_after); + hits_after =3D rdpmcq(hit_pmcnum); + miss_after =3D rdpmcq(miss_pmcnum); /* * Use LFENCE to ensure all previous instructions are retired * before proceeding. --=20 2.49.0