@@ -439,10 +439,17 @@ static bool check_ptrace_values_sve(pid_t child, struct test_config *config)
439
439
pass = false;
440
440
}
441
441
442
- if (sve -> size != SVE_PT_SIZE (vq , sve -> flags )) {
443
- ksft_print_msg ("Mismatch in SVE header size: %d != %lu\n" ,
444
- sve -> size , SVE_PT_SIZE (vq , sve -> flags ));
445
- pass = false;
442
+ if (svcr_in & SVCR_SM ) {
443
+ if (sve -> size != sizeof (sve )) {
444
+ ksft_print_msg ("NT_ARM_SVE reports data with PSTATE.SM\n" );
445
+ pass = false;
446
+ }
447
+ } else {
448
+ if (sve -> size != SVE_PT_SIZE (vq , sve -> flags )) {
449
+ ksft_print_msg ("Mismatch in SVE header size: %d != %lu\n" ,
450
+ sve -> size , SVE_PT_SIZE (vq , sve -> flags ));
451
+ pass = false;
452
+ }
446
453
}
447
454
448
455
/* The registers might be in completely different formats! */
@@ -515,10 +522,17 @@ static bool check_ptrace_values_ssve(pid_t child, struct test_config *config)
515
522
pass = false;
516
523
}
517
524
518
- if (sve -> size != SVE_PT_SIZE (vq , sve -> flags )) {
519
- ksft_print_msg ("Mismatch in SSVE header size: %d != %lu\n" ,
520
- sve -> size , SVE_PT_SIZE (vq , sve -> flags ));
521
- pass = false;
525
+ if (!(svcr_in & SVCR_SM )) {
526
+ if (sve -> size != sizeof (sve )) {
527
+ ksft_print_msg ("NT_ARM_SSVE reports data without PSTATE.SM\n" );
528
+ pass = false;
529
+ }
530
+ } else {
531
+ if (sve -> size != SVE_PT_SIZE (vq , sve -> flags )) {
532
+ ksft_print_msg ("Mismatch in SSVE header size: %d != %lu\n" ,
533
+ sve -> size , SVE_PT_SIZE (vq , sve -> flags ));
534
+ pass = false;
535
+ }
522
536
}
523
537
524
538
/* The registers might be in completely different formats! */
0 commit comments