[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] kexec's v1 compatibility code
>>> On 08.05.15 at 17:53, <dvrabel@xxxxxxxxxx> wrote: > On 08/05/15 14:34, Jan Beulich wrote: >> now that we're putting Xen 4.4.x underneath an older distro (SLE11) >> we've got to see that kexec doesn't work there. Initial investigation >> of our kexec person revealed that the destinations attempted to be >> written to by kexec_reloc()'s code following the is_source and >> is_zero labels have no mappings in the kexec page tables. Comparing >> kexec_do_load_v1() with kexec_load() I wonder whether the former >> isn't simply lacking a call to kimage_load_segments(). > > I think I only tested the V1 path with 32-bit images which did not need > page tables. > > The caller of the V1 kexec_load has already loaded the segments into > their (potentially intermediate) destination so the apparently missing > kimage_load_segments() is deliberate. > > I think kimage_build_ind() needs to call machine_kexec_add_page() > appropriately. Okay, iiuc IND_SOURCE and IND_DONE don't need any adjustment. Would the below therefore look okay, or did I simply not find where the indirection pages get handled? Thanks, Jan --- a/xen/common/kimage.c +++ b/xen/common/kimage.c @@ -863,9 +863,14 @@ int kimage_build_ind(struct kexec_image { void *page; kimage_entry_t *entry; - int ret = 0; + int ret; paddr_t dest = KIMAGE_NO_DEST; + ret = machine_kexec_add_page(image, pfn_to_paddr(ind_mfn), + pfn_to_paddr(ind_mfn)); + if ( ret < 0 ) + return ret; + page = map_domain_page(ind_mfn); if ( !page ) return -ENOMEM; @@ -887,10 +892,16 @@ int kimage_build_ind(struct kexec_image case IND_DESTINATION: dest = (paddr_t)mfn << PAGE_SHIFT; ret = kimage_set_destination(image, dest); + if ( !ret ) + ret = machine_kexec_add_page(image, dest, dest); if ( ret < 0 ) goto done; break; case IND_INDIRECTION: + ret = machine_kexec_add_page(image, pfn_to_paddr(mfn), + pfn_to_paddr(mfn)); + if ( ret < 0 ) + goto done; unmap_domain_page(page); page = map_domain_page(mfn); entry = page; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |