2014-10-09 04:50:45

by Stephen Rothwell

[permalink] [raw]
Subject: linux-next: manual merge of the percpu tree with the tip tree

Hi all,

Today's linux-next merge of the percpu tree got a conflict in
kernel/irq_work.c between commit 76a33061b932 ("irq_work: Force raised
irq work to run on irq work interrupt") from the tip tree and commit
22127e93c587 ("time: Replace __get_cpu_var uses") from the percpu tree.

I fixed it up (see below) and can carry the fix as necessary (no action
is required).

--
Cheers,
Stephen Rothwell [email protected]

diff --cc kernel/irq_work.c
index 385b85aded19,345d19edcdae..000000000000
--- a/kernel/irq_work.c
+++ b/kernel/irq_work.c
@@@ -113,12 -113,10 +113,12 @@@ bool irq_work_needs_cpu(void
{
struct llist_head *raised, *lazy;

- raised = &__get_cpu_var(raised_list);
- lazy = &__get_cpu_var(lazy_list);
+ raised = this_cpu_ptr(&raised_list);
+ lazy = this_cpu_ptr(&lazy_list);
- if (llist_empty(raised) && llist_empty(lazy))
- return false;
+
+ if (llist_empty(raised) || arch_irq_work_has_interrupt())
+ if (llist_empty(lazy))
+ return false;

/* All work should have been flushed before going offline */
WARN_ON_ONCE(cpu_is_offline(smp_processor_id()));


Attachments:
signature.asc (819.00 B)

2014-10-09 13:13:51

by Frederic Weisbecker

[permalink] [raw]
Subject: Re: linux-next: manual merge of the percpu tree with the tip tree

On Thu, Oct 09, 2014 at 03:50:18PM +1100, Stephen Rothwell wrote:
> Hi all,
>
> Today's linux-next merge of the percpu tree got a conflict in
> kernel/irq_work.c between commit 76a33061b932 ("irq_work: Force raised
> irq work to run on irq work interrupt") from the tip tree and commit
> 22127e93c587 ("time: Replace __get_cpu_var uses") from the percpu tree.
>
> I fixed it up (see below) and can carry the fix as necessary (no action
> is required).
>
> --
> Cheers,
> Stephen Rothwell [email protected]
>
> diff --cc kernel/irq_work.c
> index 385b85aded19,345d19edcdae..000000000000
> --- a/kernel/irq_work.c
> +++ b/kernel/irq_work.c
> @@@ -113,12 -113,10 +113,12 @@@ bool irq_work_needs_cpu(void
> {
> struct llist_head *raised, *lazy;
>
> - raised = &__get_cpu_var(raised_list);
> - lazy = &__get_cpu_var(lazy_list);
> + raised = this_cpu_ptr(&raised_list);
> + lazy = this_cpu_ptr(&lazy_list);

Ah thanks! The conflict is compile time rather than merge time, thanks
for spotting it!

Should we notify Linus about it? That's certainly something that should
be applied with the percpu tree.

> - if (llist_empty(raised) && llist_empty(lazy))
> - return false;
> +
> + if (llist_empty(raised) || arch_irq_work_has_interrupt())
> + if (llist_empty(lazy))
> + return false;
>
> /* All work should have been flushed before going offline */
> WARN_ON_ONCE(cpu_is_offline(smp_processor_id()));

2014-10-09 13:15:28

by Tejun Heo

[permalink] [raw]
Subject: Re: linux-next: manual merge of the percpu tree with the tip tree

On Thu, Oct 09, 2014 at 03:13:31PM +0200, Frederic Weisbecker wrote:
> On Thu, Oct 09, 2014 at 03:50:18PM +1100, Stephen Rothwell wrote:
> > Hi all,
> >
> > Today's linux-next merge of the percpu tree got a conflict in
> > kernel/irq_work.c between commit 76a33061b932 ("irq_work: Force raised
> > irq work to run on irq work interrupt") from the tip tree and commit
> > 22127e93c587 ("time: Replace __get_cpu_var uses") from the percpu tree.
> >
> > I fixed it up (see below) and can carry the fix as necessary (no action
> > is required).
> >
> > --
> > Cheers,
> > Stephen Rothwell [email protected]
> >
> > diff --cc kernel/irq_work.c
> > index 385b85aded19,345d19edcdae..000000000000
> > --- a/kernel/irq_work.c
> > +++ b/kernel/irq_work.c
> > @@@ -113,12 -113,10 +113,12 @@@ bool irq_work_needs_cpu(void
> > {
> > struct llist_head *raised, *lazy;
> >
> > - raised = &__get_cpu_var(raised_list);
> > - lazy = &__get_cpu_var(lazy_list);
> > + raised = this_cpu_ptr(&raised_list);
> > + lazy = this_cpu_ptr(&lazy_list);
>
> Ah thanks! The conflict is compile time rather than merge time, thanks
> for spotting it!
>
> Should we notify Linus about it? That's certainly something that should
> be applied with the percpu tree.

I'm holding back percpu/for-3.18-consistent-ops till other trees are
merged and collecting the conflicts. I'll list them when sending the
pull request.

Thanks.

--
tejun

2014-10-09 13:19:13

by Frederic Weisbecker

[permalink] [raw]
Subject: Re: linux-next: manual merge of the percpu tree with the tip tree

On Thu, Oct 09, 2014 at 09:15:12AM -0400, Tejun Heo wrote:
> On Thu, Oct 09, 2014 at 03:13:31PM +0200, Frederic Weisbecker wrote:
> > On Thu, Oct 09, 2014 at 03:50:18PM +1100, Stephen Rothwell wrote:
> > > Hi all,
> > >
> > > Today's linux-next merge of the percpu tree got a conflict in
> > > kernel/irq_work.c between commit 76a33061b932 ("irq_work: Force raised
> > > irq work to run on irq work interrupt") from the tip tree and commit
> > > 22127e93c587 ("time: Replace __get_cpu_var uses") from the percpu tree.
> > >
> > > I fixed it up (see below) and can carry the fix as necessary (no action
> > > is required).
> > >
> > > --
> > > Cheers,
> > > Stephen Rothwell [email protected]
> > >
> > > diff --cc kernel/irq_work.c
> > > index 385b85aded19,345d19edcdae..000000000000
> > > --- a/kernel/irq_work.c
> > > +++ b/kernel/irq_work.c
> > > @@@ -113,12 -113,10 +113,12 @@@ bool irq_work_needs_cpu(void
> > > {
> > > struct llist_head *raised, *lazy;
> > >
> > > - raised = &__get_cpu_var(raised_list);
> > > - lazy = &__get_cpu_var(lazy_list);
> > > + raised = this_cpu_ptr(&raised_list);
> > > + lazy = this_cpu_ptr(&lazy_list);
> >
> > Ah thanks! The conflict is compile time rather than merge time, thanks
> > for spotting it!
> >
> > Should we notify Linus about it? That's certainly something that should
> > be applied with the percpu tree.
>
> I'm holding back percpu/for-3.18-consistent-ops till other trees are
> merged and collecting the conflicts. I'll list them when sending the
> pull request.

Sounds good!

Thanks.