spapr: Consolidate cpu init code into a routine
Factor out bits of sPAPR specific CPU initialization code into a separate routine so that it can be called from CPU hotplug path too. Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com> Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
		
							parent
							
								
									0da6f3fef9
								
							
						
					
					
						commit
						bab99ea098
					
				@ -1408,6 +1408,34 @@ static void spapr_boot_set(void *opaque, const char *boot_device,
 | 
				
			|||||||
    machine->boot_order = g_strdup(boot_device);
 | 
					    machine->boot_order = g_strdup(boot_device);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void spapr_cpu_init(sPAPRMachineState *spapr, PowerPCCPU *cpu)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    CPUPPCState *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);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* pSeries LPAR / sPAPR hardware init */
 | 
					/* pSeries LPAR / sPAPR hardware init */
 | 
				
			||||||
static void ppc_spapr_init(MachineState *machine)
 | 
					static void ppc_spapr_init(MachineState *machine)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -1417,7 +1445,6 @@ static void ppc_spapr_init(MachineState *machine)
 | 
				
			|||||||
    const char *kernel_cmdline = machine->kernel_cmdline;
 | 
					    const char *kernel_cmdline = machine->kernel_cmdline;
 | 
				
			||||||
    const char *initrd_filename = machine->initrd_filename;
 | 
					    const char *initrd_filename = machine->initrd_filename;
 | 
				
			||||||
    PowerPCCPU *cpu;
 | 
					    PowerPCCPU *cpu;
 | 
				
			||||||
    CPUPPCState *env;
 | 
					 | 
				
			||||||
    PCIHostState *phb;
 | 
					    PCIHostState *phb;
 | 
				
			||||||
    int i;
 | 
					    int i;
 | 
				
			||||||
    MemoryRegion *sysmem = get_system_memory();
 | 
					    MemoryRegion *sysmem = get_system_memory();
 | 
				
			||||||
@ -1502,30 +1529,7 @@ static void ppc_spapr_init(MachineState *machine)
 | 
				
			|||||||
            fprintf(stderr, "Unable to find PowerPC CPU definition\n");
 | 
					            fprintf(stderr, "Unable to find PowerPC CPU definition\n");
 | 
				
			||||||
            exit(1);
 | 
					            exit(1);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        env = &cpu->env;
 | 
					        spapr_cpu_init(spapr, cpu);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        /* 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);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (kvm_enabled()) {
 | 
					    if (kvm_enabled()) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user