[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v5 2/2] xen/arm: support gzip compressed kernels
>>> On 08.09.15 at 15:35, <ian.campbell@xxxxxxxxxx> wrote: > On Mon, 2015-09-07 at 15:25 +0100, Stefano Stabellini wrote: >> +static __init int kernel_decompress(struct kernel_info *info, >> + paddr_t *addr, paddr_t *size) >> +{ >> + char *output, *input, *end; >> + char magic[2]; >> + int rc; >> + unsigned kernel_order_out; >> + paddr_t output_size; >> + struct page_info *pages; >> + >> + if ( *size < 2 ) >> + return -EINVAL; >> + >> + copy_from_paddr(magic, *addr, sizeof(magic)); >> + >> + /* only gzip is supported */ >> + if ( !gzip_check(magic, *size) ) >> + return -EINVAL; >> + >> + input = ioremap_cache(*addr, *size); >> + if ( input == NULL ) >> + return -EFAULT; >> + >> + output_size = output_length(input, *size); >> + kernel_order_out = get_order_from_bytes(output_size); >> + pages = alloc_domheap_pages(NULL, kernel_order_out, 0); >> + if ( pages == NULL ) >> + { >> + iounmap(input); >> + return -ENOMEM; >> + } >> + output = page_to_virt(pages); >> + >> + rc = perform_gunzip(output, input, *size); >> + clean_dcache_va_range(output, output_size); >> + iounmap(input); >> + >> + *addr = virt_to_maddr(output); > > I don't think virt_to_maddr is strictly speaking valid (at the arch > interface level, our actual implementation may happen to cope) for domheap > pages, it's only valid for things which are in the linear 1:1 map (~= > xenheap). > > I think you need page_to_maddr(pages) instead. Indeed, but then the page_to_virt() a few lines up isn't valid either. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |