]> git.ipfire.org Git - thirdparty/qemu.git/log
thirdparty/qemu.git
10 months agolinux-user: Move elf_core_copy_regs to mips/elfload.c
Richard Henderson [Tue, 29 Jul 2025 16:03:38 +0000 (06:03 -1000)] 
linux-user: Move elf_core_copy_regs to mips/elfload.c

Move elf_core_copy_regs to elfload.c.
Move HAVE_ELF_CORE_DUMP, ELF_NREGS, target_elf_gregset_t to target_elf.h.
For now, duplicate the definitions of target_elf_greg_t and tswapreg.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user: Move elf_core_copy_regs to loongarch64/elfload.c
Richard Henderson [Tue, 29 Jul 2025 15:58:48 +0000 (05:58 -1000)] 
linux-user: Move elf_core_copy_regs to loongarch64/elfload.c

Move elf_core_copy_regs to elfload.c.
Move HAVE_ELF_CORE_DUMP, ELF_NREGS, target_elf_gregset_t to target_elf.h.
For now, duplicate the definitions of target_elf_greg_t and tswapreg.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user: Move elf_core_copy_regs to ppc/elfload.c
Richard Henderson [Tue, 29 Jul 2025 15:55:56 +0000 (05:55 -1000)] 
linux-user: Move elf_core_copy_regs to ppc/elfload.c

Move elf_core_copy_regs to elfload.c.
Move HAVE_ELF_CORE_DUMP, ELF_NREGS, target_elf_gregset_t to target_elf.h.
For now, duplicate the definitions of target_elf_greg_t and tswapreg.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user: Move elf_core_copy_regs to aarch64/elfload.c
Richard Henderson [Tue, 29 Jul 2025 15:53:29 +0000 (05:53 -1000)] 
linux-user: Move elf_core_copy_regs to aarch64/elfload.c

Move elf_core_copy_regs to elfload.c.
Move HAVE_ELF_CORE_DUMP, ELF_NREGS, target_elf_gregset_t to target_elf.h.
For now, duplicate the definitions of target_elf_greg_t and tswapreg.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user: Move elf_core_copy_regs to arm/elfload.c
Richard Henderson [Tue, 29 Jul 2025 15:51:30 +0000 (05:51 -1000)] 
linux-user: Move elf_core_copy_regs to arm/elfload.c

Move elf_core_copy_regs to elfload.c.
Move HAVE_ELF_CORE_DUMP, ELF_NREGS, target_elf_gregset_t to target_elf.h.
For now, duplicate the definitions of target_elf_greg_t and tswapreg.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user: Move elf_core_copy_regs to {i386,x86_64}/elfload.c
Richard Henderson [Wed, 27 Aug 2025 23:48:07 +0000 (09:48 +1000)] 
linux-user: Move elf_core_copy_regs to {i386,x86_64}/elfload.c

Move elf_core_copy_regs to elfload.c.
Move HAVE_ELF_CORE_DUMP, ELF_NREGS, target_elf_gregset_t to target_elf.h.
For now, duplicate the definitions of target_elf_greg_t and tswapreg.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user: Rename USE_ELF_CORE_DUMP to HAVE_ELF_CORE_DUMP
Richard Henderson [Wed, 27 Aug 2025 23:46:08 +0000 (09:46 +1000)] 
linux-user: Rename USE_ELF_CORE_DUMP to HAVE_ELF_CORE_DUMP

The other knobs in target_elf.h are all HAVE_*.
Rename this USE_ELF_CORE_DUMP to match.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user: Declare elf_core_copy_regs in loader.h
Richard Henderson [Sat, 2 Aug 2025 09:38:28 +0000 (19:38 +1000)] 
linux-user: Declare elf_core_copy_regs in loader.h

Drop the static from all implementations.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user: Update comment for target_elf_gregset_t
Richard Henderson [Wed, 27 Aug 2025 22:37:17 +0000 (08:37 +1000)] 
linux-user: Update comment for target_elf_gregset_t

The only thing now used by generic core dump code is
target_elf_gregset_t; ELF_NREG and target_elf_greg_t
are now private to the implementation.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/xtensa: Convert target_elf_gregset_t to a struct
Richard Henderson [Wed, 27 Aug 2025 22:32:11 +0000 (08:32 +1000)] 
linux-user/xtensa: Convert target_elf_gregset_t to a struct

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/s390x: Convert target_elf_gregset_t to a struct
Richard Henderson [Wed, 27 Aug 2025 22:30:25 +0000 (08:30 +1000)] 
linux-user/s390x: Convert target_elf_gregset_t to a struct

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/m68k: Convert target_elf_gregset_t to a struct
Richard Henderson [Wed, 27 Aug 2025 22:19:30 +0000 (08:19 +1000)] 
linux-user/m68k: Convert target_elf_gregset_t to a struct

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/sh4: Convert target_elf_gregset_t to a struct
Richard Henderson [Wed, 27 Aug 2025 22:17:40 +0000 (08:17 +1000)] 
linux-user/sh4: Convert target_elf_gregset_t to a struct

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/openrisc: Convert target_elf_gregset_t to a struct
Richard Henderson [Wed, 27 Aug 2025 22:15:44 +0000 (08:15 +1000)] 
linux-user/openrisc: Convert target_elf_gregset_t to a struct

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/microblaze: Convert target_elf_gregset_t to a struct
Richard Henderson [Wed, 27 Aug 2025 22:13:46 +0000 (08:13 +1000)] 
linux-user/microblaze: Convert target_elf_gregset_t to a struct

While we're at it, drop "pos++" and simply open-code indexes.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/mips: Convert target_elf_gregset_t to a struct
Richard Henderson [Wed, 27 Aug 2025 22:10:05 +0000 (08:10 +1000)] 
linux-user/mips: Convert target_elf_gregset_t to a struct

While we're at it, merge the store of TARGET_EF_R0 into the
loop over all R0 registers.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/loongarch64: Convert target_elf_gregset_t to a struct
Richard Henderson [Wed, 27 Aug 2025 22:07:32 +0000 (08:07 +1000)] 
linux-user/loongarch64: Convert target_elf_gregset_t to a struct

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/ppc: Convert target_elf_gregset_t to a struct
Richard Henderson [Wed, 27 Aug 2025 22:05:47 +0000 (08:05 +1000)] 
linux-user/ppc: Convert target_elf_gregset_t to a struct

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/aarch64: Convert target_elf_gregset_t to a struct
Richard Henderson [Wed, 27 Aug 2025 22:03:45 +0000 (08:03 +1000)] 
linux-user/aarch64: Convert target_elf_gregset_t to a struct

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/arm: Convert target_elf_gregset_t to a struct
Richard Henderson [Wed, 27 Aug 2025 22:02:18 +0000 (08:02 +1000)] 
linux-user/arm: Convert target_elf_gregset_t to a struct

While we're at it, loop over the general registers
rather than open-code them.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/i386: Convert target_elf_gregset_t to a struct
Richard Henderson [Wed, 27 Aug 2025 21:57:31 +0000 (07:57 +1000)] 
linux-user/i386: Convert target_elf_gregset_t to a struct

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/x86_64: Convert target_elf_gregset_t to a struct
Richard Henderson [Wed, 27 Aug 2025 21:55:10 +0000 (07:55 +1000)] 
linux-user/x86_64: Convert target_elf_gregset_t to a struct

A structure typedef may be abstract, while an array typedef cannot.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user: Drop deprecated -p option
Peter Maydell [Thu, 28 Aug 2025 16:20:12 +0000 (17:20 +0100)] 
linux-user: Drop deprecated -p option

The user-mode '-p' option has been deprecated since 9.0 and
doesn't do anything except emit a warning. We are well past
our minimum deprecation period, so drop the option.

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-ID: <20250828162012.3307647-1-peter.maydell@linaro.org>

10 months agolinux-user: Tidy print_socket_protocol
Richard Henderson [Wed, 27 Aug 2025 21:36:25 +0000 (07:36 +1000)] 
linux-user: Tidy print_socket_protocol

Sink all of the qemu_log calls to the end, collecting only
a string for the name, if identified.  Merge separate if
blocks into one switch.

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agohw/core: Use qemu_log_trylock/unlock in cpu_common_reset_exit
Richard Henderson [Wed, 27 Aug 2025 05:34:35 +0000 (15:34 +1000)] 
hw/core: Use qemu_log_trylock/unlock in cpu_common_reset_exit

Ensure that the "CPU Reset" message won't be separated
from the cpu_dump_state output.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agohw/core: Dump cpu_reset in the reset.exit phase
Richard Henderson [Wed, 27 Aug 2025 05:27:50 +0000 (15:27 +1000)] 
hw/core: Dump cpu_reset in the reset.exit phase

During reset.hold, the cpu is in an inconsistent state,
where the leaf class has not had a chance to initialize
state at all.

This is visible as a SIGSEGV in "qemu-system-sparc64 -d cpu_reset".

Move the dump to the exit phase, where all initialization
is certain to be complete.

Reported-by: Henk van der Laak <henk@laaksoft.nl>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agotcg: move interrupt caching and single step masking closer to user
Igor Mammedov [Thu, 14 Aug 2025 16:06:00 +0000 (18:06 +0200)] 
tcg: move interrupt caching and single step masking closer to user

in cpu_handle_interrupt() the only place where cached interrupt_request
might have effect is when CPU_INTERRUPT_SSTEP_MASK applied and
cached interrupt_request handed over to cpu_exec_interrupt() and
need_replay_interrupt().

Simplify code by moving interrupt_request caching and CPU_INTERRUPT_SSTEP_MASK
masking into the block where it actually matters and drop reloading cached value
from CPUState:interrupt_request as the rest of the code directly uses
CPUState:interrupt_request.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Link: https://lore.kernel.org/r/20250814160600.2327672-9-imammedo@redhat.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agokvm: i386: irqchip: take BQL only if there is an interrupt
Igor Mammedov [Thu, 14 Aug 2025 16:05:59 +0000 (18:05 +0200)] 
kvm: i386: irqchip: take BQL only if there is an interrupt

when kernel-irqchip=split is used, QEMU still hits BQL
contention issue when reading ACPI PM/HPET timers
(despite of timer[s] access being lock-less).

So Windows with more than 255 cpus is still not able to
boot (since it requires iommu -> split irqchip).

Problematic path is in kvm_arch_pre_run() where BQL is taken
unconditionally when split irqchip is in use.

There are a few parts that BQL protects there:
  1. interrupt check and injecting

    however we do not take BQL when checking for pending
    interrupt (even within the same function), so the patch
    takes the same approach for cpu->interrupt_request checks
    and takes BQL only if there is a job to do.

  2. request_interrupt_window access
      CPUState::kvm_run::request_interrupt_window doesn't need BQL
      as it's accessed by its own vCPU thread.

  3. cr8/cpu_get_apic_tpr access
      the same (as #2) applies to CPUState::kvm_run::cr8,
      and APIC registers are also cached/synced (get/put) within
      the vCPU thread it belongs to.

Taking BQL only when is necessary, eleminates BQL bottleneck on
IO/MMIO only exit path, improoving latency by 80% on HPET micro
benchmark.

This lets Windows to boot succesfully (in case hv-time isn't used)
when more than 255 vCPUs are in use.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Link: https://lore.kernel.org/r/20250814160600.2327672-8-imammedo@redhat.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohpet: make main counter read lock-less
Igor Mammedov [Thu, 14 Aug 2025 16:05:57 +0000 (18:05 +0200)] 
hpet: make main counter read lock-less

Make access to main HPET counter lock-less.

In unlikely event of an update in progress, readers will busy wait
untill update is finished.

As result micro benchmark of concurrent reading of HPET counter
with large number of vCPU shows over 80% better (less) latency.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Link: https://lore.kernel.org/r/20250814160600.2327672-6-imammedo@redhat.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohpet: move out main counter read into a separate block
Igor Mammedov [Thu, 14 Aug 2025 16:05:56 +0000 (18:05 +0200)] 
hpet: move out main counter read into a separate block

Follow up patche will switch main counter read to
lock-less mode. As preparation for that move relevant
branch into a separate top level block to make followup
patch cleaner/simplier by reducing contextual noise
when lock-less read is introduced.

no functional changes.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Link: https://lore.kernel.org/r/20250814160600.2327672-5-imammedo@redhat.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohpet: switch to fine-grained device locking
Igor Mammedov [Thu, 14 Aug 2025 16:05:55 +0000 (18:05 +0200)] 
hpet: switch to fine-grained device locking

as a step towards lock-less HPET counter read,
use per device locking instead of BQL.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Link: https://lore.kernel.org/r/20250814160600.2327672-4-imammedo@redhat.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agoacpi: mark PMTIMER as unlocked
Igor Mammedov [Thu, 14 Aug 2025 16:05:54 +0000 (18:05 +0200)] 
acpi: mark PMTIMER as unlocked

Reading QEMU_CLOCK_VIRTUAL is thread-safe, write access is NOP.

This makes possible to boot Windows with large vCPUs count when
hv-time is not used.

Reproducer:
  -M q35,hpet=off -cpu host -enable-kvm -smp 240,sockets=4 -m 8G WS2025.img
fails to boot within 30min.

With this fix it boots within 2-1min.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Link: https://lore.kernel.org/r/20250814160600.2327672-3-imammedo@redhat.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agomemory: reintroduce BQL-free fine-grained PIO/MMIO
Igor Mammedov [Thu, 14 Aug 2025 16:05:53 +0000 (18:05 +0200)] 
memory: reintroduce BQL-free fine-grained PIO/MMIO

This patch brings back Jan's idea [1] of BQL-free IO access

This will let us make access to ACPI PM/HPET timers cheaper,
and prevent BQL contention in case of workload that heavily
uses the timers with a lot of vCPUs.

1) 196ea13104f (memory: Add global-locking property to memory regions)
   ... de7ea885c539 (kvm: Switch to unlocked MMIO)

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Link: https://lore.kernel.org/r/20250814160600.2327672-2-imammedo@redhat.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agoadd cpu_test_interrupt()/cpu_set_interrupt() helpers and use them tree wide
Igor Mammedov [Thu, 21 Aug 2025 15:56:03 +0000 (17:56 +0200)] 
add cpu_test_interrupt()/cpu_set_interrupt() helpers and use them tree wide

The helpers form load-acquire/store-release pair and ensure
that appropriate barriers are in place in case checks happen
outside of BQL.

Use them to replace open-coded checkers/setters across the code,
to make sure that barriers are not missed.  Helpers also make code a
bit more readable.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Jason J. Herne <jjherne@linux.ibm.com>
Link: https://lore.kernel.org/r/20250821155603.2422553-1-imammedo@redhat.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agouser-exec: ensure interrupt_request is not used
Paolo Bonzini [Fri, 29 Aug 2025 08:46:48 +0000 (10:46 +0200)] 
user-exec: ensure interrupt_request is not used

cpu_interrupt() is not called anymore except by ARM but even there
it is dead code; disentangling the various cpregs accessors from user-mode
emulation is a work in progress.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohw/i386/isapc.c: replace rom_memory with system_memory
Mark Cave-Ayland [Thu, 28 Aug 2025 11:10:02 +0000 (12:10 +0100)] 
hw/i386/isapc.c: replace rom_memory with system_memory

Now that we can guarantee the isapc machine will never have a PCI bus, any
instances of rom_memory can be replaced by system_memory and rom_memory
removed completely.

Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Link: https://lore.kernel.org/r/20250828111057.468712-20-mark.caveayland@nutanix.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohw/i386/pc_piix.c: replace rom_memory with pci_memory
Mark Cave-Ayland [Thu, 28 Aug 2025 11:10:01 +0000 (12:10 +0100)] 
hw/i386/pc_piix.c: replace rom_memory with pci_memory

Now that we can guarantee the i440fx-pc machine will always have a PCI bus, any
instances of rom_memory can be replaced by pci_memory and rom_memory removed
completely.

Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Link: https://lore.kernel.org/r/20250828111057.468712-19-mark.caveayland@nutanix.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohw/i386/pc_piix.c: remove unused headers after isapc machine split
Mark Cave-Ayland [Thu, 28 Aug 2025 11:10:00 +0000 (12:10 +0100)] 
hw/i386/pc_piix.c: remove unused headers after isapc machine split

The headers for isapc-only devices can be removed from pc_piix.c since they are
no longer used by the i440fx-pc machine.

Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Link: https://lore.kernel.org/r/20250828111057.468712-18-mark.caveayland@nutanix.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohw/i386: move isapc machine to separate isapc.c file
Mark Cave-Ayland [Thu, 28 Aug 2025 11:09:59 +0000 (12:09 +0100)] 
hw/i386: move isapc machine to separate isapc.c file

Now that pc_init_isa() is independent of any PCI initialisation, move it into a
separate isapc.c file including the ISA IDE variables which are now no longer
needed for the pc-i440fx machine. This enables us to finally fix the dependency
of ISAPC on I440FX in hw/i386/Kconfig.

Note that as part of the move to a separate file we can see that the licence text
is a verbatim copy of the MIT licence. The text originates from commit 1df912cf9e
("VL license of the day is MIT/BSD") so we can be sure that this was the original
intent. As a consequence we can update the file header to use a SPDX tag as per
the current project contribution guidelines.

Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Reviewed-by: Bernhard Beschow <shentey@gmail.com>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Link: https://lore.kernel.org/r/20250828111057.468712-17-mark.caveayland@nutanix.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohw/i386/pc_piix.c: assume pcmc->pci_enabled is always true in pc_init1()
Mark Cave-Ayland [Thu, 28 Aug 2025 11:09:58 +0000 (12:09 +0100)] 
hw/i386/pc_piix.c: assume pcmc->pci_enabled is always true in pc_init1()

PCI is always enabled on the pc-i440fx machine so hardcode the relevant logic
in pc_init1(). Add an assert() to ensure that this is always the case at
runtime as already done in pc_q35_init().

Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Link: https://lore.kernel.org/r/20250828111057.468712-16-mark.caveayland@nutanix.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohw/i386/pc_piix.c: always initialise ISA IDE drives in pc_init_isa()
Mark Cave-Ayland [Thu, 28 Aug 2025 11:09:57 +0000 (12:09 +0100)] 
hw/i386/pc_piix.c: always initialise ISA IDE drives in pc_init_isa()

By definition an isapc machine must always use ISA IDE drives so ensure that they
are always enabled. At the same time also remove the surrounding CONFIG_IDE_ISA
define since it will be enabled via the ISAPC Kconfig.

Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Link: https://lore.kernel.org/r/20250828111057.468712-15-mark.caveayland@nutanix.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohw/i386/pc_piix.c: remove pc_system_flash_cleanup_unused() from pc_init_isa()
Mark Cave-Ayland [Thu, 28 Aug 2025 11:09:56 +0000 (12:09 +0100)] 
hw/i386/pc_piix.c: remove pc_system_flash_cleanup_unused() from pc_init_isa()

This function contains 'assert(PC_MACHINE_GET_CLASS(pcms)->pci_enabled)' and so we can
safely assume that it should never be used for the isapc machine.

Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Link: https://lore.kernel.org/r/20250828111057.468712-14-mark.caveayland@nutanix.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohw/i386/pc_piix.c: hardcode hole64_size to 0 in pc_init_isa()
Mark Cave-Ayland [Thu, 28 Aug 2025 11:09:55 +0000 (12:09 +0100)] 
hw/i386/pc_piix.c: hardcode hole64_size to 0 in pc_init_isa()

All isapc machines must have 32-bit CPUs and have no PCI 64-bit hole so it can be
hardcoded to 0.

Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Link: https://lore.kernel.org/r/20250828111057.468712-13-mark.caveayland@nutanix.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohw/i386/pc_piix.c: simplify RAM size logic in pc_init_isa()
Mark Cave-Ayland [Thu, 28 Aug 2025 11:09:54 +0000 (12:09 +0100)] 
hw/i386/pc_piix.c: simplify RAM size logic in pc_init_isa()

All isapc machines must have 32-bit CPUs and so the RAM split logic can be hardcoded
accordingly.

Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Link: https://lore.kernel.org/r/20250828111057.468712-12-mark.caveayland@nutanix.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohw/i386/pc_piix.c: remove nvdimm initialisation from pc_init_isa()
Mark Cave-Ayland [Thu, 28 Aug 2025 11:09:53 +0000 (12:09 +0100)] 
hw/i386/pc_piix.c: remove nvdimm initialisation from pc_init_isa()

NVDIMMs cannot be used by PCs from a pre-PCI era.

Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Link: https://lore.kernel.org/r/20250828111057.468712-11-mark.caveayland@nutanix.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohw/i386/pc_piix.c: remove SGX initialisation from pc_init_isa()
Mark Cave-Ayland [Thu, 28 Aug 2025 11:09:52 +0000 (12:09 +0100)] 
hw/i386/pc_piix.c: remove SGX initialisation from pc_init_isa()

The Intel SGX instructions only exist on recent CPUs and so would never be available
on a CPU from the pre-PCI era.

Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Link: https://lore.kernel.org/r/20250828111057.468712-10-mark.caveayland@nutanix.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohw/i386/pc_piix.c: remove SMI and piix4_pm initialisation from pc_init_isa()
Mark Cave-Ayland [Thu, 28 Aug 2025 11:09:51 +0000 (12:09 +0100)] 
hw/i386/pc_piix.c: remove SMI and piix4_pm initialisation from pc_init_isa()

These are based upon the PIIX4 PCI chipset and so can never be used on an isapc machine.

Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Link: https://lore.kernel.org/r/20250828111057.468712-9-mark.caveayland@nutanix.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohw/i386/pc_piix.c: remove igvm initialisation from pc_init_isa()
Mark Cave-Ayland [Thu, 28 Aug 2025 11:09:50 +0000 (12:09 +0100)] 
hw/i386/pc_piix.c: remove igvm initialisation from pc_init_isa()

According to the QEMU documentation igvm is only supported for the pc and q35
machines so remove igvm support from the isapc machine.

Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Link: https://lore.kernel.org/r/20250828111057.468712-8-mark.caveayland@nutanix.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohw/i386/pc_piix.c: remove pcmc->pci_enabled dependent initialisation from pc_init_isa()
Mark Cave-Ayland [Thu, 28 Aug 2025 11:09:49 +0000 (12:09 +0100)] 
hw/i386/pc_piix.c: remove pcmc->pci_enabled dependent initialisation from pc_init_isa()

PCI code will never be used for an isapc machine.

Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Link: https://lore.kernel.org/r/20250828111057.468712-7-mark.caveayland@nutanix.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohw/i386/pc_piix.c: duplicate pc_init1() into pc_isa_init()
Mark Cave-Ayland [Thu, 28 Aug 2025 11:09:48 +0000 (12:09 +0100)] 
hw/i386/pc_piix.c: duplicate pc_init1() into pc_isa_init()

This is to prepare for splitting the isapc machine into its own separate file.

Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Link: https://lore.kernel.org/r/20250828111057.468712-6-mark.caveayland@nutanix.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohw/i386/pc_piix.c: inline pc_xen_hvm_init_pci() into pc_xen_hvm_init()
Mark Cave-Ayland [Thu, 28 Aug 2025 11:09:47 +0000 (12:09 +0100)] 
hw/i386/pc_piix.c: inline pc_xen_hvm_init_pci() into pc_xen_hvm_init()

This helps to simplify the initialisation of the Xen hvm machine.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Link: https://lore.kernel.org/r/20250828111057.468712-5-mark.caveayland@nutanix.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohw/i386/pc_piix.c: remove include for loader.h
Mark Cave-Ayland [Thu, 28 Aug 2025 11:09:46 +0000 (12:09 +0100)] 
hw/i386/pc_piix.c: remove include for loader.h

This header is not required since the loader functionality is handled separately
by pc_memory_init() in pc.c.

Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Link: https://lore.kernel.org/r/20250828111057.468712-4-mark.caveayland@nutanix.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohw/i386/pc_piix.c: restrict isapc machine to 3.5G memory
Mark Cave-Ayland [Thu, 28 Aug 2025 11:09:45 +0000 (12:09 +0100)] 
hw/i386/pc_piix.c: restrict isapc machine to 3.5G memory

Since the isapc machine is now limited to using 32-bit CPUs, add a hard restriction
so that the machine cannot be started with more than 3.5G memory. This matches the
default value for max_ram_below_4g if not specified and provides consistent
behaviour betweem TCG and KVM accelerators.

Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Link: https://lore.kernel.org/r/20250828111057.468712-3-mark.caveayland@nutanix.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agohw/i386/pc_piix.c: restrict isapc machine to 32-bit CPUs
Mark Cave-Ayland [Thu, 28 Aug 2025 11:09:44 +0000 (12:09 +0100)] 
hw/i386/pc_piix.c: restrict isapc machine to 32-bit CPUs

The isapc machine represents a legacy ISA PC with a 486 CPU. Whilst it is
possible to specify any CPU via -cpu on the command line, it makes no
sense to allow modern 64-bit CPUs to be used.

Restrict the isapc machine to the available 32-bit CPUs, taking care to
handle the case where if a user inadvertently uses either -cpu max or
-cpu host then the "best" 32-bit CPU is used (in this case the pentium3).

Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Link: https://lore.kernel.org/r/20250828111057.468712-2-mark.caveayland@nutanix.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 months agotarget/loongarch: Use correct address when flush tlb
Bibo Mao [Wed, 30 Jul 2025 01:47:55 +0000 (09:47 +0800)] 
target/loongarch: Use correct address when flush tlb

With tlb_flush_range_by_mmuidx(), the virtual address is 64 bit.
However on LoongArch TLB emulation system, virtual address is
48 bit. It is necessary to signed-extend 48 bit address to 64 bit when
flush tlb, also fix address calculation issue with odd page.

Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
10 months agotarget/loongarch: Use MMUContext in get_physical_address()
Bibo Mao [Tue, 29 Jul 2025 09:51:28 +0000 (17:51 +0800)] 
target/loongarch: Use MMUContext in get_physical_address()

With function get_physical_address(), parameter MMUContext is added
and remove parameter address, prot and address.

Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
10 months agotarget/loongarch: Use MMUContext in loongarch_map_address()
Bibo Mao [Tue, 29 Jul 2025 09:19:53 +0000 (17:19 +0800)] 
target/loongarch: Use MMUContext in loongarch_map_address()

With function loongarch_map_address(), parameter MMUContext is added
and remove parameter address, prot and address.

Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
10 months agotarget/loongarch: Use MMUContext in loongarch_get_addr_from_tlb
Bibo Mao [Tue, 29 Jul 2025 09:06:05 +0000 (17:06 +0800)] 
target/loongarch: Use MMUContext in loongarch_get_addr_from_tlb

With function loongarch_get_addr_from_tlb(), parameter MMUContext
is added and remove parameter physical, prot and address.

Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
10 months agotarget/loongarch: Use MMUConext in loongarch_map_tlb_entry()
Bibo Mao [Tue, 29 Jul 2025 08:40:25 +0000 (16:40 +0800)] 
target/loongarch: Use MMUConext in loongarch_map_tlb_entry()

With function loongarch_map_tlb_entry(), parameter MMUConext is added
and remove parameter physical, prot and address.

Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
10 months agotarget/loongarch: Use loongarch_check_pte in loongarch_page_table_walker
Bibo Mao [Tue, 29 Jul 2025 08:10:02 +0000 (16:10 +0800)] 
target/loongarch: Use loongarch_check_pte in loongarch_page_table_walker

Function loongarch_check_pte() can get physical address and access
priviledge, it works on both TLB entry and pte entry. It can be used
in function loongarch_page_table_walker() also.

Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
10 months agotarget/loongarch: Add common function loongarch_check_pte()
Bibo Mao [Tue, 29 Jul 2025 04:03:43 +0000 (12:03 +0800)] 
target/loongarch: Add common function loongarch_check_pte()

Common function loongarch_check_pte() is to check tlb entry, return
the physical address and access priviledge if found. Also it can be
used with page table entry, which is used in page table walker.

Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
10 months agotarget/loongarch: Use MMUAccessType in loongarch_map_tlb_entry()
Bibo Mao [Tue, 29 Jul 2025 03:38:35 +0000 (11:38 +0800)] 
target/loongarch: Use MMUAccessType in loongarch_map_tlb_entry()

Enum type MMUAccessType is used in function loongarch_map_tlb_entry()
rather than int type, and keep consistent with its caller function.

Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
10 months agotarget/loongarch: Use vaddr in get_physical_address()
Bibo Mao [Tue, 29 Jul 2025 03:29:32 +0000 (11:29 +0800)] 
target/loongarch: Use vaddr in get_physical_address()

Replace target_ulong type with vaddr in function get_physical_address()
and the same with its calling functions.

Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
10 months agotarget/loongarch: Add enum type TLBRet definition
Bibo Mao [Tue, 29 Jul 2025 02:44:51 +0000 (10:44 +0800)] 
target/loongarch: Add enum type TLBRet definition

There is mixed usage between enum variable TLBRET_xxx and int type,
here add enum type TLBRet definition and replace int type variable
with enum type TLBRet in some functions.

Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
10 months agotarget/loongarch: Add header file cpu-mmu.h
Bibo Mao [Tue, 8 Jul 2025 08:10:20 +0000 (16:10 +0800)] 
target/loongarch: Add header file cpu-mmu.h

New header file cpu-mmu.h is added and move mmu relative function
declaration to this file.

Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
10 months agotarget/loongarch: Set page size in TLB entry with STLB
Bibo Mao [Wed, 16 Jul 2025 01:45:47 +0000 (09:45 +0800)] 
target/loongarch: Set page size in TLB entry with STLB

With VTLB different TLB entry may have different page size, and
page size is set in PS field of TLB entry. However with STLB, all
the TLB entries have the same page size, page size comes from register
CSR_STLBPS, PS field of TLB entry is not used.

Here PS field of TLB entry is used with all TLB entries, even with
STLB. It is convenient with TLB maintainance operation.

Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Song Gao <gaosong@loongson.cn>
10 months agotarget/loongarch: Define function loongarch_cpu_post_init as static
Bibo Mao [Tue, 8 Jul 2025 07:35:12 +0000 (15:35 +0800)] 
target/loongarch: Define function loongarch_cpu_post_init as static

Function loongarch_cpu_post_init() is implemented and used in the
same file target/loongarch/cpu.c, it can be defined as static function.

This patch moves implementation about function loongarch_cpu_post_init()
before it is referenced. And it is only code movement, no function
change.

Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
10 months agotarget/loongarch: Move some function definition to kvm directory
Bibo Mao [Tue, 8 Jul 2025 07:22:37 +0000 (15:22 +0800)] 
target/loongarch: Move some function definition to kvm directory

Move function definition specified with kvm to the corresponding
directory. Also remove header file "cpu.h" including outside of
macro QEMU_KVM_LOONGARCH_H.

Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
10 months agoMerge tag 'pull-loongarch-20250828' of https://github.com/gaosong715/qemu into staging
Richard Henderson [Thu, 28 Aug 2025 21:44:50 +0000 (07:44 +1000)] 
Merge tag 'pull-loongarch-20250828' of https://github.com/gaosong715/qemu into staging

pull-loongarch-20250828

# -----BEGIN PGP SIGNATURE-----
#
# iLMEAAEIAB0WIQTKRzxE1qCcGJoZP81FK5aFKyaCFgUCaLBJawAKCRBFK5aFKyaC
# FhiGBACdQ1hkGp79sFrwi0h6GaP4NdbG8jx0vNGwPOqvbIc6Frn4bSyATNZI76k+
# /B2KTGLe4fU95QeXCJ937N1mNqcbagxFVeCaqSS71wuSfVKZBWLvGi8CckCqWU57
# GeUCQTOgA+E94C93G0pdgtyi2r7ambPnqTNifghkdoSN52Ta1Q==
# =pUq/
# -----END PGP SIGNATURE-----
# gpg: Signature made Thu 28 Aug 2025 10:19:55 PM AEST
# gpg:                using RSA key CA473C44D6A09C189A193FCD452B96852B268216
# gpg: Good signature from "Song Gao <gaosong@loongson.cn>" [unknown]
# 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: CA47 3C44 D6A0 9C18 9A19  3FCD 452B 9685 2B26 8216

* tag 'pull-loongarch-20250828' of https://github.com/gaosong715/qemu:
  hw/intc/loongarch_pch_pic: Fix ubsan warning and endianness issue
  target/loongarch: Guard 64-bit-only insn translation with TRANS64 macro

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agohw/intc/loongarch_pch_pic: Fix ubsan warning and endianness issue
Thomas Huth [Fri, 1 Aug 2025 06:01:52 +0000 (08:01 +0200)] 
hw/intc/loongarch_pch_pic: Fix ubsan warning and endianness issue

When booting the Linux kernel from tests/functional/test_loongarch64_virt.py
with a QEMU that has been compiled with --enable-ubsan, there is
a warning like this:

 .../hw/intc/loongarch_pch_pic.c:171:46: runtime error: index 512 out of
  bounds for type 'uint8_t[64]' (aka 'unsigned char[64]')
 SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
  .../hw/intc/loongarch_pch_pic.c:171:46
 .../hw/intc/loongarch_pch_pic.c:175:45: runtime error: index 256 out of
  bounds for type 'uint8_t[64]' (aka 'unsigned char[64]')
 SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior
  .../hw/intc/loongarch_pch_pic.c:175:45

It happens because "addr" is added first before substracting the base
(PCH_PIC_HTMSI_VEC or PCH_PIC_ROUTE_ENTRY).
Additionally, this code looks like it is not endianness safe, since
it uses a 64-bit pointer to write values into an array of 8-bit values.

Thus rework the code to use the stq_le_p / ldq_le_p helpers here
and make sure that we do not create pointers with undefined behavior
by accident.

Signed-off-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Tested-by: Song Gao <gaosong@loongson.cn>
Signed-off-by: Song Gao <gaosong@loongson.cn>
10 months agotarget/loongarch: Guard 64-bit-only insn translation with TRANS64 macro
WANG Rui [Fri, 25 Jul 2025 03:12:32 +0000 (11:12 +0800)] 
target/loongarch: Guard 64-bit-only insn translation with TRANS64 macro

This patch replaces uses of the generic TRANS macro with TRANS64 for
instructions that are only valid when 64-bit support is available.

This improves correctness and avoids potential assertion failures or
undefined behavior during translation on 32-bit-only configurations.

Signed-off-by: WANG Rui <wangrui@loongson.cn>
Reviewed-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Song Gao <gaosong@loongson.cn>
Signed-off-by: Song Gao <gaosong@loongson.cn>
10 months agoMerge tag 'pull-lu-20250828' of https://gitlab.com/rth7680/qemu into staging
Richard Henderson [Wed, 27 Aug 2025 23:24:36 +0000 (09:24 +1000)] 
Merge tag 'pull-lu-20250828' of https://gitlab.com/rth7680/qemu into staging

linux-user: do not print IP socket options by default
linux-user: Add strace for rseq
linux-user: Move get_elf_cpu_model to target/elfload.c
linux-user: Move get_elf_hwcap to target/elfload.c
linux-user: Move get_elf_hwcap2 to target/elfload.c
linux-user: Move get_elf_platform to target/elfload.c
linux-user: Move get_elf_base_platform to target/elfload.c
linux-user: Create init_main_thread in target/cpu_loop.c
semihosting: Retrieve stack top from image_info
semihosting: Initialize heap once per process

# -----BEGIN PGP SIGNATURE-----
#
# iQFRBAABCgA7FiEEekgeeIaLTbaoWgXAZN846K9+IV8FAmive68dHHJpY2hhcmQu
# aGVuZGVyc29uQGxpbmFyby5vcmcACgkQZN846K9+IV+LwwgAsjSjc5Bjal0mc+UI
# Qmb7qbNM7YDhJ4o9eJoT7AfEo3AlR8vhA01/ayfBEKMxYStl4tkZU1jthb7LLTyS
# TfPBsZEBF/ZuTYLV56dfQ/6AJZ2g5OhqJbeVeD8Ef93JK60qgBerCK/D5SfphSfh
# TQtOG0LU2BXzGt8K3WghFxsFQeYcTrNeT5JdtIXYrmGQmDnPh3dOnQrFcO1leFLa
# khUfj7l7bE1Rgqo5h5pveaee4AD3VndYe10zvSVKHKjBL4Zd3hxf3MypNRpDFC0v
# ua9xt4qXtWgEYSkKPj/mipcd9fsb+RKs6kPA3oojwb8DCkFAZ0UogIwmd9/7lz8u
# FMp+iQ==
# =Nu63
# -----END PGP SIGNATURE-----
# gpg: Signature made Thu 28 Aug 2025 07:42:07 AM AEST
# gpg:                using RSA key 7A481E78868B4DB6A85A05C064DF38E8AF7E215F
# gpg:                issuer "richard.henderson@linaro.org"
# gpg: Good signature from "Richard Henderson <richard.henderson@linaro.org>" [ultimate]

* tag 'pull-lu-20250828' of https://gitlab.com/rth7680/qemu: (46 commits)
  linux-user: do not print IP socket options by default
  linux-user: Add strace for rseq
  linux-user: Remove do_init_main_thread
  linux-user/hexagon: Create init_main_thread
  linux-user/xtensa: Create init_main_thread
  linux-user/hppa: Create init_main_thread
  linux-user/riscv: Create init_main_thread
  linux-user/s390x: Create init_main_thread
  linux-user/alpha: Create init_main_thread
  linux-user/m68k: Create init_main_thread
  linux-user/sh4: Create init_main_thread
  linux-user/openrisc: Create init_main_thread
  linux-user/microblaze: Create init_main_thread
  linux-user/mips: Create init_main_thread
  linux-user/loongarch64: Create init_main_thread
  linux-user/ppc: Create init_main_thread
  linux-user/sparc: Create init_main_thread
  linux-user/aarch64: Create init_main_thread
  linux-user/arm: Remove a.out startup remenents
  linux-user/arm: Create init_main_thread
  ...

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user: do not print IP socket options by default
Łukasz Stelmach [Wed, 27 Aug 2025 09:54:12 +0000 (11:54 +0200)] 
linux-user: do not print IP socket options by default

IP protocols should not be printed unless the socket is an IPv4 or
IPv6 one. Current arrangement erroneously prints IPPROTO_IP for Unix
domain sockets.

Signed-off-by: Łukasz Stelmach <l.stelmach@samsung.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-ID: <20250827095412.2348821-1-l.stelmach@samsung.com>

10 months agolinux-user: Add strace for rseq
Joel Stanley [Tue, 26 Aug 2025 06:03:40 +0000 (15:33 +0930)] 
linux-user: Add strace for rseq

 build/qemu-riscv64 -cpu rv64,v=on -d strace  build/tests/tcg/riscv64-linux-user/test-vstart-overflow
 1118081 riscv_hwprobe(0xffffbc038200,1,0,0,0,0) = 0
 1118081 brk(NULL) = 0x0000000000085000
 1118081 brk(0x0000000000085b00) = 0x0000000000085b00
 1118081 set_tid_address(0x850f0) = 1118081
 1118081 set_robust_list(0x85100,24) = -1 errno=38 (Function not implemented)
 1118081 rseq(0x857c0,32,0,0xf1401073) = -1 errno=38 (Function not implemented)

Signed-off-by: Joel Stanley <joel@jms.id.au>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-ID: <20250826060341.1118670-1-joel@jms.id.au>

10 months agolinux-user: Remove do_init_main_thread
Richard Henderson [Tue, 29 Jul 2025 08:24:19 +0000 (22:24 -1000)] 
linux-user: Remove do_init_main_thread

All targets have been converted, so we can call init_main_thread
directly.  Remove do_init_main_thread and HAVE_INIT_MAIN_THREAD.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/hexagon: Create init_main_thread
Richard Henderson [Tue, 29 Jul 2025 08:19:49 +0000 (22:19 -1000)] 
linux-user/hexagon: Create init_main_thread

Merge init_thread and target_cpu_copy_regs.
There's no point going through a target_pt_regs intermediate.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/xtensa: Create init_main_thread
Richard Henderson [Tue, 29 Jul 2025 08:16:22 +0000 (22:16 -1000)] 
linux-user/xtensa: Create init_main_thread

Merge init_thread and target_cpu_copy_regs.
There's no point going through a target_pt_regs intermediate.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/hppa: Create init_main_thread
Richard Henderson [Tue, 29 Jul 2025 08:09:19 +0000 (22:09 -1000)] 
linux-user/hppa: Create init_main_thread

Merge init_thread and target_cpu_copy_regs.
There's no point going through a target_pt_regs intermediate.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/riscv: Create init_main_thread
Richard Henderson [Tue, 29 Jul 2025 08:06:12 +0000 (22:06 -1000)] 
linux-user/riscv: Create init_main_thread

Merge init_thread and target_cpu_copy_regs.
There's no point going through a target_pt_regs intermediate.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/s390x: Create init_main_thread
Richard Henderson [Tue, 29 Jul 2025 08:03:03 +0000 (22:03 -1000)] 
linux-user/s390x: Create init_main_thread

Merge init_thread and target_cpu_copy_regs.
There's no point going through a target_pt_regs intermediate.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/alpha: Create init_main_thread
Richard Henderson [Tue, 29 Jul 2025 07:59:47 +0000 (21:59 -1000)] 
linux-user/alpha: Create init_main_thread

Merge init_thread and target_cpu_copy_regs.
There's no point going through a target_pt_regs intermediate.

Note that init_thread had set ps in target_pt_regs, but
target_cpu_copy_regs did not copy to env.  This turns out to be
ok because alpha_cpu_initfn initializes flags properly.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/m68k: Create init_main_thread
Richard Henderson [Tue, 29 Jul 2025 07:53:30 +0000 (21:53 -1000)] 
linux-user/m68k: Create init_main_thread

Merge init_thread and target_cpu_copy_regs.
There's no point going through a target_pt_regs intermediate.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/sh4: Create init_main_thread
Richard Henderson [Tue, 29 Jul 2025 07:51:02 +0000 (21:51 -1000)] 
linux-user/sh4: Create init_main_thread

Merge init_thread and target_cpu_copy_regs.
There's no point going through a target_pt_regs intermediate.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/openrisc: Create init_main_thread
Richard Henderson [Tue, 29 Jul 2025 07:48:48 +0000 (21:48 -1000)] 
linux-user/openrisc: Create init_main_thread

Merge init_thread and target_cpu_copy_regs.
There's no point going through a target_pt_regs intermediate.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/microblaze: Create init_main_thread
Richard Henderson [Tue, 29 Jul 2025 07:44:06 +0000 (21:44 -1000)] 
linux-user/microblaze: Create init_main_thread

Merge init_thread and target_cpu_copy_regs.
There's no point going through a target_pt_regs intermediate.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/mips: Create init_main_thread
Richard Henderson [Mon, 28 Jul 2025 23:33:18 +0000 (13:33 -1000)] 
linux-user/mips: Create init_main_thread

Merge init_thread and target_cpu_copy_regs.
There's no point going through a target_pt_regs intermediate.

Note that init_thread had set cp0_status in target_pt_regs, but
target_cpu_copy_regs did not copy to env.  This turns out to be
ok because mips_cpu_reset_hold initializes CP0_Status properly.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/loongarch64: Create init_main_thread
Richard Henderson [Mon, 28 Jul 2025 23:22:48 +0000 (13:22 -1000)] 
linux-user/loongarch64: Create init_main_thread

Merge init_thread and target_cpu_copy_regs.
There's no point going through a target_pt_regs intermediate.

Note that init_thread had set crmd in target_pt_regs, but
target_cpu_copy_regs did not copy to env.  This turns out to be
ok because loongarch_cpu_reset_hold initializes CRMD properly.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/ppc: Create init_main_thread
Richard Henderson [Mon, 28 Jul 2025 23:09:29 +0000 (13:09 -1000)] 
linux-user/ppc: Create init_main_thread

Merge init_thread and target_cpu_copy_regs.
There's no point going through a target_pt_regs intermediate.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/sparc: Create init_main_thread
Richard Henderson [Mon, 28 Jul 2025 22:29:11 +0000 (12:29 -1000)] 
linux-user/sparc: Create init_main_thread

Merge init_thread and target_cpu_copy_regs.
There's no point going through a target_pt_regs intermediate.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/aarch64: Create init_main_thread
Richard Henderson [Mon, 28 Jul 2025 21:04:34 +0000 (11:04 -1000)] 
linux-user/aarch64: Create init_main_thread

Merge init_thread and target_cpu_copy_regs.
There's no point going through a target_pt_regs intermediate.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/arm: Remove a.out startup remenents
Richard Henderson [Sat, 2 Aug 2025 21:51:51 +0000 (07:51 +1000)] 
linux-user/arm: Remove a.out startup remenents

The setting of r1/r2 was removed in kernel commit acfdd4b1f7590d0
("ARM: 7791/1: a.out: remove partial a.out support"), and the
kernel commit message explains the history.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/arm: Create init_main_thread
Richard Henderson [Mon, 28 Jul 2025 20:43:26 +0000 (10:43 -1000)] 
linux-user/arm: Create init_main_thread

Merge init_thread and target_cpu_copy_regs.
There's no point going through a target_pt_regs intermediate.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/i386: Create init_main_thread
Richard Henderson [Mon, 28 Jul 2025 20:17:44 +0000 (10:17 -1000)] 
linux-user/i386: Create init_main_thread

Merge init_thread and target_cpu_copy_regs.
There's no point going through a target_pt_regs intermediate.
Temporarily introduce HAVE_INIT_MAIN_THREAD during conversion.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user: Create do_init_main_thread
Richard Henderson [Mon, 28 Jul 2025 20:00:36 +0000 (10:00 -1000)] 
linux-user: Create do_init_main_thread

Provide a unified function to initialize the main thread.
Keep target_pt_regs isolated to this function.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user: Move target_cpu_copy_regs decl to qemu.h
Richard Henderson [Mon, 28 Jul 2025 19:49:39 +0000 (09:49 -1000)] 
linux-user: Move target_cpu_copy_regs decl to qemu.h

The function is not used by bsd-user, so placement
within include/user/cpu_loop.h is not ideal.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user: Move get_elf_base_platform to mips/elfload.c
Richard Henderson [Mon, 28 Jul 2025 19:24:31 +0000 (09:24 -1000)] 
linux-user: Move get_elf_base_platform to mips/elfload.c

Pass in CPUState; define HAVE_ELF_BASE_PLATFORM.
Since this was the only instance of ELF_BASE_PLATFORM, go ahead and
provide the stub definition for other platforms.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user: Remove ELF_PLATFORM
Richard Henderson [Mon, 28 Jul 2025 19:18:03 +0000 (09:18 -1000)] 
linux-user: Remove ELF_PLATFORM

All real definitions of ELF_PLATFORM are now identical, and the stub
definitions are NULL.  Use HAVE_ELF_PLATFORM and provide a stub as a
fallback definition of get_elf_platform.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/hppa: Create get_elf_platform
Richard Henderson [Mon, 28 Jul 2025 19:06:39 +0000 (09:06 -1000)] 
linux-user/hppa: Create get_elf_platform

Move the string literal to a new function.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user/loongarch64: Create get_elf_platform
Richard Henderson [Mon, 28 Jul 2025 19:00:52 +0000 (09:00 -1000)] 
linux-user/loongarch64: Create get_elf_platform

Move the string literal to a new function.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10 months agolinux-user: Move get_elf_platform to arm/elfload.c
Richard Henderson [Mon, 28 Jul 2025 18:47:57 +0000 (08:47 -1000)] 
linux-user: Move get_elf_platform to arm/elfload.c

Move the aarch32 get_elf_platform to arm/elfload.c; pass in CPUState.
Create a simple version in aarch64/elfload.c, which we must do at the
same time because of the ifdef dependency between TARGET_AARCH64
and TARGET_ARM.

Since all versions of get_elf_platform now have the same
signature, remove the ifdef from the declaration in loader.h.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>