lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1351618408.8467.132.camel@gandalf.local.home>
Date:	Tue, 30 Oct 2012 13:33:28 -0400
From:	Steven Rostedt <rostedt@...dmis.org>
To:	linux-kernel@...r.kernel.org
Cc:	Andrew Morton <akpm@...ux-foundation.org>,
	Thomas Gleixner <tglx@...utronix.de>,
	Peter Zijlstra <peterz@...radead.org>,
	Clark Williams <clark.williams@...il.com>,
	Frederic Weisbecker <fweisbec@...il.com>,
	Li Zefan <lizf@...fujitsu.com>, Ingo Molnar <mingo@...nel.org>,
	"Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>,
	Mike Galbraith <efault@....de>,
	Alessio Igor Bogani <abogani@...nel.org>,
	Avi Kivity <avi@...hat.com>,
	Chris Metcalf <cmetcalf@...era.com>,
	Christoph Lameter <cl@...ux.com>,
	Daniel Lezcano <daniel.lezcano@...aro.org>,
	Geoff Levand <geoff@...radead.org>,
	Gilad Ben Yossef <gilad@...yossef.com>,
	Hakan Akkan <hakanakkan@...il.com>,
	Kevin Hilman <khilman@...com>,
	Max Krasnyansky <maxk@...lcomm.com>,
	Stephen Hemminger <shemminger@...tta.com>,
	Sven-Thorsten Dietrich <thebigcorporation@...il.com>
Subject: Re: [PATCH 03/32] nohz: Try not to give the timekeeping duty to an
 adaptive tickless cpu

On Mon, 2012-10-29 at 16:27 -0400, Steven Rostedt wrote:

>  kernel/time/tick-sched.c |   52 ++++++++++++++++++++++++++++++++++++----------
>  1 file changed, 41 insertions(+), 11 deletions(-)
> 
> diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
> index d6d16fe..c7a78c6 100644
> --- a/kernel/time/tick-sched.c
> +++ b/kernel/time/tick-sched.c
> @@ -20,6 +20,7 @@
>  #include <linux/profile.h>
>  #include <linux/sched.h>
>  #include <linux/module.h>
> +#include <linux/cpuset.h>
>  
>  #include <asm/irq_regs.h>
>  
> @@ -789,6 +790,45 @@ void tick_check_idle(int cpu)
>  	tick_check_nohz(cpu);
>  }
>  
> +#ifdef CONFIG_CPUSETS_NO_HZ
> +
> +/*
> + * Take the timer duty if nobody is taking care of it.
> + * If a CPU already does and and it's in a nohz cpuset,

and and

> + * then take the charge so that it can switch to nohz mode.
> + */
> +static void tick_do_timer_check_handler(int cpu)
> +{
> +	int handler = tick_do_timer_cpu;
> +
> +	if (unlikely(handler == TICK_DO_TIMER_NONE)) {
> +		tick_do_timer_cpu = cpu;

I take it that this is the forced (no one has it, so I'll take it?)

Perhaps we should do a:

	WARN_ON(cpuset_cpu_adaptive_nohz(cpu));


> +	} else {
> +		if (!cpuset_adaptive_nohz() &&
> +		    cpuset_cpu_adaptive_nohz(handler))
> +			tick_do_timer_cpu = cpu;

Shouldn't this be
		if (!cpuset_cpu_adaptive_nohz(cpu) && ...

Otherwise, we should have it go to smp_processor_id()?


OK, looking further down, the only caller of it passes
smp_processor_id() to the function. But we still shouldn't assume this.
Either, have the function use smp_processor_id() explicitly, or let it
use any cpu. Otherwise it just confuses people, and is prone to be buggy
if in the future something calls it with a cpu that's not the local cpu.

-- Steve

> +	}
> +}
> +
> +#else
> +
> +static void tick_do_timer_check_handler(int cpu)
> +{
> +#ifdef CONFIG_NO_HZ
> +	/*
> +	 * Check if the do_timer duty was dropped. We don't care about
> +	 * concurrency: This happens only when the cpu in charge went
> +	 * into a long sleep. If two cpus happen to assign themself to
> +	 * this duty, then the jiffies update is still serialized by
> +	 * xtime_lock.
> +	 */
> +	if (unlikely(tick_do_timer_cpu == TICK_DO_TIMER_NONE))
> +		tick_do_timer_cpu = cpu;
> +#endif
> +}
> +
> +#endif /* CONFIG_CPUSETS_NO_HZ */
> +
>  /*
>   * High resolution timer specific code
>   */
> @@ -805,17 +845,7 @@ static enum hrtimer_restart tick_sched_timer(struct hrtimer *timer)
>  	ktime_t now = ktime_get();
>  	int cpu = smp_processor_id();
>  
> -#ifdef CONFIG_NO_HZ
> -	/*
> -	 * Check if the do_timer duty was dropped. We don't care about
> -	 * concurrency: This happens only when the cpu in charge went
> -	 * into a long sleep. If two cpus happen to assign themself to
> -	 * this duty, then the jiffies update is still serialized by
> -	 * xtime_lock.
> -	 */
> -	if (unlikely(tick_do_timer_cpu == TICK_DO_TIMER_NONE))
> -		tick_do_timer_cpu = cpu;
> -#endif
> +	tick_do_timer_check_handler(cpu);
>  
>  	/* Check, if the jiffies need an update */
>  	if (tick_do_timer_cpu == cpu)


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ