From: David Woodhouse <[email protected]> Assert the initial stopped state of a new plane-1 vCPU, a runnable and back-to-stopped round trip, and rejection of out-of-range states.
The tools copy of linux/kvm.h picks up the plane run-state ioctl definitions. Signed-off-by: David Woodhouse <[email protected]> Assisted-by: LLM --- tools/include/uapi/linux/kvm.h | 4 ++++ tools/testing/selftests/kvm/x86/planes_test.c | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/tools/include/uapi/linux/kvm.h b/tools/include/uapi/linux/kvm.h index 586c0d6c168c..8d9f7e6bba19 100644 --- a/tools/include/uapi/linux/kvm.h +++ b/tools/include/uapi/linux/kvm.h @@ -1370,6 +1370,10 @@ struct kvm_s390_keyop { #define KVM_HAS_DEVICE_ATTR _IOW(KVMIO, 0xe3, struct kvm_device_attr) #define KVM_CREATE_PLANE _IO(KVMIO, 0xe4) +#define KVM_GET_PLANE_RUN_STATE _IOR(KVMIO, 0xe5, __u32) +#define KVM_SET_PLANE_RUN_STATE _IOW(KVMIO, 0xe6, __u32) +#define KVM_PLANE_RUN_STATE_STOPPED 0 +#define KVM_PLANE_RUN_STATE_RUNNABLE 1 /* * ioctls for vcpu fds diff --git a/tools/testing/selftests/kvm/x86/planes_test.c b/tools/testing/selftests/kvm/x86/planes_test.c index 3517175580d3..b28ed4077715 100644 --- a/tools/testing/selftests/kvm/x86/planes_test.c +++ b/tools/testing/selftests/kvm/x86/planes_test.c @@ -89,6 +89,28 @@ static void test_plane_lifecycle(void) TEST_ASSERT(vcpu1_fd >= 0, "KVM_CREATE_VCPU on plane 1 failed: errno %d", errno); + /* Plane 1 starts stopped; run state is readable and writable. */ + { + u32 state = 0xff; + + kvm_ioctl(vcpu1_fd, KVM_GET_PLANE_RUN_STATE, &state); + TEST_ASSERT_EQ(state, KVM_PLANE_RUN_STATE_STOPPED); + + state = KVM_PLANE_RUN_STATE_RUNNABLE; + kvm_ioctl(vcpu1_fd, KVM_SET_PLANE_RUN_STATE, &state); + state = 0xff; + kvm_ioctl(vcpu1_fd, KVM_GET_PLANE_RUN_STATE, &state); + TEST_ASSERT_EQ(state, KVM_PLANE_RUN_STATE_RUNNABLE); + + state = KVM_PLANE_RUN_STATE_STOPPED; + kvm_ioctl(vcpu1_fd, KVM_SET_PLANE_RUN_STATE, &state); + + state = 2; + TEST_ASSERT_EQ(__kvm_ioctl(vcpu1_fd, KVM_SET_PLANE_RUN_STATE, + &state), -1); + TEST_ASSERT_EQ(errno, EINVAL); + } + /* Register state is per plane: write plane 1, plane 0 unaffected. */ kvm_ioctl(vcpu1_fd, KVM_GET_REGS, ®s1); regs1.rbx = 0x5157ca11; /* arbitrary marker */ -- 2.50.1

