> On 9 Mar 2026, at 4:34 PM, Harsh Prateek Bora <[email protected]> wrote:
> 
> Hi Ani, Paolo,
> 
> I think the problem lies here:
> 
> For archs which doesnt support vm fd change, we are baling out as below in 
> kvm_reset_vmfd.
> 
> 
>    /*
>     * bail if the current architecture does not support VM file
>     * descriptor change.
>     */
>    if (!kvm_arch_supports_vmfd_change()) {
>        error_report("This target architecture does not support KVM VM "
>                     "file descriptor change.");
>        return -EOPNOTSUPP;
>    }
> 
> However, when rebuild_guest (kvm_reset_vmfd) is called in
> qemu_system_reset here:
> 
>    if ((reason == SHUTDOWN_CAUSE_GUEST_RESET ||
>         reason == SHUTDOWN_CAUSE_HOST_QMP_SYSTEM_RESET) &&
>        (current_machine->new_accel_vmfd_on_reset || !cpus_are_resettable())) {
>        if (ac->rebuild_guest) {
>            ret = ac->rebuild_guest(current_machine);
>            if (ret < 0) {
>                error_report("unable to rebuild guest: %s(%d)",
>                             strerror(-ret), ret);
>                vm_stop(RUN_STATE_INTERNAL_ERROR);
>            } else {
>                info_report("virtual machine state has been rebuilt with new "
>                            "guest file handle.");
>                guest_state_rebuilt = true;
>            }
>        } else if (!cpus_are_resettable())  {
>            error_report("accelerator does not support reset!");
>        } else {
>            error_report("accelerator does not support rebuilding guest state,"
>                         " proceeding with normal reset!");
>        }
>    }
> 
> 
> it just does a vm_stop if rebuild_guest returns < 0.
> 
> IMHO, This should handle -EOPNOTSUPP gracefully.
> Please advise if this needs to be taken care differently?

Is this a confidential guest that cannot be normally reset?


> 
> regards,
> Harsh
> 
> On 09/03/26 1:58 pm, Misbah Anjum N wrote:
>> Hi Ani and Paolo,
>> Following up on my previous report, I've attempted additional debugging to 
>> isolate the issue on ppc64le.
>> I implemented the architecture-specific hooks for ppc64le. After adding the 
>> following changes and recompiling QEMU and testing with the direct 
>> qemu-system-ppc64 command, the hang persists with the same issue - no output 
>> and complete unresponsiveness.
>> Could you suggest what additional changes are needed to ensure the VM FD 
>> change doesn't affect architectures that don't support this feature?
>> Tested with the following changes:
>> File: stubs/kvm.c
>> Changed the abort() call to return 0:
>> int kvm_arch_on_vmfd_change(MachineState *ms, KVMState s)
>> {
>> return 0;  / Changed from abort() */
>> }
>> File: target/ppc/kvm.c
>> Added the following stubs:
>> int kvm_arch_on_vmfd_change(MachineState *ms, KVMState s)
>> {
>> / ppc64le doesn't support VM FD changes for confidential guests */
>> return 0;
>> }
>> bool kvm_arch_supports_vmfd_change(void)
>> {
>> return false;
>> }
>> GDB Backtrace:
>> I ran QEMU under GDB to capture the hang state. The backtrace shows the vCPU 
>> thread is waiting on a condition variable:
>> Thread 4 "CPU 0/KVM" received signal SIGUSR1, User defined signal 1.
>> __syscall_cancel_arch () at ../sysdeps/unix/sysv/linux/powerpc/ 
>> syscall_cancel.S:77
>> #0  __syscall_cancel_arch () at ../sysdeps/unix/sysv/linux/powerpc/ 
>> syscall_cancel.S:77
>> #1  0x00007ffff58a9678 in __internal_syscall_cancel (nr=221) at 
>> cancellation.c:49
>> #2  0x00007ffff58aa220 in __futex_abstimed_wait_common64 
>> (futex_word=0x10131ba10, expected=0, op=393, abstime=0x0, cancel=true) at 
>> futex-internal.c:57
>> #3  __futex_abstimed_wait_common (futex_word=0x10131ba10, expected=0, 
>> clockid=0, abstime=<optimized out>, private=0, cancel=true) at futex- 
>> internal.c:87
>> #4  __GI___futex_abstimed_wait_cancelable64 (futex_word=0x10131ba10, 
>> expected=0, clockid=0, abstime=0x0, private=0) at futex-internal.c:139
>> #5  0x00007ffff58ae0bc in __pthread_cond_wait_common (cond=0x10131b9f0, 
>> mutex=0x101222ce0 <bql>, clockid=0, abstime=0x0) at pthread_cond_wait.c:426
>> #6  ___pthread_cond_wait (cond=0x10131b9f0, mutex=0x101222ce0 <bql>) at 
>> pthread_cond_wait.c:458
>> #7  0x0000000100b9bea8 in qemu_cond_wait_impl (cond=0x10131b9f0, 
>> mutex=0x101222ce0 <bql>, file=0x100c59900 "../system/cpus.c", line=472) at 
>> ../util/qemu-thread-posix.c:240
>> #8  0x00000001006a0408 in qemu_process_cpu_events (cpu=0x1019dd260) at 
>> ../system/cpus.c:472
>> #9  0x0000000100913354 in kvm_vcpu_thread_fn (arg=0x1019dd260) at ../ 
>> accel/kvm/kvm-accel-ops.c:50
>> #10 0x0000000100b9b30c in qemu_thread_start (args=0x1019f1fe0) at ../ 
>> util/qemu-thread-posix.c:414
>> #11 0x00007ffff58aed94 in start_thread (arg=0x7ffff0bce320) at 
>> pthread_create.c:448
>> #12 0x00007ffff59555f8 in __GI___clone3 () at ../sysdeps/unix/sysv/ 
>> linux/powerpc/powerpc64/clone3.S:114
>> Thanks,
>> Misbah Anjum N <[email protected]>
>> On 2026-03-06 16:22, Misbah Anjum N wrote:
>>> Hi,
>>> I'm reporting a critical regression on ppc64le that causes all KVM
>>> guests to hang immediately during startup. Git bisect identified
>>> commit 98884e0cc10997a17ce9abfd6ff10be19224ca6a as the first bad
>>> commit. The commit completely breaks KVM functionality on ppc64le.
>>> 
>>> Regression Details:
>>> Working Version: QEMU 10.2.50 (v10.2.0-1669-gffcf1a7981)
>>> Broken Version: QEMU 10.2.50 (v10.2.0-1816-g3fb456e9a0)
>>> Bad Commit: 98884e0cc10997a17ce9abfd6ff10be19224ca6a "accel/kvm: add
>>> changes required to support KVM VM file descriptor change"
>>> Commit Link:
>>> https://gitlab.com/qemu-project/qemu/-/ 
>>> commit/98884e0cc10997a17ce9abfd6ff10be19224ca6a
>>> 
>>> Environment:
>>> Host: Fedora 42, Kernel 7.0.0-rc2, Power11 (ppc64le)
>>> Libvirt: 12.1.0
>>> Guest: Fedora 42, Kernel 7.0.0-rc2
>>> Machine Type: pseries with KVM acceleration
>>> 
>>> Build Configuration:
>>> git clone https://gitlab.com/qemu-project/qemu.git
>>> cd qemu
>>> git submodule init
>>> git submodule update --recursive
>>> ./configure --target-list=ppc64-softmmu --disable-tcg --prefix=/usr
>>> make && make install
>>> 
>>> Reproduction:
>>> Using virt-install:
>>> /usr/bin/virt-install --connect=qemu:///system --hvm --accelerate
>>> --name 'avocado-vt-vm1' --machine pseries --memory=32768
>>> --vcpu=32,sockets=1,cores=32,threads=1 --import --nographics
>>> --os-variant rhel8.0 --serial pty --memballoon model=virtio
>>> --controller type=scsi,model=virtio-scsi --disk
>>> path=/home/kvmci/tests/data/avocado-vt/images/rhel8.0devel- 
>>> ppc64le.qcow2,bus=scsi,size=10,format=qcow2
>>> --network=bridge=virbr0,model=virtio --boot
>>> emulator=/usr/bin/qemu-system-ppc64
>>> Result: Starting install...
>>>         <hangs indefinitely with no output>
>>> 
>>> Using direct QEMU command:
>>> /usr/bin/qemu-system-ppc64 -name avocado-vt-vm1 -machine
>>> pseries,accel=kvm -enable-kvm -m 32768 -smp
>>> 32,sockets=1,cores=32,threads=1 -nographic -serial pty -device
>>> virtio-balloon -device virtio-scsi-pci,id=scsi0 -drive
>>> file=/home/kvmci/tests/data/avocado-vt/images/rhel8.0devel- 
>>> ppc64le.qcow2,if=none,id=drive-scsi0-0-0,format=qcow2
>>> -device scsi-hd,bus=scsi0.0,drive=drive-scsi0-0-0 -netdev
>>> bridge,id=net0,br=virbr0 -device virtio-net-pci,netdev=net0
>>> Result: <hangs indefinitely with no output>
>>> 
>>> Analysis:
>>> The commit introduces VM file descriptor change support with
>>> architecture-specific hooks.
>>> I attempted the following fixes without success:
>>> 1. Changed abort() to return 0; in stubs/kvm.c
>>> 2. Added early return in kvm_reset_vmfd() when
>>> kvm_arch_supports_vmfd_change() returns false
>>> 
>>> Git Bisect Log:
>>> # git bisect bad
>>> 98884e0cc10997a17ce9abfd6ff10be19224ca6a is the first bad commit
>>> commit 98884e0cc10997a17ce9abfd6ff10be19224ca6a (HEAD)
>>> Author: Ani Sinha <[email protected]>
>>> Date:   Wed Feb 25 09:19:10 2026 +0530
>>> 
>>>     accel/kvm: add changes required to support KVM VM file descriptor change
>>> 
>>>     This change adds common kvm specific support to handle KVM VM file
>>> descriptor
>>>     change. KVM VM file descriptor can change as a part of
>>> confidential guest reset
>>>     mechanism. A new function api kvm_arch_on_vmfd_change() per
>>>     architecture platform is added in order to implement architecture 
>>> specific
>>>     changes required to support it. A subsequent patch will add x86 specific
>>>     implementation for kvm_arch_on_vmfd_change() as currently only x86 
>>> supports
>>>     confidential guest reset.
>>> 
>>>     Signed-off-by: Ani Sinha <[email protected]>
>>>     Link: https://lore.kernel.org/r/20260225035000.385950-6- 
>>> [email protected]
>>>     Signed-off-by: Paolo Bonzini <[email protected]>
>>> 
>>>  MAINTAINERS            |  6 ++++++
>>>  accel/kvm/kvm-all.c    | 88
>>> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
>>> +++++++++++++++---
>>>  accel/kvm/trace-events |  1 +
>>>  include/system/kvm.h   |  3 +++
>>>  stubs/kvm.c            | 22 ++++++++++++++++++++++
>>>  stubs/meson.build      |  1 +
>>>  target/i386/kvm/kvm.c  | 10 ++++++++++
>>>  7 files changed, 128 insertions(+), 3 deletions(-)
>>>  create mode 100644 stubs/kvm.c
>>> 
>>> # git bisect log
>>> git bisect start
>>> git bisect good ffcf1a7981793973ffbd8100a7c3c6042d02ae23
>>> git bisect bad 3fb456e9a0e9eef6a71d9b49bfff596a0f0046e9
>>> git bisect bad e76c30bb13ecb9dc716fa629954bfb6253056ce2
>>> git bisect good 9bdc612a18588975f5776ee4e562df607fea1b2c
>>> git bisect bad 40c015e96942fd2a3e4d5ace6063b3333a3dd372
>>> git bisect good df8df3cb6b743372ebb335bd8404bc3d748da350
>>> git bisect bad 0f53f021ad1ede28dc8944686544e496cab02e5e
>>> git bisect bad 9f0c2b3032639315faf141010a2603b0dbf56230
>>> git bisect bad 98884e0cc10997a17ce9abfd6ff10be19224ca6a
>>> first bad commit: [98884e0cc10997a17ce9abfd6ff10be19224ca6a]
>>> 
>>> Thanks,
>>> Misbah Anjum N <[email protected]>
> 


Reply via email to