From mboxrd@z Thu Jan 1 00:00:00 1970 From: Keir Fraser Subject: Re: [PATCH] x86-64/EFI: allow chaining of config files Date: Tue, 11 Sep 2012 14:34:05 +0100 Message-ID: References: <504F4148020000780009A919@nat28.tlf.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <504F4148020000780009A919@nat28.tlf.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Jan Beulich , xen-devel List-Id: xen-devel@lists.xenproject.org On 11/09/2012 12:48, "Jan Beulich" wrote: > Namely when making use the CONFIG_XEN_COMPAT_* options in the legacy > Linux kernels, newer kernels may not be compatible with older > hypervisors, so trying to boot such a combination makes little sense. > Booting older kernels on newer hypervisors, however, has to always > work. > > With the way xen.efi looks for its configuration file, allowing > individual configuration files to refer only to compatible kernels, > and referring from an older- to a newer-hypervisor one (the kernels > of which will, as said, necessarily be compatible with the older > hypervisor) allows to greatly reduce redundancy at least in > development environments where one frequently wants multiple > hypervisors and kernles to be installed in parallel. > > Signed-off-by: Jan Beulich Acked-by: Keir Fraser > --- a/docs/misc/efi.markdown > +++ b/docs/misc/efi.markdown > @@ -75,6 +75,13 @@ Specifies an XSM module to load. > > Specifies a CPU microcode blob to load. > > +###`chain=` > + > +Specifies an alternate configuration file to use in case the specified > section > +(and in particular its `kernel=` setting) can't be found in the default (or > +specified) configuration file. This is only meaningful in the [global] > section > +and really not meant to be used together with the `-cfg=` command line > option. > + > Filenames must be specified relative to the location of the EFI binary. > > Extra options to be passed to Xen can also be specified on the command line, > --- a/xen/arch/x86/efi/boot.c > +++ b/xen/arch/x86/efi/boot.c > @@ -809,7 +809,26 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SY > else > section.s = get_value(&cfg, "global", "default"); > > - name.s = get_value(&cfg, section.s, "kernel"); > + for ( ; ; ) > + { > + name.s = get_value(&cfg, section.s, "kernel"); > + if ( name.s ) > + break; > + name.s = get_value(&cfg, "global", "chain"); > + if ( !name.s ) > + break; > + efi_bs->FreePages(cfg.addr, PFN_UP(cfg.size)); > + cfg.addr = 0; > + if ( !read_file(dir_handle, s2w(&name), &cfg) ) > + { > + PrintStr(L"Chained configuration file '"); > + PrintStr(name.w); > + efi_bs->FreePool(name.w); > + blexit(L"'not found\r\n"); > + } > + pre_parse(&cfg); > + efi_bs->FreePool(name.w); > + } > if ( !name.s ) > blexit(L"No Dom0 kernel image specified\r\n"); > split_value(name.s); > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel