From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH 2/5] libxc: do initrd processing of domain builder in own function Date: Fri, 11 Sep 2015 14:32:19 +0200 Message-ID: <1441974742-27352-3-git-send-email-jgross@suse.com> References: <1441974742-27352-1-git-send-email-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1441974742-27352-1-git-send-email-jgross@suse.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: xen-devel@lists.xensource.com, Ian.Campbell@citrix.com, ian.jackson@eu.citrix.com, stefano.stabellini@eu.citrix.com, wei.liu2@citrix.com Cc: Juergen Gross List-Id: xen-devel@lists.xenproject.org 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 --- 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