aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>2016-02-16 20:07:51 -0500
committerMichael Ellerman <mpe@ellerman.id.au>2016-03-10 06:57:22 -0500
commitd34171e88aeed4a99c00c7f2af3d5c553e7a4972 (patch)
treec7f6c4944a9d2ecca396254e4d02d14a0227f719
parent2b206ee6b0df03a89783c6a9ada363122f918800 (diff)
powerpc/perf/hv-24x7: Display domain indices in sysfs
To help users determine domains, display the domain indices used by the kernel in sysfs. $ cat /sys/bus/event_source/devices/hv_24x7/interface/domains 1: Physical Chip 2: Physical Core 3: VCPU Home Core 4: VCPU Home Chip 5: VCPU Home Node 6: VCPU Remote Node Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
-rw-r--r--arch/powerpc/perf/hv-24x7.c41
-rw-r--r--arch/powerpc/perf/hv-24x7.h1
2 files changed, 42 insertions, 0 deletions
diff --git a/arch/powerpc/perf/hv-24x7.c b/arch/powerpc/perf/hv-24x7.c
index 77b958f213a0..36b29fd9295d 100644
--- a/arch/powerpc/perf/hv-24x7.c
+++ b/arch/powerpc/perf/hv-24x7.c
@@ -68,6 +68,24 @@ static bool is_physical_domain(unsigned domain)
68 } 68 }
69} 69}
70 70
71static const char *domain_name(unsigned domain)
72{
73 if (!domain_is_valid(domain))
74 return NULL;
75
76 switch (domain) {
77 case HV_PERF_DOMAIN_PHYS_CHIP: return "Physical Chip";
78 case HV_PERF_DOMAIN_PHYS_CORE: return "Physical Core";
79 case HV_PERF_DOMAIN_VCPU_HOME_CORE: return "VCPU Home Core";
80 case HV_PERF_DOMAIN_VCPU_HOME_CHIP: return "VCPU Home Chip";
81 case HV_PERF_DOMAIN_VCPU_HOME_NODE: return "VCPU Home Node";
82 case HV_PERF_DOMAIN_VCPU_REMOTE_NODE: return "VCPU Remote Node";
83 }
84
85 WARN_ON_ONCE(domain);
86 return NULL;
87}
88
71static bool catalog_entry_domain_is_valid(unsigned domain) 89static bool catalog_entry_domain_is_valid(unsigned domain)
72{ 90{
73 return is_physical_domain(domain); 91 return is_physical_domain(domain);
@@ -969,6 +987,27 @@ e_free:
969 return ret; 987 return ret;
970} 988}
971 989
990static ssize_t domains_show(struct device *dev, struct device_attribute *attr,
991 char *page)
992{
993 int d, n, count = 0;
994 const char *str;
995
996 for (d = 0; d < HV_PERF_DOMAIN_MAX; d++) {
997 str = domain_name(d);
998 if (!str)
999 continue;
1000
1001 n = sprintf(page, "%d: %s\n", d, str);
1002 if (n < 0)
1003 break;
1004
1005 count += n;
1006 page += n;
1007 }
1008 return count;
1009}
1010
972#define PAGE_0_ATTR(_name, _fmt, _expr) \ 1011#define PAGE_0_ATTR(_name, _fmt, _expr) \
973static ssize_t _name##_show(struct device *dev, \ 1012static ssize_t _name##_show(struct device *dev, \
974 struct device_attribute *dev_attr, \ 1013 struct device_attribute *dev_attr, \
@@ -997,6 +1036,7 @@ PAGE_0_ATTR(catalog_version, "%lld\n",
997PAGE_0_ATTR(catalog_len, "%lld\n", 1036PAGE_0_ATTR(catalog_len, "%lld\n",
998 (unsigned long long)be32_to_cpu(page_0->length) * 4096); 1037 (unsigned long long)be32_to_cpu(page_0->length) * 4096);
999static BIN_ATTR_RO(catalog, 0/* real length varies */); 1038static BIN_ATTR_RO(catalog, 0/* real length varies */);
1039static DEVICE_ATTR_RO(domains);
1000 1040
1001static struct bin_attribute *if_bin_attrs[] = { 1041static struct bin_attribute *if_bin_attrs[] = {
1002 &bin_attr_catalog, 1042 &bin_attr_catalog,
@@ -1006,6 +1046,7 @@ static struct bin_attribute *if_bin_attrs[] = {
1006static struct attribute *if_attrs[] = { 1046static struct attribute *if_attrs[] = {
1007 &dev_attr_catalog_len.attr, 1047 &dev_attr_catalog_len.attr,
1008 &dev_attr_catalog_version.attr, 1048 &dev_attr_catalog_version.attr,
1049 &dev_attr_domains.attr,
1009 NULL, 1050 NULL,
1010}; 1051};
1011 1052
diff --git a/arch/powerpc/perf/hv-24x7.h b/arch/powerpc/perf/hv-24x7.h
index c57d67dc9f3f..791455e7f5cf 100644
--- a/arch/powerpc/perf/hv-24x7.h
+++ b/arch/powerpc/perf/hv-24x7.h
@@ -7,6 +7,7 @@ enum hv_perf_domains {
7#define DOMAIN(n, v, x, c) HV_PERF_DOMAIN_##n = v, 7#define DOMAIN(n, v, x, c) HV_PERF_DOMAIN_##n = v,
8#include "hv-24x7-domains.h" 8#include "hv-24x7-domains.h"
9#undef DOMAIN 9#undef DOMAIN
10 HV_PERF_DOMAIN_MAX,
10}; 11};
11 12
12struct hv_24x7_request { 13struct hv_24x7_request {