diff mbox series

[2/3] kbuild: generate asm-generic wrappers if mandatory headers are missing

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

Commit Message

Masahiro Yamada Dec. 5, 2018, 11:28 a.m. UTC
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

Comments

Christoph Hellwig Dec. 6, 2018, 3:03 p.m. UTC | #1
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?
Sam Ravnborg Dec. 6, 2018, 6:04 p.m. UTC | #2
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
Masahiro Yamada Dec. 11, 2018, 12:59 p.m. UTC | #3
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
Masahiro Yamada Dec. 11, 2018, 1:01 p.m. UTC | #4
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
Palmer Dabbelt Dec. 11, 2018, 4:29 p.m. UTC | #5
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 mbox series

Patch

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))