blockdev: Add dynamic module loading for block drivers
authorMarc Mari <markmb@redhat.com>
Fri, 12 Aug 2016 13:27:03 +0000 (09:27 -0400)
committerMax Reitz <mreitz@redhat.com>
Tue, 20 Sep 2016 20:12:03 +0000 (22:12 +0200)
commit88d88798b7efeb0be15b1a60e58b1f8ba4c2f700
tree13c971d74f4ee7ffe1829d038955c813b5f1fce0
parent0c0c1fd973013671ea63680fcd9802766c1d04fe
blockdev: Add dynamic module loading for block drivers

Extend the current module interface to allow for block drivers to be
loaded dynamically on request. The only block drivers that can be
converted into modules are the drivers that don't perform any init
operation except for registering themselves.

In addition, only the protocol drivers are being modularized, as they
are the only ones which see significant performance benefits. The format
drivers do not generally link to external libraries, so modularizing
them is of no benefit from a performance perspective.

All the necessary module information is located in a new structure found
in module_block.h

This spoils the purpose of 5505e8b76f (block/dmg: make it modular).

Before this patch, if module build is enabled, block-dmg.so is linked to
libbz2, whereas the main binary is not. In downstream, theoretically, it
means only the qemu-block-extra package depends on libbz2, while the
main QEMU package needn't to. With this patch, we (temporarily) change
the case so that the main QEMU depends on libbz2 again.

Signed-off-by: Marc MarĂ­ <markmb@redhat.com>
Signed-off-by: Colin Lord <clord@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-id: 1471008424-16465-4-git-send-email-clord@redhat.com
Reviewed-by: Max Reitz <mreitz@redhat.com>
[mreitz: Do a signed comparison against the length of
 block_driver_modules[], so it will not cause a compile error when
 empty]
Signed-off-by: Max Reitz <mreitz@redhat.com>
Makefile
block.c
block/Makefile.objs
include/qemu/module.h
util/module.c