public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] KVM: arm64: Read PMUVer as unsigned
@ 2026-03-05 11:50 James Clark
  2026-03-05 11:59 ` Marc Zyngier
  0 siblings, 1 reply; 3+ messages in thread
From: James Clark @ 2026-03-05 11:50 UTC (permalink / raw)
  To: Marc Zyngier, Oliver Upton, Joey Gouly, Suzuki K Poulose,
	Zenghui Yu, Catalin Marinas, Will Deacon, Colton Lewis,
	Alexandru Elisei
  Cc: linux-arm-kernel, kvmarm, linux-kernel, James Clark

ID_AA64DFR0_EL1.PMUVer is an unsigned field, so this skips
initialization of host_data_ptr(nr_event_counters) for PMUv3 for Armv8.8
onwards as they appear as negative values.

Fix it by reading it as unsigned.

Fixes: 2417218f2f23 ("KVM: arm64: Get rid of __kvm_get_mdcr_el2() and related warts")
Signed-off-by: James Clark <james.clark@linaro.org>
---
 arch/arm64/kvm/debug.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm64/kvm/debug.c b/arch/arm64/kvm/debug.c
index 3ad6b7c6e4ba..b8632edba9a3 100644
--- a/arch/arm64/kvm/debug.c
+++ b/arch/arm64/kvm/debug.c
@@ -76,7 +76,7 @@ void kvm_init_host_debug_data(void)
 {
 	u64 dfr0 = read_sysreg(id_aa64dfr0_el1);
 
-	if (cpuid_feature_extract_signed_field(dfr0, ID_AA64DFR0_EL1_PMUVer_SHIFT) > 0)
+	if (cpuid_feature_extract_unsigned_field(dfr0, ID_AA64DFR0_EL1_PMUVer_SHIFT) > 0)
 		*host_data_ptr(nr_event_counters) = FIELD_GET(ARMV8_PMU_PMCR_N,
 							      read_sysreg(pmcr_el0));
 

---
base-commit: c107785c7e8dbabd1c18301a1c362544b5786282
change-id: 20260305-james-kvm-pmuver-sign-fe830bdead2d

Best regards,
-- 
James Clark <james.clark@linaro.org>


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] KVM: arm64: Read PMUVer as unsigned
  2026-03-05 11:50 [PATCH] KVM: arm64: Read PMUVer as unsigned James Clark
@ 2026-03-05 11:59 ` Marc Zyngier
  2026-03-05 13:10   ` James Clark
  0 siblings, 1 reply; 3+ messages in thread
From: Marc Zyngier @ 2026-03-05 11:59 UTC (permalink / raw)
  To: James Clark
  Cc: Oliver Upton, Joey Gouly, Suzuki K Poulose, Zenghui Yu,
	Catalin Marinas, Will Deacon, Colton Lewis, Alexandru Elisei,
	linux-arm-kernel, kvmarm, linux-kernel

On Thu, 05 Mar 2026 11:50:01 +0000,
James Clark <james.clark@linaro.org> wrote:
> 
> ID_AA64DFR0_EL1.PMUVer is an unsigned field, so this skips
> initialization of host_data_ptr(nr_event_counters) for PMUv3 for Armv8.8
> onwards as they appear as negative values.
> 
> Fix it by reading it as unsigned.
> 
> Fixes: 2417218f2f23 ("KVM: arm64: Get rid of __kvm_get_mdcr_el2() and related warts")
> Signed-off-by: James Clark <james.clark@linaro.org>
> ---
>  arch/arm64/kvm/debug.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/arm64/kvm/debug.c b/arch/arm64/kvm/debug.c
> index 3ad6b7c6e4ba..b8632edba9a3 100644
> --- a/arch/arm64/kvm/debug.c
> +++ b/arch/arm64/kvm/debug.c
> @@ -76,7 +76,7 @@ void kvm_init_host_debug_data(void)
>  {
>  	u64 dfr0 = read_sysreg(id_aa64dfr0_el1);
>  
> -	if (cpuid_feature_extract_signed_field(dfr0, ID_AA64DFR0_EL1_PMUVer_SHIFT) > 0)
> +	if (cpuid_feature_extract_unsigned_field(dfr0, ID_AA64DFR0_EL1_PMUVer_SHIFT) > 0)
>  		*host_data_ptr(nr_event_counters) = FIELD_GET(ARMV8_PMU_PMCR_N,
>  							      read_sysreg(pmcr_el0));
>  

How does this work on a system that advertises a non-architected PMU?

	M.

-- 
Without deviation from the norm, progress is not possible.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] KVM: arm64: Read PMUVer as unsigned
  2026-03-05 11:59 ` Marc Zyngier
@ 2026-03-05 13:10   ` James Clark
  0 siblings, 0 replies; 3+ messages in thread
From: James Clark @ 2026-03-05 13:10 UTC (permalink / raw)
  To: Marc Zyngier
  Cc: Oliver Upton, Joey Gouly, Suzuki K Poulose, Zenghui Yu,
	Catalin Marinas, Will Deacon, Colton Lewis, Alexandru Elisei,
	linux-arm-kernel, kvmarm, linux-kernel



On 05/03/2026 11:59 am, Marc Zyngier wrote:
> On Thu, 05 Mar 2026 11:50:01 +0000,
> James Clark <james.clark@linaro.org> wrote:
>>
>> ID_AA64DFR0_EL1.PMUVer is an unsigned field, so this skips
>> initialization of host_data_ptr(nr_event_counters) for PMUv3 for Armv8.8
>> onwards as they appear as negative values.
>>
>> Fix it by reading it as unsigned.
>>
>> Fixes: 2417218f2f23 ("KVM: arm64: Get rid of __kvm_get_mdcr_el2() and related warts")
>> Signed-off-by: James Clark <james.clark@linaro.org>
>> ---
>>   arch/arm64/kvm/debug.c | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/arch/arm64/kvm/debug.c b/arch/arm64/kvm/debug.c
>> index 3ad6b7c6e4ba..b8632edba9a3 100644
>> --- a/arch/arm64/kvm/debug.c
>> +++ b/arch/arm64/kvm/debug.c
>> @@ -76,7 +76,7 @@ void kvm_init_host_debug_data(void)
>>   {
>>   	u64 dfr0 = read_sysreg(id_aa64dfr0_el1);
>>   
>> -	if (cpuid_feature_extract_signed_field(dfr0, ID_AA64DFR0_EL1_PMUVer_SHIFT) > 0)
>> +	if (cpuid_feature_extract_unsigned_field(dfr0, ID_AA64DFR0_EL1_PMUVer_SHIFT) > 0)
>>   		*host_data_ptr(nr_event_counters) = FIELD_GET(ARMV8_PMU_PMCR_N,
>>   							      read_sysreg(pmcr_el0));
>>   
> 
> How does this work on a system that advertises a non-architected PMU?
> 
> 	M.
> 

Hmmm yeah I suppose it doesn't, there's actually already 
pmuv3_implemented() and has_pmuv3() which open code the same check 
again. Maybe I can try re-using something and tidying it up.


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-03-05 13:10 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-05 11:50 [PATCH] KVM: arm64: Read PMUVer as unsigned James Clark
2026-03-05 11:59 ` Marc Zyngier
2026-03-05 13:10   ` James Clark

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox