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>
This commit is contained in:
Sukadev Bhattiprolu 2016-02-16 20:07:51 -05:00 committed by Michael Ellerman
parent 2b206ee6b0
commit d34171e88a
2 changed files with 42 additions and 0 deletions

View File

@ -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)
{
return is_physical_domain(domain);
@ -969,6 +987,27 @@ static ssize_t catalog_read(struct file *filp, struct kobject *kobj,
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) \
static ssize_t _name##_show(struct device *dev, \
struct device_attribute *dev_attr, \
@ -997,6 +1036,7 @@ PAGE_0_ATTR(catalog_version, "%lld\n",
PAGE_0_ATTR(catalog_len, "%lld\n",
(unsigned long long)be32_to_cpu(page_0->length) * 4096);
static BIN_ATTR_RO(catalog, 0/* real length varies */);
static DEVICE_ATTR_RO(domains);
static struct bin_attribute *if_bin_attrs[] = {
&bin_attr_catalog,
@ -1006,6 +1046,7 @@ static struct bin_attribute *if_bin_attrs[] = {
static struct attribute *if_attrs[] = {
&dev_attr_catalog_len.attr,
&dev_attr_catalog_version.attr,
&dev_attr_domains.attr,
NULL,
};

View File

@ -7,6 +7,7 @@ enum hv_perf_domains {
#define DOMAIN(n, v, x, c) HV_PERF_DOMAIN_##n = v,
#include "hv-24x7-domains.h"
#undef DOMAIN
HV_PERF_DOMAIN_MAX,
};
struct hv_24x7_request {