From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony Liguori Subject: Re: [Qemu-devel] KVM call minutes for Feb 8 Date: Wed, 09 Feb 2011 20:53:48 +0100 Message-ID: <4D52F0CC.4030204@codemonkey.ws> References: <20110208155557.GM6198@x200.localdomain> <4D51B1C9.3080507@codemonkey.ws> <4D526D0D.9020507@codemonkey.ws> <4D52A86A.1030407@codemonkey.ws> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: Chris Wright , Markus Armbruster , kvm@vger.kernel.org, qemu-devel@nongnu.org To: Blue Swirl Return-path: Received: from mail-fx0-f46.google.com ([209.85.161.46]:37825 "EHLO mail-fx0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750786Ab1BITyG (ORCPT ); Wed, 9 Feb 2011 14:54:06 -0500 Received: by fxm20 with SMTP id 20so586474fxm.19 for ; Wed, 09 Feb 2011 11:54:05 -0800 (PST) In-Reply-To: Sender: kvm-owner@vger.kernel.org List-ID: On 02/09/2011 06:48 PM, Blue Swirl wrote: > >> We can just do: >> >> ISASerialState dev; >> >> isa_serial_init(&dev, 0, 0x274, 0x07, NULL, NULL); >> > Do you mean that there should be a generic way of doing that, like > sysbus_create_varargs() for qdev, or just add inline functions which > hide qdev property setup? > qdev properties are construct-only right now. What qdev is trying to do is provide a mechanism invoke constructors through a factory interface where the inputs can come from many places. Another way of doing this is to just have a normal constructor like: void isa_serial_init(ISASerialState *dev, uint32_t iobase, ...) { dev->iobase = iobase; } And then have an (autogenerated) factory proxy: static ISASerialState *isa_serial_factory(QemuOpts *opts) { ISASerialState *isa = qemu_mallocz(sizeof(*isa)); isa_serial_init(isa, qemu_opt_get_int(opts, "iobase"), ...); return isa; } The advantage of this model is that you can have multiple factory interfaces to create a device. For instance, you can have a QemuOpts based factory for -device and a QDict based factory for QMP. In addition, normal C code doesn't have to deal with any of the factory interfaces. It can just invoke a normal C interface. Building the factory interface as an intrinsic part of qdev was a mistake IMHO. Regards, Anthony Liguori > I still think that FDT should be used in the future. That would > require that the properties can be set up mechanically, and I don't > see how your proposal would help that. > >