Message ID | 1544009286-15705-2-git-send-email-yamada.masahiro@socionext.com |
---|---|
State | Superseded |
Headers | show |
Series | [1/3] kbuild: refactor Makefile.asm-generic | expand |
On Wed, Dec 05, 2018 at 08:28:05PM +0900, Masahiro Yamada wrote: > Some time ago, Sam pointed out a certain degree of overwrap between > generic-y and mandatory-y. (https://lkml.org/lkml/2017/7/10/121) > > I a bit tweaked the meaning of mandatory-y; now it defines the minimum > set of ASM headers that all architectures must have. > > If arch does not have specific implementation of a mandatory header, > Kbuild will let it fallback to the asm-generic one by automatically > generating a wrapper. This will allow to drop lots of redundant > generic-y defines. > > Previously, "mandatory" was used in the context of UAPI, but I guess > this can be extended to kernel space ASM headers. How useful is it to keep the generic-y behavior around at all vs making everything useful mandatory?
On Wed, Dec 05, 2018 at 08:28:05PM +0900, Masahiro Yamada wrote: > Some time ago, Sam pointed out a certain degree of overwrap between > generic-y and mandatory-y. (https://lkml.org/lkml/2017/7/10/121) > > I a bit tweaked the meaning of mandatory-y; now it defines the minimum > set of ASM headers that all architectures must have. > > If arch does not have specific implementation of a mandatory header, > Kbuild will let it fallback to the asm-generic one by automatically > generating a wrapper. This will allow to drop lots of redundant > generic-y defines. > > Previously, "mandatory" was used in the context of UAPI, but I guess > this can be extended to kernel space ASM headers. > > Suggested-by: Sam Ravnborg <sam@ravnborg.org> > Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Nice work! For the full series: Acked-by: Sam Ravnborg <sam@ravnborg.org> Have you considered to warn if generic-y contains a header listed in mandatory-y - to prevent that they sneak back in. And to catch when we lift a header from available to mandatory. Sam
Hi Christoph, On Fri, Dec 7, 2018 at 12:04 AM Christoph Hellwig <hch@infradead.org> wrote: > > On Wed, Dec 05, 2018 at 08:28:05PM +0900, Masahiro Yamada wrote: > > Some time ago, Sam pointed out a certain degree of overwrap between > > generic-y and mandatory-y. (https://lkml.org/lkml/2017/7/10/121) > > > > I a bit tweaked the meaning of mandatory-y; now it defines the minimum > > set of ASM headers that all architectures must have. > > > > If arch does not have specific implementation of a mandatory header, > > Kbuild will let it fallback to the asm-generic one by automatically > > generating a wrapper. This will allow to drop lots of redundant > > generic-y defines. > > > > Previously, "mandatory" was used in the context of UAPI, but I guess > > this can be extended to kernel space ASM headers. > > How useful is it to keep the generic-y behavior around at all vs making > everything useful mandatory? What I can tell is not all architectures support kvm_para.h, ucontext.h I guess they will stay as arch-specific generic-y, but I am not an expert in this area. kvm_para.h is missing csky, nds32, riscv. ucontext.h is missing in alpha, arm, m68k, parisc, sparc, xtensa bpf_perf_event.h could be promoted to mandatory-y ? All architectures have it. -- Best Regards Masahiro Yamada
Hi Sam, On Fri, Dec 7, 2018 at 3:06 AM Sam Ravnborg <sam@ravnborg.org> wrote: > > On Wed, Dec 05, 2018 at 08:28:05PM +0900, Masahiro Yamada wrote: > > Some time ago, Sam pointed out a certain degree of overwrap between > > generic-y and mandatory-y. (https://lkml.org/lkml/2017/7/10/121) > > > > I a bit tweaked the meaning of mandatory-y; now it defines the minimum > > set of ASM headers that all architectures must have. > > > > If arch does not have specific implementation of a mandatory header, > > Kbuild will let it fallback to the asm-generic one by automatically > > generating a wrapper. This will allow to drop lots of redundant > > generic-y defines. > > > > Previously, "mandatory" was used in the context of UAPI, but I guess > > this can be extended to kernel space ASM headers. > > > > Suggested-by: Sam Ravnborg <sam@ravnborg.org> > > Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> > > Nice work! > > For the full series: > Acked-by: Sam Ravnborg <sam@ravnborg.org> > > Have you considered to warn if generic-y contains a header listed > in mandatory-y - to prevent that they sneak back in. > And to catch when we lift a header from available to mandatory. Yes, I also thought of this, and probably we should do it. -- Best Regards Masahiro Yamada
On Tue, 11 Dec 2018 04:59:26 PST (-0800), yamada.masahiro@socionext.com wrote: > Hi Christoph, > > > On Fri, Dec 7, 2018 at 12:04 AM Christoph Hellwig <hch@infradead.org> wrote: >> >> On Wed, Dec 05, 2018 at 08:28:05PM +0900, Masahiro Yamada wrote: >> > Some time ago, Sam pointed out a certain degree of overwrap between >> > generic-y and mandatory-y. (https://lkml.org/lkml/2017/7/10/121) >> > >> > I a bit tweaked the meaning of mandatory-y; now it defines the minimum >> > set of ASM headers that all architectures must have. >> > >> > If arch does not have specific implementation of a mandatory header, >> > Kbuild will let it fallback to the asm-generic one by automatically >> > generating a wrapper. This will allow to drop lots of redundant >> > generic-y defines. >> > >> > Previously, "mandatory" was used in the context of UAPI, but I guess >> > this can be extended to kernel space ASM headers. >> >> How useful is it to keep the generic-y behavior around at all vs making >> everything useful mandatory? > > > What I can tell is not all architectures > support kvm_para.h, ucontext.h > > I guess they will stay as arch-specific generic-y, > but I am not an expert in this area. > > > kvm_para.h is missing csky, nds32, riscv. It looks like RISC-V missed it and everyone else copied us. I don't see any reason why the generic version wouldn't work on RISC-V, as it just has failures for all the calls. > ucontext.h is missing in alpha, arm, m68k, parisc, sparc, xtensa > > > > bpf_perf_event.h could be promoted to mandatory-y ? > All architectures have it.
diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt index 8da26c6..bf28c47 100644 --- a/Documentation/kbuild/makefiles.txt +++ b/Documentation/kbuild/makefiles.txt @@ -1296,9 +1296,12 @@ See subsequent chapter for the syntax of the Kbuild file. --- 7.4 mandatory-y - mandatory-y is essentially used by include/uapi/asm-generic/Kbuild.asm - to define the minimum set of headers that must be exported in - include/asm. + mandatory-y is essentially used by include/(uapi/)asm-generic/Kbuild.asm + to define the minimum set of ASM headers that all architectures must have. + + This works like optional generic-y. If a mandatory header is missing + in arch/$(ARCH)/include/(uapi/)/asm, Kbuild will automatically generate + a wrapper of the asm-generic one. The convention is to list one subdir per line and preferably in alphabetic order. diff --git a/scripts/Makefile.asm-generic b/scripts/Makefile.asm-generic index 760323e..c7cd23d 100644 --- a/scripts/Makefile.asm-generic +++ b/scripts/Makefile.asm-generic @@ -14,6 +14,9 @@ src := $(subst /generated,,$(obj)) include scripts/Kbuild.include +# If arch does not implement mandatory headers, fallback to asm-generic ones. +generic-y += $(foreach f, $(mandatory-y), $(if $(wildcard $(srctree)/$(src)/$(f)),,$(f))) + generic-y := $(addprefix $(obj)/, $(generic-y)) generated-y := $(addprefix $(obj)/, $(generated-y)) diff --git a/scripts/Makefile.headersinst b/scripts/Makefile.headersinst index d5e1314..0d4a96d 100644 --- a/scripts/Makefile.headersinst +++ b/scripts/Makefile.headersinst @@ -57,13 +57,6 @@ check-file := $(installdir)/.check all-files := $(header-files) $(genhdr-files) output-files := $(addprefix $(installdir)/, $(all-files)) -ifneq ($(mandatory-y),) -missing := $(filter-out $(all-files),$(mandatory-y)) -ifneq ($(missing),) -$(error Some mandatory headers ($(missing)) are missing in $(obj)) -endif -endif - # Work out what needs to be removed oldheaders := $(patsubst $(installdir)/%,%,$(wildcard $(installdir)/*.h)) unwanted := $(filter-out $(all-files),$(oldheaders))
Some time ago, Sam pointed out a certain degree of overwrap between generic-y and mandatory-y. (https://lkml.org/lkml/2017/7/10/121) I a bit tweaked the meaning of mandatory-y; now it defines the minimum set of ASM headers that all architectures must have. If arch does not have specific implementation of a mandatory header, Kbuild will let it fallback to the asm-generic one by automatically generating a wrapper. This will allow to drop lots of redundant generic-y defines. Previously, "mandatory" was used in the context of UAPI, but I guess this can be extended to kernel space ASM headers. Suggested-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> --- Documentation/kbuild/makefiles.txt | 9 ++++++--- scripts/Makefile.asm-generic | 3 +++ scripts/Makefile.headersinst | 7 ------- 3 files changed, 9 insertions(+), 10 deletions(-) -- 2.7.4