Re: [Xen-devel] [PATCH 2/2] xen/rcu: don't use stop_machine_run() for rcu_barrier()

2020-02-17 Thread Jürgen Groß
On 17.02.20 15:23, Igor Druzhinin wrote: On 17/02/2020 12:30, Igor Druzhinin wrote: On 17/02/2020 12:28, Jürgen Groß wrote: On 17.02.20 13:26, Igor Druzhinin wrote: On 17/02/2020 07:20, Juergen Gross wrote: Today rcu_barrier() is calling stop_machine_run() to synchronize all physical cpus in

Re: [Xen-devel] [PATCH 2/2] xen/rcu: don't use stop_machine_run() for rcu_barrier()

2020-02-17 Thread Igor Druzhinin
On 17/02/2020 12:30, Igor Druzhinin wrote: > On 17/02/2020 12:28, Jürgen Groß wrote: >> On 17.02.20 13:26, Igor Druzhinin wrote: >>> On 17/02/2020 07:20, Juergen Gross wrote: Today rcu_barrier() is calling stop_machine_run() to synchronize all physical cpus in order to ensure all pending

Re: [Xen-devel] [PATCH 2/2] xen/rcu: don't use stop_machine_run() for rcu_barrier()

2020-02-17 Thread Jürgen Groß
On 17.02.20 14:47, Roger Pau Monné wrote: On Mon, Feb 17, 2020 at 02:17:23PM +0100, Jürgen Groß wrote: On 17.02.20 13:49, Roger Pau Monné wrote: On Mon, Feb 17, 2020 at 01:32:59PM +0100, Jürgen Groß wrote: On 17.02.20 13:17, Roger Pau Monné wrote: On Mon, Feb 17, 2020 at 01:11:59PM +0100,

Re: [Xen-devel] [PATCH 2/2] xen/rcu: don't use stop_machine_run() for rcu_barrier()

2020-02-17 Thread Roger Pau Monné
On Mon, Feb 17, 2020 at 02:17:23PM +0100, Jürgen Groß wrote: > On 17.02.20 13:49, Roger Pau Monné wrote: > > On Mon, Feb 17, 2020 at 01:32:59PM +0100, Jürgen Groß wrote: > > > On 17.02.20 13:17, Roger Pau Monné wrote: > > > > On Mon, Feb 17, 2020 at 01:11:59PM +0100, Jürgen Groß wrote: > > > > >

Re: [Xen-devel] [PATCH 2/2] xen/rcu: don't use stop_machine_run() for rcu_barrier()

2020-02-17 Thread Jürgen Groß
On 17.02.20 13:49, Roger Pau Monné wrote: On Mon, Feb 17, 2020 at 01:32:59PM +0100, Jürgen Groß wrote: On 17.02.20 13:17, Roger Pau Monné wrote: On Mon, Feb 17, 2020 at 01:11:59PM +0100, Jürgen Groß wrote: On 17.02.20 12:49, Julien Grall wrote: Hi Juergen, On 17/02/2020 07:20, Juergen Gross

Re: [Xen-devel] [PATCH 2/2] xen/rcu: don't use stop_machine_run() for rcu_barrier()

2020-02-17 Thread Roger Pau Monné
On Mon, Feb 17, 2020 at 01:32:59PM +0100, Jürgen Groß wrote: > On 17.02.20 13:17, Roger Pau Monné wrote: > > On Mon, Feb 17, 2020 at 01:11:59PM +0100, Jürgen Groß wrote: > > > On 17.02.20 12:49, Julien Grall wrote: > > > > Hi Juergen, > > > > > > > > On 17/02/2020 07:20, Juergen Gross wrote: > >

Re: [Xen-devel] [PATCH 2/2] xen/rcu: don't use stop_machine_run() for rcu_barrier()

2020-02-17 Thread Jürgen Groß
On 17.02.20 13:17, Roger Pau Monné wrote: On Mon, Feb 17, 2020 at 01:11:59PM +0100, Jürgen Groß wrote: On 17.02.20 12:49, Julien Grall wrote: Hi Juergen, On 17/02/2020 07:20, Juergen Gross wrote: +void rcu_barrier(void)   { -    atomic_t cpu_count = ATOMIC_INIT(0); -    return

Re: [Xen-devel] [PATCH 2/2] xen/rcu: don't use stop_machine_run() for rcu_barrier()

2020-02-17 Thread Igor Druzhinin
On 17/02/2020 12:28, Jürgen Groß wrote: > On 17.02.20 13:26, Igor Druzhinin wrote: >> On 17/02/2020 07:20, Juergen Gross wrote: >>> Today rcu_barrier() is calling stop_machine_run() to synchronize all >>> physical cpus in order to ensure all pending rcu calls have finished >>> when returning. >>>

Re: [Xen-devel] [PATCH 2/2] xen/rcu: don't use stop_machine_run() for rcu_barrier()

2020-02-17 Thread Jürgen Groß
On 17.02.20 13:26, Igor Druzhinin wrote: On 17/02/2020 07:20, Juergen Gross wrote: Today rcu_barrier() is calling stop_machine_run() to synchronize all physical cpus in order to ensure all pending rcu calls have finished when returning. As stop_machine_run() is using tasklets this requires

Re: [Xen-devel] [PATCH 2/2] xen/rcu: don't use stop_machine_run() for rcu_barrier()

2020-02-17 Thread Igor Druzhinin
On 17/02/2020 07:20, Juergen Gross wrote: > Today rcu_barrier() is calling stop_machine_run() to synchronize all > physical cpus in order to ensure all pending rcu calls have finished > when returning. > > As stop_machine_run() is using tasklets this requires scheduling of > idle vcpus on all

Re: [Xen-devel] [PATCH 2/2] xen/rcu: don't use stop_machine_run() for rcu_barrier()

2020-02-17 Thread Roger Pau Monné
On Mon, Feb 17, 2020 at 01:11:59PM +0100, Jürgen Groß wrote: > On 17.02.20 12:49, Julien Grall wrote: > > Hi Juergen, > > > > On 17/02/2020 07:20, Juergen Gross wrote: > > > +void rcu_barrier(void) > > >   { > > > -    atomic_t cpu_count = ATOMIC_INIT(0); > > > -    return

Re: [Xen-devel] [PATCH 2/2] xen/rcu: don't use stop_machine_run() for rcu_barrier()

2020-02-17 Thread Jürgen Groß
On 17.02.20 12:49, Julien Grall wrote: Hi Juergen, On 17/02/2020 07:20, Juergen Gross wrote: +void rcu_barrier(void)   { -    atomic_t cpu_count = ATOMIC_INIT(0); -    return stop_machine_run(rcu_barrier_action, _count, NR_CPUS); +    if ( !atomic_cmpxchg(_count, 0, num_online_cpus()) ) What

Re: [Xen-devel] [PATCH 2/2] xen/rcu: don't use stop_machine_run() for rcu_barrier()

2020-02-17 Thread Julien Grall
Hi Juergen, On 17/02/2020 07:20, Juergen Gross wrote: Today rcu_barrier() is calling stop_machine_run() to synchronize all physical cpus in order to ensure all pending rcu calls have finished when returning. As stop_machine_run() is using tasklets this requires scheduling of idle vcpus on all

[Xen-devel] [PATCH 2/2] xen/rcu: don't use stop_machine_run() for rcu_barrier()

2020-02-16 Thread Juergen Gross
Today rcu_barrier() is calling stop_machine_run() to synchronize all physical cpus in order to ensure all pending rcu calls have finished when returning. As stop_machine_run() is using tasklets this requires scheduling of idle vcpus on all cpus imposing the need to call rcu_barrier() on idle cpus