qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>, qemu-devel@nongnu.org
Cc: "Laurent Vivier" <lvivier@redhat.com>,
	"Kevin Wolf" <kwolf@redhat.com>, "Thomas Huth" <thuth@redhat.com>,
	"Eduardo Habkost" <ehabkost@redhat.com>,
	qemu-block@nongnu.org, "David Hildenbrand" <david@redhat.com>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Cornelia Huck" <cohuck@redhat.com>, "Peter Lieven" <pl@kamp.de>,
	"Max Reitz" <mreitz@redhat.com>,
	"Halil Pasic" <pasic@linux.ibm.com>,
	"Christian Borntraeger" <borntraeger@de.ibm.com>,
	qemu-s390x@nongnu.org, "Michael S. Tsirkin" <mst@redhat.com>,
	"Ronnie Sahlberg" <ronniesahlberg@gmail.com>,
	"Cleber Rosa" <crosa@redhat.com>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Samuel Thibault" <samuel.thibault@ens-lyon.org>
Subject: Re: [PATCH v3 14/24] modules: use modinfo for qom load
Date: Fri, 18 Jun 2021 19:49:30 +0200	[thread overview]
Message-ID: <bd95eb0c-7b25-de79-a2f2-67e2795f2d1d@redhat.com> (raw)
In-Reply-To: <20210618045353.2510174-15-kraxel@redhat.com>

On 18/06/21 06:53, Gerd Hoffmann wrote:
> Use module database to figure which module implements a given QOM type.
> Drop hard-coded object list.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>   util/module.c | 77 ++++++++++++++++-----------------------------------
>   1 file changed, 24 insertions(+), 53 deletions(-)
> 
> diff --git a/util/module.c b/util/module.c
> index 7d7b69cbdaca..745ae0fb20ed 100644
> --- a/util/module.c
> +++ b/util/module.c
> @@ -280,80 +280,51 @@ bool module_load_one(const char *prefix, const char *lib_name, bool mayfail)
>       return success;
>   }
>   
> -/*
> - * Building devices and other qom objects modular is mostly useful in
> - * case they have dependencies to external shared libraries, so we can
> - * cut down the core qemu library dependencies.  Which is the case for
> - * only a very few devices & objects.
> - *
> - * So with the expectation that this will be rather the exception than
> - * the rule and the list will not gain that many entries, go with a
> - * simple manually maintained list for now.
> - *
> - * The list must be sorted by module (module_load_qom_all() needs this).
> - */
> -static struct {
> -    const char *type;
> -    const char *prefix;
> -    const char *module;
> -} const qom_modules[] = {
> -    { "ccid-card-passthru",    "hw-", "usb-smartcard"         },
> -    { "ccid-card-emulated",    "hw-", "usb-smartcard"         },
> -    { "usb-redir",             "hw-", "usb-redirect"          },
> -    { "qxl-vga",               "hw-", "display-qxl"           },
> -    { "qxl",                   "hw-", "display-qxl"           },
> -    { "virtio-gpu-device",     "hw-", "display-virtio-gpu"    },
> -    { "virtio-gpu-gl-device",  "hw-", "display-virtio-gpu-gl" },
> -    { "vhost-user-gpu",        "hw-", "display-virtio-gpu"    },
> -    { "virtio-gpu-pci-base",   "hw-", "display-virtio-gpu-pci" },
> -    { "virtio-gpu-pci",        "hw-", "display-virtio-gpu-pci" },
> -    { "virtio-gpu-gl-pci",     "hw-", "display-virtio-gpu-pci-gl" },
> -    { "vhost-user-gpu-pci",    "hw-", "display-virtio-gpu-pci" },
> -    { "virtio-gpu-ccw",        "hw-", "s390x-virtio-gpu-ccw"   },
> -    { "virtio-vga-base",       "hw-", "display-virtio-vga"    },
> -    { "virtio-vga",            "hw-", "display-virtio-vga"    },
> -    { "virtio-vga-gl",         "hw-", "display-virtio-vga-gl" },
> -    { "vhost-user-vga",        "hw-", "display-virtio-vga"    },
> -    { "chardev-braille",       "chardev-", "baum"             },
> -    { "chardev-spicevmc",      "chardev-", "spice"            },
> -    { "chardev-spiceport",     "chardev-", "spice"            },
> -};
> +#ifdef CONFIG_MODULES
>   
>   static bool module_loaded_qom_all;
>   
>   void module_load_qom_one(const char *type)
>   {
> -    int i;
> +    const QemuModinfo *modinfo;
> +    const char **sl;
>   
>       if (!type) {
>           return;
>       }
> -    for (i = 0; i < ARRAY_SIZE(qom_modules); i++) {
> -        if (strcmp(qom_modules[i].type, type) == 0) {
> -            module_load_one(qom_modules[i].prefix,
> -                            qom_modules[i].module,
> -                            false);
> -            return;
> +
> +    for (modinfo = module_info; modinfo->name != NULL; modinfo++) {
> +        if (!modinfo->objs) {
> +            continue;
> +        }
> +        for (sl = modinfo->objs; *sl != NULL; sl++) {
> +            if (strcmp(type, *sl) == 0) {
> +                module_load_one("", modinfo->name, false);
> +            }
>           }
>       }
>   }
>   
>   void module_load_qom_all(void)
>   {
> -    int i;
> +    const QemuModinfo *modinfo;
>   
>       if (module_loaded_qom_all) {
>           return;
>       }
> -    for (i = 0; i < ARRAY_SIZE(qom_modules); i++) {
> -        if (i > 0 && (strcmp(qom_modules[i - 1].module,
> -                             qom_modules[i].module) == 0 &&
> -                      strcmp(qom_modules[i - 1].prefix,
> -                             qom_modules[i].prefix) == 0)) {
> -            /* one module implementing multiple types -> load only once */
> +
> +    for (modinfo = module_info; modinfo->name != NULL; modinfo++) {
> +        if (!modinfo->objs) {
>               continue;
>           }
> -        module_load_one(qom_modules[i].prefix, qom_modules[i].module, true);
> +        module_load_one("", modinfo->name, false);
>       }
>       module_loaded_qom_all = true;
>   }
> +
> +#else
> +
> +void module_load_qom_one(const char *type) {}
> +void module_load_qom_all(void) {}
> +
> +#endif
> 

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>



  reply	other threads:[~2021-06-18 17:51 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-18  4:53 [PATCH v3 00/24] modules: add meta-data database Gerd Hoffmann
2021-06-18  4:53 ` [PATCH v3 01/24] modules: add modinfo macros Gerd Hoffmann
2021-06-18 17:46   ` Paolo Bonzini
2021-06-18  4:53 ` [PATCH v3 02/24] modules: collect module meta-data Gerd Hoffmann
2021-06-18 16:09   ` Paolo Bonzini
2021-06-21 12:52     ` Gerd Hoffmann
2021-06-18  4:53 ` [PATCH v3 03/24] modules: generate modinfo.c Gerd Hoffmann
2021-06-22 18:19   ` Jose R. Ziviani
2021-06-22 20:43   ` Jose R. Ziviani
2021-06-18  4:53 ` [PATCH v3 04/24] modules: add qxl module annotations Gerd Hoffmann
2021-06-18  4:53 ` [PATCH v3 05/24] modules: add virtio-gpu " Gerd Hoffmann
2021-06-18  4:53 ` [PATCH v3 06/24] modules: add chardev " Gerd Hoffmann
2021-06-18  4:53 ` [PATCH v3 07/24] modules: add audio " Gerd Hoffmann
2021-06-18  4:53 ` [PATCH v3 08/24] modules: add usb-redir " Gerd Hoffmann
2021-06-18  4:53 ` [PATCH v3 09/24] modules: add ccid " Gerd Hoffmann
2021-06-18  4:53 ` [PATCH v3 10/24] modules: add ui " Gerd Hoffmann
2021-06-18  4:53 ` [PATCH v3 11/24] modules: add s390x " Gerd Hoffmann
2021-06-18  4:53 ` [PATCH v3 12/24] modules: add block " Gerd Hoffmann
2021-06-18  4:53 ` [PATCH v3 13/24] modules: use modinfo for dependencies Gerd Hoffmann
2021-06-18 17:48   ` Paolo Bonzini
2021-06-18  4:53 ` [PATCH v3 14/24] modules: use modinfo for qom load Gerd Hoffmann
2021-06-18 17:49   ` Paolo Bonzini [this message]
2021-06-18  4:53 ` [PATCH v3 15/24] modules: use modinfo for qemu opts load Gerd Hoffmann
2021-06-18 17:50   ` Paolo Bonzini
2021-06-18  4:53 ` [PATCH v3 16/24] modules: add tracepoints Gerd Hoffmann
2021-06-18  4:53 ` [PATCH v3 17/24] modules: check arch and block load on mismatch Gerd Hoffmann
2021-06-18  4:53 ` [PATCH v3 18/24] modules: check arch on qom lookup Gerd Hoffmann
2021-06-18  4:53 ` [PATCH v3 19/24] modules: target-specific module build infrastructure Gerd Hoffmann
2021-06-18  4:53 ` [PATCH v3 20/24] accel: autoload modules Gerd Hoffmann
2021-06-18  4:53 ` [PATCH v3 21/24] accel: add qtest module annotations Gerd Hoffmann
2021-06-18  4:53 ` [PATCH v3 22/24] accel: build qtest modular Gerd Hoffmann
2021-06-18  4:53 ` [PATCH v3 23/24] accel: add tcg module annotations Gerd Hoffmann
2021-06-18  4:53 ` [PATCH v3 24/24] accel: build tcg modular Gerd Hoffmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bd95eb0c-7b25-de79-a2f2-67e2795f2d1d@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=borntraeger@de.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=crosa@redhat.com \
    --cc=david@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=mst@redhat.com \
    --cc=pasic@linux.ibm.com \
    --cc=pl@kamp.de \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-s390x@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=ronniesahlberg@gmail.com \
    --cc=samuel.thibault@ens-lyon.org \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).