From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LpixT-0006Vs-HQ for qemu-devel@nongnu.org; Fri, 03 Apr 2009 08:57:19 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LpixO-0006Uy-2P for qemu-devel@nongnu.org; Fri, 03 Apr 2009 08:57:19 -0400 Received: from [199.232.76.173] (port=42234 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LpixN-0006Ut-Sn for qemu-devel@nongnu.org; Fri, 03 Apr 2009 08:57:13 -0400 Received: from yw-out-1718.google.com ([74.125.46.156]:21841) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LpixN-0000Vr-Gs for qemu-devel@nongnu.org; Fri, 03 Apr 2009 08:57:13 -0400 Received: by yw-out-1718.google.com with SMTP id 9so625637ywk.82 for ; Fri, 03 Apr 2009 05:57:12 -0700 (PDT) Message-ID: <49D607A3.7040907@codemonkey.ws> Date: Fri, 03 Apr 2009 07:57:07 -0500 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [RFC] Introduce module API to QEMU References: <1238724755-15929-1-git-send-email-aliguori@us.ibm.com> <200904031235.33157.paul@codesourcery.com> In-Reply-To: <200904031235.33157.paul@codesourcery.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Paul Brook wrote: >> This patch introduces a module API similar to what's in the Linux kernel. >> This includes module_init/module_exit functions that register functions >> that are run at init and exit respectively. >> > > Wouldn't it be much simpler to just have a list of device names, and assume > the each device is implemented in $devicename., and provides > $devicename_register ? > > It's then an extremely simple shell script to collate and call these. > It doesn't generalize very well. For instance, the VNC server is not a device but it needs to be able to register as a DisplayState backend. The other way to do this typically is to have module_init() functions that turn a function into a non-static function with some sort of annotation that disappears at compile time. For instance: module_init(virtnet_init); Would become: int qemu__module__init__virtnet_init(void) { return virtnet_init(); } with #define qemu__init__function You then have something that searches for these functions. The problem with this approach is that virtnet_init must be a unique name because it's a non-static. You can add some uniqueness by playing with __LINE__ but that doesn't make any guarantees. This is doable but IMHO a worse solution. I'd rather use __attribute__((constructor)) for now and introduce the above only if we ever support something other than GCC. Regards, Anthony Liguori > Paul > > >