Commit d34171e8 authored by Sukadev Bhattiprolu's avatar Sukadev Bhattiprolu Committed by Michael Ellerman

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: default avatarSukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 2b206ee6
...@@ -68,6 +68,24 @@ static bool is_physical_domain(unsigned domain) ...@@ -68,6 +68,24 @@ static bool is_physical_domain(unsigned domain)
} }
} }
static const char *domain_name(unsigned domain)
{
if (!domain_is_valid(domain))
return NULL;
switch (domain) {
case HV_PERF_DOMAIN_PHYS_CHIP: return "Physical Chip";
case HV_PERF_DOMAIN_PHYS_CORE: return "Physical Core";
case HV_PERF_DOMAIN_VCPU_HOME_CORE: return "VCPU Home Core";
case HV_PERF_DOMAIN_VCPU_HOME_CHIP: return "VCPU Home Chip";
case HV_PERF_DOMAIN_VCPU_HOME_NODE: return "VCPU Home Node";
case HV_PERF_DOMAIN_VCPU_REMOTE_NODE: return "VCPU Remote Node";
}
WARN_ON_ONCE(domain);
return NULL;
}
static bool catalog_entry_domain_is_valid(unsigned domain) static bool catalog_entry_domain_is_valid(unsigned domain)
{ {
return is_physical_domain(domain); return is_physical_domain(domain);
...@@ -969,6 +987,27 @@ static ssize_t catalog_read(struct file *filp, struct kobject *kobj, ...@@ -969,6 +987,27 @@ static ssize_t catalog_read(struct file *filp, struct kobject *kobj,
return ret; return ret;
} }
static ssize_t domains_show(struct device *dev, struct device_attribute *attr,
char *page)
{
int d, n, count = 0;
const char *str;
for (d = 0; d < HV_PERF_DOMAIN_MAX; d++) {
str = domain_name(d);
if (!str)
continue;
n = sprintf(page, "%d: %s\n", d, str);
if (n < 0)
break;
count += n;
page += n;
}
return count;
}
#define PAGE_0_ATTR(_name, _fmt, _expr) \ #define PAGE_0_ATTR(_name, _fmt, _expr) \
static ssize_t _name##_show(struct device *dev, \ static ssize_t _name##_show(struct device *dev, \
struct device_attribute *dev_attr, \ struct device_attribute *dev_attr, \
...@@ -997,6 +1036,7 @@ PAGE_0_ATTR(catalog_version, "%lld\n", ...@@ -997,6 +1036,7 @@ PAGE_0_ATTR(catalog_version, "%lld\n",
PAGE_0_ATTR(catalog_len, "%lld\n", PAGE_0_ATTR(catalog_len, "%lld\n",
(unsigned long long)be32_to_cpu(page_0->length) * 4096); (unsigned long long)be32_to_cpu(page_0->length) * 4096);
static BIN_ATTR_RO(catalog, 0/* real length varies */); static BIN_ATTR_RO(catalog, 0/* real length varies */);
static DEVICE_ATTR_RO(domains);
static struct bin_attribute *if_bin_attrs[] = { static struct bin_attribute *if_bin_attrs[] = {
&bin_attr_catalog, &bin_attr_catalog,
...@@ -1006,6 +1046,7 @@ static struct bin_attribute *if_bin_attrs[] = { ...@@ -1006,6 +1046,7 @@ static struct bin_attribute *if_bin_attrs[] = {
static struct attribute *if_attrs[] = { static struct attribute *if_attrs[] = {
&dev_attr_catalog_len.attr, &dev_attr_catalog_len.attr,
&dev_attr_catalog_version.attr, &dev_attr_catalog_version.attr,
&dev_attr_domains.attr,
NULL, NULL,
}; };
......
...@@ -7,6 +7,7 @@ enum hv_perf_domains { ...@@ -7,6 +7,7 @@ enum hv_perf_domains {
#define DOMAIN(n, v, x, c) HV_PERF_DOMAIN_##n = v, #define DOMAIN(n, v, x, c) HV_PERF_DOMAIN_##n = v,
#include "hv-24x7-domains.h" #include "hv-24x7-domains.h"
#undef DOMAIN #undef DOMAIN
HV_PERF_DOMAIN_MAX,
}; };
struct hv_24x7_request { struct hv_24x7_request {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment