17
17
* by running the test with the --list command line argument.
18
18
*
19
19
* Note, the blessed list should be created from the oldest possible
20
- * kernel. We can't go older than v4.15, though, because that's the first
21
- * release to expose the ID system registers in KVM_GET_REG_LIST, see
22
- * commit 93390c0a1b20 ("arm64: KVM: Hide unsupported AArch64 CPU features
23
- * from guests"). Also, one must use the --core-reg-fixup command line
24
- * option when running on an older kernel that doesn't include df205b5c6328
25
- * ("KVM: arm64: Filter out invalid core register IDs in KVM_GET_REG_LIST")
20
+ * kernel. We can't go older than v5.2, though, because that's the first
21
+ * release which includes df205b5c6328 ("KVM: arm64: Filter out invalid
22
+ * core register IDs in KVM_GET_REG_LIST"). Without that commit the core
23
+ * registers won't match expectations.
26
24
*/
27
25
#include <stdio.h>
28
26
#include <stdlib.h>
@@ -317,63 +315,6 @@ static void print_reg(const char *prefix, __u64 id)
317
315
}
318
316
}
319
317
320
- /*
321
- * Older kernels listed each 32-bit word of CORE registers separately.
322
- * For 64 and 128-bit registers we need to ignore the extra words. We
323
- * also need to fixup the sizes, because the older kernels stated all
324
- * registers were 64-bit, even when they weren't.
325
- */
326
- static void core_reg_fixup (void )
327
- {
328
- struct kvm_reg_list * tmp ;
329
- __u64 id , core_off ;
330
- int i ;
331
-
332
- tmp = calloc (1 , sizeof (* tmp ) + reg_list -> n * sizeof (__u64 ));
333
-
334
- for (i = 0 ; i < reg_list -> n ; ++ i ) {
335
- id = reg_list -> reg [i ];
336
-
337
- if ((id & KVM_REG_ARM_COPROC_MASK ) != KVM_REG_ARM_CORE ) {
338
- tmp -> reg [tmp -> n ++ ] = id ;
339
- continue ;
340
- }
341
-
342
- core_off = id & ~REG_MASK ;
343
-
344
- switch (core_off ) {
345
- case 0x52 : case 0xd2 : case 0xd6 :
346
- /*
347
- * These offsets are pointing at padding.
348
- * We need to ignore them too.
349
- */
350
- continue ;
351
- case KVM_REG_ARM_CORE_REG (fp_regs .vregs [0 ]) ...
352
- KVM_REG_ARM_CORE_REG (fp_regs .vregs [31 ]):
353
- if (core_off & 3 )
354
- continue ;
355
- id &= ~KVM_REG_SIZE_MASK ;
356
- id |= KVM_REG_SIZE_U128 ;
357
- tmp -> reg [tmp -> n ++ ] = id ;
358
- continue ;
359
- case KVM_REG_ARM_CORE_REG (fp_regs .fpsr ):
360
- case KVM_REG_ARM_CORE_REG (fp_regs .fpcr ):
361
- id &= ~KVM_REG_SIZE_MASK ;
362
- id |= KVM_REG_SIZE_U32 ;
363
- tmp -> reg [tmp -> n ++ ] = id ;
364
- continue ;
365
- default :
366
- if (core_off & 1 )
367
- continue ;
368
- tmp -> reg [tmp -> n ++ ] = id ;
369
- break ;
370
- }
371
- }
372
-
373
- free (reg_list );
374
- reg_list = tmp ;
375
- }
376
-
377
318
static void prepare_vcpu_init (struct vcpu_reg_list * c , struct kvm_vcpu_init * init )
378
319
{
379
320
struct vcpu_reg_sublist * s ;
@@ -412,7 +353,6 @@ static void check_supported(struct vcpu_reg_list *c)
412
353
413
354
static bool print_list ;
414
355
static bool print_filtered ;
415
- static bool fixup_core_regs ;
416
356
417
357
static void run_test (struct vcpu_reg_list * c )
418
358
{
@@ -433,9 +373,6 @@ static void run_test(struct vcpu_reg_list *c)
433
373
434
374
reg_list = vcpu_get_reg_list (vcpu );
435
375
436
- if (fixup_core_regs )
437
- core_reg_fixup ();
438
-
439
376
if (print_list || print_filtered ) {
440
377
putchar ('\n' );
441
378
for_each_reg (i ) {
@@ -563,7 +500,7 @@ static void help(void)
563
500
564
501
printf (
565
502
"\n"
566
- "usage: get-reg-list [--config=<selection>] [--list] [--list-filtered] [--core-reg-fixup] \n\n"
503
+ "usage: get-reg-list [--config=<selection>] [--list] [--list-filtered]\n\n"
567
504
" --config=<selection> Used to select a specific vcpu configuration for the test/listing\n"
568
505
" '<selection>' may be\n" );
569
506
@@ -577,7 +514,6 @@ static void help(void)
577
514
"\n"
578
515
" --list Print the register list rather than test it (requires --config)\n"
579
516
" --list-filtered Print registers that would normally be filtered out (requires --config)\n"
580
- " --core-reg-fixup Needed when running on old kernels with broken core reg listings\n"
581
517
"\n"
582
518
);
583
519
}
@@ -609,9 +545,7 @@ int main(int ac, char **av)
609
545
pid_t pid ;
610
546
611
547
for (i = 1 ; i < ac ; ++ i ) {
612
- if (strcmp (av [i ], "--core-reg-fixup" ) == 0 )
613
- fixup_core_regs = true;
614
- else if (strncmp (av [i ], "--config" , 8 ) == 0 )
548
+ if (strncmp (av [i ], "--config" , 8 ) == 0 )
615
549
sel = parse_config (av [i ]);
616
550
else if (strcmp (av [i ], "--list" ) == 0 )
617
551
print_list = true;
@@ -654,8 +588,11 @@ int main(int ac, char **av)
654
588
}
655
589
656
590
/*
657
- * The current blessed list was primed with the output of kernel version
591
+ * The original blessed list was primed with the output of kernel version
658
592
* v4.15 with --core-reg-fixup and then later updated with new registers.
593
+ * (The --core-reg-fixup option and it's fixup function have been removed
594
+ * from the test, as it's unlikely to use this type of test on a kernel
595
+ * older than v5.2.)
659
596
*
660
597
* The blessed list is up to date with kernel version v6.4 (or so we hope)
661
598
*/
0 commit comments