qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC] Introduce module API to QEMU


From: Blue Swirl
Subject: Re: [Qemu-devel] [RFC] Introduce module API to QEMU
Date: Fri, 3 Apr 2009 20:12:38 +0300

On 4/3/09, Anthony Liguori <address@hidden> wrote:
> 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.

The shell script could analyze the module files before compiling and
generate a .h file which contains #defines for the names of the
exported functions. The names can be made unique for example by
prepending the file name with some munging with tr.

This .h file would be included by the module when compiling, it
defines how the exported functions should be named.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]