On Wed, Jun 01, 2016 at 06:37:28PM +0200, Igor Mammedov wrote: > Currently CPUClass->parse_features() is used to parse > -cpu features string and set properties on created CPU > instances. > > But considering that features specified -cpu apply to > every created CPU instance, it doesn't make sence to > parse the same features string for every CPU created. > It also makes every target that cares about parsing > features string explicitly call CPUClass->parse_features() > parser, which gets in a way if we consider using > generic device_add for CPU hotplug as device_add > has not a clue about CPU specific hooks. > > Turns out we can use global properties mechanism to set > properties on every created Device instance for a given > type. That way it's possible to convert CPU features > into a set of global properties for specified by > -cpu cpu_model and common Device.device_post_init() > will apply them to every cpu model model automaticaaly > regardless whether it's manually created CPU or CPU > created with help of device_add. > > Signed-off-by: Igor Mammedov <imamm...@redhat.com> > --- [...] > -static void cpu_common_parse_features(CPUState *cpu, char *features, > +static void cpu_common_parse_features(const char *typename, char *features, > Error **errp) > { > char *featurestr; /* Single "key=value" string being parsed */ > char *val; > - Error *err = NULL; > + static bool cpu_globals_initialized; > + > + if (cpu_globals_initialized) { > + return; > + }
Should we replace this with assert(!cpu_globals_initialized) after applying patch 8/8? -- Eduardo