
On Mon, Mar 12, 2012 at 06:41:06PM +0100, Andreas Färber wrote:
Am 12.03.2012 17:50, schrieb Eduardo Habkost:
On Mon, Mar 12, 2012 at 04:49:47PM +0100, Andreas Färber wrote: [...]
IMO interpreting an explicit -cpu parameter depending on -M would be wrong. Changing the default CPU based on -M is fine with me. For an explicit argument we would need Westmere-1.0 analog to pc-1.0. Then the user gets what the user asks for, without unexpected magic.
It is not unexpected magic. It would be a documented mechanism: "-cpu Nehalem-1.0" and "-cpu Nehalem-1.1" would have the same meaning every time, with any machine-type, but "-cpu Nehalem" would be an alias, whose meaning depends on the machine-type.
Otherwise we would be stuck with a broken "Nehalem" model forever, and we don't want that.
Not quite what I meant: In light of QOM we should be able to instantiate a CPU based on its name and optional parameters IMO. No dependency on the machine, please. An alias sure, but if the user explicitly says -cpu Nehalem then on 1.1 it should always be an alias to Nehalem-1.1 whether the machine is -M pc-0.15 or pc. If no -cpu was specified by the user, then choosing a default of Nehalem-1.0 for pc-1.0 is fine. Just trying to keep separate things separate here.
As Gleb explained, things aren't really separated: "qemu-1.1 -M pc-1.0 -cpu Nehalem" should result in the same machine as "qemu-1.0 -cpu Nehalem", no difference should be visible to the guest. simply make incompatible changes.
Also keep in mind linux-user. There's no concept of a machine there, but there's a cpu_copy() function used for forking that tries to re-create the CPU based on its model. So currently cpu_*_init(env->cpu_model_str) needs to be able to recreate an identical CPU through the central code path, without access to a QEMUMachine.
So just translate the CPU alias given to "-cpu" to the true CPU model name as soon as possible, at the command-line-handling code, so the rest of the code always see the true CPU model name. After all, the need to make the aliases is a command-line interface compatibility problem, so it makes sense to handle this at the command-line-handling code. -- Eduardo