qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 1/7] Introduce a new bus "ICC" to connect APIC


From: Igor Mammedov
Subject: Re: [Qemu-devel] [PATCH 1/7] Introduce a new bus "ICC" to connect APIC
Date: Fri, 24 Feb 2012 14:05:49 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.1) Gecko/20120209 Thunderbird/10.0.1

On 02/17/2012 06:02 PM, Igor Mammedov wrote:
On 02/16/2012 01:42 PM, Anthony Liguori wrote:
On 02/16/2012 05:25 AM, Jan Kiszka wrote:
On 2012-02-16 00:16, Igor Mammedov wrote:
Introduce a new structure CPUS as the controller of ICC (INTERRUPT
CONTROLLER COMMUNICATIONS), and new bus "ICC" to hold APIC,instead
of sysbus. So we can support APIC hot-plug feature.

This is repost of original patch for qemu-kvm rebased on current qemu:
http://lists.nongnu.org/archive/html/qemu-devel/2011-11/msg01478.html
All credits to Liu Ping Fan for writing it.

V2 changes:
- cpusockets_init: cpu_sockets is not yet initialized, use cpus that
we got as input param instead for qbus_create, this makes cpus
apics visible in "info qtree" monitor command
- fix format error spotted by Jan and missed by checkpatch
- cpu_has_apic_feature: return bool instead of int


This patch surely no longer applies. And the ICC requires QOM conversion.

Also, post-QOM, I don't think having an ICC bus makes a whole lot of sense.

The LAPIC can be made a child of the CPU device with a bidirectional link.

I would simply create a fixed set of CPU links<> hung off of /devices somewhere 
and use that as the hotplug mechanism. This matches well the way we
model this to the guest (we expose a fixed number of pluggable sockets).

I've just QOM-ified it, but in light of what you just said it may be ignored.
ICC bus was used on pre Pentium 4 smp systems. And whole thing with introducing
it was to provide hot-plugable bus for cpus, since hot-plug on sysbus is 
disabled
and people argued that sysbus shouldn't be hot-plugable. However it depends on
what we choose to model, we can use pre P4 ICC bus for inter-apic/ioapic 
communications
or use P4 model allowing hot-plug on sysbus and use it for inter-apic/ioapic
communications if needed.

So I'd rather drop ICC patch and try your approach with CPU links<>, I see no
point in introducing new bus providing we have an alternative model and existing
bus for the task.

I've looked at device_add command and qdev_device_add it uses for doing actual 
work
and in current state it requires (based on Andreas' qom_cpu branch):

For approach where apic and cpu hot-plugged to sysbus.
  1. created object must be descendant of TYPE_DEVICE. So QOM TYPE_CPU should 
be inherited
     from TYPE_DEVICE at least or TYPE_SYS_BUS_DEVICE.
  2. hot-plug on the bus should be allowed. if we ditch icc bus then we should 
allow
     hot-plug on sysbus. Can we do this? (i.e. it seems that for P4 and later 
cpus
     sysbus should be hot-plugable).
  3. should DeviceClass.init be used for cpu initialization or should 
.instance_init
     do all the job and make DeviceClass.init nop?

Another approach that tries to re-use device_add interface:
  1. allow run-time type detection in qdev_device_add and execute separate 
branch for
     TYPE_CPU. This way we could easily use links<> on sysbus
  2. device_del will require the same hacking as device_add
  3. apic now is sysbus device, question is what will be lost if it is attached 
to link and
     won't be sysbus_device_type anymore?
  4. will reset called on sysbus reach apic/cpu if it is on the link?

Any opinions on direction I should look more closely?



reply via email to

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