On 09/06/15 13:03, Jan Beulich wrote: > Destination pages need mappings to be added to the page tables in the > v1 case (where nothing else calls machine_kexec_add_page() for them). > > Further, without the tools mapping the low 1Mb (expected by at least > some Linux version), we need to do so in the hypervisor in the v1 case. > > Suggested-by: David Vrabel <david.vra...@citrix.com> > Signed-off-by: Jan Beulich <jbeul...@suse.com> > Tested-by: Alan Robinson <alan.robin...@ts.fujitsu.com> > > --- a/xen/common/kexec.c > +++ b/xen/common/kexec.c > @@ -1003,6 +1003,24 @@ static int kexec_do_load_v1(xen_kexec_lo > if ( ret < 0 ) > goto error; > > + if ( arch == EM_386 || arch == EM_X86_64 ) > + { > + /* > + * Ensure 0 - 1 MiB is mapped and accessible by the image. > + * > + * This allows access to VGA memory and the region purgatory copies > + * in the crash case. > + */ > + unsigned long addr; > + > + for ( addr = 0; addr < (1UL << 20); addr += PAGE_SIZE )
MB(1) Otherwise, Reviewed-by: Andrew Cooper <andrew.coop...@citrix.com> > + { > + ret = machine_kexec_add_page(kimage, addr, addr); > + if ( ret < 0 ) > + goto error; > + } > + } > + > ret = kexec_load_slot(kimage); > if ( ret < 0 ) > goto error; > --- a/xen/common/kimage.c > +++ b/xen/common/kimage.c > @@ -923,6 +923,11 @@ int kimage_build_ind(struct kexec_image > ret = kimage_add_page(image, page_to_maddr(xen_page)); > if ( ret < 0 ) > goto done; > + > + ret = machine_kexec_add_page(image, dest, dest); > + if ( ret < 0 ) > + goto done; > + > dest += PAGE_SIZE; > break; > } > > > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel
_______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel