From patchwork Thu Jul 30 10:52:25 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andre Przywara X-Patchwork-Id: 502065 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id AD9FB140D2D for ; Thu, 30 Jul 2015 20:52:40 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755376AbbG3Kwj (ORCPT ); Thu, 30 Jul 2015 06:52:39 -0400 Received: from foss.arm.com ([217.140.101.70]:40019 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755348AbbG3Kwg (ORCPT ); Thu, 30 Jul 2015 06:52:36 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1D6F44F0; Thu, 30 Jul 2015 03:52:44 -0700 (PDT) Received: from e104803-lin.lan (unknown [10.1.203.153]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 347573F21A; Thu, 30 Jul 2015 03:52:34 -0700 (PDT) From: Andre Przywara To: will.deacon@arm.com, kvm@vger.kernel.org Cc: marc.zyngier@arm.com, kvmarm@lists.cs.columbia.edu, kvm-ppc@vger.kernel.org Subject: [PATCH 08/14] MIPS: remove seeks from load_flat_binary() Date: Thu, 30 Jul 2015 11:52:25 +0100 Message-Id: <1438253551-2378-9-git-send-email-andre.przywara@arm.com> X-Mailer: git-send-email 2.3.5 In-Reply-To: <1438253551-2378-1-git-send-email-andre.przywara@arm.com> References: <1438253551-2378-1-git-send-email-andre.przywara@arm.com> Sender: kvm-ppc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm-ppc@vger.kernel.org Remove the need to rewind the kernel image file if loading it as a flat binary by re-using the already read portion of the file passed in as a buffer. This allows the MIPS flat binary kernel image to be read from a pipe. Signed-off-by: Andre Przywara --- mips/kvm.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/mips/kvm.c b/mips/kvm.c index ed81a02..d970ee0 100644 --- a/mips/kvm.c +++ b/mips/kvm.c @@ -164,24 +164,26 @@ static void kvm__mips_install_cmdline(struct kvm *kvm) /* Load at the 1M point. */ #define KERNEL_LOAD_ADDR 0x1000000 -static bool load_flat_binary(struct kvm *kvm, int fd_kernel) +static bool load_flat_binary(struct kvm *kvm, int fd_kernel, const void *buf, + int buflen) { void *p; void *k_start; int nr; - if (lseek(fd_kernel, 0, SEEK_SET) < 0) - die_perror("lseek"); - p = k_start = guest_flat_to_host(kvm, KERNEL_LOAD_ADDR); + memcpy(p, buf, buflen); + p += buflen; + while ((nr = read(fd_kernel, p, 65536)) > 0) p += nr; kvm->arch.is64bit = true; kvm->arch.entry_point = 0xffffffff81000000ull; - pr_info("Loaded kernel to 0x%x (%ld bytes)", KERNEL_LOAD_ADDR, (long int)(p - k_start)); + pr_info("Loaded kernel to 0x%x (%ld bytes)", KERNEL_LOAD_ADDR, + (long int)(p - k_start)); return true; } @@ -357,7 +359,7 @@ bool kvm__arch_load_kernel_image(struct kvm *kvm, int fd_kernel, int fd_initrd, return true; } - return load_flat_binary(kvm, fd_kernel); + return load_flat_binary(kvm, fd_kernel, &eh, sizeof(eh)); } void ioport__map_irq(u8 *irq)