Re: [RFC kvmtool 04/31] Add --nocompat option to disable compat warnings

Alexandru Elisei
2023-01-27T12:23:43Z

Hi,

On Fri, Jan 27, 2023 at 11:39:05AM +0000, Suzuki K Poulose wrote:
> From: Alexandru Elisei <alexandru.elisei@arm.com>
>
> Commit e66942073035 ("kvm tools: Guest kernel compatability") added the
> functionality that enables devices to print a warning message if the device
> hasn't been initialized by the time the VM is destroyed. The purpose of
> these messages is to let the user know if the kernel hasn't been built with
> the correct Kconfig options to take advantage of the said devices (all
> using virtio).
>
> Since then, kvmtool has evolved and now supports loading different payloads
> (like firmware images), and having those warnings even when it is entirely
> intentional for the payload not to touch the devices can be confusing for
> the user and makes the output unnecessarily verbose in those cases.
>
> Add the --nocompat option to disable the warnings; the warnings are still
> enabled by default.

I had a conversation with Will regarding this some time ago, we settled on
a different approach, by using --loglevel=<level>, similar to what Linux
does. I'll put that on my TODO list and try to send patches soon-ish.

Thanks,
Alex

>
> Reported-by: Christoffer Dall <christoffer.dall@arm.com>
> Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com>
> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
> ---
> builtin-run.c | 5 ++++-
> guest_compat.c | 1 +
> include/kvm/kvm-config.h | 1 +
> 3 files changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/builtin-run.c b/builtin-run.c
> index bb7e6e8d..f8edfb3f 100644
> --- a/builtin-run.c
> +++ b/builtin-run.c
> @@ -183,6 +183,8 @@ static int mem_parser(const struct option *opt, const char *arg, int unset)
> OPT_BOOLEAN('\0', "nodefaults", &(cfg)->nodefaults, "Disable" \
> " implicit configuration that cannot be" \
> " disabled otherwise"), \
> + OPT_BOOLEAN('\0', "nocompat", &(cfg)->nocompat, "Disable" \
> + " compat warnings"), \
> OPT_CALLBACK('\0', "9p", NULL, "dir_to_share,tag_name", \
> "Enable virtio 9p to share files between host and" \
> " guest", virtio_9p_rootdir_parser, kvm), \
> @@ -797,7 +799,8 @@ static int kvm_cmd_run_work(struct kvm *kvm)
>
> static void kvm_cmd_run_exit(struct kvm *kvm, int guest_ret)
> {
> - compat__print_all_messages();
> + if (!kvm->cfg.nocompat)
> + compat__print_all_messages();
>
> init_list__exit(kvm);
>
> diff --git a/guest_compat.c b/guest_compat.c
> index fd4704b2..a413c12c 100644
> --- a/guest_compat.c
> +++ b/guest_compat.c
> @@ -88,6 +88,7 @@ int compat__print_all_messages(void)
>
> printf("\n # KVM compatibility warning.\n\t%s\n\t%s\n",
> msg->title, msg->desc);
> + printf("\tTo stop seeing this warning, use the --nocompat option.\n");
>
> list_del(&msg->list);
> compat__free(msg);
> diff --git a/include/kvm/kvm-config.h b/include/kvm/kvm-config.h
> index 368e6c7d..88df7cc2 100644
> --- a/include/kvm/kvm-config.h
> +++ b/include/kvm/kvm-config.h
> @@ -30,6 +30,7 @@ struct kvm_config {
> u64 vsock_cid;
> bool virtio_rng;
> bool nodefaults;
> + bool nocompat;
> int active_console;
> int debug_iodelay;
> int nrcpus;
> --
> 2.34.1
>