[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/5] libxc: do initrd processing of domain builder in own function
Factor out the initrd processing in xc_dom_build_image() into an own function to prepare starting a domain with unmapped initrd. Signed-off-by: Juergen Gross <jgross@xxxxxxxx> --- tools/libxc/xc_dom_core.c | 77 ++++++++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 34 deletions(-) diff --git a/tools/libxc/xc_dom_core.c b/tools/libxc/xc_dom_core.c index b432762..b510bbd 100644 --- a/tools/libxc/xc_dom_core.c +++ b/tools/libxc/xc_dom_core.c @@ -953,6 +953,48 @@ int xc_dom_update_guest_p2m(struct xc_dom_image *dom) return 0; } +static int xc_dom_build_ramdisk(struct xc_dom_image *dom) +{ + size_t unziplen, ramdisklen; + void *ramdiskmap; + + if ( !dom->ramdisk_seg.vstart ) + { + unziplen = xc_dom_check_gzip(dom->xch, + dom->ramdisk_blob, dom->ramdisk_size); + if ( xc_dom_ramdisk_check_size(dom, unziplen) != 0 ) + unziplen = 0; + } + else + unziplen = 0; + + ramdisklen = unziplen ? unziplen : dom->ramdisk_size; + + if ( xc_dom_alloc_segment(dom, &dom->ramdisk_seg, "ramdisk", + dom->ramdisk_seg.vstart, ramdisklen) != 0 ) + goto err; + ramdiskmap = xc_dom_seg_to_ptr(dom, &dom->ramdisk_seg); + if ( ramdiskmap == NULL ) + { + DOMPRINTF("%s: xc_dom_seg_to_ptr(dom, &dom->ramdisk_seg) => NULL", + __FUNCTION__); + goto err; + } + if ( unziplen ) + { + if ( xc_dom_do_gunzip(dom->xch, dom->ramdisk_blob, dom->ramdisk_size, + ramdiskmap, ramdisklen) == -1 ) + goto err; + } + else + memcpy(ramdiskmap, dom->ramdisk_blob, dom->ramdisk_size); + + return 0; + + err: + return -1; +} + int xc_dom_build_image(struct xc_dom_image *dom) { unsigned int page_size; @@ -980,41 +1022,8 @@ int xc_dom_build_image(struct xc_dom_image *dom) /* load ramdisk */ if ( dom->ramdisk_blob ) { - size_t unziplen, ramdisklen; - void *ramdiskmap; - - if ( !dom->ramdisk_seg.vstart ) - { - unziplen = xc_dom_check_gzip(dom->xch, - dom->ramdisk_blob, dom->ramdisk_size); - if ( xc_dom_ramdisk_check_size(dom, unziplen) != 0 ) - unziplen = 0; - } - else - unziplen = 0; - - ramdisklen = unziplen ? unziplen : dom->ramdisk_size; - - if ( xc_dom_alloc_segment(dom, &dom->ramdisk_seg, "ramdisk", - dom->ramdisk_seg.vstart, - ramdisklen) != 0 ) + if ( xc_dom_build_ramdisk(dom) != 0 ) goto err; - ramdiskmap = xc_dom_seg_to_ptr(dom, &dom->ramdisk_seg); - if ( ramdiskmap == NULL ) - { - DOMPRINTF("%s: xc_dom_seg_to_ptr(dom, &dom->ramdisk_seg) => NULL", - __FUNCTION__); - goto err; - } - if ( unziplen ) - { - if ( xc_dom_do_gunzip(dom->xch, - dom->ramdisk_blob, dom->ramdisk_size, - ramdiskmap, ramdisklen) == -1 ) - goto err; - } - else - memcpy(ramdiskmap, dom->ramdisk_blob, dom->ramdisk_size); } /* load devicetree */ -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |