25 May, 2020

1 commit


17 Jul, 2019

1 commit

  • Removing the 'kernel/' prefix will make our life easier because we can
    simply do 'cat modules.order' to get all built modules with full paths.

    Currently, we parse the first line of '*.mod' files in $(MODVERDIR).
    Since we have duplicated functionality here, I plan to remove MODVERDIR
    entirely.

    In fact, modules.order is generated also for external modules in a
    broken format. It adds the 'kernel/' prefix to the absolute path of
    the module, like this:

    kernel//path/to/your/external/module/foo.ko

    This is fine for now since modules.order is not used for external
    modules. However, I want to sanitize the format everywhere towards
    the goal of removing MODVERDIR.

    We cannot change the format of installed module.{order,builtin}.
    So, 'make modules_install' will add the 'kernel/' prefix while copying
    them to $(MODLIB)/.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

21 May, 2019

1 commit

  • I just thought it was a good idea to scan builtin.modules in the name
    uniqueness checking, but a couple of false positives were found.

    Stephen reported a false positive for ppc64_defconfig:

    warning: same basename if the following are built as modules:
    arch/powerpc/platforms/powermac/nvram.ko
    drivers/char/nvram.ko

    The former is never built as a module as you see in
    arch/powerpc/platforms/powermac/Makefile:

    # CONFIG_NVRAM is an arch. independent tristate symbol, for pmac32 we really
    # need this to be a bool. Cheat here and pretend CONFIG_NVRAM=m is really
    # CONFIG_NVRAM=y
    obj-$(CONFIG_NVRAM:m=y) += nvram.o

    Another example of false positive is arm64 defconfig:

    warning: same basename if the following are built as modules:
    arch/arm64/lib/crc32.ko
    lib/crc32.ko

    It is true CONFIG_CRC32 is a tristate option but it is always 'y' since
    it is select'ed by ARM64. Hence, neither of them is built as a module
    for the arm64 build.

    From the above, modules.builtin essentially contains false positives.
    I do not think it is a big deal as far as kmod is concerned, but false
    positive warnings in the kernel build make people upset. It is better
    to not check it.

    Even without builtin.modules checked, we have enough (and more solid)
    test coverage with allmodconfig.

    While I touched this part, I replaced the sed code with neater one
    provided by Stephen.

    Link: https://lkml.org/lkml/2019/5/19/120
    Link: https://lkml.org/lkml/2019/5/19/123
    Fixes: 3a48a91901c5 ("kbuild: check uniqueness of module names")
    Reported-by: Stephen Rothwell
    Signed-off-by: Masahiro Yamada
    Acked-by: Arnd Bergmann
    Reviewed-by: Greg Kroah-Hartman

    Masahiro Yamada
     

18 May, 2019

1 commit

  • In the recent build test of linux-next, Stephen saw a build error
    caused by a broken .tmp_versions/*.mod file:

    https://lkml.org/lkml/2019/5/13/991

    drivers/net/phy/asix.ko and drivers/net/usb/asix.ko have the same
    basename, and there is a race in generating .tmp_versions/asix.mod

    Kbuild has not checked this before, and it suddenly shows up with
    obscure error messages when this kind of race occurs.

    Non-unique module names cause various sort of problems, but it is
    not trivial to catch them by eyes.

    Hence, this script.

    It checks not only real modules, but also built-in modules (i.e.
    controlled by tristate CONFIG option, but currently compiled with =y).
    Non-unique names for built-in modules also cause problems because
    /sys/modules/ would fall over.

    For the latest kernel, I tested "make allmodconfig all" (or more
    quickly "make allyesconfig modules"), and it detected the following:

    warning: same basename if the following are built as modules:
    drivers/regulator/88pm800.ko
    drivers/mfd/88pm800.ko
    warning: same basename if the following are built as modules:
    drivers/gpu/drm/bridge/adv7511/adv7511.ko
    drivers/media/i2c/adv7511.ko
    warning: same basename if the following are built as modules:
    drivers/net/phy/asix.ko
    drivers/net/usb/asix.ko
    warning: same basename if the following are built as modules:
    fs/coda/coda.ko
    drivers/media/platform/coda/coda.ko
    warning: same basename if the following are built as modules:
    drivers/net/phy/realtek.ko
    drivers/net/dsa/realtek.ko

    Reported-by: Stephen Rothwell
    Signed-off-by: Masahiro Yamada
    Reviewed-by: Kees Cook
    Reviewed-by: Stephen Rothwell
    Reviewed-by: Lucas De Marchi

    Masahiro Yamada