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:
==================
- 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

Hi Ritesh,
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