diff options
author | Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> | 2016-02-16 20:07:51 -0500 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2016-03-10 06:57:22 -0500 |
commit | d34171e88aeed4a99c00c7f2af3d5c553e7a4972 (patch) | |
tree | c7f6c4944a9d2ecca396254e4d02d14a0227f719 | |
parent | 2b206ee6b0df03a89783c6a9ada363122f918800 (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.c | 41 | ||||
-rw-r--r-- | arch/powerpc/perf/hv-24x7.h | 1 |
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 | ||
71 | static 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 | |||
71 | static bool catalog_entry_domain_is_valid(unsigned domain) | 89 | static 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 | ||
990 | static 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) \ |
973 | static ssize_t _name##_show(struct device *dev, \ | 1012 | static 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", | |||
997 | PAGE_0_ATTR(catalog_len, "%lld\n", | 1036 | PAGE_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); |
999 | static BIN_ATTR_RO(catalog, 0/* real length varies */); | 1038 | static BIN_ATTR_RO(catalog, 0/* real length varies */); |
1039 | static DEVICE_ATTR_RO(domains); | ||
1000 | 1040 | ||
1001 | static struct bin_attribute *if_bin_attrs[] = { | 1041 | static 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[] = { | |||
1006 | static struct attribute *if_attrs[] = { | 1046 | static 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 | ||
12 | struct hv_24x7_request { | 13 | struct hv_24x7_request { |