[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCHv9 0/9] Xen: extend kexec hypercall for use with pv-ops kernels
On 18/10/2013 19:40, Daniel Kiper wrote: > On Tue, Oct 08, 2013 at 05:55:01PM +0100, David Vrabel wrote: >> The series (for Xen 4.4) improves the kexec hypercall by making Xen >> responsible for loading and relocating the image. This allows kexec >> to be usable by pv-ops kernels and should allow kexec to be usable >> from a HVM or PVH privileged domain. > > I could not load panic image because Xen crashes in following way: > > (XEN) ----[ Xen-4.4-unstable x86_64 debug=y Tainted: C ]---- [...] > (XEN) Xen call trace: > (XEN) [<ffff82d080114ef2>] kimage_free+0x67/0xd2 > (XEN) [<ffff82d0801151f9>] do_kimage_alloc+0x29c/0x2f0 > (XEN) [<ffff82d0801152fe>] kimage_alloc+0xb1/0xe6 > (XEN) [<ffff82d0801144c0>] do_kexec_op_internal+0x68e/0x789 > (XEN) [<ffff82d0801145c9>] do_kexec_op+0xe/0x12 > (XEN) [<ffff82d0802268cb>] syscall_enter+0xeb/0x145 The appended patch should fix this crash which only occurs if there's an error in do_kimage_alloc(). > Normal kernel could be loaded but when it is executed something > crashes very early. Following message is displayed Both normal and panic images work fine for me. You're going to have to provide more details. David 8<--------------------------------- --- a/xen/common/kimage.c +++ b/xen/common/kimage.c @@ -179,7 +179,7 @@ static int do_kimage_alloc(struct kexec_image **rimage, paddr_t entry, page_to_maddr(image->control_code_page), page_to_maddr(image->control_code_page)); if ( result < 0 ) - return result; + goto out; /* Add an empty indirection page. */ image->entry_page = kimage_alloc_control_page(image, 0); @@ -188,7 +188,7 @@ static int do_kimage_alloc(struct kexec_image **rimage, paddr_t entry, result = machine_kexec_add_page(image, page_to_maddr(image->entry_page), page_to_maddr(image->entry_page)); if ( result < 0 ) - return result; + goto out; image->head = page_to_maddr(image->entry_page); @@ -510,15 +510,14 @@ static void kimage_free_entry(kimage_entry_t entry) free_domheap_page(page); } -void kimage_free(struct kexec_image *image) +static void kimage_free_all_entries(struct kexec_image *image) { kimage_entry_t *ptr, entry; kimage_entry_t ind = 0; - if ( !image ) + if ( !image->head ) return; - kimage_free_extra_pages(image); for_each_kimage_entry(image, ptr, entry) { if ( entry & IND_INDIRECTION ) @@ -537,8 +536,15 @@ void kimage_free(struct kexec_image *image) /* Free the final indirection page. */ if ( ind & IND_INDIRECTION ) kimage_free_entry(ind); +} - /* Free the kexec control pages. */ +void kimage_free(struct kexec_image *image) +{ + if ( !image ) + return; + + kimage_free_extra_pages(image); + kimage_free_all_entries(image); kimage_free_page_list(&image->control_pages); xfree(image->segments); xfree(image); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |