On Wed, Dec 16, 2015 at 05:54:25PM +0100, Igor Mammedov wrote: > On Tue, 15 Dec 2015 14:08:09 +0530 > Bharata B Rao <bhar...@linux.vnet.ibm.com> wrote: > > > On Mon, Dec 14, 2015 at 03:29:49PM -0200, Eduardo Habkost wrote: > > > On Thu, Dec 10, 2015 at 11:45:37AM +0530, Bharata B Rao wrote: > > > > Storing CPU typename in MachineState lets us to create CPU threads > > > > for all architectures in uniform manner from arch-neutral code. > > > > > > > > TODO: Touching only i386 and spapr targets for now > > > > > > > > Signed-off-by: Bharata B Rao <bhar...@linux.vnet.ibm.com> > > > > > > Suggestions: > > > > > > * Name the field "cpu_base_type" to indicate it is the base CPU > > > class name, not the actual CPU class name used when creating > > > CPUs. > > > * Put it in MachineClass, as it may be useful for code that > > > runs before machine->init(), in the future. > > > > Ok. > > > > > * Maybe make it a CPUClass* field instead of a string? > > > > In the current use case, this base cpu type string is being passed > > to cpu_generic_init(const char *typename, const char *cpu_model) > > to create boot time CPUs with given typename and cpu_mode. So for now > > the string makes sense for use case. > > > > Making it CPUClass* would necessiate more changes to > > cpu_generic_init(). > how about actually leaving it as "cpu_type" and putting in it > actual cpu type that could be used with device_add(). > > that would get rid of keeping and passing around intermediate cpu_model.
Makes sense. We only need to save both typename and cpu_model today because cpu_generic_init() currently encapsulates three steps: CPU class lookup + CPU creation + CPU feature parsing. But we shouldn't need to redo CPU class lookup every time. We could just split cpu_model once, and save the resulting CPUClass* + featurestr, instead of saving the full cpu_model string and parsing it again every time. The only problem is that it would require refactoring multiple machines/architectures that use a cpu_XXX_init(const char *cpu_model) helper. -- Eduardo