tree:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core
head:   bbb68468641547d56c83012670bcaf77f3dacd64
commit: 7eb709f29593aced51901cb53565477762800722 [1/2] perf: Fix sibling 
iteration
config: arm64-allyesconfig (attached as .config)
compiler: aarch64-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        git checkout 7eb709f29593aced51901cb53565477762800722
        # save the attached .config to linux build tree
        make.cross ARCH=arm64 

All error/warnings (new ones prefixed by >>):

   drivers//perf/qcom_l2_pmu.c: In function 'l2_cache_event_init':
>> drivers//perf/qcom_l2_pmu.c:598:13: error: invalid storage class for 
>> function 'l2_cache_event_start'
    static void l2_cache_event_start(struct perf_event *event, int flags)
                ^~~~~~~~~~~~~~~~~~~~
>> drivers//perf/qcom_l2_pmu.c:598:1: warning: ISO C90 forbids mixed 
>> declarations and code [-Wdeclaration-after-statement]
    static void l2_cache_event_start(struct perf_event *event, int flags)
    ^~~~~~
>> drivers//perf/qcom_l2_pmu.c:629:13: error: invalid storage class for 
>> function 'l2_cache_event_stop'
    static void l2_cache_event_stop(struct perf_event *event, int flags)
                ^~~~~~~~~~~~~~~~~~~
>> drivers//perf/qcom_l2_pmu.c:645:12: error: invalid storage class for 
>> function 'l2_cache_event_add'
    static int l2_cache_event_add(struct perf_event *event, int flags)
               ^~~~~~~~~~~~~~~~~~
>> drivers//perf/qcom_l2_pmu.c:672:13: error: invalid storage class for 
>> function 'l2_cache_event_del'
    static void l2_cache_event_del(struct perf_event *event, int flags)
                ^~~~~~~~~~~~~~~~~~
>> drivers//perf/qcom_l2_pmu.c:687:13: error: invalid storage class for 
>> function 'l2_cache_event_read'
    static void l2_cache_event_read(struct perf_event *event)
                ^~~~~~~~~~~~~~~~~~~
>> drivers//perf/qcom_l2_pmu.c:692:16: error: invalid storage class for 
>> function 'l2_cache_pmu_cpumask_show'
    static ssize_t l2_cache_pmu_cpumask_show(struct device *dev,
                   ^~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from include/linux/kobject.h:20:0,
                    from include/linux/device.h:16,
                    from include/linux/acpi.h:27,
                    from drivers//perf/qcom_l2_pmu.c:12:
>> drivers//perf/qcom_l2_pmu.c:702:28: error: initializer element is not 
>> constant
      __ATTR(cpumask, S_IRUGO, l2_cache_pmu_cpumask_show, NULL);
                               ^
   include/linux/sysfs.h:104:10: note: in definition of macro '__ATTR'
     .show = _show,      \
             ^~~~~
   drivers//perf/qcom_l2_pmu.c:702:28: note: (near initialization for 
'l2_cache_pmu_cpumask_attr.show')
      __ATTR(cpumask, S_IRUGO, l2_cache_pmu_cpumask_show, NULL);
                               ^
   include/linux/sysfs.h:104:10: note: in definition of macro '__ATTR'
     .show = _show,      \
             ^~~~~
   In file included from drivers//perf/qcom_l2_pmu.c:24:0:
>> drivers//perf/qcom_l2_pmu.c:714:17: error: invalid storage class for 
>> function 'l2_code_show'
    PMU_FORMAT_ATTR(l2_code,   "config:4-11");
                    ^
   include/linux/perf_event.h:1377:1: note: in definition of macro 
'PMU_FORMAT_ATTR'
    _name##_show(struct device *dev,     \
    ^~~~~
   In file included from include/linux/kobject.h:20:0,
                    from include/linux/device.h:16,
                    from include/linux/acpi.h:27,
                    from drivers//perf/qcom_l2_pmu.c:12:
   drivers//perf/qcom_l2_pmu.c:714:17: error: initializer element is not 
constant
    PMU_FORMAT_ATTR(l2_code,   "config:4-11");
                    ^
   include/linux/sysfs.h:117:10: note: in definition of macro '__ATTR_RO'
     .show = _name##_show,      \
             ^~~~~
>> drivers//perf/qcom_l2_pmu.c:714:1: note: in expansion of macro 
>> 'PMU_FORMAT_ATTR'
    PMU_FORMAT_ATTR(l2_code,   "config:4-11");
    ^~~~~~~~~~~~~~~
   drivers//perf/qcom_l2_pmu.c:714:17: note: (near initialization for 
'format_attr_l2_code.show')
    PMU_FORMAT_ATTR(l2_code,   "config:4-11");
                    ^
   include/linux/sysfs.h:117:10: note: in definition of macro '__ATTR_RO'
     .show = _name##_show,      \
             ^~~~~
>> drivers//perf/qcom_l2_pmu.c:714:1: note: in expansion of macro 
>> 'PMU_FORMAT_ATTR'
    PMU_FORMAT_ATTR(l2_code,   "config:4-11");
    ^~~~~~~~~~~~~~~
   In file included from drivers//perf/qcom_l2_pmu.c:24:0:
>> drivers//perf/qcom_l2_pmu.c:715:17: error: invalid storage class for 
>> function 'l2_group_show'
    PMU_FORMAT_ATTR(l2_group,  "config:0-3");
                    ^
   include/linux/perf_event.h:1377:1: note: in definition of macro 
'PMU_FORMAT_ATTR'
    _name##_show(struct device *dev,     \
    ^~~~~
   In file included from include/linux/kobject.h:20:0,
                    from include/linux/device.h:16,
                    from include/linux/acpi.h:27,
                    from drivers//perf/qcom_l2_pmu.c:12:
   drivers//perf/qcom_l2_pmu.c:715:17: error: initializer element is not 
constant
    PMU_FORMAT_ATTR(l2_group,  "config:0-3");
                    ^
   include/linux/sysfs.h:117:10: note: in definition of macro '__ATTR_RO'
     .show = _name##_show,      \
             ^~~~~
   drivers//perf/qcom_l2_pmu.c:715:1: note: in expansion of macro 
'PMU_FORMAT_ATTR'
    PMU_FORMAT_ATTR(l2_group,  "config:0-3");
    ^~~~~~~~~~~~~~~
   drivers//perf/qcom_l2_pmu.c:715:17: note: (near initialization for 
'format_attr_l2_group.show')
    PMU_FORMAT_ATTR(l2_group,  "config:0-3");
                    ^
   include/linux/sysfs.h:117:10: note: in definition of macro '__ATTR_RO'
     .show = _name##_show,      \
             ^~~~~
   drivers//perf/qcom_l2_pmu.c:715:1: note: in expansion of macro 
'PMU_FORMAT_ATTR'
    PMU_FORMAT_ATTR(l2_group,  "config:0-3");
    ^~~~~~~~~~~~~~~
   In file included from drivers//perf/qcom_l2_pmu.c:24:0:
>> drivers//perf/qcom_l2_pmu.c:716:17: error: invalid storage class for 
>> function 'event_show'
    PMU_FORMAT_ATTR(event,     "config:0-11");
                    ^
   include/linux/perf_event.h:1377:1: note: in definition of macro 
'PMU_FORMAT_ATTR'
    _name##_show(struct device *dev,     \
    ^~~~~
   In file included from include/linux/kobject.h:20:0,
                    from include/linux/device.h:16,
                    from include/linux/acpi.h:27,
                    from drivers//perf/qcom_l2_pmu.c:12:
   drivers//perf/qcom_l2_pmu.c:716:17: error: initializer element is not 
constant
    PMU_FORMAT_ATTR(event,     "config:0-11");
                    ^
   include/linux/sysfs.h:117:10: note: in definition of macro '__ATTR_RO'
     .show = _name##_show,      \
             ^~~~~
   drivers//perf/qcom_l2_pmu.c:716:1: note: in expansion of macro 
'PMU_FORMAT_ATTR'
    PMU_FORMAT_ATTR(event,     "config:0-11");
    ^~~~~~~~~~~~~~~
   drivers//perf/qcom_l2_pmu.c:716:17: note: (near initialization for 
'format_attr_event.show')
    PMU_FORMAT_ATTR(event,     "config:0-11");
                    ^
   include/linux/sysfs.h:117:10: note: in definition of macro '__ATTR_RO'
     .show = _name##_show,      \
             ^~~~~
   drivers//perf/qcom_l2_pmu.c:716:1: note: in expansion of macro 
'PMU_FORMAT_ATTR'
    PMU_FORMAT_ATTR(event,     "config:0-11");
    ^~~~~~~~~~~~~~~
>> drivers//perf/qcom_l2_pmu.c:730:16: error: invalid storage class for 
>> function 'l2cache_pmu_event_show'
    static ssize_t l2cache_pmu_event_show(struct device *dev,
                   ^~~~~~~~~~~~~~~~~~~~~~
   drivers//perf/qcom_l2_pmu.c:740:2: error: initializer element is not constant
     (&((struct perf_pmu_events_attr[]) {         \
     ^
>> drivers//perf/qcom_l2_pmu.c:746:2: note: in expansion of macro 
>> 'L2CACHE_EVENT_ATTR'
     L2CACHE_EVENT_ATTR(cycles, L2_EVENT_CYCLES),
     ^~~~~~~~~~~~~~~~~~
   drivers//perf/qcom_l2_pmu.c:740:2: note: (near initialization for 
'l2_cache_pmu_events[0]')
     (&((struct perf_pmu_events_attr[]) {         \
     ^
>> drivers//perf/qcom_l2_pmu.c:746:2: note: in expansion of macro 
>> 'L2CACHE_EVENT_ATTR'
     L2CACHE_EVENT_ATTR(cycles, L2_EVENT_CYCLES),
     ^~~~~~~~~~~~~~~~~~
>> drivers//perf/qcom_l2_pmu.c:781:12: error: invalid storage class for 
>> function 'get_num_counters'
    static int get_num_counters(void)
               ^~~~~~~~~~~~~~~~
>> drivers//perf/qcom_l2_pmu.c:794:28: error: invalid storage class for 
>> function 'l2_cache_associate_cpu_with_cluster'
    static struct cluster_pmu *l2_cache_associate_cpu_with_cluster(
                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers//perf/qcom_l2_pmu.c:827:12: error: invalid storage class for 
>> function 'l2cache_pmu_online_cpu'
    static int l2cache_pmu_online_cpu(unsigned int cpu, struct hlist_node *node)
               ^~~~~~~~~~~~~~~~~~~~~~
>> drivers//perf/qcom_l2_pmu.c:862:12: error: invalid storage class for 
>> function 'l2cache_pmu_offline_cpu'
    static int l2cache_pmu_offline_cpu(unsigned int cpu, struct hlist_node 
*node)
               ^~~~~~~~~~~~~~~~~~~~~~~

vim +/l2_cache_event_start +598 drivers//perf/qcom_l2_pmu.c

21bdbb710 Neil Leeder 2017-02-07  597  
21bdbb710 Neil Leeder 2017-02-07 @598  static void l2_cache_event_start(struct 
perf_event *event, int flags)
21bdbb710 Neil Leeder 2017-02-07  599  {
21bdbb710 Neil Leeder 2017-02-07  600   struct cluster_pmu *cluster;
21bdbb710 Neil Leeder 2017-02-07  601   struct hw_perf_event *hwc = &event->hw;
21bdbb710 Neil Leeder 2017-02-07  602   int idx = hwc->idx;
21bdbb710 Neil Leeder 2017-02-07  603   u32 config;
21bdbb710 Neil Leeder 2017-02-07  604   u32 event_cc, event_group;
21bdbb710 Neil Leeder 2017-02-07  605  
21bdbb710 Neil Leeder 2017-02-07  606   hwc->state = 0;
21bdbb710 Neil Leeder 2017-02-07  607  
21bdbb710 Neil Leeder 2017-02-07  608   cluster = 
get_cluster_pmu(to_l2cache_pmu(event->pmu), event->cpu);
21bdbb710 Neil Leeder 2017-02-07  609  
21bdbb710 Neil Leeder 2017-02-07  610   l2_cache_cluster_set_period(cluster, 
hwc);
21bdbb710 Neil Leeder 2017-02-07  611  
21bdbb710 Neil Leeder 2017-02-07  612   if (hwc->config_base == 
L2CYCLE_CTR_RAW_CODE) {
21bdbb710 Neil Leeder 2017-02-07  613           cluster_pmu_set_evccntcr(0);
21bdbb710 Neil Leeder 2017-02-07  614   } else {
21bdbb710 Neil Leeder 2017-02-07  615           config = hwc->config_base;
21bdbb710 Neil Leeder 2017-02-07  616           event_cc    = 
L2_EVT_CODE(config);
21bdbb710 Neil Leeder 2017-02-07  617           event_group = 
L2_EVT_GROUP(config);
21bdbb710 Neil Leeder 2017-02-07  618  
21bdbb710 Neil Leeder 2017-02-07  619           cluster_pmu_set_evcntcr(idx, 0);
21bdbb710 Neil Leeder 2017-02-07  620           cluster_pmu_set_evtyper(idx, 
event_group);
21bdbb710 Neil Leeder 2017-02-07  621           cluster_pmu_set_resr(cluster, 
event_group, event_cc);
21bdbb710 Neil Leeder 2017-02-07  622           
cluster_pmu_set_evfilter_sys_mode(idx);
21bdbb710 Neil Leeder 2017-02-07  623   }
21bdbb710 Neil Leeder 2017-02-07  624  
21bdbb710 Neil Leeder 2017-02-07  625   
cluster_pmu_counter_enable_interrupt(idx);
21bdbb710 Neil Leeder 2017-02-07  626   cluster_pmu_counter_enable(idx);
21bdbb710 Neil Leeder 2017-02-07  627  }
21bdbb710 Neil Leeder 2017-02-07  628  
21bdbb710 Neil Leeder 2017-02-07 @629  static void l2_cache_event_stop(struct 
perf_event *event, int flags)
21bdbb710 Neil Leeder 2017-02-07  630  {
21bdbb710 Neil Leeder 2017-02-07  631   struct hw_perf_event *hwc = &event->hw;
21bdbb710 Neil Leeder 2017-02-07  632   int idx = hwc->idx;
21bdbb710 Neil Leeder 2017-02-07  633  
21bdbb710 Neil Leeder 2017-02-07  634   if (hwc->state & PERF_HES_STOPPED)
21bdbb710 Neil Leeder 2017-02-07  635           return;
21bdbb710 Neil Leeder 2017-02-07  636  
21bdbb710 Neil Leeder 2017-02-07  637   
cluster_pmu_counter_disable_interrupt(idx);
21bdbb710 Neil Leeder 2017-02-07  638   cluster_pmu_counter_disable(idx);
21bdbb710 Neil Leeder 2017-02-07  639  
21bdbb710 Neil Leeder 2017-02-07  640   if (flags & PERF_EF_UPDATE)
21bdbb710 Neil Leeder 2017-02-07  641           l2_cache_event_update(event);
21bdbb710 Neil Leeder 2017-02-07  642   hwc->state |= PERF_HES_STOPPED | 
PERF_HES_UPTODATE;
21bdbb710 Neil Leeder 2017-02-07  643  }
21bdbb710 Neil Leeder 2017-02-07  644  
21bdbb710 Neil Leeder 2017-02-07 @645  static int l2_cache_event_add(struct 
perf_event *event, int flags)
21bdbb710 Neil Leeder 2017-02-07  646  {
21bdbb710 Neil Leeder 2017-02-07  647   struct hw_perf_event *hwc = &event->hw;
21bdbb710 Neil Leeder 2017-02-07  648   int idx;
21bdbb710 Neil Leeder 2017-02-07  649   int err = 0;
21bdbb710 Neil Leeder 2017-02-07  650   struct cluster_pmu *cluster;
21bdbb710 Neil Leeder 2017-02-07  651  
21bdbb710 Neil Leeder 2017-02-07  652   cluster = 
get_cluster_pmu(to_l2cache_pmu(event->pmu), event->cpu);
21bdbb710 Neil Leeder 2017-02-07  653  
21bdbb710 Neil Leeder 2017-02-07  654   idx = l2_cache_get_event_idx(cluster, 
event);
21bdbb710 Neil Leeder 2017-02-07  655   if (idx < 0)
21bdbb710 Neil Leeder 2017-02-07  656           return idx;
21bdbb710 Neil Leeder 2017-02-07  657  
21bdbb710 Neil Leeder 2017-02-07  658   hwc->idx = idx;
21bdbb710 Neil Leeder 2017-02-07  659   hwc->state = PERF_HES_STOPPED | 
PERF_HES_UPTODATE;
21bdbb710 Neil Leeder 2017-02-07  660   cluster->events[idx] = event;
21bdbb710 Neil Leeder 2017-02-07  661   local64_set(&hwc->prev_count, 0);
21bdbb710 Neil Leeder 2017-02-07  662  
21bdbb710 Neil Leeder 2017-02-07  663   if (flags & PERF_EF_START)
21bdbb710 Neil Leeder 2017-02-07  664           l2_cache_event_start(event, 
flags);
21bdbb710 Neil Leeder 2017-02-07  665  
21bdbb710 Neil Leeder 2017-02-07  666   /* Propagate changes to the userspace 
mapping. */
21bdbb710 Neil Leeder 2017-02-07  667   perf_event_update_userpage(event);
21bdbb710 Neil Leeder 2017-02-07  668  
21bdbb710 Neil Leeder 2017-02-07  669   return err;
21bdbb710 Neil Leeder 2017-02-07  670  }
21bdbb710 Neil Leeder 2017-02-07  671  
21bdbb710 Neil Leeder 2017-02-07 @672  static void l2_cache_event_del(struct 
perf_event *event, int flags)
21bdbb710 Neil Leeder 2017-02-07  673  {
21bdbb710 Neil Leeder 2017-02-07  674   struct hw_perf_event *hwc = &event->hw;
21bdbb710 Neil Leeder 2017-02-07  675   struct cluster_pmu *cluster;
21bdbb710 Neil Leeder 2017-02-07  676   int idx = hwc->idx;
21bdbb710 Neil Leeder 2017-02-07  677  
21bdbb710 Neil Leeder 2017-02-07  678   cluster = 
get_cluster_pmu(to_l2cache_pmu(event->pmu), event->cpu);
21bdbb710 Neil Leeder 2017-02-07  679  
21bdbb710 Neil Leeder 2017-02-07  680   l2_cache_event_stop(event, flags | 
PERF_EF_UPDATE);
21bdbb710 Neil Leeder 2017-02-07  681   cluster->events[idx] = NULL;
21bdbb710 Neil Leeder 2017-02-07  682   l2_cache_clear_event_idx(cluster, 
event);
21bdbb710 Neil Leeder 2017-02-07  683  
21bdbb710 Neil Leeder 2017-02-07  684   perf_event_update_userpage(event);
21bdbb710 Neil Leeder 2017-02-07  685  }
21bdbb710 Neil Leeder 2017-02-07  686  
21bdbb710 Neil Leeder 2017-02-07 @687  static void l2_cache_event_read(struct 
perf_event *event)
21bdbb710 Neil Leeder 2017-02-07  688  {
21bdbb710 Neil Leeder 2017-02-07  689   l2_cache_event_update(event);
21bdbb710 Neil Leeder 2017-02-07  690  }
21bdbb710 Neil Leeder 2017-02-07  691  
21bdbb710 Neil Leeder 2017-02-07 @692  static ssize_t 
l2_cache_pmu_cpumask_show(struct device *dev,
21bdbb710 Neil Leeder 2017-02-07  693                                    struct 
device_attribute *attr,
21bdbb710 Neil Leeder 2017-02-07  694                                    char 
*buf)
21bdbb710 Neil Leeder 2017-02-07  695  {
21bdbb710 Neil Leeder 2017-02-07  696   struct l2cache_pmu *l2cache_pmu = 
to_l2cache_pmu(dev_get_drvdata(dev));
21bdbb710 Neil Leeder 2017-02-07  697  
21bdbb710 Neil Leeder 2017-02-07  698   return cpumap_print_to_pagebuf(true, 
buf, &l2cache_pmu->cpumask);
21bdbb710 Neil Leeder 2017-02-07  699  }
21bdbb710 Neil Leeder 2017-02-07  700  
21bdbb710 Neil Leeder 2017-02-07  701  static struct device_attribute 
l2_cache_pmu_cpumask_attr =
21bdbb710 Neil Leeder 2017-02-07 @702           __ATTR(cpumask, S_IRUGO, 
l2_cache_pmu_cpumask_show, NULL);
21bdbb710 Neil Leeder 2017-02-07  703  
21bdbb710 Neil Leeder 2017-02-07  704  static struct attribute 
*l2_cache_pmu_cpumask_attrs[] = {
21bdbb710 Neil Leeder 2017-02-07  705   &l2_cache_pmu_cpumask_attr.attr,
21bdbb710 Neil Leeder 2017-02-07  706   NULL,
21bdbb710 Neil Leeder 2017-02-07  707  };
21bdbb710 Neil Leeder 2017-02-07  708  
21bdbb710 Neil Leeder 2017-02-07  709  static struct attribute_group 
l2_cache_pmu_cpumask_group = {
21bdbb710 Neil Leeder 2017-02-07  710   .attrs = l2_cache_pmu_cpumask_attrs,
21bdbb710 Neil Leeder 2017-02-07  711  };
21bdbb710 Neil Leeder 2017-02-07  712  
21bdbb710 Neil Leeder 2017-02-07  713  /* CCG format for perf RAW codes. */
21bdbb710 Neil Leeder 2017-02-07 @714  PMU_FORMAT_ATTR(l2_code,   
"config:4-11");
21bdbb710 Neil Leeder 2017-02-07 @715  PMU_FORMAT_ATTR(l2_group,  "config:0-3");
b65423ed4 Neil Leeder 2017-09-14 @716  PMU_FORMAT_ATTR(event,     
"config:0-11");
b65423ed4 Neil Leeder 2017-09-14  717  
21bdbb710 Neil Leeder 2017-02-07  718  static struct attribute 
*l2_cache_pmu_formats[] = {
21bdbb710 Neil Leeder 2017-02-07  719   &format_attr_l2_code.attr,
21bdbb710 Neil Leeder 2017-02-07  720   &format_attr_l2_group.attr,
b65423ed4 Neil Leeder 2017-09-14  721   &format_attr_event.attr,
21bdbb710 Neil Leeder 2017-02-07  722   NULL,
21bdbb710 Neil Leeder 2017-02-07  723  };
21bdbb710 Neil Leeder 2017-02-07  724  
21bdbb710 Neil Leeder 2017-02-07  725  static struct attribute_group 
l2_cache_pmu_format_group = {
21bdbb710 Neil Leeder 2017-02-07  726   .name = "format",
21bdbb710 Neil Leeder 2017-02-07  727   .attrs = l2_cache_pmu_formats,
21bdbb710 Neil Leeder 2017-02-07  728  };
21bdbb710 Neil Leeder 2017-02-07  729  
b65423ed4 Neil Leeder 2017-09-14 @730  static ssize_t 
l2cache_pmu_event_show(struct device *dev,
b65423ed4 Neil Leeder 2017-09-14  731                                 struct 
device_attribute *attr, char *page)
b65423ed4 Neil Leeder 2017-09-14  732  {
b65423ed4 Neil Leeder 2017-09-14  733   struct perf_pmu_events_attr *pmu_attr;
b65423ed4 Neil Leeder 2017-09-14  734  
b65423ed4 Neil Leeder 2017-09-14  735   pmu_attr = container_of(attr, struct 
perf_pmu_events_attr, attr);
b65423ed4 Neil Leeder 2017-09-14  736   return sprintf(page, 
"event=0x%02llx\n", pmu_attr->id);
b65423ed4 Neil Leeder 2017-09-14  737  }
b65423ed4 Neil Leeder 2017-09-14  738  
b65423ed4 Neil Leeder 2017-09-14  739  #define L2CACHE_EVENT_ATTR(_name, _id)   
                                     \
b65423ed4 Neil Leeder 2017-09-14 @740   (&((struct perf_pmu_events_attr[]) {    
                             \
b65423ed4 Neil Leeder 2017-09-14  741           { .attr = __ATTR(_name, 0444, 
l2cache_pmu_event_show, NULL), \
b65423ed4 Neil Leeder 2017-09-14  742             .id = _id, }                  
                             \
b65423ed4 Neil Leeder 2017-09-14  743   })[0].attr.attr)
b65423ed4 Neil Leeder 2017-09-14  744  
b65423ed4 Neil Leeder 2017-09-14  745  static struct attribute 
*l2_cache_pmu_events[] = {
b65423ed4 Neil Leeder 2017-09-14 @746   L2CACHE_EVENT_ATTR(cycles, 
L2_EVENT_CYCLES),
b65423ed4 Neil Leeder 2017-09-14  747   L2CACHE_EVENT_ATTR(dcache-ops, 
L2_EVENT_DCACHE_OPS),
b65423ed4 Neil Leeder 2017-09-14  748   L2CACHE_EVENT_ATTR(icache-ops, 
L2_EVENT_ICACHE_OPS),
b65423ed4 Neil Leeder 2017-09-14  749   L2CACHE_EVENT_ATTR(tlbi, L2_EVENT_TLBI),
b65423ed4 Neil Leeder 2017-09-14  750   L2CACHE_EVENT_ATTR(barriers, 
L2_EVENT_BARRIERS),
b65423ed4 Neil Leeder 2017-09-14  751   L2CACHE_EVENT_ATTR(total-reads, 
L2_EVENT_TOTAL_READS),
b65423ed4 Neil Leeder 2017-09-14  752   L2CACHE_EVENT_ATTR(total-writes, 
L2_EVENT_TOTAL_WRITES),
b65423ed4 Neil Leeder 2017-09-14  753   L2CACHE_EVENT_ATTR(total-requests, 
L2_EVENT_TOTAL_REQUESTS),
b65423ed4 Neil Leeder 2017-09-14  754   L2CACHE_EVENT_ATTR(ldrex, 
L2_EVENT_LDREX),
b65423ed4 Neil Leeder 2017-09-14  755   L2CACHE_EVENT_ATTR(strex, 
L2_EVENT_STREX),
b65423ed4 Neil Leeder 2017-09-14  756   L2CACHE_EVENT_ATTR(clrex, 
L2_EVENT_CLREX),
b65423ed4 Neil Leeder 2017-09-14  757   NULL
b65423ed4 Neil Leeder 2017-09-14  758  };
b65423ed4 Neil Leeder 2017-09-14  759  
b65423ed4 Neil Leeder 2017-09-14  760  static struct attribute_group 
l2_cache_pmu_events_group = {
b65423ed4 Neil Leeder 2017-09-14  761   .name = "events",
b65423ed4 Neil Leeder 2017-09-14  762   .attrs = l2_cache_pmu_events,
b65423ed4 Neil Leeder 2017-09-14  763  };
b65423ed4 Neil Leeder 2017-09-14  764  
21bdbb710 Neil Leeder 2017-02-07  765  static const struct attribute_group 
*l2_cache_pmu_attr_grps[] = {
21bdbb710 Neil Leeder 2017-02-07  766   &l2_cache_pmu_format_group,
21bdbb710 Neil Leeder 2017-02-07  767   &l2_cache_pmu_cpumask_group,
b65423ed4 Neil Leeder 2017-09-14  768   &l2_cache_pmu_events_group,
21bdbb710 Neil Leeder 2017-02-07  769   NULL,
21bdbb710 Neil Leeder 2017-02-07  770  };
21bdbb710 Neil Leeder 2017-02-07  771  
21bdbb710 Neil Leeder 2017-02-07  772  /*
21bdbb710 Neil Leeder 2017-02-07  773   * Generic device handlers
21bdbb710 Neil Leeder 2017-02-07  774   */
21bdbb710 Neil Leeder 2017-02-07  775  
21bdbb710 Neil Leeder 2017-02-07  776  static const struct acpi_device_id 
l2_cache_pmu_acpi_match[] = {
21bdbb710 Neil Leeder 2017-02-07  777   { "QCOM8130", },
21bdbb710 Neil Leeder 2017-02-07  778   { }
21bdbb710 Neil Leeder 2017-02-07  779  };
21bdbb710 Neil Leeder 2017-02-07  780  
21bdbb710 Neil Leeder 2017-02-07 @781  static int get_num_counters(void)
21bdbb710 Neil Leeder 2017-02-07  782  {
21bdbb710 Neil Leeder 2017-02-07  783   int val;
21bdbb710 Neil Leeder 2017-02-07  784  
21bdbb710 Neil Leeder 2017-02-07  785   val = get_l2_indirect_reg(L2PMCR);
21bdbb710 Neil Leeder 2017-02-07  786  
21bdbb710 Neil Leeder 2017-02-07  787   /*
21bdbb710 Neil Leeder 2017-02-07  788    * Read number of counters from L2PMCR 
and add 1
21bdbb710 Neil Leeder 2017-02-07  789    * for the cycle counter.
21bdbb710 Neil Leeder 2017-02-07  790    */
21bdbb710 Neil Leeder 2017-02-07  791   return ((val >> L2PMCR_NUM_EV_SHIFT) & 
L2PMCR_NUM_EV_MASK) + 1;
21bdbb710 Neil Leeder 2017-02-07  792  }
21bdbb710 Neil Leeder 2017-02-07  793  
21bdbb710 Neil Leeder 2017-02-07 @794  static struct cluster_pmu 
*l2_cache_associate_cpu_with_cluster(
21bdbb710 Neil Leeder 2017-02-07  795   struct l2cache_pmu *l2cache_pmu, int 
cpu)
21bdbb710 Neil Leeder 2017-02-07  796  {
21bdbb710 Neil Leeder 2017-02-07  797   u64 mpidr;
21bdbb710 Neil Leeder 2017-02-07  798   int cpu_cluster_id;
21bdbb710 Neil Leeder 2017-02-07  799   struct cluster_pmu *cluster = NULL;
21bdbb710 Neil Leeder 2017-02-07  800  
21bdbb710 Neil Leeder 2017-02-07  801   /*
21bdbb710 Neil Leeder 2017-02-07  802    * This assumes that the cluster_id is 
in MPIDR[aff1] for
21bdbb710 Neil Leeder 2017-02-07  803    * single-threaded cores, and 
MPIDR[aff2] for multi-threaded
21bdbb710 Neil Leeder 2017-02-07  804    * cores. This logic will have to be 
updated if this changes.
21bdbb710 Neil Leeder 2017-02-07  805    */
21bdbb710 Neil Leeder 2017-02-07  806   mpidr = read_cpuid_mpidr();
21bdbb710 Neil Leeder 2017-02-07  807   if (mpidr & MPIDR_MT_BITMASK)
21bdbb710 Neil Leeder 2017-02-07  808           cpu_cluster_id = 
MPIDR_AFFINITY_LEVEL(mpidr, 2);
21bdbb710 Neil Leeder 2017-02-07  809   else
21bdbb710 Neil Leeder 2017-02-07  810           cpu_cluster_id = 
MPIDR_AFFINITY_LEVEL(mpidr, 1);
21bdbb710 Neil Leeder 2017-02-07  811  
21bdbb710 Neil Leeder 2017-02-07  812   list_for_each_entry(cluster, 
&l2cache_pmu->clusters, next) {
21bdbb710 Neil Leeder 2017-02-07  813           if (cluster->cluster_id != 
cpu_cluster_id)
21bdbb710 Neil Leeder 2017-02-07  814                   continue;
21bdbb710 Neil Leeder 2017-02-07  815  
21bdbb710 Neil Leeder 2017-02-07  816           
dev_info(&l2cache_pmu->pdev->dev,
21bdbb710 Neil Leeder 2017-02-07  817                    "CPU%d associated with 
cluster %d\n", cpu,
21bdbb710 Neil Leeder 2017-02-07  818                    cluster->cluster_id);
21bdbb710 Neil Leeder 2017-02-07  819           cpumask_set_cpu(cpu, 
&cluster->cluster_cpus);
21bdbb710 Neil Leeder 2017-02-07  820           
*per_cpu_ptr(l2cache_pmu->pmu_cluster, cpu) = cluster;
21bdbb710 Neil Leeder 2017-02-07  821           break;
21bdbb710 Neil Leeder 2017-02-07  822   }
21bdbb710 Neil Leeder 2017-02-07  823  
21bdbb710 Neil Leeder 2017-02-07  824   return cluster;
21bdbb710 Neil Leeder 2017-02-07  825  }
21bdbb710 Neil Leeder 2017-02-07  826  

:::::: The code at line 598 was first introduced by commit
:::::: 21bdbb7102edeaebb5ec4ef530c8f442f7562c96 perf: add qcom l2 cache perf 
events driver

:::::: TO: Neil Leeder <[email protected]>
:::::: CC: Will Deacon <[email protected]>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to