All of lore.kernel.org
 help / color / mirror / Atom feed
From: Claudio Fontana <cfontana@suse.de>
To: "Jose R. Ziviani" <jziviani@suse.de>, qemu-devel@nongnu.org
Cc: pbonzini@redhat.com, richard.henderson@linaro.org,
	berrange@redhat.com, kraxel@redhat.com, ehabkost@redhat.com
Subject: Re: [PATCH 2/2] qom: Improve error message in module_object_class_by_name()
Date: Wed, 21 Jul 2021 09:09:02 +0200	[thread overview]
Message-ID: <ccfaba05-e17e-05e4-3995-1b60b52bdcb0@suse.de> (raw)
In-Reply-To: <20210720223120.21711-3-jziviani@suse.de>

On 7/21/21 12:31 AM, Jose R. Ziviani wrote:
> module_object_class_by_name() calls module_load_qom_one if the object
> is provided by a dynamically linked library. Such library might not be
> available at this moment - for instance, it can be a package not yet
> installed. Thus, instead of assert error messages, this patch outputs
> more friendly messages.
> 
> Current error messages:
> $ ./qemu-system-x86_64 -machine q35 -accel tcg -kernel /boot/vmlinuz
> ...
> ERROR:../accel/accel-softmmu.c:82:accel_init_ops_interfaces: assertion failed: (ops != NULL)
> Bail out! ERROR:../accel/accel-softmmu.c:82:accel_init_ops_interfaces: assertion failed: (ops != NULL)
> [1]    31964 IOT instruction (core dumped)  ./qemu-system-x86_64 ...
> 
> New error message:
> $ ./qemu-system-x86_64 -machine q35 -accel tcg -kernel /boot/vmlinuz
> accel-tcg-x86_64 module is missing, install the package or config the library path correctly.
> 
> Or with other modules, when possible:
> $ ./qemu-system-x86_64 -machine q35 -accel kvm -kernel /boot/vmlinuz -vga qxl                                                                     ✹
> hw-display-qxl module is missing, install the package or config the library path correctly.
> qemu-system-x86_64: QXL VGA not available
> 
> $ make check
> ...
> Running test qtest-x86_64/test-filter-mirror
> Running test qtest-x86_64/endianness-test
> accel-qtest-x86_64 module is missing, install the package or config the library path correctly.
> accel-qtest-x86_64 module is missing, install the package or config the library path correctly.
> accel-qtest-x86_64 module is missing, install the package or config the library path correctly.
> accel-qtest-x86_64 module is missing, install the package or config the library path correctly.
> accel-qtest-x86_64 module is missing, install the package or config the library path correctly.
> accel-tcg-x86_64 module is missing, install the package or config the library path correctly.
> ...
> 
> Signed-off-by: Jose R. Ziviani <jziviani@suse.de>
> ---
>  accel/accel-softmmu.c | 5 ++++-
>  qom/object.c          | 9 +++++++++
>  2 files changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/accel/accel-softmmu.c b/accel/accel-softmmu.c
> index 67276e4f52..52449ac2d0 100644
> --- a/accel/accel-softmmu.c
> +++ b/accel/accel-softmmu.c
> @@ -79,7 +79,10 @@ void accel_init_ops_interfaces(AccelClass *ac)
>       * all accelerators need to define ops, providing at least a mandatory
>       * non-NULL create_vcpu_thread operation.
>       */
> -    g_assert(ops != NULL);
> +    if (ops == NULL) {
> +        exit(1);
> +    }
> +

Why?

>      if (ops->ops_init) {
>          ops->ops_init(ops);
>      }
> diff --git a/qom/object.c b/qom/object.c
> index 6a01d56546..3a170ea9df 100644
> --- a/qom/object.c
> +++ b/qom/object.c
> @@ -10,6 +10,7 @@
>   * See the COPYING file in the top-level directory.
>   */
>  
> +#include "qemu/module.h"
>  #include "qemu/osdep.h"
>  #include "hw/qdev-core.h"
>  #include "qapi/error.h"
> @@ -1031,8 +1032,16 @@ ObjectClass *module_object_class_by_name(const char *typename)
>      oc = object_class_by_name(typename);
>  #ifdef CONFIG_MODULES
>      if (!oc) {
> +        const char *module_name = module_get_name_from_obj(typename);
>          module_load_qom_one(typename);
>          oc = object_class_by_name(typename);
> +        if (!oc && module_name) {
> +            if (!module_is_loaded(module_name)) {
> +                fprintf(stderr, "%s module is missing, install the "
> +                                "package or config the library path "
> +                                "correctly.\n", module_name);
> +            }
> +        }
>      }
>  #endif
>      return oc;
> 



  reply	other threads:[~2021-07-21  7:09 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-20 22:31 [PATCH 0/2] Improve module accelerator error message Jose R. Ziviani
2021-07-20 22:31 ` [PATCH 1/2] modules: Implement new helper functions Jose R. Ziviani
2021-07-20 22:31 ` [PATCH 2/2] qom: Improve error message in module_object_class_by_name() Jose R. Ziviani
2021-07-21  7:09   ` Claudio Fontana [this message]
2021-07-21  9:34   ` Daniel P. Berrangé
2021-07-21  9:57     ` Claudio Fontana

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=ccfaba05-e17e-05e4-3995-1b60b52bdcb0@suse.de \
    --to=cfontana@suse.de \
    --cc=berrange@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=jziviani@suse.de \
    --cc=kraxel@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.