On 09/19/2011 04:55 PM, Gerd Hoffmann wrote:

If the register access is trivial then you don't need to call into the driver at all ...

You can have a look at hw/intel-hda.c which actually implements something like this, with some commonly needed features:

  * The "offset" field already mentioned by avi is there, so trivial
    reads/writes can be handled by the core.
  * A "wmask" field to specify which bits are guest writable.
  * A "wclear" field to specify which bits have write-one-to-clear
    semantics.
  * A "reset" field which specified the value this field has after
    device reset.  Also serves as value for read-only registers.
  * read/write handlers of course.  The write handler is called after
    the core applied sanity checks and calculated the new register
    value (using wmask+wclear).
  * A "name" field (for debug logging).

It's pretty nice, alot more readable that a big switch, forces you to think which bits the guest can set (not specifying a wmask gives you a read-only register ;).

Also no bloat. With this moving to memory core the all the handlers will gain a line with a container_of(), but that isn't too bad too IMHO.

It's also more secure. Move as much as possible into the core, and review (and fuzz) that like hell.

--
error compiling committee.c: too many arguments to function


Reply via email to