@@ -788,7 +788,7 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)
788
788
const bool forks = (argc > 0 );
789
789
bool is_pipe = STAT_RECORD ? perf_stat .data .is_pipe : false;
790
790
struct evlist_cpu_iterator evlist_cpu_itr ;
791
- struct affinity affinity ;
791
+ struct affinity saved_affinity , * affinity = NULL ;
792
792
int err ;
793
793
bool second_pass = false;
794
794
@@ -803,8 +803,11 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)
803
803
if (group )
804
804
evlist__set_leader (evsel_list );
805
805
806
- if (affinity__setup (& affinity ) < 0 )
807
- return -1 ;
806
+ if (!cpu_map__is_dummy (evsel_list -> core .cpus )) {
807
+ if (affinity__setup (& saved_affinity ) < 0 )
808
+ return -1 ;
809
+ affinity = & saved_affinity ;
810
+ }
808
811
809
812
evlist__for_each_entry (evsel_list , counter ) {
810
813
if (bpf_counter__load (counter , & target ))
@@ -813,7 +816,7 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)
813
816
all_counters_use_bpf = false;
814
817
}
815
818
816
- evlist__for_each_cpu (evlist_cpu_itr , evsel_list , & affinity ) {
819
+ evlist__for_each_cpu (evlist_cpu_itr , evsel_list , affinity ) {
817
820
counter = evlist_cpu_itr .evsel ;
818
821
819
822
/*
@@ -869,7 +872,7 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)
869
872
*/
870
873
871
874
/* First close errored or weak retry */
872
- evlist__for_each_cpu (evlist_cpu_itr , evsel_list , & affinity ) {
875
+ evlist__for_each_cpu (evlist_cpu_itr , evsel_list , affinity ) {
873
876
counter = evlist_cpu_itr .evsel ;
874
877
875
878
if (!counter -> reset_group && !counter -> errored )
@@ -878,7 +881,7 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)
878
881
perf_evsel__close_cpu (& counter -> core , evlist_cpu_itr .cpu_map_idx );
879
882
}
880
883
/* Now reopen weak */
881
- evlist__for_each_cpu (evlist_cpu_itr , evsel_list , & affinity ) {
884
+ evlist__for_each_cpu (evlist_cpu_itr , evsel_list , affinity ) {
882
885
counter = evlist_cpu_itr .evsel ;
883
886
884
887
if (!counter -> reset_group && !counter -> errored )
@@ -904,7 +907,7 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)
904
907
counter -> supported = true;
905
908
}
906
909
}
907
- affinity__cleanup (& affinity );
910
+ affinity__cleanup (affinity );
908
911
909
912
evlist__for_each_entry (evsel_list , counter ) {
910
913
if (!counter -> supported ) {
0 commit comments