qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 2/7] Convert pc cpu to qdev


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH 2/7] Convert pc cpu to qdev
Date: Thu, 16 Feb 2012 10:09:53 -0600
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.23) Gecko/20110922 Lightning/1.0b2 Thunderbird/3.1.15

On 02/16/2012 06:54 AM, Jan Kiszka wrote:
On 2012-02-16 13:51, Anthony Liguori wrote:
On 02/16/2012 06:01 AM, Jan Kiszka wrote:
On 2012-02-16 00:16, Igor Mammedov wrote:
+static ICCBusDeviceInfo cpu_device_info = {
+    .qdev.name = "cpu-pc",
+    .qdev.size = sizeof(CPUPC),
+    .qdev.reset = cpu_device_reset,
+    .init = cpu_device_init,
+    .qdev.props = (Property[]) {
+        DEFINE_PROP_STRING("model", CPUPC, model),

And how do you pass in feature flags? Or the core layout? Basically both
-cpu and -smp need to be expressible via multiple "-device cpu-x86,xxx"
(not "pc") commands.

The approach that I'd recommend is:

1) convert CPU_COMMON_STATE to a structure named CPUCommonState, query/replace
all references to members of CPU_COMMON_STATE appropriately.

2) convert as many users of CPUState to CPUCommonState as possible.

3) make CPUCommonState a base class, move it to the front of the structure, and
attempt to measure the impact to TCG.

4) if (3) is significant, special case things in QOM

5) make target specific code use target specific CPUState typename

6) eliminate #define CPUState

7) make on-processor devices (like lapic) children of target specific CPUState

8) express target specific flags/features via QOM properties

9) make machine expose target specific CPUState links that can be set by the 
user.

Also, I'm wondering what names those CPUs should have. I think we should
expose model names as device names and avoid a "model" property.

Yeah, I think we want a CPUX86State and then a bunch of subclasses defined by 
that.

By making use of the class_data field, we can register classes based on combinations of feature flags. So for instance:

static TypeInfo opteron_g2 = {
  .name = "cpu-opteron-g2",
  .parent = TYPE_CPU_X86",
  .class_init = cpu_x86_generic_class_init,
  .class_data = (CPUX86Definition[]){
      .level = 5,
      .vendor = "AuthenticAMD",
      .family = 15,
      .model = 6,
      .stepping = 1,
.feature_edx = "sse2 sse fxsr mmx pat cmov pge sep apic cx8 mce pae msr tsc pse de fpu mtrr clflush mca pse36",
      ...
   },
};

And obviously, we can still using the existing cpudef directive to generate 
types.

Regards,

Anthony Liguori


Jan





reply via email to

[Prev in Thread] Current Thread [Next in Thread]