Re: [PATCH v4 0/3] KVM: selftests: add powerpc support
From: Anushree Mathur
Date: Sat Sep 19 2026 - 05:03:56 EST
On 19/09/26 2:29 PM, Anushree Mathur wrote:
On 11/09/26 10:18 AM, Ritesh Harjani (IBM) wrote:
PATCH v3 -> PATCH v4:Hi Ritesh,
==================
- Rebased on top of Sean's new page allocator patch series v2 [1]
This allowed to drop and patch-2 since it will now come from Sean's
v2.
- Addressed review comments from Sean - squashed patches 6-10 in patch-1 of
this.
- Dropped patch-5 to print vcpu_id when KVM_CREATE_VCPU ioctl fails.
- Added additional patch-3 to this series to allow dirty_log_test to run on all
big-endian machines.
[1]: https://lore.kernel.org/kvm/20260902164123.2546762-1-seanjc@xxxxxxxxxx/
[v3]: https://lore.kernel.org/linuxppc-dev/2d2c46be7f051c7f1c645afaec67f57067d37a81.1781093720.git.ritesh.list@xxxxxxxxx/
Testing updates:
================
I have done some fair amount of testing of the selftests both on real HW and
using various combinations on qemu (powernv+LE (default), pseries+cap-nested-hv,
pseries+cap-nested-papr, powernv+BE). There were few powerpc kvm kernel fixes
which were identified as part of this work. I will send those patches separately
as those anyway needs to go in separately.
<pasted snippet of cover letter from previous versions>
=======================================================
Hi All,
This series primarly adds KVM selftests support for powerpc (64-bit, BookS,
radix MMU).
This patch series is originally Nick's work. I have mainly only rebased it on
the latest upstream tree. Since the rebase required few changes to all the four
patches (Patch 1-4), I have dropped the earlier Acked-by from Michael Ellerman.
Since the last series was posted three years ago [1], I am resetting the version
to RFC. This rebase was done as part of a larger effort to improve the selftests
infrastructure for Linux on PowerPC tree. Thanks to Harsh and Maddy for their
help on this.
Nicholas Piggin (1):
KVM: PPC: selftests: add support for powerpc
Ritesh Harjani (IBM) (2):
KVM: PPC: selftests: powerpc enable kvm_create_max_vcpus test
KVM: selftests: Use LE bitops for dirty bitmaps on all big-endian
hosts
MAINTAINERS | 2 +
tools/testing/selftests/kvm/Makefile | 2 +-
tools/testing/selftests/kvm/Makefile.kvm | 10 +
tools/testing/selftests/kvm/dirty_log_test.c | 12 +-
.../testing/selftests/kvm/include/kvm_util.h | 9 +
.../selftests/kvm/include/powerpc/hcall.h | 17 +
.../kvm/include/powerpc/kvm_util_arch.h | 22 +
.../selftests/kvm/include/powerpc/ppc_asm.h | 32 ++
.../selftests/kvm/include/powerpc/processor.h | 39 ++
.../selftests/kvm/include/powerpc/ucall.h | 21 +
.../selftests/kvm/kvm_create_max_vcpus.c | 8 +-
tools/testing/selftests/kvm/lib/guest_modes.c | 20 +-
tools/testing/selftests/kvm/lib/kvm_util.c | 8 +
.../selftests/kvm/lib/powerpc/handlers.S | 93 ++++
.../testing/selftests/kvm/lib/powerpc/hcall.c | 45 ++
.../selftests/kvm/lib/powerpc/processor.c | 512 ++++++++++++++++++
.../testing/selftests/kvm/lib/powerpc/ucall.c | 22 +
17 files changed, 862 insertions(+), 12 deletions(-)
create mode 100644 tools/testing/selftests/kvm/include/powerpc/hcall.h
create mode 100644 tools/testing/selftests/kvm/include/powerpc/kvm_util_arch.h
create mode 100644 tools/testing/selftests/kvm/include/powerpc/ppc_asm.h
create mode 100644 tools/testing/selftests/kvm/include/powerpc/processor.h
create mode 100644 tools/testing/selftests/kvm/include/powerpc/ucall.h
create mode 100644 tools/testing/selftests/kvm/lib/powerpc/handlers.S
create mode 100644 tools/testing/selftests/kvm/lib/powerpc/hcall.c
create mode 100644 tools/testing/selftests/kvm/lib/powerpc/processor.c
create mode 100644 tools/testing/selftests/kvm/lib/powerpc/ucall.c
--
2.39.5
Thanks for working on this enablement. I have tested kvm selftests after applying this patch on top of Sean's patch as mentioned and even I applied this patch for the kvm_create_max_vcpus issue as rc=-56 "https://lore.kernel.org/linuxppc-dev/cover.1789099725.git.ritesh.list@xxxxxxxxx/" But still few tests got failed. Providing a summary below:
System details where I tested this : PowerVM P11 (ppc64le) KVM enabled lpar!
Test Results:
=============
PASS: demand_paging_test
PASS: dirty_log_test (dirty-log mode, 4K + 64K pages, 32 iterations)
PASS: guest_print_test
PASS: kvm_binary_stats_test (4/4 subtests)
PASS: kvm_page_table_test (4K + 64K pages)
PASS: set_memory_region_test
PASS: memslot_modification_stress_test (4K + 64K pages)
PASS: memslot_perf_test
PASS: dirty_log_perf_test (4K + 64K pages)
SKIP: irqfd_test
- kvm_arch_has_default_irqchip() not yet implemented for PowerPC
SKIP: vm_types_test
- KVM_CAP_VM_TYPES not supported on PowerPC
Failures seen for the following tests
FAIL: kvm_create_max_vcpus
- RFC patch-3 partially helps: KVM_CAP_MAX_VCPU_ID correctly
capped from 16384 to 2048.
- But vCPU creation still fails with rc=-44 below the 2048 limit.
- dmesg: KVM: Create Guest vcpu hcall failed, rc=-44
for the above test in dmesg I saw the following error everytime I ran this test
dmesg -w
[ 2640.213798] KVM: Create Guest vcpu hcall failed, rc=-44
[ 2923.048989] KVM: Create Guest hcall failed, rc=-44
[ 3650.642771] KVM: Create Guest vcpu hcall failed, rc=-44
FAIL: hardware_disable_test
- KVM_CREATE_VM fails with ENOMEM
- dmesg: KVM: Create Guest vcpu hcall failed, rc=-44
- Likely the same underlying hcall issue as kvm_create_max_vcpus.
FAIL: access_tracking_perf_test
- Too many idle pages (245385 out of 262144)
- errno=4 (Interrupted system call)
- page_idle tracking may not be fully supported on PowerPC yet.
I believe these issues might be real kernel issue. If you plan to send fixed please feel free to add my Reported-by:
Reported-by: Anushree Mathur <anushree.mathur@xxxxxxxxxxxxx>
Thank you,
Anushree Mathur
Here are some more detailed logs for the Failed selftests:
./kvm_create_max_vcpus
Random seed: 0x62af7ca
KVM_CAP_MAX_VCPU_ID: 2048
KVM_CAP_MAX_VCPUS: 2048
Testing creating 2048 vCPUs, with IDs 0...2047.
==== Test Assertion Failure ====
lib/kvm_util.c:1388: vcpu->fd >= 0
pid=3808 tid=3808 errno=12 - Cannot allocate memory
1 0x0000000010008667: __vm_vcpu_add at kvm_util.c:1388 (discriminator 18)
2 0x0000000010004093: test_vcpu_creation at kvm_create_max_vcpus.c:32
3 0x0000000010003c93: main at kvm_create_max_vcpus.c:59
4 0x00007fffae42b4fb: ?? ??:0
5 0x00007fffae42b77b: ?? ??:0
KVM_CREATE_VCPU failed, rc: -1 errno: 12 (Cannot allocate memory)
./hardware_disable_test
Random seed: 0x7c401041
==== Test Assertion Failure ====
lib/kvm_util.c:193: vm->fd >= 0
pid=5544 tid=5544 errno=12 - Cannot allocate memory
1 0x00000000100069cb: vm_open at kvm_util.c:193 (discriminator 3)
2 0x000000001000b95f: ____vm_create at kvm_util.c:404
3 0x000000001000c403: __vm_create at kvm_util.c:513
4 0x0000000010004037: vm_create at kvm_util.h:1126
5 (inlined by) run_test at hardware_disable_test.c:78
6 (inlined by) main at hardware_disable_test.c:148
7 0x00007fff95c2b4fb: ?? ??:0
8 0x00007fff95c2b77b: ?? ??:0
KVM_CREATE_VM failed, rc: -1 errno: 12 (Cannot allocate memory)
./access_tracking_perf_test
Random seed: 0x50130229
lru_gen: Could not open /sys/kernel/mm/lru_gen/enabled
Using page_idle for aging
Testing guest mode: PA-bits:52, VA-bits:52, 4K pages
guest physical test memory: [0xfffffbfff0000, 0xfffffffff0000)
Populating memory : 0.324930580s
Writing to populated memory : 0.007850148s
Reading from populated memory : 0.008390886s
==== Test Assertion Failure ====
access_tracking_perf_test.c:164: idle_pages_warn_only
pid=5558 tid=5560 errno=4 - Interrupted system call
1 0x0000000010004cdf: too_many_idle_pages at access_tracking_perf_test.c:164
2 (inlined by) pageidle_mark_vcpu_memory_idle at access_tracking_perf_test.c:229
3 (inlined by) vcpu_thread_main at access_tracking_perf_test.c:339
4 0x000000001000f5f7: vcpu_thread_main at memstress.c:277
5 0x00007fff822b8063: ?? ??:0
vCPU0: Too many pages still idle (245400 out of 262144)
Thank you,
Anushree Mathur