From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:54521) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S0uqZ-0001mO-A2 for qemu-devel@nongnu.org; Fri, 24 Feb 2012 08:06:07 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1S0uqS-0006Fw-HK for qemu-devel@nongnu.org; Fri, 24 Feb 2012 08:06:02 -0500 Received: from mx1.redhat.com ([209.132.183.28]:40080) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S0uqS-0006FY-4u for qemu-devel@nongnu.org; Fri, 24 Feb 2012 08:05:56 -0500 Message-ID: <4F478B2D.9050903@redhat.com> Date: Fri, 24 Feb 2012 14:05:49 +0100 From: Igor Mammedov MIME-Version: 1.0 References: <1329347774-23262-1-git-send-email-imammedo@redhat.com> <1329347774-23262-2-git-send-email-imammedo@redhat.com> <4F3CE7A5.30600@siemens.com> <4F3CF9AE.5020701@codemonkey.ws> <4F3E8817.7050001@redhat.com> In-Reply-To: <4F3E8817.7050001@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 1/7] Introduce a new bus "ICC" to connect APIC List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: Jan Kiszka , "qemu-devel@nongnu.org" , =?ISO-8859-1?Q?Andreas_F=E4rber?= 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?