qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Alistair Francis <alistair23@gmail.com>
To: Andrea Bolognani <abologna@redhat.com>
Cc: qemu-devel@nongnu.org, "Laurent Vivier" <laurent@vivier.eu>,
	"Daniel P . Berrangé" <berrange@redhat.com>,
	"David Abdurachmanov" <davidlt@rivosinc.com>
Subject: Re: [PATCH v2 3/3] binfmt: Add --ignore-family option
Date: Fri, 28 Feb 2025 14:24:52 +1000	[thread overview]
Message-ID: <CAKmqyKN7HtWpihKAyAzzXGiB6-DBe-HExCY130YaVAV6Wpu+4w@mail.gmail.com> (raw)
In-Reply-To: <20250127182924.103510-4-abologna@redhat.com>

On Tue, Jan 28, 2025 at 4:29 AM Andrea Bolognani <abologna@redhat.com> wrote:
>
> Until now, the script has worked under the assumption that a
> host CPU can run binaries targeting any CPU in the same family.
> That's a fair enough assumption when it comes to running i386
> binaries on x86_64, but it doesn't quite apply in the general
> case.
>
> For example, while riscv64 CPUs could theoretically run riscv32
> applications natively, in practice there exist few (if any?)
> CPUs that implement the necessary silicon; moreover, even if you
> had one such CPU, your host OS would most likely not have
> enabled the necessary kernel bits.
>
> This new option gives distro packagers the ability to opt out of
> the assumption, likely on a per-architecture basis, and make
> things work out of the box for a larger fraction of their user
> base.
>
> As an interesting side effect, this makes it possible to enable
> execution of 64-bit binaries on 32-bit CPUs of the same family,
> which is a perfectly valid use case that apparently hadn't been
> considered until now.
>
> Link: https://src.fedoraproject.org/rpms/qemu/pull-request/72
> Thanks: David Abdurachmanov <davidlt@rivosinc.com>
> Thanks: Daniel P. Berrangé <berrange@redhat.com>
> Signed-off-by: Andrea Bolognani <abologna@redhat.com>

Reviewed-by: Alistair Francis <alistair.francis@wdc.com>

Alistair

> ---
>  scripts/qemu-binfmt-conf.sh | 19 ++++++++++++++++---
>  1 file changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh
> index 8d9136a29f..5fd462b1d1 100755
> --- a/scripts/qemu-binfmt-conf.sh
> +++ b/scripts/qemu-binfmt-conf.sh
> @@ -205,6 +205,9 @@ Usage: qemu-binfmt-conf.sh [--qemu-path PATH][--debian][--systemd CPU]
>         --persistent:    if yes, the interpreter is loaded when binfmt is
>                          configured and remains in memory. All future uses
>                          are cloned from the open file.
> +       --ignore-family: if yes, it is assumed that the host CPU (e.g. riscv64)
> +                        can't natively run programs targeting a CPU that is
> +                        part of the same family (e.g. riscv32).
>         --preserve-argv0 preserve argv[0]
>
>      To import templates with update-binfmts, use :
> @@ -337,7 +340,12 @@ qemu_set_binfmts() {
>          fi
>
>          if [ "$host_family" = "$family" ] ; then
> -            continue
> +            # When --ignore-family is used, we have to generate rules even
> +            # for targets that are in the same family as the host CPU. The
> +            # only exception is of course when the CPU types exactly match
> +            if [ "$target" = "$host_cpu" ] || [ "$IGNORE_FAMILY" = "no" ] ; then
> +                continue
> +            fi
>          fi
>
>          $BINFMT_SET
> @@ -355,10 +363,11 @@ CREDENTIAL=no
>  PERSISTENT=no
>  PRESERVE_ARG0=no
>  QEMU_SUFFIX=""
> +IGNORE_FAMILY=no
>
>  _longopts="debian,systemd:,qemu-path:,qemu-suffix:,exportdir:,help,credential:,\
> -persistent:,preserve-argv0:"
> -options=$(getopt -o ds:Q:S:e:hc:p:g:F: -l ${_longopts} -- "$@")
> +persistent:,preserve-argv0:,ignore-family:"
> +options=$(getopt -o ds:Q:S:e:hc:p:g:F:i: -l ${_longopts} -- "$@")
>  eval set -- "$options"
>
>  while true ; do
> @@ -418,6 +427,10 @@ while true ; do
>          shift
>          PRESERVE_ARG0="$1"
>          ;;
> +    -i|--ignore-family)
> +        shift
> +        IGNORE_FAMILY="$1"
> +        ;;
>      *)
>          break
>          ;;
> --
> 2.48.1
>


  parent reply	other threads:[~2025-02-28  4:26 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-27 18:29 [PATCH v2 0/3] binfmt: Add --ignore-family option Andrea Bolognani
2025-01-27 18:29 ` [PATCH v2 1/3] binfmt: Shuffle things around Andrea Bolognani
2025-02-20 10:46   ` Laurent Vivier
2025-02-24  1:36   ` Alistair Francis
2025-01-27 18:29 ` [PATCH v2 2/3] binfmt: Normalize host CPU architecture Andrea Bolognani
2025-02-20 11:05   ` Laurent Vivier
2025-02-24  1:39   ` Alistair Francis
2025-02-26 21:09     ` Andrea Bolognani
2025-01-27 18:29 ` [PATCH v2 3/3] binfmt: Add --ignore-family option Andrea Bolognani
2025-02-20 11:06   ` Laurent Vivier
2025-02-28  4:24   ` Alistair Francis [this message]
2025-02-11 15:59 ` [PATCH v2 0/3] " Andrea Bolognani
2025-02-28  4:33 ` Alistair Francis

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=CAKmqyKN7HtWpihKAyAzzXGiB6-DBe-HExCY130YaVAV6Wpu+4w@mail.gmail.com \
    --to=alistair23@gmail.com \
    --cc=abologna@redhat.com \
    --cc=berrange@redhat.com \
    --cc=davidlt@rivosinc.com \
    --cc=laurent@vivier.eu \
    --cc=qemu-devel@nongnu.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 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).