Skip to content

Commit 31d2129

Browse files
Andrew Jonesbonzini
authored andcommitted
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>
1 parent fd02029 commit 31d2129

4 files changed

Lines changed: 217 additions & 42 deletions

File tree

tools/testing/selftests/kvm/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# SPDX-License-Identifier: GPL-2.0-only
22
/aarch64/get-reg-list
3+
/aarch64/get-reg-list-sve
34
/s390x/memop
45
/s390x/resets
56
/s390x/sync_regs_test

tools/testing/selftests/kvm/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ TEST_GEN_PROGS_x86_64 += set_memory_region_test
6767
TEST_GEN_PROGS_x86_64 += steal_time
6868

6969
TEST_GEN_PROGS_aarch64 += aarch64/get-reg-list
70+
TEST_GEN_PROGS_aarch64 += aarch64/get-reg-list-sve
7071
TEST_GEN_PROGS_aarch64 += clear_dirty_log_test
7172
TEST_GEN_PROGS_aarch64 += demand_paging_test
7273
TEST_GEN_PROGS_aarch64 += dirty_log_test
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// SPDX-License-Identifier: GPL-2.0
2+
#define REG_LIST_SVE
3+
#include "get-reg-list.c"

tools/testing/selftests/kvm/aarch64/get-reg-list.c

Lines changed: 212 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@
2929
#include <string.h>
3030
#include "kvm_util.h"
3131
#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
3239

3340
#define REG_MASK (KVM_REG_ARCH_MASK | KVM_REG_SIZE_MASK | KVM_REG_ARM_COPROC_MASK)
3441

@@ -46,8 +53,9 @@
4653

4754
static struct kvm_reg_list *reg_list;
4855

49-
static __u64 blessed_reg[];
50-
static __u64 blessed_n;
56+
static __u64 base_regs[], vregs[], sve_regs[], rejects_set[];
57+
static __u64 base_regs_n, vregs_n, sve_regs_n, rejects_set_n;
58+
static __u64 *blessed_reg, blessed_n;
5159

5260
static bool find_reg(__u64 regs[], __u64 nr_regs, __u64 reg)
5361
{
@@ -119,6 +127,40 @@ static const char *core_id_to_str(__u64 id)
119127
return NULL;
120128
}
121129

130+
static const char *sve_id_to_str(__u64 id)
131+
{
132+
__u64 sve_off, n, i;
133+
134+
if (id == KVM_REG_ARM64_SVE_VLS)
135+
return "KVM_REG_ARM64_SVE_VLS";
136+
137+
sve_off = id & ~(REG_MASK | ((1ULL << 5) - 1));
138+
i = id & (KVM_ARM64_SVE_MAX_SLICES - 1);
139+
140+
TEST_ASSERT(i == 0, "Currently we don't expect slice > 0, reg id 0x%llx", id);
141+
142+
switch (sve_off) {
143+
case KVM_REG_ARM64_SVE_ZREG_BASE ...
144+
KVM_REG_ARM64_SVE_ZREG_BASE + (1ULL << 5) * KVM_ARM64_SVE_NUM_ZREGS - 1:
145+
n = (id >> 5) & (KVM_ARM64_SVE_NUM_ZREGS - 1);
146+
TEST_ASSERT(id == KVM_REG_ARM64_SVE_ZREG(n, 0),
147+
"Unexpected bits set in SVE ZREG id: 0x%llx", id);
148+
return str_with_index("KVM_REG_ARM64_SVE_ZREG(##, 0)", n);
149+
case KVM_REG_ARM64_SVE_PREG_BASE ...
150+
KVM_REG_ARM64_SVE_PREG_BASE + (1ULL << 5) * KVM_ARM64_SVE_NUM_PREGS - 1:
151+
n = (id >> 5) & (KVM_ARM64_SVE_NUM_PREGS - 1);
152+
TEST_ASSERT(id == KVM_REG_ARM64_SVE_PREG(n, 0),
153+
"Unexpected bits set in SVE PREG id: 0x%llx", id);
154+
return str_with_index("KVM_REG_ARM64_SVE_PREG(##, 0)", n);
155+
case KVM_REG_ARM64_SVE_FFR_BASE:
156+
TEST_ASSERT(id == KVM_REG_ARM64_SVE_FFR(0),
157+
"Unexpected bits set in SVE FFR id: 0x%llx", id);
158+
return "KVM_REG_ARM64_SVE_FFR(0)";
159+
}
160+
161+
return NULL;
162+
}
163+
122164
static void print_reg(__u64 id)
123165
{
124166
unsigned op0, op1, crn, crm, op2;
@@ -186,7 +228,10 @@ static void print_reg(__u64 id)
186228
printf("\tKVM_REG_ARM_FW_REG(%lld),\n", id & 0xffff);
187229
break;
188230
case KVM_REG_ARM64_SVE:
189-
TEST_FAIL("KVM_REG_ARM64_SVE is an unexpected coproc type in reg id: 0x%llx", id);
231+
if (reg_list_sve())
232+
printf("\t%s,\n", sve_id_to_str(id));
233+
else
234+
TEST_FAIL("KVM_REG_ARM64_SVE is an unexpected coproc type in reg id: 0x%llx", id);
190235
break;
191236
default:
192237
TEST_FAIL("Unexpected coproc type: 0x%llx in reg id: 0x%llx",
@@ -251,12 +296,40 @@ static void core_reg_fixup(void)
251296
reg_list = tmp;
252297
}
253298

299+
static void prepare_vcpu_init(struct kvm_vcpu_init *init)
300+
{
301+
if (reg_list_sve())
302+
init->features[0] |= 1 << KVM_ARM_VCPU_SVE;
303+
}
304+
305+
static void finalize_vcpu(struct kvm_vm *vm, uint32_t vcpuid)
306+
{
307+
int feature;
308+
309+
if (reg_list_sve()) {
310+
feature = KVM_ARM_VCPU_SVE;
311+
vcpu_ioctl(vm, vcpuid, KVM_ARM_VCPU_FINALIZE, &feature);
312+
}
313+
}
314+
315+
static void check_supported(void)
316+
{
317+
if (reg_list_sve() && !kvm_check_cap(KVM_CAP_ARM_SVE)) {
318+
fprintf(stderr, "SVE not available, skipping tests\n");
319+
exit(KSFT_SKIP);
320+
}
321+
}
322+
254323
int main(int ac, char **av)
255324
{
325+
struct kvm_vcpu_init init = { .target = -1, };
256326
int new_regs = 0, missing_regs = 0, i;
257-
int failed_get = 0, failed_set = 0;
327+
int failed_get = 0, failed_set = 0, failed_reject = 0;
258328
bool print_list = false, fixup_core_regs = false;
259329
struct kvm_vm *vm;
330+
__u64 *vec_regs;
331+
332+
check_supported();
260333

261334
for (i = 1; i < ac; ++i) {
262335
if (strcmp(av[i], "--core-reg-fixup") == 0)
@@ -267,7 +340,11 @@ int main(int ac, char **av)
267340
fprintf(stderr, "Ignoring unknown option: %s\n", av[i]);
268341
}
269342

270-
vm = vm_create_default(0, 0, NULL);
343+
vm = vm_create(VM_MODE_DEFAULT, DEFAULT_GUEST_PHY_PAGES, O_RDWR);
344+
prepare_vcpu_init(&init);
345+
aarch64_vcpu_add_default(vm, 0, &init, NULL);
346+
finalize_vcpu(vm, 0);
347+
271348
reg_list = vcpu_get_reg_list(vm, 0);
272349

273350
if (fixup_core_regs)
@@ -307,6 +384,18 @@ int main(int ac, char **av)
307384
++failed_get;
308385
}
309386

387+
/* rejects_set registers are rejected after KVM_ARM_VCPU_FINALIZE */
388+
if (find_reg(rejects_set, rejects_set_n, reg.id)) {
389+
ret = _vcpu_ioctl(vm, 0, KVM_SET_ONE_REG, &reg);
390+
if (ret != -1 || errno != EPERM) {
391+
printf("Failed to reject (ret=%d, errno=%d) ", ret, errno);
392+
print_reg(reg.id);
393+
putchar('\n');
394+
++failed_reject;
395+
}
396+
continue;
397+
}
398+
310399
ret = _vcpu_ioctl(vm, 0, KVM_SET_ONE_REG, &reg);
311400
if (ret) {
312401
puts("Failed to set ");
@@ -316,6 +405,20 @@ int main(int ac, char **av)
316405
}
317406
}
318407

408+
if (reg_list_sve()) {
409+
blessed_n = base_regs_n + sve_regs_n;
410+
vec_regs = sve_regs;
411+
} else {
412+
blessed_n = base_regs_n + vregs_n;
413+
vec_regs = vregs;
414+
}
415+
416+
blessed_reg = calloc(blessed_n, sizeof(__u64));
417+
for (i = 0; i < base_regs_n; ++i)
418+
blessed_reg[i] = base_regs[i];
419+
for (i = 0; i < blessed_n - base_regs_n; ++i)
420+
blessed_reg[base_regs_n + i] = vec_regs[i];
421+
319422
for_each_new_reg(i)
320423
++new_regs;
321424

@@ -344,9 +447,10 @@ int main(int ac, char **av)
344447
putchar('\n');
345448
}
346449

347-
TEST_ASSERT(!missing_regs && !failed_get && !failed_set,
348-
"There are %d missing registers; %d registers failed get; %d registers failed set",
349-
missing_regs, failed_get, failed_set);
450+
TEST_ASSERT(!missing_regs && !failed_get && !failed_set && !failed_reject,
451+
"There are %d missing registers; "
452+
"%d registers failed get; %d registers failed set; %d registers failed reject",
453+
missing_regs, failed_get, failed_set, failed_reject);
350454

351455
return 0;
352456
}
@@ -355,7 +459,7 @@ int main(int ac, char **av)
355459
* The current blessed list was primed with the output of kernel version
356460
* v4.15 with --core-reg-fixup and then later updated with new registers.
357461
*/
358-
static __u64 blessed_reg[] = {
462+
static __u64 base_regs[] = {
359463
KVM_REG_ARM64 | KVM_REG_SIZE_U64 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(regs.regs[0]),
360464
KVM_REG_ARM64 | KVM_REG_SIZE_U64 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(regs.regs[1]),
361465
KVM_REG_ARM64 | KVM_REG_SIZE_U64 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(regs.regs[2]),
@@ -397,38 +501,6 @@ static __u64 blessed_reg[] = {
397501
KVM_REG_ARM64 | KVM_REG_SIZE_U64 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(spsr[2]),
398502
KVM_REG_ARM64 | KVM_REG_SIZE_U64 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(spsr[3]),
399503
KVM_REG_ARM64 | KVM_REG_SIZE_U64 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(spsr[4]),
400-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[0]),
401-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[1]),
402-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[2]),
403-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[3]),
404-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[4]),
405-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[5]),
406-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[6]),
407-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[7]),
408-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[8]),
409-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[9]),
410-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[10]),
411-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[11]),
412-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[12]),
413-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[13]),
414-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[14]),
415-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[15]),
416-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[16]),
417-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[17]),
418-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[18]),
419-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[19]),
420-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[20]),
421-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[21]),
422-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[22]),
423-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[23]),
424-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[24]),
425-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[25]),
426-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[26]),
427-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[27]),
428-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[28]),
429-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[29]),
430-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[30]),
431-
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[31]),
432504
KVM_REG_ARM64 | KVM_REG_SIZE_U32 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.fpsr),
433505
KVM_REG_ARM64 | KVM_REG_SIZE_U32 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.fpcr),
434506
KVM_REG_ARM_FW_REG(0),
@@ -668,4 +740,102 @@ static __u64 blessed_reg[] = {
668740
KVM_REG_ARM64 | KVM_REG_SIZE_U32 | KVM_REG_ARM_DEMUX | KVM_REG_ARM_DEMUX_ID_CCSIDR | 1,
669741
KVM_REG_ARM64 | KVM_REG_SIZE_U32 | KVM_REG_ARM_DEMUX | KVM_REG_ARM_DEMUX_ID_CCSIDR | 2,
670742
};
671-
static __u64 blessed_n = ARRAY_SIZE(blessed_reg);
743+
static __u64 base_regs_n = ARRAY_SIZE(base_regs);
744+
745+
static __u64 vregs[] = {
746+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[0]),
747+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[1]),
748+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[2]),
749+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[3]),
750+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[4]),
751+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[5]),
752+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[6]),
753+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[7]),
754+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[8]),
755+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[9]),
756+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[10]),
757+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[11]),
758+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[12]),
759+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[13]),
760+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[14]),
761+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[15]),
762+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[16]),
763+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[17]),
764+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[18]),
765+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[19]),
766+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[20]),
767+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[21]),
768+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[22]),
769+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[23]),
770+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[24]),
771+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[25]),
772+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[26]),
773+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[27]),
774+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[28]),
775+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[29]),
776+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[30]),
777+
KVM_REG_ARM64 | KVM_REG_SIZE_U128 | KVM_REG_ARM_CORE | KVM_REG_ARM_CORE_REG(fp_regs.vregs[31]),
778+
};
779+
static __u64 vregs_n = ARRAY_SIZE(vregs);
780+
781+
static __u64 sve_regs[] = {
782+
KVM_REG_ARM64_SVE_VLS,
783+
KVM_REG_ARM64_SVE_ZREG(0, 0),
784+
KVM_REG_ARM64_SVE_ZREG(1, 0),
785+
KVM_REG_ARM64_SVE_ZREG(2, 0),
786+
KVM_REG_ARM64_SVE_ZREG(3, 0),
787+
KVM_REG_ARM64_SVE_ZREG(4, 0),
788+
KVM_REG_ARM64_SVE_ZREG(5, 0),
789+
KVM_REG_ARM64_SVE_ZREG(6, 0),
790+
KVM_REG_ARM64_SVE_ZREG(7, 0),
791+
KVM_REG_ARM64_SVE_ZREG(8, 0),
792+
KVM_REG_ARM64_SVE_ZREG(9, 0),
793+
KVM_REG_ARM64_SVE_ZREG(10, 0),
794+
KVM_REG_ARM64_SVE_ZREG(11, 0),
795+
KVM_REG_ARM64_SVE_ZREG(12, 0),
796+
KVM_REG_ARM64_SVE_ZREG(13, 0),
797+
KVM_REG_ARM64_SVE_ZREG(14, 0),
798+
KVM_REG_ARM64_SVE_ZREG(15, 0),
799+
KVM_REG_ARM64_SVE_ZREG(16, 0),
800+
KVM_REG_ARM64_SVE_ZREG(17, 0),
801+
KVM_REG_ARM64_SVE_ZREG(18, 0),
802+
KVM_REG_ARM64_SVE_ZREG(19, 0),
803+
KVM_REG_ARM64_SVE_ZREG(20, 0),
804+
KVM_REG_ARM64_SVE_ZREG(21, 0),
805+
KVM_REG_ARM64_SVE_ZREG(22, 0),
806+
KVM_REG_ARM64_SVE_ZREG(23, 0),
807+
KVM_REG_ARM64_SVE_ZREG(24, 0),
808+
KVM_REG_ARM64_SVE_ZREG(25, 0),
809+
KVM_REG_ARM64_SVE_ZREG(26, 0),
810+
KVM_REG_ARM64_SVE_ZREG(27, 0),
811+
KVM_REG_ARM64_SVE_ZREG(28, 0),
812+
KVM_REG_ARM64_SVE_ZREG(29, 0),
813+
KVM_REG_ARM64_SVE_ZREG(30, 0),
814+
KVM_REG_ARM64_SVE_ZREG(31, 0),
815+
KVM_REG_ARM64_SVE_PREG(0, 0),
816+
KVM_REG_ARM64_SVE_PREG(1, 0),
817+
KVM_REG_ARM64_SVE_PREG(2, 0),
818+
KVM_REG_ARM64_SVE_PREG(3, 0),
819+
KVM_REG_ARM64_SVE_PREG(4, 0),
820+
KVM_REG_ARM64_SVE_PREG(5, 0),
821+
KVM_REG_ARM64_SVE_PREG(6, 0),
822+
KVM_REG_ARM64_SVE_PREG(7, 0),
823+
KVM_REG_ARM64_SVE_PREG(8, 0),
824+
KVM_REG_ARM64_SVE_PREG(9, 0),
825+
KVM_REG_ARM64_SVE_PREG(10, 0),
826+
KVM_REG_ARM64_SVE_PREG(11, 0),
827+
KVM_REG_ARM64_SVE_PREG(12, 0),
828+
KVM_REG_ARM64_SVE_PREG(13, 0),
829+
KVM_REG_ARM64_SVE_PREG(14, 0),
830+
KVM_REG_ARM64_SVE_PREG(15, 0),
831+
KVM_REG_ARM64_SVE_FFR(0),
832+
ARM64_SYS_REG(3, 0, 1, 2, 0), /* ZCR_EL1 */
833+
};
834+
static __u64 sve_regs_n = ARRAY_SIZE(sve_regs);
835+
836+
static __u64 rejects_set[] = {
837+
#ifdef REG_LIST_SVE
838+
KVM_REG_ARM64_SVE_VLS,
839+
#endif
840+
};
841+
static __u64 rejects_set_n = ARRAY_SIZE(rejects_set);

0 commit comments

Comments
 (0)