powerpc/hv-gpci: Add sysfs files inside hv-gpci device to show cpumask
authorKajol Jain <kjain@linux.ibm.com>
Sat, 3 Oct 2020 07:49:43 +0000 (13:19 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 7 Oct 2020 11:34:49 +0000 (22:34 +1100)
Patch here adds a cpumask attr to hv_gpci pmu along with ABI documentation.

Primary use to expose the cpumask is for the perf tool which has the
capability to parse the driver sysfs folder and understand the
cpumask file. Having cpumask file will reduce the number of perf command
line parameters (will avoid "-C" option in the perf tool
command line). It can also notify the user which is
the current cpu used to retrieve the counter data.

command:# cat /sys/devices/hv_gpci/cpumask
0

Signed-off-by: Kajol Jain <kjain@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20201003074943.338618-5-kjain@linux.ibm.com
Documentation/ABI/testing/sysfs-bus-event_source-devices-hv_gpci
arch/powerpc/perf/hv-gpci.c

index ed989869d116b9c223efbb2be8592effa4ab59b1..6a023b42486c610a3c4af8293b97c5a02ed5c063 100644 (file)
@@ -72,3 +72,10 @@ Contact:     Linux on PowerPC Developer List <linuxppc-dev@lists.ozlabs.org>
 Description:
                A number indicating the latest version of the gpci interface
                that the kernel is aware of.
+
+What:          /sys/devices/hv_gpci/cpumask
+Date:          October 2020
+Contact:       Linux on PowerPC Developer List <linuxppc-dev@lists.ozlabs.org>
+Description:   read only
+               This sysfs file exposes the cpumask which is designated to make
+               HCALLs to retrieve hv-gpci pmu event counter data.
index 1bca0c1a6cfeab7622717e458a5b6a6781dcac98..d48413e28c39e9a1358483758ce7dee1cfa4d93c 100644 (file)
@@ -96,7 +96,15 @@ static ssize_t kernel_version_show(struct device *dev,
        return sprintf(page, "0x%x\n", COUNTER_INFO_VERSION_CURRENT);
 }
 
+static ssize_t cpumask_show(struct device *dev,
+                           struct device_attribute *attr, char *buf)
+{
+       return cpumap_print_to_pagebuf(true, buf, &hv_gpci_cpumask);
+}
+
 static DEVICE_ATTR_RO(kernel_version);
+static DEVICE_ATTR_RO(cpumask);
+
 HV_CAPS_ATTR(version, "0x%x\n");
 HV_CAPS_ATTR(ga, "%d\n");
 HV_CAPS_ATTR(expanded, "%d\n");
@@ -113,6 +121,15 @@ static struct attribute *interface_attrs[] = {
        NULL,
 };
 
+static struct attribute *cpumask_attrs[] = {
+       &dev_attr_cpumask.attr,
+       NULL,
+};
+
+static struct attribute_group cpumask_attr_group = {
+       .attrs = cpumask_attrs,
+};
+
 static struct attribute_group interface_group = {
        .name = "interface",
        .attrs = interface_attrs,
@@ -122,6 +139,7 @@ static const struct attribute_group *attr_groups[] = {
        &format_group,
        &event_group,
        &interface_group,
+       &cpumask_attr_group,
        NULL,
 };