Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

KVM: selftests: Add blessed SVE registers to get-reg-list

Add support for the SVE registers to get-reg-list and create a
new test, get-reg-list-sve, which tests them when running on a
machine with SVE support.

Signed-off-by: Andrew Jones <drjones@redhat.com>
Message-Id: <20201029201703.102716-5-drjones@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

authored by

Andrew Jones and committed by
Paolo Bonzini
31d21295 fd02029a

+217 -42
+1
tools/testing/selftests/kvm/.gitignore
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 2 /aarch64/get-reg-list 3 + /aarch64/get-reg-list-sve 3 4 /s390x/memop 4 5 /s390x/resets 5 6 /s390x/sync_regs_test
+1
tools/testing/selftests/kvm/Makefile
··· 67 67 TEST_GEN_PROGS_x86_64 += steal_time 68 68 69 69 TEST_GEN_PROGS_aarch64 += aarch64/get-reg-list 70 + TEST_GEN_PROGS_aarch64 += aarch64/get-reg-list-sve 70 71 TEST_GEN_PROGS_aarch64 += clear_dirty_log_test 71 72 TEST_GEN_PROGS_aarch64 += demand_paging_test 72 73 TEST_GEN_PROGS_aarch64 += dirty_log_test
+3
tools/testing/selftests/kvm/aarch64/get-reg-list-sve.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + #define REG_LIST_SVE 3 + #include "get-reg-list.c"
+212 -42
tools/testing/selftests/kvm/aarch64/get-reg-list.c
··· 29 29 #include <string.h> 30 30 #include "kvm_util.h" 31 31 #include "test_util.h" 32 + #include "processor.h" 33 + 34 + #ifdef REG_LIST_SVE 35 + #define reg_list_sve() (true) 36 + #else 37 + #define reg_list_sve() (false) 38 + #endif 32 39 33 40 #define REG_MASK (KVM_REG_ARCH_MASK | KVM_REG_SIZE_MASK | KVM_REG_ARM_COPROC_MASK) 34 41 ··· 53 46 54 47 static struct kvm_reg_list *reg_list; 55 48 56 - static __u64 blessed_reg[]; 57 - static __u64 blessed_n; 49 + static __u64 base_regs[], vregs[], sve_regs[], rejects_set[]; 50 + static __u64 base_regs_n, vregs_n, sve_regs_n, rejects_set_n; 51 + static __u64 *blessed_reg, blessed_n; 58 52 59 53 static bool find_reg(__u64 regs[], __u64 nr_regs, __u64 reg) 60 54 { ··· 127 119 return NULL; 128 120 } 129 121 122 + static const char *sve_id_to_str(__u64 id) 123 + { 124 + __u64 sve_off, n, i; 125 + 126 + if (id == KVM_REG_ARM64_SVE_VLS) 127 + return "KVM_REG_ARM64_SVE_VLS"; 128 + 129 + sve_off = id & ~(REG_MASK | ((1ULL << 5) - 1)); 130 + i = id & (KVM_ARM64_SVE_MAX_SLICES - 1); 131 + 132 + TEST_ASSERT(i == 0, "Currently we don't expect slice > 0, reg id 0x%llx", id); 133 + 134 + switch (sve_off) { 135 + case KVM_REG_ARM64_SVE_ZREG_BASE ... 136 + KVM_REG_ARM64_SVE_ZREG_BASE + (1ULL << 5) * KVM_ARM64_SVE_NUM_ZREGS - 1: 137 + n = (id >> 5) & (KVM_ARM64_SVE_NUM_ZREGS - 1); 138 + TEST_ASSERT(id == KVM_REG_ARM64_SVE_ZREG(n, 0), 139 + "Unexpected bits set in SVE ZREG id: 0x%llx", id); 140 + return str_with_index("KVM_REG_ARM64_SVE_ZREG(##, 0)", n); 141 + case KVM_REG_ARM64_SVE_PREG_BASE ... 142 + KVM_REG_ARM64_SVE_PREG_BASE + (1ULL << 5) * KVM_ARM64_SVE_NUM_PREGS - 1: 143 + n = (id >> 5) & (KVM_ARM64_SVE_NUM_PREGS - 1); 144 + TEST_ASSERT(id == KVM_REG_ARM64_SVE_PREG(n, 0), 145 + "Unexpected bits set in SVE PREG id: 0x%llx", id); 146 + return str_with_index("KVM_REG_ARM64_SVE_PREG(##, 0)", n); 147 + case KVM_REG_ARM64_SVE_FFR_BASE: 148 + TEST_ASSERT(id == KVM_REG_ARM64_SVE_FFR(0), 149 + "Unexpected bits set in SVE FFR id: 0x%llx", id); 150 + return "KVM_REG_ARM64_SVE_FFR(0)"; 151 + } 152 + 153 + return NULL; 154 + } 155 + 130 156 static void print_reg(__u64 id) 131 157 { 132 158 unsigned op0, op1, crn, crm, op2; ··· 228 186 printf("\tKVM_REG_ARM_FW_REG(%lld),\n", id & 0xffff); 229 187 break; 230 188 case KVM_REG_ARM64_SVE: 231 - TEST_FAIL("KVM_REG_ARM64_SVE is an unexpected coproc type in reg id: 0x%llx", id); 189 + if (reg_list_sve()) 190 + printf("\t%s,\n", sve_id_to_str(id)); 191 + else 192 + TEST_FAIL("KVM_REG_ARM64_SVE is an unexpected coproc type in reg id: 0x%llx", id); 232 193 break; 233 194 default: 234 195 TEST_FAIL("Unexpected coproc type: 0x%llx in reg id: 0x%llx", ··· 296 251 reg_list = tmp; 297 252 } 298 253 254 + static void prepare_vcpu_init(struct kvm_vcpu_init *init) 255 + { 256 + if (reg_list_sve()) 257 + init->features[0] |= 1 << KVM_ARM_VCPU_SVE; 258 + } 259 + 260 + static void finalize_vcpu(struct kvm_vm *vm, uint32_t vcpuid) 261 + { 262 + int feature; 263 + 264 + if (reg_list_sve()) { 265 + feature = KVM_ARM_VCPU_SVE; 266 + vcpu_ioctl(vm, vcpuid, KVM_ARM_VCPU_FINALIZE, &feature); 267 + } 268 + } 269 + 270 + static void check_supported(void) 271 + { 272 + if (reg_list_sve() && !kvm_check_cap(KVM_CAP_ARM_SVE)) { 273 + fprintf(stderr, "SVE not available, skipping tests\n"); 274 + exit(KSFT_SKIP); 275 + } 276 + } 277 + 299 278 int main(int ac, char **av) 300 279 { 280 + struct kvm_vcpu_init init = { .target = -1, }; 301 281 int new_regs = 0, missing_regs = 0, i; 302 - int failed_get = 0, failed_set = 0; 282 + int failed_get = 0, failed_set = 0, failed_reject = 0; 303 283 bool print_list = false, fixup_core_regs = false; 304 284 struct kvm_vm *vm; 285 + __u64 *vec_regs; 286 + 287 + check_supported(); 305 288 306 289 for (i = 1; i < ac; ++i) { 307 290 if (strcmp(av[i], "--core-reg-fixup") == 0) ··· 340 267 fprintf(stderr, "Ignoring unknown option: %s\n", av[i]); 341 268 } 342 269 343 - vm = vm_create_default(0, 0, NULL); 270 + vm = vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES, O_RDWR); 271 + prepare_vcpu_init(&init); 272 + aarch64_vcpu_add_default(vm, 0, &init, NULL); 273 + finalize_vcpu(vm, 0); 274 + 344 275 reg_list = vcpu_get_reg_list(vm, 0); 345 276 346 277 if (fixup_core_regs) ··· 384 307 ++failed_get; 385 308 } 386 309 310 + /* rejects_set registers are rejected after KVM_ARM_VCPU_FINALIZE */ 311 + if (find_reg(rejects_set, rejects_set_n, reg.id)) { 312 + ret = _vcpu_ioctl(vm, 0, KVM_SET_ONE_REG, &reg); 313 + if (ret != -1 || errno != EPERM) { 314 + printf("Failed to reject (ret=%d, errno=%d) ", ret, errno); 315 + print_reg(reg.id); 316 + putchar('\n'); 317 + ++failed_reject; 318 + } 319 + continue; 320 + } 321 + 387 322 ret = _vcpu_ioctl(vm, 0, KVM_SET_ONE_REG, &reg); 388 323 if (ret) { 389 324 puts("Failed to set "); ··· 404 315 ++failed_set; 405 316 } 406 317 } 318 + 319 + if (reg_list_sve()) { 320 + blessed_n = base_regs_n + sve_regs_n; 321 + vec_regs = sve_regs; 322 + } else { 323 + blessed_n = base_regs_n + vregs_n; 324 + vec_regs = vregs; 325 + } 326 + 327 + blessed_reg = calloc(blessed_n, sizeof(__u64)); 328 + for (i = 0; i < base_regs_n; ++i) 329 + blessed_reg[i] = base_regs[i]; 330 + for (i = 0; i < blessed_n - base_regs_n; ++i) 331 + blessed_reg[base_regs_n + i] = vec_regs[i]; 407 332 408 333 for_each_new_reg(i) 409 334 ++new_regs; ··· 447 344 putchar('\n'); 448 345 } 449 346 450 - TEST_ASSERT(!missing_regs && !failed_get && !failed_set, 451 - "There are %d missing registers; %d registers failed get; %d registers failed set", 452 - missing_regs, failed_get, failed_set); 347 + TEST_ASSERT(!missing_regs && !failed_get && !failed_set && !failed_reject, 348 + "There are %d missing registers; " 349 + "%d registers failed get; %d registers failed set; %d registers failed reject", 350 + missing_regs, failed_get, failed_set, failed_reject); 453 351 454 352 return 0; 455 353 } ··· 459 355 * The current blessed list was primed with the output of kernel version 460 356 * v4.15 with --core-reg-fixup and then later updated with new registers. 461 357 */ 462 - static __u64 blessed_reg[] = { 358 + static __u64 base_regs[] = { 463 359 KVM_REG_ARM64 | KVM_REG_SIZE_U64 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(regs.regs[0]), 464 360 KVM_REG_ARM64 | KVM_REG_SIZE_U64 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(regs.regs[1]), 465 361 KVM_REG_ARM64 | KVM_REG_SIZE_U64 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(regs.regs[2]), ··· 501 397 KVM_REG_ARM64 | KVM_REG_SIZE_U64 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(spsr[2]), 502 398 KVM_REG_ARM64 | KVM_REG_SIZE_U64 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(spsr[3]), 503 399 KVM_REG_ARM64 | KVM_REG_SIZE_U64 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(spsr[4]), 504 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[0]), 505 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[1]), 506 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[2]), 507 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[3]), 508 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[4]), 509 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[5]), 510 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[6]), 511 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[7]), 512 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[8]), 513 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[9]), 514 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[10]), 515 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[11]), 516 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[12]), 517 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[13]), 518 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[14]), 519 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[15]), 520 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[16]), 521 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[17]), 522 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[18]), 523 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[19]), 524 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[20]), 525 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[21]), 526 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[22]), 527 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[23]), 528 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[24]), 529 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[25]), 530 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[26]), 531 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[27]), 532 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[28]), 533 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[29]), 534 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[30]), 535 - KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[31]), 536 400 KVM_REG_ARM64 | KVM_REG_SIZE_U32 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.fpsr), 537 401 KVM_REG_ARM64 | KVM_REG_SIZE_U32 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.fpcr), 538 402 KVM_REG_ARM_FW_REG(0), ··· 740 668 KVM_REG_ARM64 | KVM_REG_SIZE_U32 | KVM_REG_ARM_DEMUX | KVM_REG_ARM_DEMUX_ID_CCSIDR | 1, 741 669 KVM_REG_ARM64 | KVM_REG_SIZE_U32 | KVM_REG_ARM_DEMUX | KVM_REG_ARM_DEMUX_ID_CCSIDR | 2, 742 670 }; 743 - static __u64 blessed_n = ARRAY_SIZE(blessed_reg); 671 + static __u64 base_regs_n = ARRAY_SIZE(base_regs); 672 + 673 + static __u64 vregs[] = { 674 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[0]), 675 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[1]), 676 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[2]), 677 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[3]), 678 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[4]), 679 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[5]), 680 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[6]), 681 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[7]), 682 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[8]), 683 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[9]), 684 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[10]), 685 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[11]), 686 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[12]), 687 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[13]), 688 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[14]), 689 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[15]), 690 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[16]), 691 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[17]), 692 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[18]), 693 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[19]), 694 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[20]), 695 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[21]), 696 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[22]), 697 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[23]), 698 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[24]), 699 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[25]), 700 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[26]), 701 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[27]), 702 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[28]), 703 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[29]), 704 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[30]), 705 + KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[31]), 706 + }; 707 + static __u64 vregs_n = ARRAY_SIZE(vregs); 708 + 709 + static __u64 sve_regs[] = { 710 + KVM_REG_ARM64_SVE_VLS, 711 + KVM_REG_ARM64_SVE_ZREG(0, 0), 712 + KVM_REG_ARM64_SVE_ZREG(1, 0), 713 + KVM_REG_ARM64_SVE_ZREG(2, 0), 714 + KVM_REG_ARM64_SVE_ZREG(3, 0), 715 + KVM_REG_ARM64_SVE_ZREG(4, 0), 716 + KVM_REG_ARM64_SVE_ZREG(5, 0), 717 + KVM_REG_ARM64_SVE_ZREG(6, 0), 718 + KVM_REG_ARM64_SVE_ZREG(7, 0), 719 + KVM_REG_ARM64_SVE_ZREG(8, 0), 720 + KVM_REG_ARM64_SVE_ZREG(9, 0), 721 + KVM_REG_ARM64_SVE_ZREG(10, 0), 722 + KVM_REG_ARM64_SVE_ZREG(11, 0), 723 + KVM_REG_ARM64_SVE_ZREG(12, 0), 724 + KVM_REG_ARM64_SVE_ZREG(13, 0), 725 + KVM_REG_ARM64_SVE_ZREG(14, 0), 726 + KVM_REG_ARM64_SVE_ZREG(15, 0), 727 + KVM_REG_ARM64_SVE_ZREG(16, 0), 728 + KVM_REG_ARM64_SVE_ZREG(17, 0), 729 + KVM_REG_ARM64_SVE_ZREG(18, 0), 730 + KVM_REG_ARM64_SVE_ZREG(19, 0), 731 + KVM_REG_ARM64_SVE_ZREG(20, 0), 732 + KVM_REG_ARM64_SVE_ZREG(21, 0), 733 + KVM_REG_ARM64_SVE_ZREG(22, 0), 734 + KVM_REG_ARM64_SVE_ZREG(23, 0), 735 + KVM_REG_ARM64_SVE_ZREG(24, 0), 736 + KVM_REG_ARM64_SVE_ZREG(25, 0), 737 + KVM_REG_ARM64_SVE_ZREG(26, 0), 738 + KVM_REG_ARM64_SVE_ZREG(27, 0), 739 + KVM_REG_ARM64_SVE_ZREG(28, 0), 740 + KVM_REG_ARM64_SVE_ZREG(29, 0), 741 + KVM_REG_ARM64_SVE_ZREG(30, 0), 742 + KVM_REG_ARM64_SVE_ZREG(31, 0), 743 + KVM_REG_ARM64_SVE_PREG(0, 0), 744 + KVM_REG_ARM64_SVE_PREG(1, 0), 745 + KVM_REG_ARM64_SVE_PREG(2, 0), 746 + KVM_REG_ARM64_SVE_PREG(3, 0), 747 + KVM_REG_ARM64_SVE_PREG(4, 0), 748 + KVM_REG_ARM64_SVE_PREG(5, 0), 749 + KVM_REG_ARM64_SVE_PREG(6, 0), 750 + KVM_REG_ARM64_SVE_PREG(7, 0), 751 + KVM_REG_ARM64_SVE_PREG(8, 0), 752 + KVM_REG_ARM64_SVE_PREG(9, 0), 753 + KVM_REG_ARM64_SVE_PREG(10, 0), 754 + KVM_REG_ARM64_SVE_PREG(11, 0), 755 + KVM_REG_ARM64_SVE_PREG(12, 0), 756 + KVM_REG_ARM64_SVE_PREG(13, 0), 757 + KVM_REG_ARM64_SVE_PREG(14, 0), 758 + KVM_REG_ARM64_SVE_PREG(15, 0), 759 + KVM_REG_ARM64_SVE_FFR(0), 760 + ARM64_SYS_REG(3, 0, 1, 2, 0), /* ZCR_EL1 */ 761 + }; 762 + static __u64 sve_regs_n = ARRAY_SIZE(sve_regs); 763 + 764 + static __u64 rejects_set[] = { 765 + #ifdef REG_LIST_SVE 766 + KVM_REG_ARM64_SVE_VLS, 767 + #endif 768 + }; 769 + static __u64 rejects_set_n = ARRAY_SIZE(rejects_set);