Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: qemu/qemu
base: 52ed34cbddde
Choose a base ref
...
head repository: qemu/qemu
compare: cd041ddbc05a
Choose a head ref
  • 19 commits
  • 22 files changed
  • 5 contributors

Commits on Jun 26, 2023

  1. build: further refine build.ninja rules

    In commit b0fcc6f ("build: rebuild build.ninja using
    "meson setup --reconfigure"", 2023-05-19) I changed the build.ninja
    rule in the Makefile to use "meson setup" so that the Makefile would
    pick up a changed path to the meson binary.
    
    However, there was a reason why build.ninja was rebuilt using $(NINJA)
    itself.  Namely, ninja has its own cache of file modification times,
    and if it does not know about the modification that was done outside
    its control, it will *also* try to regenerate build.ninja.  This can be
    simply by running "make" on a fresh tree immediately after "configure";
    that will trigger an unnecessary meson run.
    
    So, apply a refinement to the rule in order to cover both cases:
    
    - track the meson binary that was used (and that is embedded in
      build.ninja's reconfigure rules); to do this, write build.ninja.stamp
      right after executing meson successfully
    
    - if it changed, force usage of "$(MESON) setup --reconfigure" to
      update the path in the reconfigure rule
    
    - if it didn't change, use "$(NINJA) build.ninja" just like before
      commit b0fcc6f.
    
    Reported-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
    Tested-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    bonzini committed Jun 26, 2023
    Copy the full SHA
    6c5f893 View commit details
    Browse the repository at this point in the history
  2. hw/remote/proxy: Remove dubious 'event_notifier-posix.c' include

    event_notifier-posix.c is registered in meson's util_ss[] source
    set, which is built as libqemuutil.a.p library. Both tools and
    system emulation binaries are linked with qemuutil, so there is
    no point in including this source file.
    
    Introduced in commit bd36adb ("multi-process: create IOHUB
    object to handle irq").
    
    Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
    Message-Id: <20230606134913.93724-1-philmd@linaro.org>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    philmd authored and bonzini committed Jun 26, 2023
    Copy the full SHA
    a0488cd View commit details
    Browse the repository at this point in the history
  3. numa: Validate cluster and NUMA node boundary if required

    For some architectures like ARM64, multiple CPUs in one cluster can be
    associated with different NUMA nodes, which is irregular configuration
    because we shouldn't have this in baremetal environment. The irregular
    configuration causes Linux guest to misbehave, as the following warning
    messages indicate.
    
      -smp 6,maxcpus=6,sockets=2,clusters=1,cores=3,threads=1 \
      -numa node,nodeid=0,cpus=0-1,memdev=ram0                \
      -numa node,nodeid=1,cpus=2-3,memdev=ram1                \
      -numa node,nodeid=2,cpus=4-5,memdev=ram2                \
    
      ------------[ cut here ]------------
      WARNING: CPU: 0 PID: 1 at kernel/sched/topology.c:2271 build_sched_domains+0x284/0x910
      Modules linked in:
      CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.14.0-268.el9.aarch64 #1
      pstate: 00400005 (nzcv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
      pc : build_sched_domains+0x284/0x910
      lr : build_sched_domains+0x184/0x910
      sp : ffff80000804bd50
      x29: ffff80000804bd50 x28: 0000000000000002 x27: 0000000000000000
      x26: ffff800009cf9a80 x25: 0000000000000000 x24: ffff800009cbf840
      x23: ffff000080325000 x22: ffff0000005df800 x21: ffff80000a4ce508
      x20: 0000000000000000 x19: ffff000080324440 x18: 0000000000000014
      x17: 00000000388925c0 x16: 000000005386a066 x15: 000000009c10cc2e
      x14: 00000000000001c0 x13: 0000000000000001 x12: ffff00007fffb1a0
      x11: ffff00007fffb180 x10: ffff80000a4ce508 x9 : 0000000000000041
      x8 : ffff80000a4ce500 x7 : ffff80000a4cf920 x6 : 0000000000000001
      x5 : 0000000000000001 x4 : 0000000000000007 x3 : 0000000000000002
      x2 : 0000000000001000 x1 : ffff80000a4cf928 x0 : 0000000000000001
      Call trace:
       build_sched_domains+0x284/0x910
       sched_init_domains+0xac/0xe0
       sched_init_smp+0x48/0xc8
       kernel_init_freeable+0x140/0x1ac
       kernel_init+0x28/0x140
       ret_from_fork+0x10/0x20
    
    Improve the situation to warn when multiple CPUs in one cluster have
    been associated with different NUMA nodes. However, one NUMA node is
    allowed to be associated with different clusters.
    
    Signed-off-by: Gavin Shan <gshan@redhat.com>
    Acked-by: Philippe Mathieu-Daudé <philmd@linaro.org>
    Acked-by: Igor Mammedov <imammedo@redhat.com>
    Message-Id: <20230509002739.18388-2-gshan@redhat.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Gavin Shan authored and bonzini committed Jun 26, 2023
    Copy the full SHA
    a494fdb View commit details
    Browse the repository at this point in the history
  4. hw/arm: Validate cluster and NUMA node boundary

    There are two ARM machines where NUMA is aware: 'virt' and 'sbsa-ref'.
    Both of them are required to follow cluster-NUMA-node boundary. To
    enable the validation to warn about the irregular configuration where
    multiple CPUs in one cluster have been associated with different NUMA
    nodes.
    
    Signed-off-by: Gavin Shan <gshan@redhat.com>
    Acked-by: Igor Mammedov <imammedo@redhat.com>
    Message-Id: <20230509002739.18388-3-gshan@redhat.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Gavin Shan authored and bonzini committed Jun 26, 2023
    Copy the full SHA
    fecff67 View commit details
    Browse the repository at this point in the history
  5. hw/riscv: Validate cluster and NUMA node boundary

    There are two RISCV machines where NUMA is aware: 'virt' and 'spike'.
    Both of them are required to follow cluster-NUMA-node boundary. To
    enable the validation to warn about the irregular configuration where
    multiple CPUs in one cluster has been associated with multiple NUMA
    nodes.
    
    Signed-off-by: Gavin Shan <gshan@redhat.com>
    Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
    Acked-by: Igor Mammedov <imammedo@redhat.com>
    Acked-by: Alistair Francis <alistair.francis@wdc.com>
    Message-Id: <20230509002739.18388-4-gshan@redhat.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Gavin Shan authored and bonzini committed Jun 26, 2023
    Copy the full SHA
    3d9981c View commit details
    Browse the repository at this point in the history
  6. kvm: reuse per-vcpu stats fd to avoid vcpu interruption

    A regression has been detected in latency testing of KVM guests.
    More specifically, it was observed that the cyclictest
    numbers inside of an isolated vcpu (running on isolated pcpu) are:
    
    Where a maximum of 50us is acceptable.
    
    The implementation of KVM_GET_STATS_FD uses run_on_cpu to query
    per vcpu statistics, which interrupts the vcpu (and is unnecessary).
    
    To fix this, open the per vcpu stats fd on vcpu initialization,
    and read from that fd from QEMU's main thread.
    
    Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    matosatti authored and bonzini committed Jun 26, 2023
    Copy the full SHA
    3b6f485 View commit details
    Browse the repository at this point in the history
  7. target/i386: fix INVD vmexit

    Due to a typo or perhaps a brain fart, the INVD vmexit was never generated.
    Fix it (but not that fixing just the typo would break both INVD and WBINVD,
    due to a case of two wrongs making a right).
    
    Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    bonzini committed Jun 26, 2023
    Copy the full SHA
    4d714d1 View commit details
    Browse the repository at this point in the history
  8. target/i386: TCG supports 3DNow! prefetch(w)

    The AMD prefetch(w) instructions have not been deprecated together with the rest
    of 3DNow!, and in fact are even supported by newer Intel processor.  Mark them
    as supported by TCG, as it supports all of 3DNow!.
    
    Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    bonzini committed Jun 26, 2023
    Copy the full SHA
    8afce49 View commit details
    Browse the repository at this point in the history
  9. target/i386: TCG supports RDSEED

    TCG implements RDSEED, and in fact uses qcrypto_random_bytes which is
    secure enough to match hardware behavior.  Expose it to guests.
    
    Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    bonzini committed Jun 26, 2023
    Copy the full SHA
    691925e View commit details
    Browse the repository at this point in the history
  10. target/i386: do not accept RDSEED if CPUID bit absent

    Suggested-by: Richard Henderson <richard.henderson@linaro.org>
    Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    bonzini committed Jun 26, 2023
    Copy the full SHA
    f9e0dba View commit details
    Browse the repository at this point in the history
  11. target/i386: TCG supports XSAVEERPTR

    XSAVEERPTR is actually a fix for an errata; TCG does not have the issue.
    
    Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    bonzini committed Jun 26, 2023
    Copy the full SHA
    1420dd6 View commit details
    Browse the repository at this point in the history
  12. target/i386: TCG supports WBNOINVD

    WBNOINVD is the same as INVD or WBINVD as far as TCG is concerned,
    since there is no cache in TCG and therefore no invalidation side effect
    in WBNOINVD.
    
    With respect to SVM emulation, processors that do not support WBNOINVD
    will ignore the prefix and treat it as WBINVD, while those that support
    it will generate exactly the same vmexit.
    
    Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    bonzini committed Jun 26, 2023
    Copy the full SHA
    431c51e View commit details
    Browse the repository at this point in the history
  13. target/i386: Intel only supports SYSCALL/SYSRET in long mode

    Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    bonzini committed Jun 26, 2023
    Copy the full SHA
    fd5dcb1 View commit details
    Browse the repository at this point in the history
  14. target/i386: AMD only supports SYSENTER/SYSEXIT in 32-bit mode

    Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    bonzini committed Jun 26, 2023
    Copy the full SHA
    75a02ad View commit details
    Browse the repository at this point in the history
  15. target/i386: sysret and sysexit are privileged

    Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    bonzini committed Jun 26, 2023
    Copy the full SHA
    53b9b4c View commit details
    Browse the repository at this point in the history
  16. target/i386: implement RDPID in TCG

    RDPID corresponds to a RDMSR(TSC_AUX); however, it is unprivileged
    so for user-mode emulation we must provide the value that the kernel
    places in the MSR.  For Linux, it is a combination of the current CPU
    and the current NUMA node, both of which can be retrieved with getcpu(2).
    Also try sched_getcpu(), which might be there on the BSDs.  If there is
    no portable way to retrieve the current CPU id from userspace, return 0.
    
    RDTSCP is reimplemented as RDTSC + RDPID ECX; the differences in terms
    of serializability are not relevant to QEMU.
    
    Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    bonzini committed Jun 26, 2023
    Copy the full SHA
    6750485 View commit details
    Browse the repository at this point in the history
  17. target/i386: implement SYSCALL/SYSRET in 32-bit emulators

    AMD supports both 32-bit and 64-bit SYSCALL/SYSRET, but the TCG only
    exposes it for 64-bit targets.  For system emulation just reuse the
    helper; for user-mode emulation the ABI is the same as "int $80".
    
    The BSDs does not support any fast system call mechanism in 32-bit
    mode so add to bsd-user the same stub that FreeBSD has for 64-bit
    compatibility mode.
    
    Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    bonzini committed Jun 26, 2023
    Copy the full SHA
    63fd8ef View commit details
    Browse the repository at this point in the history
  18. git-submodule.sh: allow running in validate mode without previous update

    The call to git-submodule.sh done in configure may happen without a
    previous checkout of the roms/SLOF submodule, or even without a
    previous run of the script.
    
    So, handle creating a .git-submodule-status file even in validate
    mode.  If git is absent, ensure that all passed directories exists
    (because you should be in a fresh untar and will not have stale
    arguments to git-submodule.sh) but do no other checks.  If git
    is present, ensure that .git-submodule-status contains an entry
    for all submodules passed on the command line.
    
    With this change, "ignore" mode is not needed anymore.
    
    Reported-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
    Fixes: b11f9bd ("configure: move SLOF submodule handling to pc-bios/s390-ccw", 2023-06-06)
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    bonzini committed Jun 26, 2023
    Copy the full SHA
    8edddaa View commit details
    Browse the repository at this point in the history
  19. Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging

    * kvm: reuse per-vcpu stats fd to avoid vcpu interruption
    * Validate cluster and NUMA node boundary on ARM and RISC-V
    * various small TCG features from newer processors
    * Remove dubious 'event_notifier-posix.c' include
    * fix git-submodule.sh in releases
    
    # -----BEGIN PGP SIGNATURE-----
    #
    # iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmSZS0IUHHBib256aW5p
    # QHJlZGhhdC5jb20ACgkQv/vSX3jHroN+tgf/axJdG9NXKCyXgc0vzjKVhSR4Y+tC
    # EPxkg7Rq7uOMgbph9oTS/2Kzh9LnP6kLt2qnS4igRHGuEBd58yD6fFNDv0LJsK/l
    # B/d0WGHMKV0KMYOX24rkyfohVu37GhVRsiVSIlIiQVTC9JtYer7WxdnyoDaPKvY8
    # dpbKgDrd59vAlsHrpj7ZubVQPcL3lXrLryimpDohMH6Ba+4wZq+7dKPpal97QOP2
    # 3i7isUBTQiMOcVjW6GEiNcDLSJqj5DSgylhdFnaBsq/ThpC2PxWoXcCbV28QELzf
    # 5+J+RXQavmeWKZMR0q98iBzWbrsVtaSxAkHHiwbUMMqQvkfY6Dpo5dMHWw==
    # =WHE2
    # -----END PGP SIGNATURE-----
    # gpg: Signature made Mon 26 Jun 2023 10:24:34 AM CEST
    # gpg:                using RSA key F13338574B662389866C7682BFFBD25F78C7AE83
    # gpg:                issuer "pbonzini@redhat.com"
    # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [undefined]
    # gpg:                 aka "Paolo Bonzini <pbonzini@redhat.com>" [undefined]
    # gpg: WARNING: This key is not certified with a trusted signature!
    # gpg:          There is no indication that the signature belongs to the owner.
    # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4  E2F7 7E15 100C CD36 69B1
    #      Subkey fingerprint: F133 3857 4B66 2389 866C  7682 BFFB D25F 78C7 AE83
    
    * tag 'for-upstream' of https://gitlab.com/bonzini/qemu:
      git-submodule.sh: allow running in validate mode without previous update
      target/i386: implement SYSCALL/SYSRET in 32-bit emulators
      target/i386: implement RDPID in TCG
      target/i386: sysret and sysexit are privileged
      target/i386: AMD only supports SYSENTER/SYSEXIT in 32-bit mode
      target/i386: Intel only supports SYSCALL/SYSRET in long mode
      target/i386: TCG supports WBNOINVD
      target/i386: TCG supports XSAVEERPTR
      target/i386: do not accept RDSEED if CPUID bit absent
      target/i386: TCG supports RDSEED
      target/i386: TCG supports 3DNow! prefetch(w)
      target/i386: fix INVD vmexit
      kvm: reuse per-vcpu stats fd to avoid vcpu interruption
      hw/riscv: Validate cluster and NUMA node boundary
      hw/arm: Validate cluster and NUMA node boundary
      numa: Validate cluster and NUMA node boundary if required
      hw/remote/proxy: Remove dubious 'event_notifier-posix.c' include
      build: further refine build.ninja rules
    
    Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
    rth7680 committed Jun 26, 2023
    Copy the full SHA
    cd041dd View commit details
    Browse the repository at this point in the history