Re: [Xen-devel] [PATCH 1/4] xen: build infrastructure for generating hypercall depending symbols
On 12/15/2014 12:38 PM, David Vrabel wrote: On 11/12/14 18:04, Juergen Gross wrote: Today there are several places in the kernel which build tables containing one entry for each possible Xen hypercall. Create an infrastructure to be able to generate these tables at build time. Does arm and arm64 need something similar? If so are the tools here suitable for them? I don't think arm* needs this. But in case it does, the tools would support arm as well. Juergen --- a/arch/x86/syscalls/Makefile +++ b/arch/x86/syscalls/Makefile Why are these changes here and not in arch/x86/xen/Makefile? @@ -19,6 +19,9 @@ quiet_cmd_syshdr = SYSHDR $@ quiet_cmd_systbl = SYSTBL $@ cmd_systbl = $(CONFIG_SHELL) '$(systbl)' $ $@ +quiet_cmd_hypercalls = HYPERCALLS $@ + cmd_hypercalls = $(CONFIG_SHELL) '$' $@ $(filter-out $,$^) + syshdr_abi_unistd_32 := i386 $(uapi)/unistd_32.h: $(syscall32) $(syshdr) $(call if_changed,syshdr) @@ -47,10 +50,16 @@ $(out)/syscalls_32.h: $(syscall32) $(systbl) $(out)/syscalls_64.h: $(syscall64) $(systbl) $(call if_changed,systbl) +$(out)/xen-hypercalls.h: $(srctree)/scripts/xen-hypercalls.sh + $(call if_changed,hypercalls) + +$(out)/xen-hypercalls.h: $(srctree)/include/xen/interface/xen*.h The generated header should end up in asm/xen/ --- /dev/null +++ b/scripts/xen-hypercalls.sh @@ -0,0 +1,11 @@ +#!/bin/sh +out=$1 +shift +in=$@ + +for i in $in; do + eval $CPP $LINUXINCLUDE -dD -imacros $i -x c /dev/null +done | \ +awk '$1 == #define $2 ~ /__HYPERVISOR_[a-z][a-z_0-9]*/ { v[$3] = $2 } + END {for (i in v) if (!(v[i] in v)) + print HYPERCALL(substr(v[i], 14))}' | sort -u $out Include a comment in the generated output saying what generated it. e.g., /* auto-generated by scripts/xen-hypercall.sh */ David -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ ___ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
Re: [Xen-devel] [PATCH 1/4] xen: build infrastructure for generating hypercall depending symbols
On 11/12/14 18:04, Juergen Gross wrote: Today there are several places in the kernel which build tables containing one entry for each possible Xen hypercall. Create an infrastructure to be able to generate these tables at build time. Does arm and arm64 need something similar? If so are the tools here suitable for them? --- a/arch/x86/syscalls/Makefile +++ b/arch/x86/syscalls/Makefile Why are these changes here and not in arch/x86/xen/Makefile? @@ -19,6 +19,9 @@ quiet_cmd_syshdr = SYSHDR $@ quiet_cmd_systbl = SYSTBL $@ cmd_systbl = $(CONFIG_SHELL) '$(systbl)' $ $@ +quiet_cmd_hypercalls = HYPERCALLS $@ + cmd_hypercalls = $(CONFIG_SHELL) '$' $@ $(filter-out $,$^) + syshdr_abi_unistd_32 := i386 $(uapi)/unistd_32.h: $(syscall32) $(syshdr) $(call if_changed,syshdr) @@ -47,10 +50,16 @@ $(out)/syscalls_32.h: $(syscall32) $(systbl) $(out)/syscalls_64.h: $(syscall64) $(systbl) $(call if_changed,systbl) +$(out)/xen-hypercalls.h: $(srctree)/scripts/xen-hypercalls.sh + $(call if_changed,hypercalls) + +$(out)/xen-hypercalls.h: $(srctree)/include/xen/interface/xen*.h The generated header should end up in asm/xen/ --- /dev/null +++ b/scripts/xen-hypercalls.sh @@ -0,0 +1,11 @@ +#!/bin/sh +out=$1 +shift +in=$@ + +for i in $in; do + eval $CPP $LINUXINCLUDE -dD -imacros $i -x c /dev/null +done | \ +awk '$1 == #define $2 ~ /__HYPERVISOR_[a-z][a-z_0-9]*/ { v[$3] = $2 } + END {for (i in v) if (!(v[i] in v)) + print HYPERCALL(substr(v[i], 14))}' | sort -u $out Include a comment in the generated output saying what generated it. e.g., /* auto-generated by scripts/xen-hypercall.sh */ David ___ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
Re: [Xen-devel] [PATCH 1/4] xen: build infrastructure for generating hypercall depending symbols
On 15.12.14 at 12:38, david.vra...@citrix.com wrote: On 11/12/14 18:04, Juergen Gross wrote: --- a/arch/x86/syscalls/Makefile +++ b/arch/x86/syscalls/Makefile Why are these changes here and not in arch/x86/xen/Makefile? Because this needs to be done in a step that (afaict) has no hook in the Xen-specific Makefile. @@ -47,10 +50,16 @@ $(out)/syscalls_32.h: $(syscall32) $(systbl) $(out)/syscalls_64.h: $(syscall64) $(systbl) $(call if_changed,systbl) +$(out)/xen-hypercalls.h: $(srctree)/scripts/xen-hypercalls.sh +$(call if_changed,hypercalls) + +$(out)/xen-hypercalls.h: $(srctree)/include/xen/interface/xen*.h The generated header should end up in asm/xen/ Why is generated/asm/ not good enough? Jan ___ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
Re: [Xen-devel] [PATCH 1/4] xen: build infrastructure for generating hypercall depending symbols
On 12/12/2014 11:48 PM, Boris Ostrovsky wrote: On 12/11/2014 01:04 PM, Juergen Gross wrote: diff --git a/scripts/xen-hypercalls.sh b/scripts/xen-hypercalls.sh new file mode 100644 index 000..e6447b7 --- /dev/null +++ b/scripts/xen-hypercalls.sh @@ -0,0 +1,11 @@ +#!/bin/sh +out=$1 +shift +in=$@ + +for i in $in; do +eval $CPP $LINUXINCLUDE -dD -imacros $i -x c /dev/null +done | \ +awk '$1 == #define $2 ~ /__HYPERVISOR_[a-z][a-z_0-9]*/ { v[$3] = $2 } +END {for (i in v) if (!(v[i] in v)) +print HYPERCALL(substr(v[i], 14))}' | sort -u $out Why do you 'sort -u'? Do you expect multiple definitions of the same hypercall? Paranoia related to the use of wildcards for files scanned: $(srctree)/include/xen/interface/xen*.h Juergen ___ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
Re: [Xen-devel] [PATCH 1/4] xen: build infrastructure for generating hypercall depending symbols
On 12/11/2014 01:04 PM, Juergen Gross wrote: diff --git a/scripts/xen-hypercalls.sh b/scripts/xen-hypercalls.sh new file mode 100644 index 000..e6447b7 --- /dev/null +++ b/scripts/xen-hypercalls.sh @@ -0,0 +1,11 @@ +#!/bin/sh +out=$1 +shift +in=$@ + +for i in $in; do + eval $CPP $LINUXINCLUDE -dD -imacros $i -x c /dev/null +done | \ +awk '$1 == #define $2 ~ /__HYPERVISOR_[a-z][a-z_0-9]*/ { v[$3] = $2 } + END {for (i in v) if (!(v[i] in v)) + print HYPERCALL(substr(v[i], 14))}' | sort -u $out Why do you 'sort -u'? Do you expect multiple definitions of the same hypercall? -boris ___ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel