diff mbox series

[kvm-unit-tests] arm64: timer: ignore ISTATUS with disabled timer

Message ID 20230615003832.161134-1-namit@vmware.com (mailing list archive)
State New, archived
Headers show
Series [kvm-unit-tests] arm64: timer: ignore ISTATUS with disabled timer | expand

Commit Message

Nadav Amit June 15, 2023, 12:38 a.m. UTC
From: Nadav Amit <nadav.amit@gmail.com>

According to ARM specifications for the vtimer (CNTV_CTL_EL0): "When the
value of the ENABLE bit is 0, the ISTATUS field is UNKNOWN."

Currently the test, however, does check that ISTATUS is cleared when the
ENABLE bit is zero. Remove this check as the value is unknown.

Signed-off-by: Nadav Amit <nadav.amit@gmail.com>
---
 arm/timer.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Andrew Jones June 28, 2023, 11:40 a.m. UTC | #1
On Wed, Jun 14, 2023 at 05:38:32PM -0700, Nadav Amit wrote:
> From: Nadav Amit <nadav.amit@gmail.com>
> 
> According to ARM specifications for the vtimer (CNTV_CTL_EL0): "When the
> value of the ENABLE bit is 0, the ISTATUS field is UNKNOWN."
> 
> Currently the test, however, does check that ISTATUS is cleared when the
> ENABLE bit is zero. Remove this check as the value is unknown.

Hmm, does it? timer_pending() is

 /* Check that the timer condition is met. */
 static bool timer_pending(struct timer_info *info)
 {
        return (info->read_ctl() & ARCH_TIMER_CTL_ENABLE) &&
                (info->read_ctl() & ARCH_TIMER_CTL_ISTATUS);
 }

which I would expect to short-circuit when ENABLE is zero.

Thanks,
drew

> 
> Signed-off-by: Nadav Amit <nadav.amit@gmail.com>
> ---
>  arm/timer.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arm/timer.c b/arm/timer.c
> index 2cb8051..0b976a7 100644
> --- a/arm/timer.c
> +++ b/arm/timer.c
> @@ -256,7 +256,7 @@ static void test_timer_pending(struct timer_info *info)
>  	set_timer_irq_enabled(info, true);
>  
>  	report(!info->irq_received, "no interrupt when timer is disabled");
> -	report(!timer_pending(info) && gic_timer_check_state(info, GIC_IRQ_STATE_INACTIVE),
> +	report(gic_timer_check_state(info, GIC_IRQ_STATE_INACTIVE),
>  			"interrupt signal no longer pending");
>  
>  	info->write_cval(now - 1);
> -- 
> 2.34.1
>
Nadav Amit July 1, 2023, 5:26 p.m. UTC | #2
> On Jun 28, 2023, at 4:40 AM, Andrew Jones <andrew.jones@linux.dev> wrote:
> 
> On Wed, Jun 14, 2023 at 05:38:32PM -0700, Nadav Amit wrote:
>> From: Nadav Amit <nadav.amit@gmail.com>
>> 
>> According to ARM specifications for the vtimer (CNTV_CTL_EL0): "When the
>> value of the ENABLE bit is 0, the ISTATUS field is UNKNOWN."
>> 
>> Currently the test, however, does check that ISTATUS is cleared when the
>> ENABLE bit is zero. Remove this check as the value is unknown.
> 
> Hmm, does it? timer_pending() is
> 
> /* Check that the timer condition is met. */
> static bool timer_pending(struct timer_info *info)
> {
>        return (info->read_ctl() & ARCH_TIMER_CTL_ENABLE) &&
>                (info->read_ctl() & ARCH_TIMER_CTL_ISTATUS);
> }
> 
> which I would expect to short-circuit when ENABLE is zero.

Yes, my bad. Drop it.

I had a different unrelated interrupt before that turned on the ENABLE.
This just mask an additional failure.

Obviously we can reset the ENABLE before each test, but I presume it is
fair to say that in general if a certain test fails, subsequent failures
are prone to be false-positives.
diff mbox series

Patch

diff --git a/arm/timer.c b/arm/timer.c
index 2cb8051..0b976a7 100644
--- a/arm/timer.c
+++ b/arm/timer.c
@@ -256,7 +256,7 @@  static void test_timer_pending(struct timer_info *info)
 	set_timer_irq_enabled(info, true);
 
 	report(!info->irq_received, "no interrupt when timer is disabled");
-	report(!timer_pending(info) && gic_timer_check_state(info, GIC_IRQ_STATE_INACTIVE),
+	report(gic_timer_check_state(info, GIC_IRQ_STATE_INACTIVE),
 			"interrupt signal no longer pending");
 
 	info->write_cval(now - 1);