2017-12-07 03:57:33

by Stephen Rothwell

[permalink] [raw]
Subject: linux-next: build failure after merge of the scsi-mkp tree

Hi Martin,

After merging the scsi-mkp tree, today's linux-next build (x86_64
allmodconfig) failed like this:

ERROR: "init_rcu_head" [drivers/scsi/scsi_mod.ko] undefined!
ERROR: "destroy_rcu_head" [drivers/scsi/scsi_mod.ko] undefined!

Caused by commit

ac90420f17c9 ("scsi: core: Ensure that the SCSI error handler gets woken up")

I have used the scsi-mkp tree from next-20171206 for today.

--
Cheers,
Stephen Rothwell


2017-12-07 03:59:35

by Bart Van Assche

[permalink] [raw]
Subject: Re: linux-next: build failure after merge of the scsi-mkp tree

On Thu, 2017-12-07 at 14:57 +1100, Stephen Rothwell wrote:
> After merging the scsi-mkp tree, today's linux-next build (x86_64
> allmodconfig) failed like this:
>
> ERROR: "init_rcu_head" [drivers/scsi/scsi_mod.ko] undefined!
> ERROR: "destroy_rcu_head" [drivers/scsi/scsi_mod.ko] undefined!
>
> Caused by commit
>
> ac90420f17c9 ("scsi: core: Ensure that the SCSI error handler gets woken up")
>
> I have used the scsi-mkp tree from next-20171206 for today.

Does that mean I'm the first one who added RCU code to the SCSI core? Anyway,
I will fix this and repost the patch series that introduced this build failure.
Sorry for the inconvenience.

Bart.

2017-12-07 04:25:25

by Stephen Rothwell

[permalink] [raw]
Subject: Re: linux-next: build failure after merge of the scsi-mkp tree

Hi Bart,

[cc'ing some RCU people ...]

On Thu, 7 Dec 2017 03:59:30 +0000 Bart Van Assche <[email protected]> wrote:
>
> On Thu, 2017-12-07 at 14:57 +1100, Stephen Rothwell wrote:
> > After merging the scsi-mkp tree, today's linux-next build (x86_64
> > allmodconfig) failed like this:
> >
> > ERROR: "init_rcu_head" [drivers/scsi/scsi_mod.ko] undefined!
> > ERROR: "destroy_rcu_head" [drivers/scsi/scsi_mod.ko] undefined!
> >
> > Caused by commit
> >
> > ac90420f17c9 ("scsi: core: Ensure that the SCSI error handler gets woken up")
> >
> > I have used the scsi-mkp tree from next-20171206 for today.
>
> Does that mean I'm the first one who added RCU code to the SCSI core?

The only other uses of init_rcu_head() are in drivers/iommu/intel-svm.c
and kernel/irq/irqdesc.c. destroy_rcu_head() appears to not be used
anywhere ...

--
Cheers,
Stephen Rothwell

2017-12-07 04:42:30

by Paul E. McKenney

[permalink] [raw]
Subject: Re: linux-next: build failure after merge of the scsi-mkp tree

On Thu, Dec 07, 2017 at 03:25:21PM +1100, Stephen Rothwell wrote:
> Hi Bart,
>
> [cc'ing some RCU people ...]
>
> On Thu, 7 Dec 2017 03:59:30 +0000 Bart Van Assche <[email protected]> wrote:
> >
> > On Thu, 2017-12-07 at 14:57 +1100, Stephen Rothwell wrote:
> > > After merging the scsi-mkp tree, today's linux-next build (x86_64
> > > allmodconfig) failed like this:
> > >
> > > ERROR: "init_rcu_head" [drivers/scsi/scsi_mod.ko] undefined!
> > > ERROR: "destroy_rcu_head" [drivers/scsi/scsi_mod.ko] undefined!
> > >
> > > Caused by commit
> > >
> > > ac90420f17c9 ("scsi: core: Ensure that the SCSI error handler gets woken up")
> > >
> > > I have used the scsi-mkp tree from next-20171206 for today.
> >
> > Does that mean I'm the first one who added RCU code to the SCSI core?
>
> The only other uses of init_rcu_head() are in drivers/iommu/intel-svm.c
> and kernel/irq/irqdesc.c. destroy_rcu_head() appears to not be used
> anywhere ...

The key point is that Bart appears to be the first to try using them in
a module, for which exports are needed. Does the patch below help?

Thanx, Paul

------------------------------------------------------------------------

commit cde4691a3a4591e7355295dd62610e3262159002
Author: Paul E. McKenney <[email protected]>
Date: Wed Dec 6 20:39:38 2017 -0800

rcu: Export init_rcu_head() and destroy_rcu_head() to GPL modules

Use of init_rcu_head() and destroy_rcu_head() from modules results in
the following build-time error:

ERROR: "init_rcu_head" [drivers/scsi/scsi_mod.ko] undefined!
ERROR: "destroy_rcu_head" [drivers/scsi/scsi_mod.ko] undefined!

This commit therefore adds EXPORT_SYMBOL_GPL() for each to allow them
to be used by GPL-licensed kernel modules.

Reported-by: Bart Van Assche <[email protected]>
Reported-by: Stephen Rothwell <[email protected]>
Signed-off-by: Paul E. McKenney <[email protected]>

diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c
index 8d591d8411fe..4c4d26e9a67b 100644
--- a/kernel/rcu/update.c
+++ b/kernel/rcu/update.c
@@ -422,11 +422,13 @@ void init_rcu_head(struct rcu_head *head)
{
debug_object_init(head, &rcuhead_debug_descr);
}
+EXPORT_SYMBOL_GPL(init_rcu_head);

void destroy_rcu_head(struct rcu_head *head)
{
debug_object_free(head, &rcuhead_debug_descr);
}
+EXPORT_SYMBOL_GPL(destroy_rcu_head);

static bool rcuhead_is_static_object(void *addr)
{

2017-12-07 17:30:19

by Bart Van Assche

[permalink] [raw]
Subject: Re: linux-next: build failure after merge of the scsi-mkp tree

On Wed, 2017-12-06 at 20:42 -0800, Paul E. McKenney wrote:
> On Thu, Dec 07, 2017 at 03:25:21PM +1100, Stephen Rothwell wrote:
> > On Thu, 7 Dec 2017 03:59:30 +0000 Bart Van Assche <[email protected]> wrote:
> > > On Thu, 2017-12-07 at 14:57 +1100, Stephen Rothwell wrote:
> > > > After merging the scsi-mkp tree, today's linux-next build (x86_64
> > > > allmodconfig) failed like this:
> > > >
> > > > ERROR: "init_rcu_head" [drivers/scsi/scsi_mod.ko] undefined!
> > > > ERROR: "destroy_rcu_head" [drivers/scsi/scsi_mod.ko] undefined!
> > > >
> > > > Caused by commit
> > > >
> > > > ac90420f17c9 ("scsi: core: Ensure that the SCSI error handler gets woken up")
> > > >
> > > > I have used the scsi-mkp tree from next-20171206 for today.
> > >
> > > Does that mean I'm the first one who added RCU code to the SCSI core?
> >
> > The only other uses of init_rcu_head() are in drivers/iommu/intel-svm.c
> > and kernel/irq/irqdesc.c. destroy_rcu_head() appears to not be used
> > anywhere ...
>
> The key point is that Bart appears to be the first to try using them in
> a module, for which exports are needed. Does the patch below help?
>
> Thanx, Paul
>
> ------------------------------------------------------------------------
>
> commit cde4691a3a4591e7355295dd62610e3262159002
> Author: Paul E. McKenney <[email protected]>
> Date: Wed Dec 6 20:39:38 2017 -0800
>
> rcu: Export init_rcu_head() and destroy_rcu_head() to GPL modules
>
> Use of init_rcu_head() and destroy_rcu_head() from modules results in
> the following build-time error:
>
> ERROR: "init_rcu_head" [drivers/scsi/scsi_mod.ko] undefined!
> ERROR: "destroy_rcu_head" [drivers/scsi/scsi_mod.ko] undefined!
>
> This commit therefore adds EXPORT_SYMBOL_GPL() for each to allow them
> to be used by GPL-licensed kernel modules.
>
> Reported-by: Bart Van Assche <[email protected]>
> Reported-by: Stephen Rothwell <[email protected]>
> Signed-off-by: Paul E. McKenney <[email protected]>
>
> diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c
> index 8d591d8411fe..4c4d26e9a67b 100644
> --- a/kernel/rcu/update.c
> +++ b/kernel/rcu/update.c
> @@ -422,11 +422,13 @@ void init_rcu_head(struct rcu_head *head)
> {
> debug_object_init(head, &rcuhead_debug_descr);
> }
> +EXPORT_SYMBOL_GPL(init_rcu_head);
>
> void destroy_rcu_head(struct rcu_head *head)
> {
> debug_object_free(head, &rcuhead_debug_descr);
> }
> +EXPORT_SYMBOL_GPL(destroy_rcu_head);
>
> static bool rcuhead_is_static_object(void *addr)
> {

(+linux-scsi)

Hello Paul,

How about changing the commit message into "... fixes a build failure with
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y"? Otherwise the above patch looks fine to me
and fixes the reported build failure on my setup.

However, what's not clear to me is through which tree this patch should be
sent to Linus? Should the above patch be sent as a v4.15-rc fix or should
Martin perhaps queue it in his tree for v4.16-rc1?

Thanks,

Bart.


2017-12-07 17:40:50

by Paul E. McKenney

[permalink] [raw]
Subject: Re: linux-next: build failure after merge of the scsi-mkp tree

On Thu, Dec 07, 2017 at 05:30:03PM +0000, Bart Van Assche wrote:
> On Wed, 2017-12-06 at 20:42 -0800, Paul E. McKenney wrote:
> > On Thu, Dec 07, 2017 at 03:25:21PM +1100, Stephen Rothwell wrote:
> > > On Thu, 7 Dec 2017 03:59:30 +0000 Bart Van Assche <[email protected]> wrote:

[ . . . ]

> > commit cde4691a3a4591e7355295dd62610e3262159002
> > Author: Paul E. McKenney <[email protected]>
> > Date: Wed Dec 6 20:39:38 2017 -0800
> >
> > rcu: Export init_rcu_head() and destroy_rcu_head() to GPL modules
> >
> > Use of init_rcu_head() and destroy_rcu_head() from modules results in
> > the following build-time error:
> >
> > ERROR: "init_rcu_head" [drivers/scsi/scsi_mod.ko] undefined!
> > ERROR: "destroy_rcu_head" [drivers/scsi/scsi_mod.ko] undefined!
> >
> > This commit therefore adds EXPORT_SYMBOL_GPL() for each to allow them
> > to be used by GPL-licensed kernel modules.
> >
> > Reported-by: Bart Van Assche <[email protected]>
> > Reported-by: Stephen Rothwell <[email protected]>
> > Signed-off-by: Paul E. McKenney <[email protected]>
> >
> > diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c
> > index 8d591d8411fe..4c4d26e9a67b 100644
> > --- a/kernel/rcu/update.c
> > +++ b/kernel/rcu/update.c
> > @@ -422,11 +422,13 @@ void init_rcu_head(struct rcu_head *head)
> > {
> > debug_object_init(head, &rcuhead_debug_descr);
> > }
> > +EXPORT_SYMBOL_GPL(init_rcu_head);
> >
> > void destroy_rcu_head(struct rcu_head *head)
> > {
> > debug_object_free(head, &rcuhead_debug_descr);
> > }
> > +EXPORT_SYMBOL_GPL(destroy_rcu_head);
> >
> > static bool rcuhead_is_static_object(void *addr)
> > {
>
> (+linux-scsi)
>
> Hello Paul,
>
> How about changing the commit message into "... fixes a build failure with
> CONFIG_DEBUG_OBJECTS_RCU_HEAD=y"? Otherwise the above patch looks fine to me
> and fixes the reported build failure on my setup.

I have updated it as shown below.

> However, what's not clear to me is through which tree this patch should be
> sent to Linus? Should the above patch be sent as a v4.15-rc fix or should
> Martin perhaps queue it in his tree for v4.16-rc1?

I have to defer to you guys on that one. Left to myself, I will just
push it into the next merge window (as opposed to using my normal process,
which at this point would get it into the one following).

So please let me know how you would like to proceed.

Thanx, Paul

------------------------------------------------------------------------

commit 193dffdf4354f14b4f3369a85128817e5ba74e58
Author: Paul E. McKenney <[email protected]>
Date: Wed Dec 6 20:39:38 2017 -0800

rcu: Export init_rcu_head() and destroy_rcu_head() to GPL modules

Use of init_rcu_head() and destroy_rcu_head() from modules results in
the following build-time error with CONFIG_DEBUG_OBJECTS_RCU_HEAD=y:

ERROR: "init_rcu_head" [drivers/scsi/scsi_mod.ko] undefined!
ERROR: "destroy_rcu_head" [drivers/scsi/scsi_mod.ko] undefined!

This commit therefore adds EXPORT_SYMBOL_GPL() for each to allow them
to be used by GPL-licensed kernel modules.

Reported-by: Bart Van Assche <[email protected]>
Reported-by: Stephen Rothwell <[email protected]>
Signed-off-by: Paul E. McKenney <[email protected]>

diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c
index 8d591d8411fe..4c4d26e9a67b 100644
--- a/kernel/rcu/update.c
+++ b/kernel/rcu/update.c
@@ -422,11 +422,13 @@ void init_rcu_head(struct rcu_head *head)
{
debug_object_init(head, &rcuhead_debug_descr);
}
+EXPORT_SYMBOL_GPL(init_rcu_head);

void destroy_rcu_head(struct rcu_head *head)
{
debug_object_free(head, &rcuhead_debug_descr);
}
+EXPORT_SYMBOL_GPL(destroy_rcu_head);

static bool rcuhead_is_static_object(void *addr)
{

2017-12-07 20:34:44

by Stephen Rothwell

[permalink] [raw]
Subject: Re: linux-next: build failure after merge of the scsi-mkp tree

Hi all,

On Thu, 7 Dec 2017 09:40:38 -0800 "Paul E. McKenney" <[email protected]> wrote:
>
> On Thu, Dec 07, 2017 at 05:30:03PM +0000, Bart Van Assche wrote:
> > However, what's not clear to me is through which tree this patch should be
> > sent to Linus? Should the above patch be sent as a v4.15-rc fix or should
> > Martin perhaps queue it in his tree for v4.16-rc1?
>
> I have to defer to you guys on that one. Left to myself, I will just
> push it into the next merge window (as opposed to using my normal process,
> which at this point would get it into the one following).
>
> So please let me know how you would like to proceed.

Clearly, it needs to go via Martin's tree as otherwise his tree will
not build in some circumstances ... or if it going to cause problems
for Paul, then it should be in a separate non-rebasing branch (probably
of Paul's tree) that is merged into Pauls main branch and Marin's tree.
--
Cheers,
Stephen Rothwell

2017-12-07 21:10:23

by Paul E. McKenney

[permalink] [raw]
Subject: Re: linux-next: build failure after merge of the scsi-mkp tree

On Fri, Dec 08, 2017 at 07:34:39AM +1100, Stephen Rothwell wrote:
> Hi all,
>
> On Thu, 7 Dec 2017 09:40:38 -0800 "Paul E. McKenney" <[email protected]> wrote:
> >
> > On Thu, Dec 07, 2017 at 05:30:03PM +0000, Bart Van Assche wrote:
> > > However, what's not clear to me is through which tree this patch should be
> > > sent to Linus? Should the above patch be sent as a v4.15-rc fix or should
> > > Martin perhaps queue it in his tree for v4.16-rc1?
> >
> > I have to defer to you guys on that one. Left to myself, I will just
> > push it into the next merge window (as opposed to using my normal process,
> > which at this point would get it into the one following).
> >
> > So please let me know how you would like to proceed.
>
> Clearly, it needs to go via Martin's tree as otherwise his tree will
> not build in some circumstances ... or if it going to cause problems
> for Paul, then it should be in a separate non-rebasing branch (probably
> of Paul's tree) that is merged into Pauls main branch and Marin's tree.

It is unlikely to cause problems, so please let it go up where convenient.

Just please let me know.

Thanx, Paul

2017-12-07 21:16:20

by Martin K. Petersen

[permalink] [raw]
Subject: Re: linux-next: build failure after merge of the scsi-mkp tree


Stephen,

>> I have to defer to you guys on that one. Left to myself, I will just
>> push it into the next merge window (as opposed to using my normal
>> process, which at this point would get it into the one following).
>>
>> So please let me know how you would like to proceed.
>
> Clearly, it needs to go via Martin's tree as otherwise his tree will
> not build in some circumstances ... or if it going to cause problems
> for Paul, then it should be in a separate non-rebasing branch (probably
> of Paul's tree) that is merged into Pauls main branch and Marin's tree.

I'm perfectly OK with taking it through the SCSI tree. Probably the path
of least resistance.

--
Martin K. Petersen Oracle Linux Engineering

2017-12-08 01:01:06

by Martin K. Petersen

[permalink] [raw]
Subject: Re: linux-next: build failure after merge of the scsi-mkp tree


> I'm perfectly OK with taking it through the SCSI tree. Probably the
> path of least resistance.

Applied to 4.16/scsi-queue and rebased so it sits before Bart's patch.

--
Martin K. Petersen Oracle Linux Engineering

2017-12-11 17:43:57

by Paul E. McKenney

[permalink] [raw]
Subject: Re: linux-next: build failure after merge of the scsi-mkp tree

On Thu, Dec 07, 2017 at 08:00:50PM -0500, Martin K. Petersen wrote:
>
> > I'm perfectly OK with taking it through the SCSI tree. Probably the
> > path of least resistance.
>
> Applied to 4.16/scsi-queue and rebased so it sits before Bart's patch.

Thank you! I have removed this patch from -rcu.

Thanx, Paul