Messages in this thread | | | Date | Sat, 17 Mar 2018 01:19:54 +0800 | From | kbuild test robot <> | Subject | [tip:perf/core 1/2] drivers//perf/qcom_l2_pmu.c:598:13: error: invalid storage class for function 'l2_cache_event_start' |
| |
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 <nleeder@codeaurora.org> :::::: CC: Will Deacon <will.deacon@arm.com>
--- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation [unhandled content-type:application/gzip] | |