From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:59618) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rq3Or-00062M-3e for qemu-devel@nongnu.org; Wed, 25 Jan 2012 09:00:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Rq3Of-00057z-3B for qemu-devel@nongnu.org; Wed, 25 Jan 2012 09:00:33 -0500 Message-ID: <4F200AEE.20504@codemonkey.ws> Date: Wed, 25 Jan 2012 08:00:14 -0600 From: Anthony Liguori MIME-Version: 1.0 References: <1327433600-7403-1-git-send-email-aliguori@us.ibm.com> <1327433600-7403-28-git-send-email-aliguori@us.ibm.com> <4F1F0E2D.2020706@web.de> <4F1F12E7.2020309@us.ibm.com> <4F1F1C28.4040600@web.de> <4F1F1E91.50609@codemonkey.ws> <4F1F233B.8040804@web.de> <4F1F2875.3050509@codemonkey.ws> <4F1F2B77.2020703@web.de> <4F1F38B6.7000506@codemonkey.ws> <4F1FBF31.2020002@web.de> In-Reply-To: <4F1FBF31.2020002@web.de> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 27/28] sysbus: apic: ioapic: convert to QEMU Object Model List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jan Kiszka Cc: Peter Maydell , "Michael S. Tsirkin" , Alexander Graf , qemu-devel@nongnu.org, Blue Swirl , =?ISO-8859-15?Q?Andreas_F=E4rber?= , qemu-ppc@nongnu.org, Paul Brook , Aurelien Jarno , Gerd Hoffmann On 01/25/2012 02:37 AM, Jan Kiszka wrote: > On 2012-01-25 00:03, Anthony Liguori wrote: >> They're exactly the same size (16 lines). If you embed TypeInfo into >> DeviceTypeInfo, and introduce a Device specific type registration >> function, then you could do: >> >> static DeviceTypeInfo my_device_type_info = { >> .type.name = TYPE_MY_DEVICE, >> .type.parent = TYPE_PARENT_DEVICE, >> .reset = my_device_reset, > > And if you introduce some > > #define TYPE_UNIMPLEMENTED (void *)&dummy_variable (void *) isn't compatible with integers or function pointers (at least not in a portable way). You would need to use type specific unimplemented mechanisms. > > you can easily express > > [.field = NULL] => use parent > .field = UNIMPLEMENTED => don't run any handler > >> }; >> >> static void register_devices(void) >> { >> device_type_register_static(&my_device_type_info); >> } >> >> Which admittedly saves 6 lines, but also is a big step backwards IMHO. >> Now you've got a lot of one-off functions which means you loose the >> advantage of having everything work through the same infrastructure. > > Can't follow. Four lines > > [static inline] void device_type_register_static(DeviceTypeInfo *dt) > { > type_register_static(&dt->type); > } > > are neither ugly nor complex. Rather, this helps concentrating effort at > _central_ places instead of decentralizing and duplicating lines like in > your imperative approach. That's the whole point: keep the common case > (derived classes) compact. Send a patch. The infrastructure available should be enough to do whatever you need to. I'm not being dismissive, I've already spent a lot of time trying to make it work and have convinced myself that it isn't workable. If you can show a mechanism that works, I don't mind scripting a mass conversion. I'm also fairly confident that a workable solution is going to be better than what we have. Regards, Anthony Liguori > > Jan >