The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [PATCH] kunit: irq: Continue increasing hrtimer interval for longer
@ 2026-08-03 18:18 Eric Biggers
  2026-08-04 15:38 ` Ard Biesheuvel
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Eric Biggers @ 2026-08-03 18:18 UTC (permalink / raw)
  To: linux-crypto
  Cc: linux-kernel, Ard Biesheuvel, Jason A . Donenfeld, Herbert Xu,
	kunit-dev, Brendan Higgins, David Gow, Rae Moar, Eric Biggers,
	stable

Currently, kunit_irq_test_timer_func() stops increasing the hrtimer
interval as soon as some forward progress is made in each of softirq and
task context.  Update it to use a more aggressive strategy: increase the
interval as long as the hrtimer is running significantly faster than
either context.

This resolves an occasional hang in the CRC and crypto library tests
under qemu-system-s390x.  It was exposed by the change in the default
preemption model on s390 from NONE to LAZY.  That seems to have exposed
the issue by allowing some forward progress to be made while the actual
system timer tick is still starved, preventing jiffies from increasing
or the task context from making much progress towards max_iterations.

Fixes: 201ceb94aa1d ("kunit: irq: Ensure timer doesn't fire too frequently")
Cc: stable@vger.kernel.org
Signed-off-by: Eric Biggers <ebiggers@kernel.org>
---

This patch is targeting libcrypto-next

 include/kunit/run-in-irq-context.h | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/include/kunit/run-in-irq-context.h b/include/kunit/run-in-irq-context.h
index bfe60d6cf28d..3802b6fb218e 100644
--- a/include/kunit/run-in-irq-context.h
+++ b/include/kunit/run-in-irq-context.h
@@ -38,11 +38,13 @@ static enum hrtimer_restart kunit_irq_test_timer_func(struct hrtimer *timer)
 	softirq_calls = atomic_read(&state->softirq_func_calls);
 
 	/*
-	 * If the timer is firing too often for the softirq or task to ever have
-	 * a chance to run, increase the timer interval.  This is needed on very
-	 * slow systems.
+	 * If the hrtimer is running much faster than the bh_work or the task,
+	 * then it is firing too fast and might be starving those contexts as
+	 * well as the actual system timer tick.  Increase the interval.
 	 */
-	if (hardirq_calls >= 20 && (softirq_calls == 0 || task_calls == 0))
+	if (hardirq_calls >= 20 &&
+	    (hardirq_calls / 2 > softirq_calls ||
+	     hardirq_calls / 2 > task_calls))
 		state->interval = ktime_add_ns(state->interval, 250);
 
 	if (!state->func(state->test_specific_state))

base-commit: 6d22ec26295c1412d765e3d687e46224fc332928
-- 
2.55.0


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

* Re: [PATCH] kunit: irq: Continue increasing hrtimer interval for longer
  2026-08-03 18:18 [PATCH] kunit: irq: Continue increasing hrtimer interval for longer Eric Biggers
@ 2026-08-04 15:38 ` Ard Biesheuvel
  2026-08-05 13:53 ` David Gow
  2026-08-05 19:47 ` Eric Biggers
  2 siblings, 0 replies; 4+ messages in thread
From: Ard Biesheuvel @ 2026-08-04 15:38 UTC (permalink / raw)
  To: Eric Biggers, linux-crypto
  Cc: linux-kernel, Jason A . Donenfeld, Herbert Xu, kunit-dev,
	Brendan Higgins, David Gow, Rae Moar, stable



On Mon, 3 Aug 2026, at 21:18, Eric Biggers wrote:
> Currently, kunit_irq_test_timer_func() stops increasing the hrtimer
> interval as soon as some forward progress is made in each of softirq and
> task context.  Update it to use a more aggressive strategy: increase the
> interval as long as the hrtimer is running significantly faster than
> either context.
>
> This resolves an occasional hang in the CRC and crypto library tests
> under qemu-system-s390x.  It was exposed by the change in the default
> preemption model on s390 from NONE to LAZY.  That seems to have exposed
> the issue by allowing some forward progress to be made while the actual
> system timer tick is still starved, preventing jiffies from increasing
> or the task context from making much progress towards max_iterations.
>
> Fixes: 201ceb94aa1d ("kunit: irq: Ensure timer doesn't fire too frequently")
> Cc: stable@vger.kernel.org
> Signed-off-by: Eric Biggers <ebiggers@kernel.org>
> ---
>
> This patch is targeting libcrypto-next
>
>  include/kunit/run-in-irq-context.h | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/include/kunit/run-in-irq-context.h 
> b/include/kunit/run-in-irq-context.h
> index bfe60d6cf28d..3802b6fb218e 100644
> --- a/include/kunit/run-in-irq-context.h
> +++ b/include/kunit/run-in-irq-context.h
> @@ -38,11 +38,13 @@ static enum hrtimer_restart 
> kunit_irq_test_timer_func(struct hrtimer *timer)
>  	softirq_calls = atomic_read(&state->softirq_func_calls);
> 
>  	/*
> -	 * If the timer is firing too often for the softirq or task to ever have
> -	 * a chance to run, increase the timer interval.  This is needed on very
> -	 * slow systems.
> +	 * If the hrtimer is running much faster than the bh_work or the task,
> +	 * then it is firing too fast and might be starving those contexts as
> +	 * well as the actual system timer tick.  Increase the interval.
>  	 */
> -	if (hardirq_calls >= 20 && (softirq_calls == 0 || task_calls == 0))
> +	if (hardirq_calls >= 20 &&
> +	    (hardirq_calls / 2 > softirq_calls ||
> +	     hardirq_calls / 2 > task_calls))
>  		state->interval = ktime_add_ns(state->interval, 250);
> 
>  	if (!state->func(state->test_specific_state))
>

Acked-by: Ard Biesheuvel <ardb@kernel.org>

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

* Re: [PATCH] kunit: irq: Continue increasing hrtimer interval for longer
  2026-08-03 18:18 [PATCH] kunit: irq: Continue increasing hrtimer interval for longer Eric Biggers
  2026-08-04 15:38 ` Ard Biesheuvel
@ 2026-08-05 13:53 ` David Gow
  2026-08-05 19:47 ` Eric Biggers
  2 siblings, 0 replies; 4+ messages in thread
From: David Gow @ 2026-08-05 13:53 UTC (permalink / raw)
  To: Eric Biggers, linux-crypto
  Cc: linux-kernel, Ard Biesheuvel, Jason A . Donenfeld, Herbert Xu,
	kunit-dev, Brendan Higgins, Rae Moar, stable

Le 04/08/2026 à 02:18, Eric Biggers a écrit :
> Currently, kunit_irq_test_timer_func() stops increasing the hrtimer
> interval as soon as some forward progress is made in each of softirq and
> task context.  Update it to use a more aggressive strategy: increase the
> interval as long as the hrtimer is running significantly faster than
> either context.
> 
> This resolves an occasional hang in the CRC and crypto library tests
> under qemu-system-s390x.  It was exposed by the change in the default
> preemption model on s390 from NONE to LAZY.  That seems to have exposed
> the issue by allowing some forward progress to be made while the actual
> system timer tick is still starved, preventing jiffies from increasing
> or the task context from making much progress towards max_iterations.
> 
> Fixes: 201ceb94aa1d ("kunit: irq: Ensure timer doesn't fire too frequently")
> Cc: stable@vger.kernel.org
> Signed-off-by: Eric Biggers <ebiggers@kernel.org>
> ---
> 
> This patch is targeting libcrypto-next
> 

Thanks. Nothing else is touching this, so taking it through 
libcrypto-next is fine.

Reviewed-by: David Gow <david@davidgow.net>

Cheers,
-- David

>   include/kunit/run-in-irq-context.h | 10 ++++++----
>   1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/include/kunit/run-in-irq-context.h b/include/kunit/run-in-irq-context.h
> index bfe60d6cf28d..3802b6fb218e 100644
> --- a/include/kunit/run-in-irq-context.h
> +++ b/include/kunit/run-in-irq-context.h
> @@ -38,11 +38,13 @@ static enum hrtimer_restart kunit_irq_test_timer_func(struct hrtimer *timer)
>   	softirq_calls = atomic_read(&state->softirq_func_calls);
>   
>   	/*
> -	 * If the timer is firing too often for the softirq or task to ever have
> -	 * a chance to run, increase the timer interval.  This is needed on very
> -	 * slow systems.
> +	 * If the hrtimer is running much faster than the bh_work or the task,
> +	 * then it is firing too fast and might be starving those contexts as
> +	 * well as the actual system timer tick.  Increase the interval.
>   	 */
> -	if (hardirq_calls >= 20 && (softirq_calls == 0 || task_calls == 0))
> +	if (hardirq_calls >= 20 &&
> +	    (hardirq_calls / 2 > softirq_calls ||
> +	     hardirq_calls / 2 > task_calls))
>   		state->interval = ktime_add_ns(state->interval, 250);
>   
>   	if (!state->func(state->test_specific_state))
> 
> base-commit: 6d22ec26295c1412d765e3d687e46224fc332928


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

* Re: [PATCH] kunit: irq: Continue increasing hrtimer interval for longer
  2026-08-03 18:18 [PATCH] kunit: irq: Continue increasing hrtimer interval for longer Eric Biggers
  2026-08-04 15:38 ` Ard Biesheuvel
  2026-08-05 13:53 ` David Gow
@ 2026-08-05 19:47 ` Eric Biggers
  2 siblings, 0 replies; 4+ messages in thread
From: Eric Biggers @ 2026-08-05 19:47 UTC (permalink / raw)
  To: linux-crypto
  Cc: linux-kernel, Ard Biesheuvel, Jason A . Donenfeld, Herbert Xu,
	kunit-dev, Brendan Higgins, David Gow, Rae Moar, stable

On Mon, Aug 03, 2026 at 11:18:41AM -0700, Eric Biggers wrote:
> Currently, kunit_irq_test_timer_func() stops increasing the hrtimer
> interval as soon as some forward progress is made in each of softirq and
> task context.  Update it to use a more aggressive strategy: increase the
> interval as long as the hrtimer is running significantly faster than
> either context.
> 
> This resolves an occasional hang in the CRC and crypto library tests
> under qemu-system-s390x.  It was exposed by the change in the default
> preemption model on s390 from NONE to LAZY.  That seems to have exposed
> the issue by allowing some forward progress to be made while the actual
> system timer tick is still starved, preventing jiffies from increasing
> or the task context from making much progress towards max_iterations.
> 
> Fixes: 201ceb94aa1d ("kunit: irq: Ensure timer doesn't fire too frequently")
> Cc: stable@vger.kernel.org
> Signed-off-by: Eric Biggers <ebiggers@kernel.org>
> ---
> 
> This patch is targeting libcrypto-next

Applied to https://git.kernel.org/pub/scm/linux/kernel/git/ebiggers/linux.git/log/?h=libcrypto-next

- Eric

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

end of thread, other threads:[~2026-08-05 19:47 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-03 18:18 [PATCH] kunit: irq: Continue increasing hrtimer interval for longer Eric Biggers
2026-08-04 15:38 ` Ard Biesheuvel
2026-08-05 13:53 ` David Gow
2026-08-05 19:47 ` Eric Biggers

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