Re: [PATCH V1 2/3] kbuild: optimize modules_install target

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Apr 11, 2019 at 11:33 PM Steve Sistare
<steven.sistare@xxxxxxxxxx> wrote:
>
> Perform module install actions only if the object area module is newer than
> install area module, and only announce the updated modules.  This saves 10's
> of seconds for a single CPU make, saves a few seconds for a parallel make,
> and reduces output clutter for an incremental make.

This will miss to detect the change of
CONFIG_MODULE_SIG_ALL, CONFIG_MODULE_COMPRESS.



> Example:
>   % touch drivers/virtio/virtio_ring.c
>   % make modules modules_install
>   DESCEND  objtool
>   CALL    scripts/atomic/check-atomics.sh
>   CALL    scripts/checksyscalls.sh
>   CC [M]  drivers/virtio/virtio_ring.o
>   Building modules, stage 2.
>   MODPOST 2592 modules
>   LD [M]  drivers/virtio/virtio_ring.ko
>   INSTALL drivers/virtio/virtio_ring.ko
>   DEPMOD  5.1.0-rc3
>
> Signed-off-by: Steve Sistare <steven.sistare@xxxxxxxxxx>
> ---
>  Makefile                 |  1 -
>  scripts/Makefile.modinst | 30 +++++++++++++++++++++++-------
>  2 files changed, 23 insertions(+), 8 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 4988dcc..8f58e27 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1286,7 +1286,6 @@ modules_install: _modinst_ _modinst_post
>
>  PHONY += _modinst_
>  _modinst_:
> -       @rm -rf $(MODLIB)/kernel
>         @rm -f $(MODLIB)/source
>         @mkdir -p $(MODLIB)/kernel
>         @ln -s $(abspath $(srctree)) $(MODLIB)/source
> diff --git a/scripts/Makefile.modinst b/scripts/Makefile.modinst
> index 0dae402..062fdca6 100644
> --- a/scripts/Makefile.modinst
> +++ b/scripts/Makefile.modinst
> @@ -10,6 +10,12 @@ include scripts/Kbuild.include
>
>  #
>
> +ifeq ($(quiet),quiet_)
> +  mod_announce_cmd := echo
> +else
> +  mod_announce_cmd := true
> +endif

This opts out of the Kbuild policy.




>  __modules := $(sort $(shell grep -h '\.ko$$' /dev/null $(wildcard $(MODVERDIR)/*.mod)))
>  modules := $(patsubst %.o,%.ko,$(wildcard $(__modules:.ko=.o)))
>
> @@ -17,14 +23,24 @@ PHONY += $(modules)
>  __modinst: $(modules)
>         @:
>
> -# Don't stop modules_install if we can't sign external modules.
> -quiet_cmd_modules_install = INSTALL $@
> +# Perform install actions only if the tree module is newer than the installed
> +# module.  Create the latter with a final move command to avoid a broken
> +# installed module if one of the intermediate commands fails.  Suppress
> +# quiet_cmd so that only updated modules are announced.  Don't stop
> +# modules_install if we can't sign external modules.
> +
> +quiet_cmd_modules_install =
>        cmd_modules_install = \
> -    mkdir -p $(2) ; \
> -    cp $@ $(2) ; \
> -    $(mod_strip_cmd) $(2)/$(notdir $@) ; \
> -    $(mod_sign_cmd) $(2)/$(notdir $@) $(patsubst %,|| true,$(KBUILD_EXTMOD)) ; \
> -    $(mod_compress_cmd) $(2)/$(notdir $@)
> +    if [[ $@ -nt $(2)/$(notdir $@) ]]; then \
> +       $(mod_announce_cmd) '  INSTALL' $@ ; \
> +       mkdir -p $(2) ; \
> +       tmpfile=$(2)/.$(notdir $@).tmp ; \
> +       cp $@ $$tmpfile ; \
> +       $(mod_strip_cmd) $$tmpfile ; \
> +       $(mod_sign_cmd) $$tmpfile $(patsubst %,|| true,$(KBUILD_EXTMOD)) ; \
> +       $(mod_compress_cmd) $$tmpfile ; \
> +       mv $$tmpfile $(2)/$(notdir $@) ; \
> +    fi
>
>  # Modules built outside the kernel source tree go into extra by default
>  INSTALL_MOD_DIR ?= extra
> --
> 1.8.3.1
>


-- 
Best Regards
Masahiro Yamada



[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux