[4/4] modpost: do not set ->preloaded for symbols from Module.symvers

Message ID 20191003102915.28301-4-yamada.masahiro@socionext.com
State New
Headers show
Series
  • [1/4] kbuild: two minor updates for Documentation/kbuild/modules.rst
Related show

Commit Message

Masahiro Yamada Oct. 3, 2019, 10:29 a.m.
Now that there is no overwrap between symbols from ELF files and
ones from Module.symvers.

So, the 'exported twice' warning should be reported irrespective
of where the symbol in question came from. Only the exceptional case
is when __crc_<sym> symbol appears before __ksymtab_<sym>. This
typically occurs for EXPORT_SYMBOL in .S files.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>

---

 scripts/mod/modpost.c | 1 -
 1 file changed, 1 deletion(-)

-- 
2.17.1

Comments

Jeff Moyer Oct. 31, 2019, 4:51 p.m. | #1
Masahiro Yamada <yamada.masahiro@socionext.com> writes:

> Now that there is no overwrap between symbols from ELF files and

> ones from Module.symvers.

>

> So, the 'exported twice' warning should be reported irrespective

> of where the symbol in question came from. Only the exceptional case

> is when __crc_<sym> symbol appears before __ksymtab_<sym>. This

> typically occurs for EXPORT_SYMBOL in .S files.


Hi, Masahiro,

After apply this patch, I get the following modpost warnings when doing:

$ make M=tools/tesing/nvdimm
...
  Building modules, stage 2.
  MODPOST 12 modules
WARNING: tools/testing/nvdimm/libnvdimm: 'nvdimm_bus_lock' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko
WARNING: tools/testing/nvdimm/libnvdimm: 'nvdimm_bus_unlock' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko
WARNING: tools/testing/nvdimm/libnvdimm: 'is_nvdimm_bus_locked' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko
WARNING: tools/testing/nvdimm/libnvdimm: 'devm_nvdimm_memremap' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko
WARNING: tools/testing/nvdimm/libnvdimm: 'nd_fletcher64' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko
WARNING: tools/testing/nvdimm/libnvdimm: 'to_nd_desc' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko
WARNING: tools/testing/nvdimm/libnvdimm: 'to_nvdimm_bus_dev' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko
...

There are a lot of these warnings.  :)  If I revert this patch, no
complaints.

Cheers,
Jeff


>

> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>

> ---

>

>  scripts/mod/modpost.c | 1 -

>  1 file changed, 1 deletion(-)

>

> diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c

> index 5234555cf550..6ca38d10efc5 100644

> --- a/scripts/mod/modpost.c

> +++ b/scripts/mod/modpost.c

> @@ -2457,7 +2457,6 @@ static void read_dump(const char *fname, unsigned int kernel)

>  		s = sym_add_exported(symname, namespace, mod,

>  				     export_no(export));

>  		s->kernel    = kernel;

> -		s->preloaded = 1;

>  		s->is_static = 0;

>  		sym_update_crc(symname, mod, crc, export_no(export));

>  	}
Masahiro Yamada Nov. 1, 2019, 1:13 a.m. | #2
On Fri, Nov 1, 2019 at 1:51 AM Jeff Moyer <jmoyer@redhat.com> wrote:
>

> Masahiro Yamada <yamada.masahiro@socionext.com> writes:

>

> > Now that there is no overwrap between symbols from ELF files and

> > ones from Module.symvers.

> >

> > So, the 'exported twice' warning should be reported irrespective

> > of where the symbol in question came from. Only the exceptional case

> > is when __crc_<sym> symbol appears before __ksymtab_<sym>. This

> > typically occurs for EXPORT_SYMBOL in .S files.

>

> Hi, Masahiro,

>

> After apply this patch, I get the following modpost warnings when doing:

>

> $ make M=tools/tesing/nvdimm

> ...

>   Building modules, stage 2.

>   MODPOST 12 modules

> WARNING: tools/testing/nvdimm/libnvdimm: 'nvdimm_bus_lock' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> WARNING: tools/testing/nvdimm/libnvdimm: 'nvdimm_bus_unlock' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> WARNING: tools/testing/nvdimm/libnvdimm: 'is_nvdimm_bus_locked' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> WARNING: tools/testing/nvdimm/libnvdimm: 'devm_nvdimm_memremap' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> WARNING: tools/testing/nvdimm/libnvdimm: 'nd_fletcher64' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> WARNING: tools/testing/nvdimm/libnvdimm: 'to_nd_desc' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> WARNING: tools/testing/nvdimm/libnvdimm: 'to_nvdimm_bus_dev' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> ...

>

> There are a lot of these warnings.  :)


These warnings are correct since
drivers/nvdimm/Makefile and
tools/testing/nvdimm/Kbuild
compile the same files.




>  If I revert this patch, no

> complaints.

>

> Cheers,

> Jeff

>

>

> >

> > Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>

> > ---

> >

> >  scripts/mod/modpost.c | 1 -

> >  1 file changed, 1 deletion(-)

> >

> > diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c

> > index 5234555cf550..6ca38d10efc5 100644

> > --- a/scripts/mod/modpost.c

> > +++ b/scripts/mod/modpost.c

> > @@ -2457,7 +2457,6 @@ static void read_dump(const char *fname, unsigned int kernel)

> >               s = sym_add_exported(symname, namespace, mod,

> >                                    export_no(export));

> >               s->kernel    = kernel;

> > -             s->preloaded = 1;

> >               s->is_static = 0;

> >               sym_update_crc(symname, mod, crc, export_no(export));

> >       }

>



-- 
Best Regards
Masahiro Yamada
Jeff Moyer Nov. 1, 2019, 6:52 p.m. | #3
Masahiro Yamada <yamada.masahiro@socionext.com> writes:

> On Fri, Nov 1, 2019 at 1:51 AM Jeff Moyer <jmoyer@redhat.com> wrote:

>>

>> Masahiro Yamada <yamada.masahiro@socionext.com> writes:

>>

>> > Now that there is no overwrap between symbols from ELF files and

>> > ones from Module.symvers.

>> >

>> > So, the 'exported twice' warning should be reported irrespective

>> > of where the symbol in question came from. Only the exceptional case

>> > is when __crc_<sym> symbol appears before __ksymtab_<sym>. This

>> > typically occurs for EXPORT_SYMBOL in .S files.

>>

>> Hi, Masahiro,

>>

>> After apply this patch, I get the following modpost warnings when doing:

>>

>> $ make M=tools/tesing/nvdimm

>> ...

>>   Building modules, stage 2.

>>   MODPOST 12 modules

>> WARNING: tools/testing/nvdimm/libnvdimm: 'nvdimm_bus_lock' exported

>> twice. Previous export was in drivers/nvdimm/libnvdimm.ko

>> WARNING: tools/testing/nvdimm/libnvdimm: 'nvdimm_bus_unlock'

>> exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

>> WARNING: tools/testing/nvdimm/libnvdimm: 'is_nvdimm_bus_locked'

>> exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

>> WARNING: tools/testing/nvdimm/libnvdimm: 'devm_nvdimm_memremap'

>> exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

>> WARNING: tools/testing/nvdimm/libnvdimm: 'nd_fletcher64' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

>> WARNING: tools/testing/nvdimm/libnvdimm: 'to_nd_desc' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

>> WARNING: tools/testing/nvdimm/libnvdimm: 'to_nvdimm_bus_dev'

>> exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

>> ...

>>

>> There are a lot of these warnings.  :)

>

> These warnings are correct since

> drivers/nvdimm/Makefile and

> tools/testing/nvdimm/Kbuild

> compile the same files.


Yeah, but that's by design.  Is there a way to silence these warnings?

-Jeff
Masahiro Yamada Nov. 4, 2019, 3:11 a.m. | #4
On Sat, Nov 2, 2019 at 3:52 AM Jeff Moyer <jmoyer@redhat.com> wrote:
>

> Masahiro Yamada <yamada.masahiro@socionext.com> writes:

>

> > On Fri, Nov 1, 2019 at 1:51 AM Jeff Moyer <jmoyer@redhat.com> wrote:

> >>

> >> Masahiro Yamada <yamada.masahiro@socionext.com> writes:

> >>

> >> > Now that there is no overwrap between symbols from ELF files and

> >> > ones from Module.symvers.

> >> >

> >> > So, the 'exported twice' warning should be reported irrespective

> >> > of where the symbol in question came from. Only the exceptional case

> >> > is when __crc_<sym> symbol appears before __ksymtab_<sym>. This

> >> > typically occurs for EXPORT_SYMBOL in .S files.

> >>

> >> Hi, Masahiro,

> >>

> >> After apply this patch, I get the following modpost warnings when doing:

> >>

> >> $ make M=tools/tesing/nvdimm

> >> ...

> >>   Building modules, stage 2.

> >>   MODPOST 12 modules

> >> WARNING: tools/testing/nvdimm/libnvdimm: 'nvdimm_bus_lock' exported

> >> twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> >> WARNING: tools/testing/nvdimm/libnvdimm: 'nvdimm_bus_unlock'

> >> exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> >> WARNING: tools/testing/nvdimm/libnvdimm: 'is_nvdimm_bus_locked'

> >> exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> >> WARNING: tools/testing/nvdimm/libnvdimm: 'devm_nvdimm_memremap'

> >> exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> >> WARNING: tools/testing/nvdimm/libnvdimm: 'nd_fletcher64' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> >> WARNING: tools/testing/nvdimm/libnvdimm: 'to_nd_desc' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> >> WARNING: tools/testing/nvdimm/libnvdimm: 'to_nvdimm_bus_dev'

> >> exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> >> ...

> >>

> >> There are a lot of these warnings.  :)

> >

> > These warnings are correct since

> > drivers/nvdimm/Makefile and

> > tools/testing/nvdimm/Kbuild

> > compile the same files.

>

> Yeah, but that's by design.  Is there a way to silence these warnings?

>

> -Jeff

>


"rm -f Module.symvers; make M=tools/testing/nvdimm" ?

I'd like the _design_ fixed though.


-- 
Best Regards
Masahiro Yamada
Dan Williams Nov. 4, 2019, 6:43 a.m. | #5
On Sun, Nov 3, 2019 at 7:12 PM Masahiro Yamada
<yamada.masahiro@socionext.com> wrote:
>

> On Sat, Nov 2, 2019 at 3:52 AM Jeff Moyer <jmoyer@redhat.com> wrote:

> >

> > Masahiro Yamada <yamada.masahiro@socionext.com> writes:

> >

> > > On Fri, Nov 1, 2019 at 1:51 AM Jeff Moyer <jmoyer@redhat.com> wrote:

> > >>

> > >> Masahiro Yamada <yamada.masahiro@socionext.com> writes:

> > >>

> > >> > Now that there is no overwrap between symbols from ELF files and

> > >> > ones from Module.symvers.

> > >> >

> > >> > So, the 'exported twice' warning should be reported irrespective

> > >> > of where the symbol in question came from. Only the exceptional case

> > >> > is when __crc_<sym> symbol appears before __ksymtab_<sym>. This

> > >> > typically occurs for EXPORT_SYMBOL in .S files.

> > >>

> > >> Hi, Masahiro,

> > >>

> > >> After apply this patch, I get the following modpost warnings when doing:

> > >>

> > >> $ make M=tools/tesing/nvdimm

> > >> ...

> > >>   Building modules, stage 2.

> > >>   MODPOST 12 modules

> > >> WARNING: tools/testing/nvdimm/libnvdimm: 'nvdimm_bus_lock' exported

> > >> twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> > >> WARNING: tools/testing/nvdimm/libnvdimm: 'nvdimm_bus_unlock'

> > >> exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> > >> WARNING: tools/testing/nvdimm/libnvdimm: 'is_nvdimm_bus_locked'

> > >> exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> > >> WARNING: tools/testing/nvdimm/libnvdimm: 'devm_nvdimm_memremap'

> > >> exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> > >> WARNING: tools/testing/nvdimm/libnvdimm: 'nd_fletcher64' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> > >> WARNING: tools/testing/nvdimm/libnvdimm: 'to_nd_desc' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> > >> WARNING: tools/testing/nvdimm/libnvdimm: 'to_nvdimm_bus_dev'

> > >> exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> > >> ...

> > >>

> > >> There are a lot of these warnings.  :)

> > >

> > > These warnings are correct since

> > > drivers/nvdimm/Makefile and

> > > tools/testing/nvdimm/Kbuild

> > > compile the same files.

> >

> > Yeah, but that's by design.  Is there a way to silence these warnings?

> >

> > -Jeff

> >

>

> "rm -f Module.symvers; make M=tools/testing/nvdimm" ?

>

> I'd like the _design_ fixed though.


This design is deliberate. The goal is to re-build the typical nvdimm
modules, but link them against mocked version of core kernel symbols.
This enables the nvdimm unit tests which have been there for years and
pre-date Kunit. That said, deleting Module.symvers seems a simple
enough workaround.
Dan Williams Nov. 4, 2019, 6:47 p.m. | #6
On Sun, Nov 3, 2019 at 10:43 PM Dan Williams <dan.j.williams@intel.com> wrote:
>

> On Sun, Nov 3, 2019 at 7:12 PM Masahiro Yamada

> <yamada.masahiro@socionext.com> wrote:

> >

> > On Sat, Nov 2, 2019 at 3:52 AM Jeff Moyer <jmoyer@redhat.com> wrote:

> > >

> > > Masahiro Yamada <yamada.masahiro@socionext.com> writes:

> > >

> > > > On Fri, Nov 1, 2019 at 1:51 AM Jeff Moyer <jmoyer@redhat.com> wrote:

> > > >>

> > > >> Masahiro Yamada <yamada.masahiro@socionext.com> writes:

> > > >>

> > > >> > Now that there is no overwrap between symbols from ELF files and

> > > >> > ones from Module.symvers.

> > > >> >

> > > >> > So, the 'exported twice' warning should be reported irrespective

> > > >> > of where the symbol in question came from. Only the exceptional case

> > > >> > is when __crc_<sym> symbol appears before __ksymtab_<sym>. This

> > > >> > typically occurs for EXPORT_SYMBOL in .S files.

> > > >>

> > > >> Hi, Masahiro,

> > > >>

> > > >> After apply this patch, I get the following modpost warnings when doing:

> > > >>

> > > >> $ make M=tools/tesing/nvdimm

> > > >> ...

> > > >>   Building modules, stage 2.

> > > >>   MODPOST 12 modules

> > > >> WARNING: tools/testing/nvdimm/libnvdimm: 'nvdimm_bus_lock' exported

> > > >> twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> > > >> WARNING: tools/testing/nvdimm/libnvdimm: 'nvdimm_bus_unlock'

> > > >> exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> > > >> WARNING: tools/testing/nvdimm/libnvdimm: 'is_nvdimm_bus_locked'

> > > >> exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> > > >> WARNING: tools/testing/nvdimm/libnvdimm: 'devm_nvdimm_memremap'

> > > >> exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> > > >> WARNING: tools/testing/nvdimm/libnvdimm: 'nd_fletcher64' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> > > >> WARNING: tools/testing/nvdimm/libnvdimm: 'to_nd_desc' exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> > > >> WARNING: tools/testing/nvdimm/libnvdimm: 'to_nvdimm_bus_dev'

> > > >> exported twice. Previous export was in drivers/nvdimm/libnvdimm.ko

> > > >> ...

> > > >>

> > > >> There are a lot of these warnings.  :)

> > > >

> > > > These warnings are correct since

> > > > drivers/nvdimm/Makefile and

> > > > tools/testing/nvdimm/Kbuild

> > > > compile the same files.

> > >

> > > Yeah, but that's by design.  Is there a way to silence these warnings?

> > >

> > > -Jeff

> > >

> >

> > "rm -f Module.symvers; make M=tools/testing/nvdimm" ?

> >

> > I'd like the _design_ fixed though.

>

> This design is deliberate. The goal is to re-build the typical nvdimm

> modules, but link them against mocked version of core kernel symbols.

> This enables the nvdimm unit tests which have been there for years and

> pre-date Kunit. That said, deleting Module.symvers seems a simple

> enough workaround.


This workaround triggers:

  WARNING: Symbol version dump ./Module.symvers
           is missing; modules will have no dependencies and modversions.

Which is a regression from the previous working state.

Patch

diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 5234555cf550..6ca38d10efc5 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -2457,7 +2457,6 @@  static void read_dump(const char *fname, unsigned int kernel)
 		s = sym_add_exported(symname, namespace, mod,
 				     export_no(export));
 		s->kernel    = kernel;
-		s->preloaded = 1;
 		s->is_static = 0;
 		sym_update_crc(symname, mod, crc, export_no(export));
 	}