* [PATCH v2 1/7] qdev: add support for device module loading
2020-06-04 13:16 [PATCH v2 0/7] build some devices as modules Gerd Hoffmann
@ 2020-06-04 13:16 ` Gerd Hoffmann
2020-06-04 13:47 ` BALATON Zoltan
2020-06-04 13:16 ` [PATCH v2 2/7] build: fix device module builds Gerd Hoffmann
` (5 subsequent siblings)
6 siblings, 1 reply; 10+ messages in thread
From: Gerd Hoffmann @ 2020-06-04 13:16 UTC (permalink / raw)
To: qemu-devel
Cc: dinechin, Paolo Bonzini, Daniel P. Berrangé, Eduardo Habkost,
Gerd Hoffmann
When compiling devices as modules we'll need some infrastrtucture to
actually load those modules if needed. This patch adds it.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
include/hw/qdev-core.h | 3 +++
include/qemu/module.h | 1 +
hw/core/qdev.c | 50 ++++++++++++++++++++++++++++++++++++++++++
qdev-monitor.c | 5 +++++
qom/qom-qmp-cmds.c | 1 +
stubs/hw-module.c | 6 +++++
stubs/Makefile.objs | 1 +
7 files changed, 67 insertions(+)
create mode 100644 stubs/hw-module.c
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index b870b279661a..a96c890bb95b 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -552,4 +552,7 @@ void device_listener_unregister(DeviceListener *listener);
*/
bool qdev_should_hide_device(QemuOpts *opts);
+void qdev_module_load_type(const char *type);
+void qdev_module_load_all(void);
+
#endif
diff --git a/include/qemu/module.h b/include/qemu/module.h
index 011ae1ae7605..077a6b09bca7 100644
--- a/include/qemu/module.h
+++ b/include/qemu/module.h
@@ -64,6 +64,7 @@ typedef enum {
#define block_module_load_one(lib) module_load_one("block-", lib)
#define ui_module_load_one(lib) module_load_one("ui-", lib)
#define audio_module_load_one(lib) module_load_one("audio-", lib)
+#define hw_module_load_one(lib) module_load_one("hw-", lib)
void register_module_init(void (*fn)(void), module_init_type type);
void register_dso_module_init(void (*fn)(void), module_init_type type);
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 9e5538aeaebd..7177798840d4 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -146,10 +146,60 @@ DeviceState *qdev_create(BusState *bus, const char *name)
return dev;
}
+/*
+ * Building devices modular is mostly useful in case they have
+ * dependencies to external libraries. Which is the case for very few
+ * devices. So with the expecration that this will be rather the
+ * exception than to rule go with a simple hardcoded list for now ...
+ */
+static struct {
+ const char *type;
+ const char *mod;
+} const hwmodules[] = {
+};
+
+static bool qdev_module_loaded_all;
+
+void qdev_module_load_type(const char *type)
+{
+ int i;
+
+ if (qdev_module_loaded_all) {
+ return;
+ }
+ for (i = 0; i < ARRAY_SIZE(hwmodules); i++) {
+ if (strcmp(hwmodules[i].type, type) == 0) {
+ hw_module_load_one(hwmodules[i].mod);
+ return;
+ }
+ }
+}
+
+void qdev_module_load_all(void)
+{
+ int i;
+
+ if (qdev_module_loaded_all) {
+ return;
+ }
+ for (i = 0; i < ARRAY_SIZE(hwmodules); i++) {
+ if (i > 0 && strcmp(hwmodules[i - 1].mod,
+ hwmodules[i].mod) == 0) {
+ /* one module implementing multiple devices -> load only once */
+ continue;
+ }
+ hw_module_load_one(hwmodules[i].mod);
+ }
+ qdev_module_loaded_all = true;
+}
+
DeviceState *qdev_try_create(BusState *bus, const char *type)
{
DeviceState *dev;
+ if (object_class_by_name(type) == NULL) {
+ qdev_module_load_type(type);
+ }
if (object_class_by_name(type) == NULL) {
return NULL;
}
diff --git a/qdev-monitor.c b/qdev-monitor.c
index a4735d3bb190..55dddeb2f978 100644
--- a/qdev-monitor.c
+++ b/qdev-monitor.c
@@ -147,6 +147,7 @@ static void qdev_print_devinfos(bool show_no_user)
int i;
bool cat_printed;
+ qdev_module_load_all();
list = object_class_get_list_sorted(TYPE_DEVICE, false);
for (i = 0; i <= DEVICE_CATEGORY_MAX; i++) {
@@ -224,6 +225,10 @@ static DeviceClass *qdev_get_device_class(const char **driver, Error **errp)
oc = object_class_by_name(*driver);
}
}
+ if (!oc) {
+ qdev_module_load_type(*driver);
+ oc = object_class_by_name(*driver);
+ }
if (!object_class_dynamic_cast(oc, TYPE_DEVICE)) {
if (*driver != original_name) {
diff --git a/qom/qom-qmp-cmds.c b/qom/qom-qmp-cmds.c
index c5249e44d020..fe48cd2f9cf0 100644
--- a/qom/qom-qmp-cmds.c
+++ b/qom/qom-qmp-cmds.c
@@ -116,6 +116,7 @@ ObjectTypeInfoList *qmp_qom_list_types(bool has_implements,
{
ObjectTypeInfoList *ret = NULL;
+ qdev_module_load_all();
object_class_foreach(qom_list_types_tramp, implements, abstract, &ret);
return ret;
diff --git a/stubs/hw-module.c b/stubs/hw-module.c
new file mode 100644
index 000000000000..1c312d2fc2b3
--- /dev/null
+++ b/stubs/hw-module.c
@@ -0,0 +1,6 @@
+#include "qemu/osdep.h"
+#include "hw/qdev-core.h"
+
+void qdev_module_load_all(void)
+{
+}
diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs
index 6a9e3135e8f9..a4eb96514ddc 100644
--- a/stubs/Makefile.objs
+++ b/stubs/Makefile.objs
@@ -44,4 +44,5 @@ stub-obj-y += pci-host-piix.o
stub-obj-y += ram-block.o
stub-obj-y += ramfb.o
stub-obj-y += fw_cfg.o
+stub-obj-y += hw-module.o
stub-obj-$(CONFIG_SOFTMMU) += semihost.o
--
2.18.4
^ permalink raw reply related [flat|nested] 10+ messages in thread* Re: [PATCH v2 1/7] qdev: add support for device module loading
2020-06-04 13:16 ` [PATCH v2 1/7] qdev: add support for device module loading Gerd Hoffmann
@ 2020-06-04 13:47 ` BALATON Zoltan
0 siblings, 0 replies; 10+ messages in thread
From: BALATON Zoltan @ 2020-06-04 13:47 UTC (permalink / raw)
To: Gerd Hoffmann
Cc: dinechin, Paolo Bonzini, Daniel P. Berrangé, qemu-devel,
Eduardo Habkost
On Thu, 4 Jun 2020, Gerd Hoffmann wrote:
> When compiling devices as modules we'll need some infrastrtucture to
> actually load those modules if needed. This patch adds it.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> include/hw/qdev-core.h | 3 +++
> include/qemu/module.h | 1 +
> hw/core/qdev.c | 50 ++++++++++++++++++++++++++++++++++++++++++
> qdev-monitor.c | 5 +++++
> qom/qom-qmp-cmds.c | 1 +
> stubs/hw-module.c | 6 +++++
> stubs/Makefile.objs | 1 +
> 7 files changed, 67 insertions(+)
> create mode 100644 stubs/hw-module.c
>
> diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
> index b870b279661a..a96c890bb95b 100644
> --- a/include/hw/qdev-core.h
> +++ b/include/hw/qdev-core.h
> @@ -552,4 +552,7 @@ void device_listener_unregister(DeviceListener *listener);
> */
> bool qdev_should_hide_device(QemuOpts *opts);
>
> +void qdev_module_load_type(const char *type);
> +void qdev_module_load_all(void);
> +
> #endif
> diff --git a/include/qemu/module.h b/include/qemu/module.h
> index 011ae1ae7605..077a6b09bca7 100644
> --- a/include/qemu/module.h
> +++ b/include/qemu/module.h
> @@ -64,6 +64,7 @@ typedef enum {
> #define block_module_load_one(lib) module_load_one("block-", lib)
> #define ui_module_load_one(lib) module_load_one("ui-", lib)
> #define audio_module_load_one(lib) module_load_one("audio-", lib)
> +#define hw_module_load_one(lib) module_load_one("hw-", lib)
>
> void register_module_init(void (*fn)(void), module_init_type type);
> void register_dso_module_init(void (*fn)(void), module_init_type type);
> diff --git a/hw/core/qdev.c b/hw/core/qdev.c
> index 9e5538aeaebd..7177798840d4 100644
> --- a/hw/core/qdev.c
> +++ b/hw/core/qdev.c
> @@ -146,10 +146,60 @@ DeviceState *qdev_create(BusState *bus, const char *name)
> return dev;
> }
>
> +/*
> + * Building devices modular is mostly useful in case they have
> + * dependencies to external libraries. Which is the case for very few
> + * devices. So with the expecration that this will be rather the
Typo: "expectation"
Regards,
BALATON Zoltan
> + * exception than to rule go with a simple hardcoded list for now ...
> + */
> +static struct {
> + const char *type;
> + const char *mod;
> +} const hwmodules[] = {
> +};
> +
> +static bool qdev_module_loaded_all;
> +
> +void qdev_module_load_type(const char *type)
> +{
> + int i;
> +
> + if (qdev_module_loaded_all) {
> + return;
> + }
> + for (i = 0; i < ARRAY_SIZE(hwmodules); i++) {
> + if (strcmp(hwmodules[i].type, type) == 0) {
> + hw_module_load_one(hwmodules[i].mod);
> + return;
> + }
> + }
> +}
> +
> +void qdev_module_load_all(void)
> +{
> + int i;
> +
> + if (qdev_module_loaded_all) {
> + return;
> + }
> + for (i = 0; i < ARRAY_SIZE(hwmodules); i++) {
> + if (i > 0 && strcmp(hwmodules[i - 1].mod,
> + hwmodules[i].mod) == 0) {
> + /* one module implementing multiple devices -> load only once */
> + continue;
> + }
> + hw_module_load_one(hwmodules[i].mod);
> + }
> + qdev_module_loaded_all = true;
> +}
> +
> DeviceState *qdev_try_create(BusState *bus, const char *type)
> {
> DeviceState *dev;
>
> + if (object_class_by_name(type) == NULL) {
> + qdev_module_load_type(type);
> + }
> if (object_class_by_name(type) == NULL) {
> return NULL;
> }
> diff --git a/qdev-monitor.c b/qdev-monitor.c
> index a4735d3bb190..55dddeb2f978 100644
> --- a/qdev-monitor.c
> +++ b/qdev-monitor.c
> @@ -147,6 +147,7 @@ static void qdev_print_devinfos(bool show_no_user)
> int i;
> bool cat_printed;
>
> + qdev_module_load_all();
> list = object_class_get_list_sorted(TYPE_DEVICE, false);
>
> for (i = 0; i <= DEVICE_CATEGORY_MAX; i++) {
> @@ -224,6 +225,10 @@ static DeviceClass *qdev_get_device_class(const char **driver, Error **errp)
> oc = object_class_by_name(*driver);
> }
> }
> + if (!oc) {
> + qdev_module_load_type(*driver);
> + oc = object_class_by_name(*driver);
> + }
>
> if (!object_class_dynamic_cast(oc, TYPE_DEVICE)) {
> if (*driver != original_name) {
> diff --git a/qom/qom-qmp-cmds.c b/qom/qom-qmp-cmds.c
> index c5249e44d020..fe48cd2f9cf0 100644
> --- a/qom/qom-qmp-cmds.c
> +++ b/qom/qom-qmp-cmds.c
> @@ -116,6 +116,7 @@ ObjectTypeInfoList *qmp_qom_list_types(bool has_implements,
> {
> ObjectTypeInfoList *ret = NULL;
>
> + qdev_module_load_all();
> object_class_foreach(qom_list_types_tramp, implements, abstract, &ret);
>
> return ret;
> diff --git a/stubs/hw-module.c b/stubs/hw-module.c
> new file mode 100644
> index 000000000000..1c312d2fc2b3
> --- /dev/null
> +++ b/stubs/hw-module.c
> @@ -0,0 +1,6 @@
> +#include "qemu/osdep.h"
> +#include "hw/qdev-core.h"
> +
> +void qdev_module_load_all(void)
> +{
> +}
> diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs
> index 6a9e3135e8f9..a4eb96514ddc 100644
> --- a/stubs/Makefile.objs
> +++ b/stubs/Makefile.objs
> @@ -44,4 +44,5 @@ stub-obj-y += pci-host-piix.o
> stub-obj-y += ram-block.o
> stub-obj-y += ramfb.o
> stub-obj-y += fw_cfg.o
> +stub-obj-y += hw-module.o
> stub-obj-$(CONFIG_SOFTMMU) += semihost.o
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 2/7] build: fix device module builds
2020-06-04 13:16 [PATCH v2 0/7] build some devices as modules Gerd Hoffmann
2020-06-04 13:16 ` [PATCH v2 1/7] qdev: add support for device module loading Gerd Hoffmann
@ 2020-06-04 13:16 ` Gerd Hoffmann
2020-06-04 13:16 ` [PATCH v2 3/7] ccid: build smartcard as module Gerd Hoffmann
` (4 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Gerd Hoffmann @ 2020-06-04 13:16 UTC (permalink / raw)
To: qemu-devel
Cc: dinechin, Paolo Bonzini, Daniel P. Berrangé, Eduardo Habkost,
Gerd Hoffmann
See comment. Feels quite hackish. Better ideas anyone?
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
Makefile.target | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/Makefile.target b/Makefile.target
index 8ed1eba95b9c..c70325df5796 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -179,6 +179,13 @@ endif # CONFIG_SOFTMMU
dummy := $(call unnest-vars,,obj-y)
all-obj-y := $(obj-y)
+#
+# common-obj-m has some crap here, probably as side effect from
+# filling obj-y. Clear it. Fixes suspious dependency errors when
+# building devices as modules.
+#
+common-obj-m :=
+
include $(SRC_PATH)/Makefile.objs
dummy := $(call unnest-vars,.., \
authz-obj-y \
--
2.18.4
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH v2 3/7] ccid: build smartcard as module
2020-06-04 13:16 [PATCH v2 0/7] build some devices as modules Gerd Hoffmann
2020-06-04 13:16 ` [PATCH v2 1/7] qdev: add support for device module loading Gerd Hoffmann
2020-06-04 13:16 ` [PATCH v2 2/7] build: fix device module builds Gerd Hoffmann
@ 2020-06-04 13:16 ` Gerd Hoffmann
2020-06-04 13:16 ` [PATCH v2 4/7] usb: build usb-redir " Gerd Hoffmann
` (3 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Gerd Hoffmann @ 2020-06-04 13:16 UTC (permalink / raw)
To: qemu-devel
Cc: dinechin, Paolo Bonzini, Daniel P. Berrangé, Eduardo Habkost,
Gerd Hoffmann
Drops libcacard.so dependency from core qemu.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
Makefile.objs | 1 +
hw/core/qdev.c | 2 ++
hw/Makefile.objs | 1 +
hw/usb/Makefile.objs | 4 +++-
4 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/Makefile.objs b/Makefile.objs
index 99774cfd2545..28c165c0e623 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -59,6 +59,7 @@ common-obj-y += migration/
common-obj-y += audio/
common-obj-m += audio/
common-obj-y += hw/
+common-obj-m += hw/
common-obj-y += replay/
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 7177798840d4..36c301750c31 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -156,6 +156,8 @@ static struct {
const char *type;
const char *mod;
} const hwmodules[] = {
+ { .type = "ccid-card-passthru", .mod = "usb-smartcard" },
+ { .type = "ccid-card-emulated", .mod = "usb-smartcard" },
};
static bool qdev_module_loaded_all;
diff --git a/hw/Makefile.objs b/hw/Makefile.objs
index 660e2b437348..71843591fe43 100644
--- a/hw/Makefile.objs
+++ b/hw/Makefile.objs
@@ -43,4 +43,5 @@ devices-dirs-y += smbios/
endif
common-obj-y += $(devices-dirs-y)
+common-obj-m += usb/
obj-y += $(devices-dirs-y)
diff --git a/hw/usb/Makefile.objs b/hw/usb/Makefile.objs
index 66835e5bf732..d8e340cd0748 100644
--- a/hw/usb/Makefile.objs
+++ b/hw/usb/Makefile.objs
@@ -28,11 +28,13 @@ common-obj-$(CONFIG_USB_NETWORK) += dev-network.o
ifeq ($(CONFIG_USB_SMARTCARD),y)
common-obj-y += dev-smartcard-reader.o
-common-obj-$(CONFIG_SMARTCARD) += smartcard.mo
+ifeq ($(CONFIG_SMARTCARD),y)
+common-obj-m += smartcard.mo
smartcard.mo-objs := ccid-card-passthru.o ccid-card-emulated.o
smartcard.mo-cflags := $(SMARTCARD_CFLAGS)
smartcard.mo-libs := $(SMARTCARD_LIBS)
endif
+endif
ifeq ($(CONFIG_POSIX),y)
common-obj-$(CONFIG_USB_STORAGE_MTP) += dev-mtp.o
--
2.18.4
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH v2 4/7] usb: build usb-redir as module
2020-06-04 13:16 [PATCH v2 0/7] build some devices as modules Gerd Hoffmann
` (2 preceding siblings ...)
2020-06-04 13:16 ` [PATCH v2 3/7] ccid: build smartcard as module Gerd Hoffmann
@ 2020-06-04 13:16 ` Gerd Hoffmann
2020-06-04 13:16 ` [PATCH v2 5/7] vga: build qxl " Gerd Hoffmann
` (2 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Gerd Hoffmann @ 2020-06-04 13:16 UTC (permalink / raw)
To: qemu-devel
Cc: dinechin, Paolo Bonzini, Daniel P. Berrangé, Eduardo Habkost,
Gerd Hoffmann
Drops libusbredirparser.so dependency from core qemu.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/core/qdev.c | 1 +
hw/usb/Makefile.objs | 9 ++++++---
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 36c301750c31..cab971758b26 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -158,6 +158,7 @@ static struct {
} const hwmodules[] = {
{ .type = "ccid-card-passthru", .mod = "usb-smartcard" },
{ .type = "ccid-card-emulated", .mod = "usb-smartcard" },
+ { .type = "usb-redir", .mod = "usb-redirect" },
};
static bool qdev_module_loaded_all;
diff --git a/hw/usb/Makefile.objs b/hw/usb/Makefile.objs
index d8e340cd0748..5619a3b23981 100644
--- a/hw/usb/Makefile.objs
+++ b/hw/usb/Makefile.objs
@@ -42,9 +42,12 @@ endif
# usb redirection
ifeq ($(CONFIG_USB),y)
-common-obj-$(CONFIG_USB_REDIR) += redirect.o quirks.o
-redirect.o-cflags = $(USB_REDIR_CFLAGS)
-redirect.o-libs = $(USB_REDIR_LIBS)
+ifeq ($(CONFIG_USB-REDIR),y)
+common-obj-m += redirect.mo
+redirect.mo-objs = redirect.o quirks.o
+redirect.mo-cflags = $(USB_REDIR_CFLAGS)
+redirect.mo-libs = $(USB_REDIR_LIBS)
+endif
endif
# usb pass-through
--
2.18.4
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH v2 5/7] vga: build qxl as module
2020-06-04 13:16 [PATCH v2 0/7] build some devices as modules Gerd Hoffmann
` (3 preceding siblings ...)
2020-06-04 13:16 ` [PATCH v2 4/7] usb: build usb-redir " Gerd Hoffmann
@ 2020-06-04 13:16 ` Gerd Hoffmann
2020-06-04 13:16 ` [PATCH v2 6/7] vga: build virtio-gpu only once Gerd Hoffmann
2020-06-04 13:16 ` [PATCH v2 7/7] vga: build virtio-gpu as module Gerd Hoffmann
6 siblings, 0 replies; 10+ messages in thread
From: Gerd Hoffmann @ 2020-06-04 13:16 UTC (permalink / raw)
To: qemu-devel
Cc: dinechin, Paolo Bonzini, Daniel P. Berrangé, Eduardo Habkost,
Gerd Hoffmann
First step in making spice support modular.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/core/qdev.c | 2 ++
hw/Makefile.objs | 1 +
hw/display/Makefile.objs | 5 ++++-
3 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index cab971758b26..70cf84bb67d0 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -159,6 +159,8 @@ static struct {
{ .type = "ccid-card-passthru", .mod = "usb-smartcard" },
{ .type = "ccid-card-emulated", .mod = "usb-smartcard" },
{ .type = "usb-redir", .mod = "usb-redirect" },
+ { .type = "qxl-vga", .mod = "display-qxl" },
+ { .type = "qxl", .mod = "display-qxl" },
};
static bool qdev_module_loaded_all;
diff --git a/hw/Makefile.objs b/hw/Makefile.objs
index 71843591fe43..fd6519e8af3f 100644
--- a/hw/Makefile.objs
+++ b/hw/Makefile.objs
@@ -43,5 +43,6 @@ devices-dirs-y += smbios/
endif
common-obj-y += $(devices-dirs-y)
+common-obj-m += display/
common-obj-m += usb/
obj-y += $(devices-dirs-y)
diff --git a/hw/display/Makefile.objs b/hw/display/Makefile.objs
index 77a7d622bd2d..76b3571e4902 100644
--- a/hw/display/Makefile.objs
+++ b/hw/display/Makefile.objs
@@ -44,7 +44,10 @@ common-obj-$(CONFIG_ARTIST) += artist.o
obj-$(CONFIG_VGA) += vga.o
-common-obj-$(CONFIG_QXL) += qxl.o qxl-logger.o qxl-render.o
+ifeq ($(CONFIG_QXL),y)
+common-obj-m += qxl.mo
+qxl.mo-objs = qxl.o qxl-logger.o qxl-render.o
+endif
obj-$(CONFIG_VIRTIO_GPU) += virtio-gpu-base.o virtio-gpu.o virtio-gpu-3d.o
obj-$(CONFIG_VHOST_USER_GPU) += vhost-user-gpu.o
--
2.18.4
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH v2 6/7] vga: build virtio-gpu only once
2020-06-04 13:16 [PATCH v2 0/7] build some devices as modules Gerd Hoffmann
` (4 preceding siblings ...)
2020-06-04 13:16 ` [PATCH v2 5/7] vga: build qxl " Gerd Hoffmann
@ 2020-06-04 13:16 ` Gerd Hoffmann
2020-06-04 13:23 ` Philippe Mathieu-Daudé
2020-06-04 13:16 ` [PATCH v2 7/7] vga: build virtio-gpu as module Gerd Hoffmann
6 siblings, 1 reply; 10+ messages in thread
From: Gerd Hoffmann @ 2020-06-04 13:16 UTC (permalink / raw)
To: qemu-devel
Cc: dinechin, Paolo Bonzini, Daniel P. Berrangé, Eduardo Habkost,
Gerd Hoffmann
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/display/Makefile.objs | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/hw/display/Makefile.objs b/hw/display/Makefile.objs
index 76b3571e4902..d619594ad4d3 100644
--- a/hw/display/Makefile.objs
+++ b/hw/display/Makefile.objs
@@ -49,12 +49,12 @@ common-obj-m += qxl.mo
qxl.mo-objs = qxl.o qxl-logger.o qxl-render.o
endif
-obj-$(CONFIG_VIRTIO_GPU) += virtio-gpu-base.o virtio-gpu.o virtio-gpu-3d.o
-obj-$(CONFIG_VHOST_USER_GPU) += vhost-user-gpu.o
-obj-$(call land,$(CONFIG_VIRTIO_GPU),$(CONFIG_VIRTIO_PCI)) += virtio-gpu-pci.o
-obj-$(call land,$(CONFIG_VHOST_USER_GPU),$(CONFIG_VIRTIO_PCI)) += vhost-user-gpu-pci.o
-obj-$(CONFIG_VIRTIO_VGA) += virtio-vga.o
-obj-$(CONFIG_VHOST_USER_VGA) += vhost-user-vga.o
+common-obj-$(CONFIG_VIRTIO_GPU) += virtio-gpu-base.o virtio-gpu.o virtio-gpu-3d.o
+common-obj-$(CONFIG_VHOST_USER_GPU) += vhost-user-gpu.o
+common-obj-$(call land,$(CONFIG_VIRTIO_GPU),$(CONFIG_VIRTIO_PCI)) += virtio-gpu-pci.o
+common-obj-$(call land,$(CONFIG_VHOST_USER_GPU),$(CONFIG_VIRTIO_PCI)) += vhost-user-gpu-pci.o
+common-obj-$(CONFIG_VIRTIO_VGA) += virtio-vga.o
+common-obj-$(CONFIG_VHOST_USER_VGA) += vhost-user-vga.o
virtio-gpu.o-cflags := $(VIRGL_CFLAGS)
virtio-gpu.o-libs += $(VIRGL_LIBS)
virtio-gpu-3d.o-cflags := $(VIRGL_CFLAGS)
--
2.18.4
^ permalink raw reply related [flat|nested] 10+ messages in thread* Re: [PATCH v2 6/7] vga: build virtio-gpu only once
2020-06-04 13:16 ` [PATCH v2 6/7] vga: build virtio-gpu only once Gerd Hoffmann
@ 2020-06-04 13:23 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-06-04 13:23 UTC (permalink / raw)
To: Gerd Hoffmann, qemu-devel
Cc: dinechin, Paolo Bonzini, Daniel P. Berrangé, Eduardo Habkost
On 6/4/20 3:16 PM, Gerd Hoffmann wrote:
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> hw/display/Makefile.objs | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/hw/display/Makefile.objs b/hw/display/Makefile.objs
> index 76b3571e4902..d619594ad4d3 100644
> --- a/hw/display/Makefile.objs
> +++ b/hw/display/Makefile.objs
> @@ -49,12 +49,12 @@ common-obj-m += qxl.mo
> qxl.mo-objs = qxl.o qxl-logger.o qxl-render.o
> endif
>
> -obj-$(CONFIG_VIRTIO_GPU) += virtio-gpu-base.o virtio-gpu.o virtio-gpu-3d.o
> -obj-$(CONFIG_VHOST_USER_GPU) += vhost-user-gpu.o
> -obj-$(call land,$(CONFIG_VIRTIO_GPU),$(CONFIG_VIRTIO_PCI)) += virtio-gpu-pci.o
> -obj-$(call land,$(CONFIG_VHOST_USER_GPU),$(CONFIG_VIRTIO_PCI)) += vhost-user-gpu-pci.o
> -obj-$(CONFIG_VIRTIO_VGA) += virtio-vga.o
> -obj-$(CONFIG_VHOST_USER_VGA) += vhost-user-vga.o
> +common-obj-$(CONFIG_VIRTIO_GPU) += virtio-gpu-base.o virtio-gpu.o virtio-gpu-3d.o
> +common-obj-$(CONFIG_VHOST_USER_GPU) += vhost-user-gpu.o
> +common-obj-$(call land,$(CONFIG_VIRTIO_GPU),$(CONFIG_VIRTIO_PCI)) += virtio-gpu-pci.o
> +common-obj-$(call land,$(CONFIG_VHOST_USER_GPU),$(CONFIG_VIRTIO_PCI)) += vhost-user-gpu-pci.o
> +common-obj-$(CONFIG_VIRTIO_VGA) += virtio-vga.o
> +common-obj-$(CONFIG_VHOST_USER_VGA) += vhost-user-vga.o
> virtio-gpu.o-cflags := $(VIRGL_CFLAGS)
> virtio-gpu.o-libs += $(VIRGL_LIBS)
> virtio-gpu-3d.o-cflags := $(VIRGL_CFLAGS)
>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 7/7] vga: build virtio-gpu as module
2020-06-04 13:16 [PATCH v2 0/7] build some devices as modules Gerd Hoffmann
` (5 preceding siblings ...)
2020-06-04 13:16 ` [PATCH v2 6/7] vga: build virtio-gpu only once Gerd Hoffmann
@ 2020-06-04 13:16 ` Gerd Hoffmann
6 siblings, 0 replies; 10+ messages in thread
From: Gerd Hoffmann @ 2020-06-04 13:16 UTC (permalink / raw)
To: qemu-devel
Cc: dinechin, Paolo Bonzini, Daniel P. Berrangé, Eduardo Habkost,
Gerd Hoffmann
Drops libvirglrenderer.so dependency from core qemu.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/core/qdev.c | 6 ++++++
hw/display/Makefile.objs | 23 +++++++++++++----------
2 files changed, 19 insertions(+), 10 deletions(-)
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 70cf84bb67d0..bc4485e93675 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -161,6 +161,12 @@ static struct {
{ .type = "usb-redir", .mod = "usb-redirect" },
{ .type = "qxl-vga", .mod = "display-qxl" },
{ .type = "qxl", .mod = "display-qxl" },
+ { .type = "virtio-gpu-device", .mod = "display-virtio-gpu" },
+ { .type = "virtio-gpu-pci", .mod = "display-virtio-gpu" },
+ { .type = "virtio-vga", .mod = "display-virtio-gpu" },
+ { .type = "vhost-user-gpu-device", .mod = "display-virtio-gpu" },
+ { .type = "vhost-user-gpu-pci", .mod = "display-virtio-gpu" },
+ { .type = "vhost-user-vga", .mod = "display-virtio-gpu" },
};
static bool qdev_module_loaded_all;
diff --git a/hw/display/Makefile.objs b/hw/display/Makefile.objs
index d619594ad4d3..e907f3182b0c 100644
--- a/hw/display/Makefile.objs
+++ b/hw/display/Makefile.objs
@@ -49,16 +49,19 @@ common-obj-m += qxl.mo
qxl.mo-objs = qxl.o qxl-logger.o qxl-render.o
endif
-common-obj-$(CONFIG_VIRTIO_GPU) += virtio-gpu-base.o virtio-gpu.o virtio-gpu-3d.o
-common-obj-$(CONFIG_VHOST_USER_GPU) += vhost-user-gpu.o
-common-obj-$(call land,$(CONFIG_VIRTIO_GPU),$(CONFIG_VIRTIO_PCI)) += virtio-gpu-pci.o
-common-obj-$(call land,$(CONFIG_VHOST_USER_GPU),$(CONFIG_VIRTIO_PCI)) += vhost-user-gpu-pci.o
-common-obj-$(CONFIG_VIRTIO_VGA) += virtio-vga.o
-common-obj-$(CONFIG_VHOST_USER_VGA) += vhost-user-vga.o
-virtio-gpu.o-cflags := $(VIRGL_CFLAGS)
-virtio-gpu.o-libs += $(VIRGL_LIBS)
-virtio-gpu-3d.o-cflags := $(VIRGL_CFLAGS)
-virtio-gpu-3d.o-libs += $(VIRGL_LIBS)
+ifeq ($(CONFIG_VIRTIO_GPU),y)
+common-obj-m += virtio-gpu.mo
+virtio-gpu-obj-$(CONFIG_VIRTIO_GPU) += virtio-gpu-base.o virtio-gpu.o virtio-gpu-3d.o
+virtio-gpu-obj-$(CONFIG_VHOST_USER_GPU) += vhost-user-gpu.o
+virtio-gpu-obj-$(call land,$(CONFIG_VIRTIO_GPU),$(CONFIG_VIRTIO_PCI)) += virtio-gpu-pci.o
+virtio-gpu-obj-$(call land,$(CONFIG_VHOST_USER_GPU),$(CONFIG_VIRTIO_PCI)) += vhost-user-gpu-pci.o
+virtio-gpu-obj-$(CONFIG_VIRTIO_VGA) += virtio-vga.o
+virtio-gpu-obj-$(CONFIG_VHOST_USER_VGA) += vhost-user-vga.o
+virtio-gpu.mo-objs := $(virtio-gpu-obj-y)
+virtio-gpu.mo-cflags := $(VIRGL_CFLAGS)
+virtio-gpu.mo-libs := $(VIRGL_LIBS)
+endif
+
common-obj-$(CONFIG_DPCD) += dpcd.o
common-obj-$(CONFIG_XLNX_ZYNQMP_ARM) += xlnx_dp.o
--
2.18.4
^ permalink raw reply related [flat|nested] 10+ messages in thread