From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59427) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WQJWi-0007Q7-GZ for qemu-devel@nongnu.org; Wed, 19 Mar 2014 12:39:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WQJWb-0004lv-K8 for qemu-devel@nongnu.org; Wed, 19 Mar 2014 12:39:36 -0400 Received: from mx1.redhat.com ([209.132.183.28]:25039) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WQJWb-0004lj-Af for qemu-devel@nongnu.org; Wed, 19 Mar 2014 12:39:29 -0400 Message-ID: <5329C825.3010202@redhat.com> Date: Wed, 19 Mar 2014 17:39:01 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <1394801281-18997-1-git-send-email-james.hogan@imgtec.com> <1394801281-18997-9-git-send-email-james.hogan@imgtec.com> In-Reply-To: <1394801281-18997-9-git-send-email-james.hogan@imgtec.com> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v4 08/10] hw/mips: malta: Add KVM support List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: James Hogan , qemu-devel@nongnu.org Cc: Sanjay Lal , Gleb Natapov , Aurelien Jarno , kvm@vger.kernel.org, Peter Maydell Il 14/03/2014 13:47, James Hogan ha scritto: > int prom_index = 0; > + uint64_t (*xlate_to_phys) (void *opaque, uint64_t addr); > + uint64_t (*xlate_to_kseg0) (void *opaque, uint64_t addr); > + > > #ifdef TARGET_WORDS_BIGENDIAN > big_endian = 1; > @@ -781,7 +787,15 @@ static int64_t load_kernel (void) > big_endian = 0; > #endif > > - if (load_elf(loaderparams.kernel_filename, cpu_mips_kseg0_to_phys, NULL, > + if (kvm_enabled()) { > + xlate_to_phys = cpu_mips_kvm_um_kseg0_to_phys; > + xlate_to_kseg0 = cpu_mips_kvm_um_phys_to_kseg0; > + } else { > + xlate_to_phys = cpu_mips_kseg0_to_phys; > + xlate_to_kseg0 = cpu_mips_phys_to_kseg0; > + } > + > + if (load_elf(loaderparams.kernel_filename, xlate_to_phys, NULL, > (uint64_t *)&kernel_entry, NULL, (uint64_t *)&kernel_high, > big_endian, ELF_MACHINE, 1) < 0) { > fprintf(stderr, "qemu: could not load kernel '%s'\n", > @@ -820,7 +834,7 @@ static int64_t load_kernel (void) > prom_set(prom_buf, prom_index++, "%s", loaderparams.kernel_filename); > if (initrd_size > 0) { > prom_set(prom_buf, prom_index++, "rd_start=0x%" PRIx64 " rd_size=%li %s", > - cpu_mips_phys_to_kseg0(NULL, initrd_offset), initrd_size, > + xlate_to_kseg0(NULL, initrd_offset), initrd_size, > loaderparams.kernel_cmdline); > } else { > prom_set(prom_buf, prom_index++, "%s", loaderparams.kernel_cmdline); > @@ -829,12 +843,13 @@ static int64_t load_kernel (void) > prom_set(prom_buf, prom_index++, "memsize"); > prom_set(prom_buf, prom_index++, "%i", > MIN(loaderparams.ram_size, 256 << 20)); > + > prom_set(prom_buf, prom_index++, "modetty0"); > prom_set(prom_buf, prom_index++, "38400n8r"); > prom_set(prom_buf, prom_index++, NULL); > > rom_add_blob_fixed("prom", prom_buf, prom_size, > - cpu_mips_kseg0_to_phys(NULL, ENVP_ADDR)); > + xlate_to_phys(NULL, ENVP_ADDR)); > Why do you need the function pointers? Can cpu_mips_kseg0_to_phys/cpu_mips_phys_to_kseg0 just use kvm_enabled()? Paolo