~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/perf/tests/sw-clock.c

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /tools/perf/tests/sw-clock.c (Version linux-6.12-rc7) and /tools/perf/tests/sw-clock.c (Version linux-5.10.228)


** Warning: Cannot open xref database.

  1 // SPDX-License-Identifier: GPL-2.0                 1 
  2 #include <errno.h>                                
  3 #include <inttypes.h>                             
  4 #include <unistd.h>                               
  5 #include <stdlib.h>                               
  6 #include <signal.h>                               
  7 #include <sys/mman.h>                             
  8 #include <linux/string.h>                         
  9                                                   
 10 #include "tests.h"                                
 11 #include "util/debug.h"                           
 12 #include "util/evsel.h"                           
 13 #include "util/evlist.h"                          
 14 #include "util/cpumap.h"                          
 15 #include "util/mmap.h"                            
 16 #include "util/sample.h"                          
 17 #include "util/thread_map.h"                      
 18 #include <perf/evlist.h>                          
 19 #include <perf/mmap.h>                            
 20                                                   
 21 #define NR_LOOPS  10000000                        
 22                                                   
 23 /*                                                
 24  * This test will open software clock events (    
 25  * then check their frequency -> period conver    
 26  * setting period to 1 forcefully.                
 27  */                                               
 28 static int __test__sw_clock_freq(enum perf_sw_    
 29 {                                                 
 30         int i, err = -1;                          
 31         volatile int tmp = 0;                     
 32         u64 total_periods = 0;                    
 33         int nr_samples = 0;                       
 34         char sbuf[STRERR_BUFSIZE];                
 35         union perf_event *event;                  
 36         struct evsel *evsel;                      
 37         struct evlist *evlist;                    
 38         struct perf_event_attr attr = {           
 39                 .type = PERF_TYPE_SOFTWARE,       
 40                 .config = clock_id,               
 41                 .sample_type = PERF_SAMPLE_PER    
 42                 .exclude_kernel = 1,              
 43                 .disabled = 1,                    
 44                 .freq = 1,                        
 45         };                                        
 46         struct perf_cpu_map *cpus = NULL;         
 47         struct perf_thread_map *threads = NULL    
 48         struct mmap *md;                          
 49                                                   
 50         attr.sample_freq = 500;                   
 51                                                   
 52         evlist = evlist__new();                   
 53         if (evlist == NULL) {                     
 54                 pr_debug("evlist__new\n");        
 55                 return -1;                        
 56         }                                         
 57                                                   
 58         evsel = evsel__new(&attr);                
 59         if (evsel == NULL) {                      
 60                 pr_debug("evsel__new\n");         
 61                 goto out_delete_evlist;           
 62         }                                         
 63         evlist__add(evlist, evsel);               
 64                                                   
 65         cpus = perf_cpu_map__new_any_cpu();       
 66         threads = thread_map__new_by_tid(getpi    
 67         if (!cpus || !threads) {                  
 68                 err = -ENOMEM;                    
 69                 pr_debug("Not enough memory to    
 70                 goto out_delete_evlist;           
 71         }                                         
 72                                                   
 73         perf_evlist__set_maps(&evlist->core, c    
 74                                                   
 75         if (evlist__open(evlist)) {               
 76                 const char *knob = "/proc/sys/    
 77                                                   
 78                 err = -errno;                     
 79                 pr_debug("Couldn't open evlist    
 80                          str_error_r(errno, sb    
 81                          knob, (u64)attr.sampl    
 82                 goto out_delete_evlist;           
 83         }                                         
 84                                                   
 85         err = evlist__mmap(evlist, 128);          
 86         if (err < 0) {                            
 87                 pr_debug("failed to mmap event    
 88                          str_error_r(errno, sb    
 89                 goto out_delete_evlist;           
 90         }                                         
 91                                                   
 92         evlist__enable(evlist);                   
 93                                                   
 94         /* collect samples */                     
 95         for (i = 0; i < NR_LOOPS; i++)            
 96                 tmp++;                            
 97                                                   
 98         evlist__disable(evlist);                  
 99                                                   
100         md = &evlist->mmap[0];                    
101         if (perf_mmap__read_init(&md->core) <     
102                 goto out_init;                    
103                                                   
104         while ((event = perf_mmap__read_event(    
105                 struct perf_sample sample;        
106                                                   
107                 if (event->header.type != PERF    
108                         goto next_event;          
109                                                   
110                 err = evlist__parse_sample(evl    
111                 if (err < 0) {                    
112                         pr_debug("Error during    
113                         goto out_delete_evlist    
114                 }                                 
115                                                   
116                 total_periods += sample.period    
117                 nr_samples++;                     
118 next_event:                                       
119                 perf_mmap__consume(&md->core);    
120         }                                         
121         perf_mmap__read_done(&md->core);          
122                                                   
123 out_init:                                         
124         if ((u64) nr_samples == total_periods)    
125                 pr_debug("All (%d) samples hav    
126                          nr_samples);             
127                 err = -1;                         
128         }                                         
129                                                   
130 out_delete_evlist:                                
131         perf_cpu_map__put(cpus);                  
132         perf_thread_map__put(threads);            
133         evlist__delete(evlist);                   
134         return err;                               
135 }                                                 
136                                                   
137 static int test__sw_clock_freq(struct test_sui    
138 {                                                 
139         int ret;                                  
140                                                   
141         ret = __test__sw_clock_freq(PERF_COUNT    
142         if (!ret)                                 
143                 ret = __test__sw_clock_freq(PE    
144                                                   
145         return ret;                               
146 }                                                 
147                                                   
148 DEFINE_SUITE("Software clock events period val    
149                                                   

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php