Message ID | 20200508153421.24525-9-jgross@suse.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Add hypervisor sysfs-like support | expand |
On 08.05.2020 17:34, Juergen Gross wrote: > Add the /buildinfo/config entry to the hypervisor filesystem. This > entry contains the .config file used to build the hypervisor. > > Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Jan Beulich <jbeulich@suse.com> with a remark and one further adjustment: > @@ -73,3 +74,14 @@ obj-$(CONFIG_UBSAN) += ubsan/ > > obj-$(CONFIG_NEEDS_LIBELF) += libelf/ > obj-$(CONFIG_HAS_DEVICE_TREE) += libfdt/ > + > +config.gz: ../.config > + gzip -c $< >$@ > + > +config_data.o: config.gz > + > +config_data.S: $(XEN_ROOT)/xen/tools/binfile > + $(XEN_ROOT)/xen/tools/binfile $@ config.gz xen_config_data This will want changing to the changed build infrastructure, such that in default (non-verbose, non-silent) mode a line gets output to stdout. But I'd be fine with this getting done subsequently. > --- a/xen/include/xen/kernel.h > +++ b/xen/include/xen/kernel.h > @@ -100,5 +100,8 @@ extern enum system_state { > > bool_t is_active_kernel_text(unsigned long addr); > > +extern const char xen_config_data; Surely you meant to add [] here, and then possibly omit the & on the line using the symbol? Jan
On 14.05.20 11:32, Jan Beulich wrote: > On 08.05.2020 17:34, Juergen Gross wrote: >> Add the /buildinfo/config entry to the hypervisor filesystem. This >> entry contains the .config file used to build the hypervisor. >> >> Signed-off-by: Juergen Gross <jgross@suse.com> > > Reviewed-by: Jan Beulich <jbeulich@suse.com> > with a remark and one further adjustment: > >> @@ -73,3 +74,14 @@ obj-$(CONFIG_UBSAN) += ubsan/ >> >> obj-$(CONFIG_NEEDS_LIBELF) += libelf/ >> obj-$(CONFIG_HAS_DEVICE_TREE) += libfdt/ >> + >> +config.gz: ../.config >> + gzip -c $< >$@ >> + >> +config_data.o: config.gz >> + >> +config_data.S: $(XEN_ROOT)/xen/tools/binfile >> + $(XEN_ROOT)/xen/tools/binfile $@ config.gz xen_config_data > > This will want changing to the changed build infrastructure, such > that in default (non-verbose, non-silent) mode a line gets output > to stdout. But I'd be fine with this getting done subsequently. > >> --- a/xen/include/xen/kernel.h >> +++ b/xen/include/xen/kernel.h >> @@ -100,5 +100,8 @@ extern enum system_state { >> >> bool_t is_active_kernel_text(unsigned long addr); >> >> +extern const char xen_config_data; > > Surely you meant to add [] here, and then possibly omit the & on > the line using the symbol? Of course. ;-p Juergen
diff --git a/.gitignore b/.gitignore index ce3ef23d45..a58de1fd4a 100644 --- a/.gitignore +++ b/.gitignore @@ -298,6 +298,8 @@ xen/arch/*/efi/boot.c xen/arch/*/efi/compat.c xen/arch/*/efi/efi.h xen/arch/*/efi/runtime.c +xen/common/config_data.S +xen/common/config.gz xen/include/headers*.chk xen/include/asm xen/include/asm-*/asm-offsets.h diff --git a/docs/misc/hypfs-paths.pandoc b/docs/misc/hypfs-paths.pandoc index d730caf394..9a76bc383b 100644 --- a/docs/misc/hypfs-paths.pandoc +++ b/docs/misc/hypfs-paths.pandoc @@ -135,6 +135,10 @@ Information about the compile domain. The compiler used to build Xen. +#### /buildinfo/config = STRING [CONFIG_HYPFS_CONFIG] + +The contents of the `xen/.config` file at the time of the hypervisor build. + #### /buildinfo/version/ A directory containing version information of the hypervisor. diff --git a/xen/common/Kconfig b/xen/common/Kconfig index 2515e053c8..b36cd74a24 100644 --- a/xen/common/Kconfig +++ b/xen/common/Kconfig @@ -127,6 +127,17 @@ config HYPFS If unsure, say Y. +config HYPFS_CONFIG + bool "Provide hypervisor .config via hypfs entry" + default y + depends on HYPFS + ---help--- + When enabled the contents of the .config file used to build the + hypervisor are provided via the hypfs entry /buildinfo/config. + + Disable this option in case you want to spare some memory or you + want to hide the .config contents from dom0. + config KEXEC bool "kexec support" default y diff --git a/xen/common/Makefile b/xen/common/Makefile index 98b7904dcd..d6d7bad2a9 100644 --- a/xen/common/Makefile +++ b/xen/common/Makefile @@ -1,6 +1,7 @@ obj-$(CONFIG_ARGO) += argo.o obj-y += bitmap.o obj-y += bsearch.o +obj-$(CONFIG_HYPFS_CONFIG) += config_data.o obj-$(CONFIG_CORE_PARKING) += core_parking.o obj-y += cpu.o obj-$(CONFIG_DEBUG_TRACE) += debugtrace.o @@ -73,3 +74,14 @@ obj-$(CONFIG_UBSAN) += ubsan/ obj-$(CONFIG_NEEDS_LIBELF) += libelf/ obj-$(CONFIG_HAS_DEVICE_TREE) += libfdt/ + +config.gz: ../.config + gzip -c $< >$@ + +config_data.o: config.gz + +config_data.S: $(XEN_ROOT)/xen/tools/binfile + $(XEN_ROOT)/xen/tools/binfile $@ config.gz xen_config_data + +clean:: + rm -f config_data.S config.gz 2>/dev/null diff --git a/xen/common/kernel.c b/xen/common/kernel.c index db7bd23fcb..f8f41820d5 100644 --- a/xen/common/kernel.c +++ b/xen/common/kernel.c @@ -390,6 +390,10 @@ static HYPFS_STRING_INIT(compile_date, "compile_date"); static HYPFS_STRING_INIT(compile_domain, "compile_domain"); static HYPFS_STRING_INIT(extra, "extra"); +#ifdef CONFIG_HYPFS_CONFIG +static HYPFS_STRING_INIT(config, "config"); +#endif + static int __init buildinfo_init(void) { hypfs_add_dir(&hypfs_root, &buildinfo, true); @@ -415,6 +419,13 @@ static int __init buildinfo_init(void) hypfs_add_leaf(&version, &major, true); hypfs_add_leaf(&version, &minor, true); +#ifdef CONFIG_HYPFS_CONFIG + config.e.encoding = XEN_HYPFS_ENC_GZIP; + config.e.size = xen_config_data_size; + config.content = &xen_config_data; + hypfs_add_leaf(&buildinfo, &config, true); +#endif + return 0; } __initcall(buildinfo_init); diff --git a/xen/include/xen/kernel.h b/xen/include/xen/kernel.h index 548b64da9f..02e3281f52 100644 --- a/xen/include/xen/kernel.h +++ b/xen/include/xen/kernel.h @@ -100,5 +100,8 @@ extern enum system_state { bool_t is_active_kernel_text(unsigned long addr); +extern const char xen_config_data; +extern const unsigned int xen_config_data_size; + #endif /* _LINUX_KERNEL_H */