@@ -1301,7 +1301,7 @@ static int __cmd_top(struct perf_top *top)
1301
1301
perf_set_multithreaded ();
1302
1302
1303
1303
if (perf_hpp_list .socket ) {
1304
- ret = perf_env__read_cpu_topology_map (& perf_env );
1304
+ ret = perf_env__read_cpu_topology_map (perf_session__env ( top -> session ) );
1305
1305
if (ret < 0 ) {
1306
1306
char errbuf [BUFSIZ ];
1307
1307
const char * err = str_error_r (- ret , errbuf , sizeof (errbuf ));
@@ -1624,6 +1624,7 @@ int cmd_top(int argc, const char **argv)
1624
1624
NULL
1625
1625
};
1626
1626
int status = hists__init ();
1627
+ struct perf_env host_env ;
1627
1628
1628
1629
if (status < 0 )
1629
1630
return status ;
@@ -1637,14 +1638,19 @@ int cmd_top(int argc, const char **argv)
1637
1638
if (top .evlist == NULL )
1638
1639
return - ENOMEM ;
1639
1640
1641
+ perf_env__init (& host_env );
1640
1642
status = perf_config (perf_top_config , & top );
1641
1643
if (status )
1642
- return status ;
1644
+ goto out_delete_evlist ;
1643
1645
/*
1644
1646
* Since the per arch annotation init routine may need the cpuid, read
1645
1647
* it here, since we are not getting this from the perf.data header.
1646
1648
*/
1647
- status = perf_env__read_cpuid (& perf_env );
1649
+ status = perf_env__set_cmdline (& host_env , argc , argv );
1650
+ if (status )
1651
+ goto out_delete_evlist ;
1652
+
1653
+ status = perf_env__read_cpuid (& host_env );
1648
1654
if (status ) {
1649
1655
/*
1650
1656
* Some arches do not provide a get_cpuid(), so just use pr_debug, otherwise
@@ -1661,18 +1667,24 @@ int cmd_top(int argc, const char **argv)
1661
1667
1662
1668
if (disassembler_style ) {
1663
1669
annotate_opts .disassembler_style = strdup (disassembler_style );
1664
- if (!annotate_opts .disassembler_style )
1665
- return - ENOMEM ;
1670
+ if (!annotate_opts .disassembler_style ) {
1671
+ status = - ENOMEM ;
1672
+ goto out_delete_evlist ;
1673
+ }
1666
1674
}
1667
1675
if (objdump_path ) {
1668
1676
annotate_opts .objdump_path = strdup (objdump_path );
1669
- if (!annotate_opts .objdump_path )
1670
- return - ENOMEM ;
1677
+ if (!annotate_opts .objdump_path ) {
1678
+ status = - ENOMEM ;
1679
+ goto out_delete_evlist ;
1680
+ }
1671
1681
}
1672
1682
if (addr2line_path ) {
1673
1683
symbol_conf .addr2line_path = strdup (addr2line_path );
1674
- if (!symbol_conf .addr2line_path )
1675
- return - ENOMEM ;
1684
+ if (!symbol_conf .addr2line_path ) {
1685
+ status = - ENOMEM ;
1686
+ goto out_delete_evlist ;
1687
+ }
1676
1688
}
1677
1689
1678
1690
status = symbol__validate_sym_arguments ();
@@ -1735,7 +1747,7 @@ int cmd_top(int argc, const char **argv)
1735
1747
symbol_conf .show_branchflag_count = true;
1736
1748
1737
1749
if (opts -> branch_stack ) {
1738
- status = perf_env__read_core_pmu_caps (& perf_env );
1750
+ status = perf_env__read_core_pmu_caps (& host_env );
1739
1751
if (status ) {
1740
1752
pr_err ("PMU capability data is not available\n" );
1741
1753
goto out_delete_evlist ;
@@ -1829,14 +1841,16 @@ int cmd_top(int argc, const char **argv)
1829
1841
perf_top__update_print_entries (& top );
1830
1842
signal (SIGWINCH , winch_sig );
1831
1843
}
1832
- top .session -> env = & perf_env ;
1833
1844
1834
- top .session = perf_session__new (NULL , NULL );
1845
+ top .session = __perf_session__new (/*data=*/ NULL , /*tool=*/ NULL ,
1846
+ /*trace_event_repipe=*/ false,
1847
+ & host_env );
1835
1848
if (IS_ERR (top .session )) {
1836
1849
status = PTR_ERR (top .session );
1837
1850
top .session = NULL ;
1838
1851
goto out_delete_evlist ;
1839
1852
}
1853
+ top .evlist -> session = top .session ;
1840
1854
1841
1855
if (!evlist__needs_bpf_sb_event (top .evlist ))
1842
1856
top .record_opts .no_bpf_event = true;
@@ -1851,7 +1865,7 @@ int cmd_top(int argc, const char **argv)
1851
1865
goto out_delete_evlist ;
1852
1866
}
1853
1867
1854
- if (evlist__add_bpf_sb_event (top .sb_evlist , & perf_env )) {
1868
+ if (evlist__add_bpf_sb_event (top .sb_evlist , & host_env )) {
1855
1869
pr_err ("Couldn't ask for PERF_RECORD_BPF_EVENT side band events.\n." );
1856
1870
status = - EINVAL ;
1857
1871
goto out_delete_evlist ;
@@ -1873,6 +1887,7 @@ int cmd_top(int argc, const char **argv)
1873
1887
evlist__delete (top .evlist );
1874
1888
perf_session__delete (top .session );
1875
1889
annotation_options__exit ();
1890
+ perf_env__exit (& host_env );
1876
1891
1877
1892
return status ;
1878
1893
}
0 commit comments