From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44342) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XPQCD-0003fu-6e for qemu-devel@nongnu.org; Thu, 04 Sep 2014 02:07:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XPQBy-0004IO-SQ for qemu-devel@nongnu.org; Thu, 04 Sep 2014 02:07:01 -0400 Received: from e28smtp03.in.ibm.com ([122.248.162.3]:57364) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XPQBx-0004Gt-PV for qemu-devel@nongnu.org; Thu, 04 Sep 2014 02:06:46 -0400 Received: from /spool/local by e28smtp03.in.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 4 Sep 2014 11:36:42 +0530 Received: from d28relay05.in.ibm.com (d28relay05.in.ibm.com [9.184.220.62]) by d28dlp03.in.ibm.com (Postfix) with ESMTP id 2F65F1258078 for ; Thu, 4 Sep 2014 11:37:01 +0530 (IST) Received: from d28av01.in.ibm.com (d28av01.in.ibm.com [9.184.220.63]) by d28relay05.in.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id s84672j15505280 for ; Thu, 4 Sep 2014 11:37:03 +0530 Received: from d28av01.in.ibm.com (localhost [127.0.0.1]) by d28av01.in.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id s8466Ysa017845 for ; Thu, 4 Sep 2014 11:36:34 +0530 From: Bharata B Rao Date: Thu, 4 Sep 2014 11:36:20 +0530 Message-Id: <1409810785-12391-11-git-send-email-bharata@linux.vnet.ibm.com> In-Reply-To: <1409810785-12391-1-git-send-email-bharata@linux.vnet.ibm.com> References: <1409810785-12391-1-git-send-email-bharata@linux.vnet.ibm.com> Subject: [Qemu-devel] [RFC PATCH v0 10/15] ppc: Factor out CPU initialization code to a new routine List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: mdroth@linux.vnet.ibm.com, Bharata B Rao Separate out CPU initialization code into a new routine ppc_new_cpu() so that it can be used from CPU hotplug path too. Signed-off-by: Bharata B Rao --- hw/ppc/spapr.c | 73 +++++++++++++++++++++++++++++++++------------------------- 1 file changed, 42 insertions(+), 31 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index b2ca527..41207ae 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1603,6 +1603,45 @@ static SaveVMHandlers savevm_htab_handlers = { .load_state = htab_load, }; +static const char *current_cpu_model; + +static PowerPCCPU *ppc_new_cpu(const char *cpu_model) +{ + PowerPCCPU *cpu; + CPUPPCState *env; + + cpu = cpu_ppc_init(cpu_model); + if (cpu == NULL) { + fprintf(stderr, "Unable to find PowerPC CPU definition\n"); + exit(1); + } + env = &cpu->env; + + /* Set time-base frequency to 512 MHz */ + cpu_ppc_tb_init(env, TIMEBASE_FREQ); + + /* PAPR always has exception vectors in RAM not ROM. To ensure this, + * MSR[IP] should never be set. + */ + env->msr_mask &= ~(1 << 6); + + /* Tell KVM that we're in PAPR mode */ + if (kvm_enabled()) { + kvmppc_set_papr(cpu); + } + + if (cpu->max_compat) { + if (ppc_set_compat(cpu, cpu->max_compat) < 0) { + exit(1); + } + } + + xics_cpu_setup(spapr->icp, cpu); + qemu_register_reset(spapr_cpu_reset, cpu); + + return cpu; +} + /* pSeries LPAR / sPAPR hardware init */ static void ppc_spapr_init(MachineState *machine) { @@ -1612,8 +1651,6 @@ static void ppc_spapr_init(MachineState *machine) const char *kernel_cmdline = machine->kernel_cmdline; const char *initrd_filename = machine->initrd_filename; const char *boot_device = machine->boot_order; - PowerPCCPU *cpu; - CPUPPCState *env; PCIHostState *phb; int i; MemoryRegion *sysmem = get_system_memory(); @@ -1693,36 +1730,10 @@ static void ppc_spapr_init(MachineState *machine) if (cpu_model == NULL) { cpu_model = kvm_enabled() ? "host" : "POWER7"; } - for (i = 0; i < smp_cpus; i++) { - cpu = cpu_ppc_init(cpu_model); - if (cpu == NULL) { - fprintf(stderr, "Unable to find PowerPC CPU definition\n"); - exit(1); - } - env = &cpu->env; - - /* Set time-base frequency to 512 MHz */ - cpu_ppc_tb_init(env, TIMEBASE_FREQ); - - /* PAPR always has exception vectors in RAM not ROM. To ensure this, - * MSR[IP] should never be set. - */ - env->msr_mask &= ~(1 << 6); + current_cpu_model = cpu_model; - /* Tell KVM that we're in PAPR mode */ - if (kvm_enabled()) { - kvmppc_set_papr(cpu); - } - - if (cpu->max_compat) { - if (ppc_set_compat(cpu, cpu->max_compat) < 0) { - exit(1); - } - } - - xics_cpu_setup(spapr->icp, cpu); - - qemu_register_reset(spapr_cpu_reset, cpu); + for (i = 0; i < smp_cpus; i++) { + ppc_new_cpu(current_cpu_model); } /* allocate RAM */ -- 1.7.11.7