@@ -554,7 +554,8 @@ static void prctl_set_onexec(struct vec_data *data)
554
554
/* For each VQ verify that setting via prctl() does the right thing */
555
555
static void prctl_set_all_vqs (struct vec_data * data )
556
556
{
557
- int ret , vq , vl , new_vl ;
557
+ int ret , vq , vl , new_vl , i ;
558
+ int orig_vls [ARRAY_SIZE (vec_data )];
558
559
int errors = 0 ;
559
560
560
561
if (!data -> min_vl || !data -> max_vl ) {
@@ -563,6 +564,9 @@ static void prctl_set_all_vqs(struct vec_data *data)
563
564
return ;
564
565
}
565
566
567
+ for (i = 0 ; i < ARRAY_SIZE (vec_data ); i ++ )
568
+ orig_vls [i ] = vec_data [i ].rdvl ();
569
+
566
570
for (vq = SVE_VQ_MIN ; vq <= SVE_VQ_MAX ; vq ++ ) {
567
571
vl = sve_vl_from_vq (vq );
568
572
@@ -585,6 +589,22 @@ static void prctl_set_all_vqs(struct vec_data *data)
585
589
errors ++ ;
586
590
}
587
591
592
+ /* Did any other VLs change? */
593
+ for (i = 0 ; i < ARRAY_SIZE (vec_data ); i ++ ) {
594
+ if (& vec_data [i ] == data )
595
+ continue ;
596
+
597
+ if (!(getauxval (vec_data [i ].hwcap_type ) & vec_data [i ].hwcap ))
598
+ continue ;
599
+
600
+ if (vec_data [i ].rdvl () != orig_vls [i ]) {
601
+ ksft_print_msg ("%s VL changed from %d to %d\n" ,
602
+ vec_data [i ].name , orig_vls [i ],
603
+ vec_data [i ].rdvl ());
604
+ errors ++ ;
605
+ }
606
+ }
607
+
588
608
/* Was that the VL we asked for? */
589
609
if (new_vl == vl )
590
610
continue ;
0 commit comments