From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=58534 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OnZTV-0007qR-JJ for qemu-devel@nongnu.org; Mon, 23 Aug 2010 12:02:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OnZTU-00006r-3C for qemu-devel@nongnu.org; Mon, 23 Aug 2010 12:02:17 -0400 Received: from mail-gx0-f173.google.com ([209.85.161.173]:55657) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OnZTU-00006i-0w for qemu-devel@nongnu.org; Mon, 23 Aug 2010 12:02:16 -0400 Received: by gxk26 with SMTP id 26so33192gxk.4 for ; Mon, 23 Aug 2010 09:02:15 -0700 (PDT) Message-ID: <4C729B80.3090604@codemonkey.ws> Date: Mon, 23 Aug 2010 11:02:08 -0500 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH v2 0/7] APIC/IOAPIC cleanup References: <4C6D86F9.3010602@codemonkey.ws> <4C6D98E7.9020109@codemonkey.ws> <4C6DA75D.40303@codemonkey.ws> <4C6ECBB7.7060608@codemonkey.ws> <4C718865.7010807@redhat.com> <4C719080.4030202@codemonkey.ws> <4C720B1F.3030206@redhat.com> <4C727646.3040903@codemonkey.ws> <4C727ACC.7080501@redhat.com> <4C727C43.2040704@codemonkey.ws> <4C727EF5.6060402@redhat.com> <4C72851E.50405@codemonkey.ws> <4C72869A.3030302@redhat.com> <4C728A12.2090006@codemonkey.ws> <4C72904F.2030103@redhat.com> In-Reply-To: <4C72904F.2030103@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Avi Kivity Cc: Blue Swirl , "Liu >> \"Liu, Jinsong\"" , qemu-devel , Markus Armbruster , Paul Brook On 08/23/2010 10:14 AM, Avi Kivity wrote: > On 08/23/2010 05:47 PM, Anthony Liguori wrote: >> >>>> >>>> Devices can contain references to structs and objects. If a Device >>>> contains a reference to an object, the object should be stored in a >>>> BusState which is a container of Devices. Therefore, the object >>>> should inherit from Device. >>> >>> I disagree. It's up to the author to decide whether to split a >>> Device into 1 or 15 objects. >>> >>> If one of the other objects is also a subclass of DeviceState, then >>> you're probably violating that DeviceState's contract. But that's a >>> different (and trivial) matter. >>> >>> (side point: in C no objects have constructors and methods. in C++ >>> all objects have constructors and methods, even PODs) >> >> Things that inherit from DeviceState have ctors/dtors. Things that >> don't end up inventing their own and probably will do so poorly. > > you mean misimplement other_state_init(OtherState *) and > other_state_destroy(OtherState *)? And hot plug, save/restore, properties, and all of the other things that go along with qdev. Hot plug is a good example of how easy it is to screw this up by not having the right hooks being propagated through the device model. Regards, Anthony Liguori