From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LupsG-0002eG-Fo for qemu-devel@nongnu.org; Fri, 17 Apr 2009 11:21:04 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LupsB-0002Zc-5W for qemu-devel@nongnu.org; Fri, 17 Apr 2009 11:21:03 -0400 Received: from [199.232.76.173] (port=45867 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LupsA-0002ZB-C7 for qemu-devel@nongnu.org; Fri, 17 Apr 2009 11:20:58 -0400 Received: from mx2.redhat.com ([66.187.237.31]:41048) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Lups9-0005jp-IK for qemu-devel@nongnu.org; Fri, 17 Apr 2009 11:20:57 -0400 From: Glauber Costa Date: Fri, 17 Apr 2009 11:20:44 -0400 Message-Id: <1239981649-6366-2-git-send-email-glommer@redhat.com> In-Reply-To: <1239981649-6366-1-git-send-email-glommer@redhat.com> References: <1239981649-6366-1-git-send-email-glommer@redhat.com> Subject: [Qemu-devel] [PATCH 1/6] split pc_new_cpu Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: jan.kiszka@siemens.com, aliguori@us.ibm.com since it is useful elsewhere. Signed-off-by: Glauber Costa --- hw/pc.c | 37 ++++++++++++++++++++++--------------- hw/pc.h | 1 + 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/hw/pc.c b/hw/pc.c index 6a1750e..39ed066 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -775,6 +775,26 @@ static int load_option_rom(const char *oprom, target_phys_addr_t start, return size; } +CPUState *pc_new_cpu(int cpu, const char *cpu_model, int pci_enabled) +{ + CPUState *env = cpu_init(cpu_model); + if (!env) { + fprintf(stderr, "Unable to find x86 CPU definition\n"); + exit(1); + } + if (cpu != 0) + env->halted = 1; + if (smp_cpus > 1) { + /* XXX: enable it in all cases */ + env->cpuid_features |= CPUID_APIC; + } + qemu_register_reset(main_cpu_reset, env); + if (pci_enabled) { + apic_init(env); + } + return env; +} + /* PC hardware initialisation */ static void pc_init1(ram_addr_t ram_size, int vga_ram_size, const char *boot_device, @@ -816,23 +836,10 @@ static void pc_init1(ram_addr_t ram_size, int vga_ram_size, } for(i = 0; i < smp_cpus; i++) { - env = cpu_init(cpu_model); - if (!env) { - fprintf(stderr, "Unable to find x86 CPU definition\n"); - exit(1); - } - if (i != 0) - env->halted = 1; - if (smp_cpus > 1) { - /* XXX: enable it in all cases */ - env->cpuid_features |= CPUID_APIC; - } - qemu_register_reset(main_cpu_reset, env); - if (pci_enabled) { - apic_init(env); - } + env = pc_new_cpu(i, cpu_model, pci_enabled); } + vmport_init(); /* allocate RAM */ diff --git a/hw/pc.h b/hw/pc.h index 50e6c39..59047b5 100644 --- a/hw/pc.h +++ b/hw/pc.h @@ -102,6 +102,7 @@ extern int fd_bootchk; void ioport_set_a20(int enable); int ioport_get_a20(void); +CPUState *pc_new_cpu(int cpu, const char *cpu_model, int pci_enabled); /* acpi.c */ extern int acpi_enabled; -- 1.5.6.6