Message ID | 20200519072106.26894-8-jgross@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add hypervisor sysfs-like support | expand |
On 19.05.2020 09:21, Juergen Gross wrote: > @@ -373,6 +374,52 @@ void __init do_initcalls(void) > (*call)(); > } > > +#ifdef CONFIG_HYPFS > +static unsigned int __read_mostly major_version; > +static unsigned int __read_mostly minor_version; > + > +static HYPFS_DIR_INIT(buildinfo, "buildinfo"); > +static HYPFS_DIR_INIT(compileinfo, "compileinfo"); > +static HYPFS_DIR_INIT(version, "version"); > +static HYPFS_UINT_INIT(major, "major", major_version); > +static HYPFS_UINT_INIT(minor, "minor", minor_version); These two lines fail to build with gcc 4.1 ("unknown field 'content' specified in initializer"), which I've deliberately tried as a last minute post-commit, pre-push check. I therefore reverted this change before pushing. Paul, Jürgen - please advise how to proceed, considering today's deadline. I'd accept pushing the rest of the series, if a fix for the issue will then still be permitted in later. Otherwise I'd have to wait for a fixed (incremental) version. Jan
On 29.05.20 10:34, Jan Beulich wrote: > On 19.05.2020 09:21, Juergen Gross wrote: >> @@ -373,6 +374,52 @@ void __init do_initcalls(void) >> (*call)(); >> } >> >> +#ifdef CONFIG_HYPFS >> +static unsigned int __read_mostly major_version; >> +static unsigned int __read_mostly minor_version; >> + >> +static HYPFS_DIR_INIT(buildinfo, "buildinfo"); >> +static HYPFS_DIR_INIT(compileinfo, "compileinfo"); >> +static HYPFS_DIR_INIT(version, "version"); >> +static HYPFS_UINT_INIT(major, "major", major_version); >> +static HYPFS_UINT_INIT(minor, "minor", minor_version); > > These two lines fail to build with gcc 4.1 ("unknown field 'content' > specified in initializer"), which I've deliberately tried as a last > minute post-commit, pre-push check. I therefore reverted this change > before pushing. > > Paul, Jürgen - please advise how to proceed, considering today's > deadline. I'd accept pushing the rest of the series, if a fix for > the issue will then still be permitted in later. Otherwise I'd have > to wait for a fixed (incremental) version The attached patch should fix this problem (assuming the anonymous union is to blame). Could you verify that, please? In case the patch is fine, I'll resend the rest of the series with that patch included, as there are adaptions in later patches needed. Juergen
On 29.05.2020 11:19, Jürgen Groß wrote: > On 29.05.20 10:34, Jan Beulich wrote: >> On 19.05.2020 09:21, Juergen Gross wrote: >>> @@ -373,6 +374,52 @@ void __init do_initcalls(void) >>> (*call)(); >>> } >>> >>> +#ifdef CONFIG_HYPFS >>> +static unsigned int __read_mostly major_version; >>> +static unsigned int __read_mostly minor_version; >>> + >>> +static HYPFS_DIR_INIT(buildinfo, "buildinfo"); >>> +static HYPFS_DIR_INIT(compileinfo, "compileinfo"); >>> +static HYPFS_DIR_INIT(version, "version"); >>> +static HYPFS_UINT_INIT(major, "major", major_version); >>> +static HYPFS_UINT_INIT(minor, "minor", minor_version); >> >> These two lines fail to build with gcc 4.1 ("unknown field 'content' >> specified in initializer"), which I've deliberately tried as a last >> minute post-commit, pre-push check. I therefore reverted this change >> before pushing. >> >> Paul, Jürgen - please advise how to proceed, considering today's >> deadline. I'd accept pushing the rest of the series, if a fix for >> the issue will then still be permitted in later. Otherwise I'd have >> to wait for a fixed (incremental) version > > The attached patch should fix this problem (assuming the anonymous > union is to blame). > > Could you verify that, please? Reviewed-by: Jan Beulich <jbeulich@suse.com> Tested-by: Jan Beulich <jbeulich@suse.com> > In case the patch is fine, I'll resend the rest of the series with > that patch included, as there are adaptions in later patches needed. No need to, if you trust me to have made the right changes - I've also verified the rest of the series builds fine there. Jan
On 29.05.20 11:53, Jan Beulich wrote: > On 29.05.2020 11:19, Jürgen Groß wrote: >> On 29.05.20 10:34, Jan Beulich wrote: >>> On 19.05.2020 09:21, Juergen Gross wrote: >>>> @@ -373,6 +374,52 @@ void __init do_initcalls(void) >>>> (*call)(); >>>> } >>>> >>>> +#ifdef CONFIG_HYPFS >>>> +static unsigned int __read_mostly major_version; >>>> +static unsigned int __read_mostly minor_version; >>>> + >>>> +static HYPFS_DIR_INIT(buildinfo, "buildinfo"); >>>> +static HYPFS_DIR_INIT(compileinfo, "compileinfo"); >>>> +static HYPFS_DIR_INIT(version, "version"); >>>> +static HYPFS_UINT_INIT(major, "major", major_version); >>>> +static HYPFS_UINT_INIT(minor, "minor", minor_version); >>> >>> These two lines fail to build with gcc 4.1 ("unknown field 'content' >>> specified in initializer"), which I've deliberately tried as a last >>> minute post-commit, pre-push check. I therefore reverted this change >>> before pushing. >>> >>> Paul, Jürgen - please advise how to proceed, considering today's >>> deadline. I'd accept pushing the rest of the series, if a fix for >>> the issue will then still be permitted in later. Otherwise I'd have >>> to wait for a fixed (incremental) version >> >> The attached patch should fix this problem (assuming the anonymous >> union is to blame). >> >> Could you verify that, please? > > Reviewed-by: Jan Beulich <jbeulich@suse.com> > Tested-by: Jan Beulich <jbeulich@suse.com> > >> In case the patch is fine, I'll resend the rest of the series with >> that patch included, as there are adaptions in later patches needed. > > No need to, if you trust me to have made the right changes - I've > also verified the rest of the series builds fine there. Thanks, of course I trust you. :-) Juergen
diff --git a/docs/misc/hypfs-paths.pandoc b/docs/misc/hypfs-paths.pandoc index 39539fa1b5..d730caf394 100644 --- a/docs/misc/hypfs-paths.pandoc +++ b/docs/misc/hypfs-paths.pandoc @@ -105,3 +105,48 @@ A populated Xen hypervisor file system might look like the following example: #### / The root of the hypervisor file system. + +#### /buildinfo/ + +A directory containing static information generated while building the +hypervisor. + +#### /buildinfo/changeset = STRING + +Git commit of the hypervisor. + +#### /buildinfo/compileinfo/ + +A directory containing information about compilation of Xen. + +#### /buildinfo/compileinfo/compile_by = STRING + +Information who compiled the hypervisor. + +#### /buildinfo/compileinfo/compile_date = STRING + +Date of the hypervisor compilation. + +#### /buildinfo/compileinfo/compile_domain = STRING + +Information about the compile domain. + +#### /buildinfo/compileinfo/compiler = STRING + +The compiler used to build Xen. + +#### /buildinfo/version/ + +A directory containing version information of the hypervisor. + +#### /buildinfo/version/extra = STRING + +Extra version information. + +#### /buildinfo/version/major = INTEGER + +The major version of Xen. + +#### /buildinfo/version/minor = INTEGER + +The minor version of Xen. diff --git a/xen/common/kernel.c b/xen/common/kernel.c index 572e3fc07d..db7bd23fcb 100644 --- a/xen/common/kernel.c +++ b/xen/common/kernel.c @@ -13,6 +13,7 @@ #include <xen/paging.h> #include <xen/guest_access.h> #include <xen/hypercall.h> +#include <xen/hypfs.h> #include <xsm/xsm.h> #include <asm/current.h> #include <public/version.h> @@ -373,6 +374,52 @@ void __init do_initcalls(void) (*call)(); } +#ifdef CONFIG_HYPFS +static unsigned int __read_mostly major_version; +static unsigned int __read_mostly minor_version; + +static HYPFS_DIR_INIT(buildinfo, "buildinfo"); +static HYPFS_DIR_INIT(compileinfo, "compileinfo"); +static HYPFS_DIR_INIT(version, "version"); +static HYPFS_UINT_INIT(major, "major", major_version); +static HYPFS_UINT_INIT(minor, "minor", minor_version); +static HYPFS_STRING_INIT(changeset, "changeset"); +static HYPFS_STRING_INIT(compiler, "compiler"); +static HYPFS_STRING_INIT(compile_by, "compile_by"); +static HYPFS_STRING_INIT(compile_date, "compile_date"); +static HYPFS_STRING_INIT(compile_domain, "compile_domain"); +static HYPFS_STRING_INIT(extra, "extra"); + +static int __init buildinfo_init(void) +{ + hypfs_add_dir(&hypfs_root, &buildinfo, true); + + hypfs_string_set_reference(&changeset, xen_changeset()); + hypfs_add_leaf(&buildinfo, &changeset, true); + + hypfs_add_dir(&buildinfo, &compileinfo, true); + hypfs_string_set_reference(&compiler, xen_compiler()); + hypfs_string_set_reference(&compile_by, xen_compile_by()); + hypfs_string_set_reference(&compile_date, xen_compile_date()); + hypfs_string_set_reference(&compile_domain, xen_compile_domain()); + hypfs_add_leaf(&compileinfo, &compiler, true); + hypfs_add_leaf(&compileinfo, &compile_by, true); + hypfs_add_leaf(&compileinfo, &compile_date, true); + hypfs_add_leaf(&compileinfo, &compile_domain, true); + + major_version = xen_major_version(); + minor_version = xen_minor_version(); + hypfs_add_dir(&buildinfo, &version, true); + hypfs_string_set_reference(&extra, xen_extra_version()); + hypfs_add_leaf(&version, &extra, true); + hypfs_add_leaf(&version, &major, true); + hypfs_add_leaf(&version, &minor, true); + + return 0; +} +__initcall(buildinfo_init); +#endif + # define DO(fn) long do_##fn #endif