Message ID | 1472480307-26293-2-git-send-email-jgross@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hello, Juergen Gross, on Mon 29 Aug 2016 16:18:26 +0200, wrote: > +union start_info_union > +{ > + start_info_t start_info; > + char padding[512]; > +}; Why defining a union? 512 is actually not enough for start_info_t. Samuel
Samuel Thibault, on Mon 29 Aug 2016 22:49:07 +0200, wrote: > Juergen Gross, on Mon 29 Aug 2016 16:18:26 +0200, wrote: > > +union start_info_union > > +{ > > + start_info_t start_info; > > + char padding[512]; > > +}; > > Why defining a union? 512 is actually not enough for start_info_t. Ah, sorry, that was already there :) Samuel
Juergen Gross, on Mon 29 Aug 2016 16:18:26 +0200, wrote: > Commit e33452c4f5547ed14defe6382b3b53664ac5bd8a ("remove using > start_info in architecture independent code") removed the start_info > variable completely. grub stubdom needs the start_info structure. > > Readd the start_info structure, but make it dependent on > CONFIG_PARAVIRT. > > Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org> > --- > arch/x86/setup.c | 12 ++++++++++++ > include/hypervisor.h | 13 ++++++++++++- > 2 files changed, 24 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/setup.c b/arch/x86/setup.c > index 86955cf..5278227 100644 > --- a/arch/x86/setup.c > +++ b/arch/x86/setup.c > @@ -33,6 +33,14 @@ > #include <xen/arch-x86/cpuid.h> > #include <xen/arch-x86/hvm/start_info.h> > > +#ifdef CONFIG_PARAVIRT > +/* > + * This structure contains start-of-day info, such as pagetable base pointer, > + * address of the shared_info structure, and things like that. > + */ > +union start_info_union start_info_union; > +#endif > + > /* > * Shared page for communicating with the hypervisor. > * Events flags go here, for example. > @@ -189,6 +197,10 @@ arch_init(void *par) > /* print out some useful information */ > print_start_of_day(par); > > +#ifdef CONFIG_PARAVIRT > + memcpy(&start_info, par, sizeof(start_info)); > +#endif > + > start_kernel(); > } > > diff --git a/include/hypervisor.h b/include/hypervisor.h > index 3073a8a..f3b1f3c 100644 > --- a/include/hypervisor.h > +++ b/include/hypervisor.h > @@ -27,7 +27,18 @@ > #include <mini-os/traps.h> > > /* hypervisor.c */ > -#ifndef CONFIG_PARAVIRT > +#ifdef CONFIG_PARAVIRT > +/* > + * a placeholder for the start of day information passed up from the hypervisor > + */ > +union start_info_union > +{ > + start_info_t start_info; > + char padding[512]; > +}; > +extern union start_info_union start_info_union; > +#define start_info (start_info_union.start_info) > +#else > int hvm_get_parameter(int idx, uint64_t *value); > int hvm_set_parameter(int idx, uint64_t value); > #endif > -- > 2.6.6 >
diff --git a/arch/x86/setup.c b/arch/x86/setup.c index 86955cf..5278227 100644 --- a/arch/x86/setup.c +++ b/arch/x86/setup.c @@ -33,6 +33,14 @@ #include <xen/arch-x86/cpuid.h> #include <xen/arch-x86/hvm/start_info.h> +#ifdef CONFIG_PARAVIRT +/* + * This structure contains start-of-day info, such as pagetable base pointer, + * address of the shared_info structure, and things like that. + */ +union start_info_union start_info_union; +#endif + /* * Shared page for communicating with the hypervisor. * Events flags go here, for example. @@ -189,6 +197,10 @@ arch_init(void *par) /* print out some useful information */ print_start_of_day(par); +#ifdef CONFIG_PARAVIRT + memcpy(&start_info, par, sizeof(start_info)); +#endif + start_kernel(); } diff --git a/include/hypervisor.h b/include/hypervisor.h index 3073a8a..f3b1f3c 100644 --- a/include/hypervisor.h +++ b/include/hypervisor.h @@ -27,7 +27,18 @@ #include <mini-os/traps.h> /* hypervisor.c */ -#ifndef CONFIG_PARAVIRT +#ifdef CONFIG_PARAVIRT +/* + * a placeholder for the start of day information passed up from the hypervisor + */ +union start_info_union +{ + start_info_t start_info; + char padding[512]; +}; +extern union start_info_union start_info_union; +#define start_info (start_info_union.start_info) +#else int hvm_get_parameter(int idx, uint64_t *value); int hvm_set_parameter(int idx, uint64_t value); #endif
Commit e33452c4f5547ed14defe6382b3b53664ac5bd8a ("remove using start_info in architecture independent code") removed the start_info variable completely. grub stubdom needs the start_info structure. Readd the start_info structure, but make it dependent on CONFIG_PARAVIRT. Signed-off-by: Juergen Gross <jgross@suse.com> --- arch/x86/setup.c | 12 ++++++++++++ include/hypervisor.h | 13 ++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-)