All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oliver Upton <oliver.upton@linux.dev>
To: Reiji Watanabe <reijiw@google.com>
Cc: Marc Zyngier <maz@kernel.org>,
	kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	James Morse <james.morse@arm.com>,
	Alexandru Elisei <alexandru.elisei@arm.com>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Andrew Jones <andrew.jones@linux.dev>,
	Ricardo Koller <ricarkol@google.com>,
	Jing Zhang <jingzhangos@google.com>,
	Raghavendra Rao Anata <rananta@google.com>
Subject: Re: [PATCH v2 1/9] KVM: arm64: selftests: Use FIELD_GET() to extract ID register fields
Date: Thu, 20 Oct 2022 22:08:00 +0300	[thread overview]
Message-ID: <Y1GckDU/gCNQ6tAS@google.com> (raw)
In-Reply-To: <20221020054202.2119018-2-reijiw@google.com>

On Wed, Oct 19, 2022 at 10:41:54PM -0700, Reiji Watanabe wrote:
> Use FIELD_GET() macro to extract ID register fields for existing
> aarch64 selftests code. No functional change intended.
> 
> Signed-off-by: Reiji Watanabe <reijiw@google.com>
> ---
>  tools/testing/selftests/kvm/aarch64/aarch32_id_regs.c  | 3 ++-
>  tools/testing/selftests/kvm/aarch64/debug-exceptions.c | 3 ++-
>  tools/testing/selftests/kvm/lib/aarch64/processor.c    | 7 ++++---
>  3 files changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/tools/testing/selftests/kvm/aarch64/aarch32_id_regs.c b/tools/testing/selftests/kvm/aarch64/aarch32_id_regs.c
> index 6f9c1f19c7f6..b6a5e8861b35 100644
> --- a/tools/testing/selftests/kvm/aarch64/aarch32_id_regs.c
> +++ b/tools/testing/selftests/kvm/aarch64/aarch32_id_regs.c
> @@ -13,6 +13,7 @@
>  #include "kvm_util.h"
>  #include "processor.h"
>  #include "test_util.h"
> +#include <linux/bitfield.h>
>  
>  #define BAD_ID_REG_VAL	0x1badc0deul
>  
> @@ -145,7 +146,7 @@ static bool vcpu_aarch64_only(struct kvm_vcpu *vcpu)
>  
>  	vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_ID_AA64PFR0_EL1), &val);
>  
> -	el0 = (val & ARM64_FEATURE_MASK(ID_AA64PFR0_EL0)) >> ID_AA64PFR0_EL0_SHIFT;
> +	el0 = FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR0_EL0), val);
>  	return el0 == ID_AA64PFR0_ELx_64BIT_ONLY;
>  }
>  
> diff --git a/tools/testing/selftests/kvm/aarch64/debug-exceptions.c b/tools/testing/selftests/kvm/aarch64/debug-exceptions.c
> index 947bd201435c..3808d3d75055 100644
> --- a/tools/testing/selftests/kvm/aarch64/debug-exceptions.c
> +++ b/tools/testing/selftests/kvm/aarch64/debug-exceptions.c
> @@ -2,6 +2,7 @@
>  #include <test_util.h>
>  #include <kvm_util.h>
>  #include <processor.h>
> +#include <linux/bitfield.h>
>  
>  #define MDSCR_KDE	(1 << 13)
>  #define MDSCR_MDE	(1 << 15)
> @@ -284,7 +285,7 @@ static int debug_version(struct kvm_vcpu *vcpu)
>  	uint64_t id_aa64dfr0;
>  
>  	vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_ID_AA64DFR0_EL1), &id_aa64dfr0);
> -	return id_aa64dfr0 & 0xf;
> +	return FIELD_GET(ARM64_FEATURE_MASK(ID_AA64DFR0_DEBUGVER), id_aa64dfr0);
>  }
>  
>  static void test_guest_debug_exceptions(void)
> diff --git a/tools/testing/selftests/kvm/lib/aarch64/processor.c b/tools/testing/selftests/kvm/lib/aarch64/processor.c
> index 6f5551368944..7c96b931edd5 100644
> --- a/tools/testing/selftests/kvm/lib/aarch64/processor.c
> +++ b/tools/testing/selftests/kvm/lib/aarch64/processor.c
> @@ -11,6 +11,7 @@
>  #include "guest_modes.h"
>  #include "kvm_util.h"
>  #include "processor.h"
> +#include <linux/bitfield.h>
>  
>  #define DEFAULT_ARM64_GUEST_STACK_VADDR_MIN	0xac0000
>  
> @@ -486,9 +487,9 @@ void aarch64_get_supported_page_sizes(uint32_t ipa,
>  	err = ioctl(vcpu_fd, KVM_GET_ONE_REG, &reg);
>  	TEST_ASSERT(err == 0, KVM_IOCTL_ERROR(KVM_GET_ONE_REG, vcpu_fd));
>  
> -	*ps4k = ((val >> 28) & 0xf) != 0xf;
> -	*ps64k = ((val >> 24) & 0xf) == 0;
> -	*ps16k = ((val >> 20) & 0xf) != 0;
> +	*ps4k = FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR0_TGRAN4), val) != 0xf;
> +	*ps64k = FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR0_TGRAN64), val) == 0;
> +	*ps16k = FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR0_TGRAN16), val) != 0;

Not your code, but since we're here...

Should we change the field values to use the #define's? Also, the test
for TGRAN64 looks wrong. We should test != ID_AA64MMFR0_TGRAN64_NI. A
value greater than 0 would indicate an extension of the feature.

But for this exact change:

Reviewed-by: Oliver Upton <oliver.upton@linux.dev>

WARNING: multiple messages have this Message-ID (diff)
From: Oliver Upton <oliver.upton@linux.dev>
To: Reiji Watanabe <reijiw@google.com>
Cc: kvm@vger.kernel.org, Marc Zyngier <maz@kernel.org>,
	Andrew Jones <andrew.jones@linux.dev>,
	Paolo Bonzini <pbonzini@redhat.com>,
	kvmarm@lists.cs.columbia.edu,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2 1/9] KVM: arm64: selftests: Use FIELD_GET() to extract ID register fields
Date: Thu, 20 Oct 2022 22:08:00 +0300	[thread overview]
Message-ID: <Y1GckDU/gCNQ6tAS@google.com> (raw)
In-Reply-To: <20221020054202.2119018-2-reijiw@google.com>

On Wed, Oct 19, 2022 at 10:41:54PM -0700, Reiji Watanabe wrote:
> Use FIELD_GET() macro to extract ID register fields for existing
> aarch64 selftests code. No functional change intended.
> 
> Signed-off-by: Reiji Watanabe <reijiw@google.com>
> ---
>  tools/testing/selftests/kvm/aarch64/aarch32_id_regs.c  | 3 ++-
>  tools/testing/selftests/kvm/aarch64/debug-exceptions.c | 3 ++-
>  tools/testing/selftests/kvm/lib/aarch64/processor.c    | 7 ++++---
>  3 files changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/tools/testing/selftests/kvm/aarch64/aarch32_id_regs.c b/tools/testing/selftests/kvm/aarch64/aarch32_id_regs.c
> index 6f9c1f19c7f6..b6a5e8861b35 100644
> --- a/tools/testing/selftests/kvm/aarch64/aarch32_id_regs.c
> +++ b/tools/testing/selftests/kvm/aarch64/aarch32_id_regs.c
> @@ -13,6 +13,7 @@
>  #include "kvm_util.h"
>  #include "processor.h"
>  #include "test_util.h"
> +#include <linux/bitfield.h>
>  
>  #define BAD_ID_REG_VAL	0x1badc0deul
>  
> @@ -145,7 +146,7 @@ static bool vcpu_aarch64_only(struct kvm_vcpu *vcpu)
>  
>  	vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_ID_AA64PFR0_EL1), &val);
>  
> -	el0 = (val & ARM64_FEATURE_MASK(ID_AA64PFR0_EL0)) >> ID_AA64PFR0_EL0_SHIFT;
> +	el0 = FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR0_EL0), val);
>  	return el0 == ID_AA64PFR0_ELx_64BIT_ONLY;
>  }
>  
> diff --git a/tools/testing/selftests/kvm/aarch64/debug-exceptions.c b/tools/testing/selftests/kvm/aarch64/debug-exceptions.c
> index 947bd201435c..3808d3d75055 100644
> --- a/tools/testing/selftests/kvm/aarch64/debug-exceptions.c
> +++ b/tools/testing/selftests/kvm/aarch64/debug-exceptions.c
> @@ -2,6 +2,7 @@
>  #include <test_util.h>
>  #include <kvm_util.h>
>  #include <processor.h>
> +#include <linux/bitfield.h>
>  
>  #define MDSCR_KDE	(1 << 13)
>  #define MDSCR_MDE	(1 << 15)
> @@ -284,7 +285,7 @@ static int debug_version(struct kvm_vcpu *vcpu)
>  	uint64_t id_aa64dfr0;
>  
>  	vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_ID_AA64DFR0_EL1), &id_aa64dfr0);
> -	return id_aa64dfr0 & 0xf;
> +	return FIELD_GET(ARM64_FEATURE_MASK(ID_AA64DFR0_DEBUGVER), id_aa64dfr0);
>  }
>  
>  static void test_guest_debug_exceptions(void)
> diff --git a/tools/testing/selftests/kvm/lib/aarch64/processor.c b/tools/testing/selftests/kvm/lib/aarch64/processor.c
> index 6f5551368944..7c96b931edd5 100644
> --- a/tools/testing/selftests/kvm/lib/aarch64/processor.c
> +++ b/tools/testing/selftests/kvm/lib/aarch64/processor.c
> @@ -11,6 +11,7 @@
>  #include "guest_modes.h"
>  #include "kvm_util.h"
>  #include "processor.h"
> +#include <linux/bitfield.h>
>  
>  #define DEFAULT_ARM64_GUEST_STACK_VADDR_MIN	0xac0000
>  
> @@ -486,9 +487,9 @@ void aarch64_get_supported_page_sizes(uint32_t ipa,
>  	err = ioctl(vcpu_fd, KVM_GET_ONE_REG, &reg);
>  	TEST_ASSERT(err == 0, KVM_IOCTL_ERROR(KVM_GET_ONE_REG, vcpu_fd));
>  
> -	*ps4k = ((val >> 28) & 0xf) != 0xf;
> -	*ps64k = ((val >> 24) & 0xf) == 0;
> -	*ps16k = ((val >> 20) & 0xf) != 0;
> +	*ps4k = FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR0_TGRAN4), val) != 0xf;
> +	*ps64k = FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR0_TGRAN64), val) == 0;
> +	*ps16k = FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR0_TGRAN16), val) != 0;

Not your code, but since we're here...

Should we change the field values to use the #define's? Also, the test
for TGRAN64 looks wrong. We should test != ID_AA64MMFR0_TGRAN64_NI. A
value greater than 0 would indicate an extension of the feature.

But for this exact change:

Reviewed-by: Oliver Upton <oliver.upton@linux.dev>
_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

WARNING: multiple messages have this Message-ID (diff)
From: Oliver Upton <oliver.upton@linux.dev>
To: Reiji Watanabe <reijiw@google.com>
Cc: Marc Zyngier <maz@kernel.org>,
	kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	James Morse <james.morse@arm.com>,
	Alexandru Elisei <alexandru.elisei@arm.com>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Andrew Jones <andrew.jones@linux.dev>,
	Ricardo Koller <ricarkol@google.com>,
	Jing Zhang <jingzhangos@google.com>,
	Raghavendra Rao Anata <rananta@google.com>
Subject: Re: [PATCH v2 1/9] KVM: arm64: selftests: Use FIELD_GET() to extract ID register fields
Date: Thu, 20 Oct 2022 22:08:00 +0300	[thread overview]
Message-ID: <Y1GckDU/gCNQ6tAS@google.com> (raw)
In-Reply-To: <20221020054202.2119018-2-reijiw@google.com>

On Wed, Oct 19, 2022 at 10:41:54PM -0700, Reiji Watanabe wrote:
> Use FIELD_GET() macro to extract ID register fields for existing
> aarch64 selftests code. No functional change intended.
> 
> Signed-off-by: Reiji Watanabe <reijiw@google.com>
> ---
>  tools/testing/selftests/kvm/aarch64/aarch32_id_regs.c  | 3 ++-
>  tools/testing/selftests/kvm/aarch64/debug-exceptions.c | 3 ++-
>  tools/testing/selftests/kvm/lib/aarch64/processor.c    | 7 ++++---
>  3 files changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/tools/testing/selftests/kvm/aarch64/aarch32_id_regs.c b/tools/testing/selftests/kvm/aarch64/aarch32_id_regs.c
> index 6f9c1f19c7f6..b6a5e8861b35 100644
> --- a/tools/testing/selftests/kvm/aarch64/aarch32_id_regs.c
> +++ b/tools/testing/selftests/kvm/aarch64/aarch32_id_regs.c
> @@ -13,6 +13,7 @@
>  #include "kvm_util.h"
>  #include "processor.h"
>  #include "test_util.h"
> +#include <linux/bitfield.h>
>  
>  #define BAD_ID_REG_VAL	0x1badc0deul
>  
> @@ -145,7 +146,7 @@ static bool vcpu_aarch64_only(struct kvm_vcpu *vcpu)
>  
>  	vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_ID_AA64PFR0_EL1), &val);
>  
> -	el0 = (val & ARM64_FEATURE_MASK(ID_AA64PFR0_EL0)) >> ID_AA64PFR0_EL0_SHIFT;
> +	el0 = FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR0_EL0), val);
>  	return el0 == ID_AA64PFR0_ELx_64BIT_ONLY;
>  }
>  
> diff --git a/tools/testing/selftests/kvm/aarch64/debug-exceptions.c b/tools/testing/selftests/kvm/aarch64/debug-exceptions.c
> index 947bd201435c..3808d3d75055 100644
> --- a/tools/testing/selftests/kvm/aarch64/debug-exceptions.c
> +++ b/tools/testing/selftests/kvm/aarch64/debug-exceptions.c
> @@ -2,6 +2,7 @@
>  #include <test_util.h>
>  #include <kvm_util.h>
>  #include <processor.h>
> +#include <linux/bitfield.h>
>  
>  #define MDSCR_KDE	(1 << 13)
>  #define MDSCR_MDE	(1 << 15)
> @@ -284,7 +285,7 @@ static int debug_version(struct kvm_vcpu *vcpu)
>  	uint64_t id_aa64dfr0;
>  
>  	vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_ID_AA64DFR0_EL1), &id_aa64dfr0);
> -	return id_aa64dfr0 & 0xf;
> +	return FIELD_GET(ARM64_FEATURE_MASK(ID_AA64DFR0_DEBUGVER), id_aa64dfr0);
>  }
>  
>  static void test_guest_debug_exceptions(void)
> diff --git a/tools/testing/selftests/kvm/lib/aarch64/processor.c b/tools/testing/selftests/kvm/lib/aarch64/processor.c
> index 6f5551368944..7c96b931edd5 100644
> --- a/tools/testing/selftests/kvm/lib/aarch64/processor.c
> +++ b/tools/testing/selftests/kvm/lib/aarch64/processor.c
> @@ -11,6 +11,7 @@
>  #include "guest_modes.h"
>  #include "kvm_util.h"
>  #include "processor.h"
> +#include <linux/bitfield.h>
>  
>  #define DEFAULT_ARM64_GUEST_STACK_VADDR_MIN	0xac0000
>  
> @@ -486,9 +487,9 @@ void aarch64_get_supported_page_sizes(uint32_t ipa,
>  	err = ioctl(vcpu_fd, KVM_GET_ONE_REG, &reg);
>  	TEST_ASSERT(err == 0, KVM_IOCTL_ERROR(KVM_GET_ONE_REG, vcpu_fd));
>  
> -	*ps4k = ((val >> 28) & 0xf) != 0xf;
> -	*ps64k = ((val >> 24) & 0xf) == 0;
> -	*ps16k = ((val >> 20) & 0xf) != 0;
> +	*ps4k = FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR0_TGRAN4), val) != 0xf;
> +	*ps64k = FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR0_TGRAN64), val) == 0;
> +	*ps16k = FIELD_GET(ARM64_FEATURE_MASK(ID_AA64MMFR0_TGRAN16), val) != 0;

Not your code, but since we're here...

Should we change the field values to use the #define's? Also, the test
for TGRAN64 looks wrong. We should test != ID_AA64MMFR0_TGRAN64_NI. A
value greater than 0 would indicate an extension of the feature.

But for this exact change:

Reviewed-by: Oliver Upton <oliver.upton@linux.dev>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2022-10-20 19:08 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-20  5:41 [PATCH v2 0/9] KVM: arm64: selftests: Test linked {break,watch}points Reiji Watanabe
2022-10-20  5:41 ` Reiji Watanabe
2022-10-20  5:41 ` [PATCH v2 0/9] KVM: arm64: selftests: Test linked {break, watch}points Reiji Watanabe
2022-10-20  5:41 ` [PATCH v2 1/9] KVM: arm64: selftests: Use FIELD_GET() to extract ID register fields Reiji Watanabe
2022-10-20  5:41   ` Reiji Watanabe
2022-10-20  5:41   ` Reiji Watanabe
2022-10-20 19:08   ` Oliver Upton [this message]
2022-10-20 19:08     ` Oliver Upton
2022-10-20 19:08     ` Oliver Upton
2022-10-21  3:08     ` Reiji Watanabe
2022-10-21  3:08       ` Reiji Watanabe
2022-10-21  3:08       ` Reiji Watanabe
2022-10-20  5:41 ` [PATCH v2 2/9] KVM: arm64: selftests: Add write_dbg{b,w}{c,v}r helpers in debug-exceptions Reiji Watanabe
2022-10-20  5:41   ` Reiji Watanabe
2022-10-20  5:41   ` Reiji Watanabe
2022-10-20  5:41 ` [PATCH v2 3/9] KVM: arm64: selftests: Remove the hard-coded {b,w}pn#0 from debug-exceptions Reiji Watanabe
2022-10-20  5:41   ` Reiji Watanabe
2022-10-20  5:41   ` [PATCH v2 3/9] KVM: arm64: selftests: Remove the hard-coded {b, w}pn#0 " Reiji Watanabe
2022-10-20 19:11   ` [PATCH v2 3/9] KVM: arm64: selftests: Remove the hard-coded {b,w}pn#0 " Oliver Upton
2022-10-20 19:11     ` Oliver Upton
2022-10-20 19:11     ` Oliver Upton
2022-10-20  5:41 ` [PATCH v2 4/9] KVM: arm64: selftests: Add helpers to enable debug exceptions Reiji Watanabe
2022-10-20  5:41   ` Reiji Watanabe
2022-10-20  5:41   ` Reiji Watanabe
2022-10-20  5:41 ` [PATCH v2 5/9] KVM: arm64: selftests: Stop unnecessary test stage tracking of debug-exceptions Reiji Watanabe
2022-10-20  5:41   ` Reiji Watanabe
2022-10-20  5:41   ` Reiji Watanabe
2022-10-20 19:12   ` Oliver Upton
2022-10-20 19:12     ` Oliver Upton
2022-10-20 19:12     ` Oliver Upton
2022-10-20  5:41 ` [PATCH v2 6/9] KVM: arm64: selftests: Change debug_version() to take ID_AA64DFR0_EL1 Reiji Watanabe
2022-10-20  5:41   ` Reiji Watanabe
2022-10-20  5:41   ` Reiji Watanabe
2022-10-20  5:42 ` [PATCH v2 7/9] KVM: arm64: selftests: Add a test case for a linked breakpoint Reiji Watanabe
2022-10-20  5:42   ` Reiji Watanabe
2022-10-20  5:42   ` Reiji Watanabe
2022-10-20  5:42 ` [PATCH v2 8/9] KVM: arm64: selftests: Add a test case for a linked watchpoint Reiji Watanabe
2022-10-20  5:42   ` Reiji Watanabe
2022-10-20  5:42   ` Reiji Watanabe
2022-10-20  5:42 ` [PATCH v2 9/9] KVM: arm64: selftests: Test with every breakpoint/watchpoint Reiji Watanabe
2022-10-20  5:42   ` Reiji Watanabe
2022-10-20  5:42   ` Reiji Watanabe
2022-11-10 19:07 ` [PATCH v2 0/9] KVM: arm64: selftests: Test linked {break, watch}points Marc Zyngier
2022-11-10 19:07   ` [PATCH v2 0/9] KVM: arm64: selftests: Test linked {break,watch}points Marc Zyngier
2022-11-10 19:07   ` Marc Zyngier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Y1GckDU/gCNQ6tAS@google.com \
    --to=oliver.upton@linux.dev \
    --cc=alexandru.elisei@arm.com \
    --cc=andrew.jones@linux.dev \
    --cc=james.morse@arm.com \
    --cc=jingzhangos@google.com \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=maz@kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=rananta@google.com \
    --cc=reijiw@google.com \
    --cc=ricarkol@google.com \
    --cc=suzuki.poulose@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.