1753dcf7aSZeng Guang // SPDX-License-Identifier: GPL-2.0-only 2753dcf7aSZeng Guang /* 3753dcf7aSZeng Guang * maximum APIC ID capability tests 4753dcf7aSZeng Guang * 5753dcf7aSZeng Guang * Copyright (C) 2022, Intel, Inc. 6753dcf7aSZeng Guang * 7753dcf7aSZeng Guang * Tests for getting/setting maximum APIC ID capability 8753dcf7aSZeng Guang */ 9753dcf7aSZeng Guang 10753dcf7aSZeng Guang #include "kvm_util.h" 11753dcf7aSZeng Guang 12753dcf7aSZeng Guang #define MAX_VCPU_ID 2 13753dcf7aSZeng Guang 14753dcf7aSZeng Guang int main(int argc, char *argv[]) 15753dcf7aSZeng Guang { 16753dcf7aSZeng Guang struct kvm_vm *vm; 17753dcf7aSZeng Guang int ret; 18753dcf7aSZeng Guang 192ab2c307SSean Christopherson vm = vm_create(0); 20753dcf7aSZeng Guang 21753dcf7aSZeng Guang /* Get KVM_CAP_MAX_VCPU_ID cap supported in KVM */ 22753dcf7aSZeng Guang ret = vm_check_cap(vm, KVM_CAP_MAX_VCPU_ID); 23753dcf7aSZeng Guang 24753dcf7aSZeng Guang /* Try to set KVM_CAP_MAX_VCPU_ID beyond KVM cap */ 25*a12c86c4SSean Christopherson ret = __vm_enable_cap(vm, KVM_CAP_MAX_VCPU_ID, ret + 1); 26753dcf7aSZeng Guang TEST_ASSERT(ret < 0, 27ac712209SSean Christopherson "Setting KVM_CAP_MAX_VCPU_ID beyond KVM cap should fail"); 28753dcf7aSZeng Guang 29753dcf7aSZeng Guang /* Set KVM_CAP_MAX_VCPU_ID */ 30*a12c86c4SSean Christopherson vm_enable_cap(vm, KVM_CAP_MAX_VCPU_ID, MAX_VCPU_ID); 31ac712209SSean Christopherson 32753dcf7aSZeng Guang 33753dcf7aSZeng Guang /* Try to set KVM_CAP_MAX_VCPU_ID again */ 34*a12c86c4SSean Christopherson ret = __vm_enable_cap(vm, KVM_CAP_MAX_VCPU_ID, MAX_VCPU_ID + 1); 35753dcf7aSZeng Guang TEST_ASSERT(ret < 0, 36ac712209SSean Christopherson "Setting KVM_CAP_MAX_VCPU_ID multiple times should fail"); 37753dcf7aSZeng Guang 38753dcf7aSZeng Guang /* Create vCPU with id beyond KVM_CAP_MAX_VCPU_ID cap*/ 39ac712209SSean Christopherson ret = __vm_ioctl(vm, KVM_CREATE_VCPU, (void *)MAX_VCPU_ID); 40ac712209SSean Christopherson TEST_ASSERT(ret < 0, "Creating vCPU with ID > MAX_VCPU_ID should fail"); 41753dcf7aSZeng Guang 42753dcf7aSZeng Guang kvm_vm_free(vm); 43753dcf7aSZeng Guang return 0; 44753dcf7aSZeng Guang } 45