Hello Murilo,

On Sun, Jul 08, 2018 at 01:03:34PM -0300, Murilo Opsfelder Araujo wrote:
> On Fri, Jul 06, 2018 at 02:35:48PM +0530, Gautham R. Shenoy wrote:
> > From: "Gautham R. Shenoy" <e...@linux.vnet.ibm.com>
> > 
> > On IBM POWER9, the device tree exposes a property array identifed by
> > "ibm,thread-groups" which will indicate which groups of threads share a
> > particular set of resources.
> > 
> > As of today we only have one form of grouping identifying the group of
> > threads in the core that share the L1 cache, translation cache and
> > instruction data flow.
> > 
> > This patch defines the helper function to parse the contents of
> > "ibm,thread-groups" and a new structure to contain the parsed output.
> > 
> > The patch also creates the sysfs file named "small_core_siblings" that
> > returns the physical ids of the threads in the core that share the L1
> > cache, translation cache and instruction data flow.
> > 
> > Signed-off-by: Gautham R. Shenoy <e...@linux.vnet.ibm.com>
> > ---
> >  Documentation/ABI/testing/sysfs-devices-system-cpu |   8 ++
> >  arch/powerpc/include/asm/cputhreads.h              |  22 +++
> >  arch/powerpc/kernel/setup-common.c                 | 154 
> > +++++++++++++++++++++
> >  arch/powerpc/kernel/sysfs.c                        |  35 +++++
> >  4 files changed, 219 insertions(+)
> > 
> > diff --git a/Documentation/ABI/testing/sysfs-devices-system-cpu 
> > b/Documentation/ABI/testing/sysfs-devices-system-cpu
> > index 9c5e7732..62f24de 100644
> > --- a/Documentation/ABI/testing/sysfs-devices-system-cpu
> > +++ b/Documentation/ABI/testing/sysfs-devices-system-cpu
> > @@ -487,3 +487,11 @@ Description:   Information about CPU vulnerabilities
> >             "Not affected"    CPU is not affected by the vulnerability
> >             "Vulnerable"      CPU is affected and no mitigation in effect
> >             "Mitigation: $M"  CPU is affected and mitigation $M is in effect
> > +
> > +What:              /sys/devices/system/cpu/cpu[0-9]+/small_core_siblings
> > +Date:              05-Jul-2018
> > +KernelVersion:     v4.18.0
> > +Contact:   Gautham R. Shenoy <e...@linux.vnet.ibm.com>
> > +Description:       List of Physical ids of CPUs which share the the L1 
> > cache,
> > +           translation cache and instruction data-flow with this CPU.
> 
> What about this?
> 
>     Description: List of physical CPU IDs that share a common L1 cache,
>                  translation cache and instruction data flow with this CPU.
> 
> Or perhaps just remove the extra "the".

Oops! Will remove the extra "the". Thanks for spotting it.


> 
> > +Values:            Comma separated list of decimal integers.
> > diff --git a/arch/powerpc/include/asm/cputhreads.h 
> > b/arch/powerpc/include/asm/cputhreads.h
> > index d71a909..33226d7 100644
> > --- a/arch/powerpc/include/asm/cputhreads.h

[..snip..]

> > diff --git a/arch/powerpc/kernel/sysfs.c b/arch/powerpc/kernel/sysfs.c
> > index 755dc98..f5717de 100644
> > --- a/arch/powerpc/kernel/sysfs.c
> > +++ b/arch/powerpc/kernel/sysfs.c
> > @@ -18,6 +18,7 @@
> >  #include <asm/smp.h>
> >  #include <asm/pmc.h>
> >  #include <asm/firmware.h>
> > +#include <asm/cputhreads.h>
> >  
> >  #include "cacheinfo.h"
> >  #include "setup.h"
> > @@ -1025,6 +1026,33 @@ static ssize_t show_physical_id(struct device *dev,
> >  }
> >  static DEVICE_ATTR(physical_id, 0444, show_physical_id, NULL);
> >  
> > +static ssize_t show_small_core_siblings(struct device *dev,
> > +                                   struct device_attribute *attr,
> > +                                   char *buf)
> > +{
> 
> Interesting enough, checkpatch.pl warned about this function name:
> 
>     WARNING: Consider renaming function(s) 'show_small_core_siblings' to 
> 'small_core_siblings_show'
>     #354: FILE: arch/powerpc/kernel/sysfs.c:1053:
>     +}

Yes I kept it despite the warning, as doing otherwise would introduce
inconsistency with the way the remaining functions are named in the
file.

If Michael Ellerman is ok, I can send a file converting all these
sysfs calls to use DEVICE_ATTR_RO/RW, which will require renaming all
the other functions to XXX_show().


> 
> > +   struct cpu *cpu = container_of(dev, struct cpu, dev);
> > +   struct device_node *dn = of_get_cpu_node(cpu->dev.id, NULL);
> > +   struct thread_groups tg;
> > +   int i, j;
> > +   ssize_t ret = 0;
> > +
> > +   if (parse_thread_groups(dn, &tg))
> > +           return -ENODATA;
> > +
> > +   i = get_cpu_thread_group_start(cpu->dev.id, &tg);
> > +
> > +   if (i == -1)
> > +           return -ENODATA;
> > +
> > +   for (j = 0; j < tg.threads_per_group - 1; j++)
> > +           ret += sprintf(buf + ret, "%d,", tg.thread_list[i + j]);
> > +
> > +   ret += sprintf(buf + ret, "%d\n", tg.thread_list[i + j]);
> > +
> > +   return ret;
> > +}
> > +static DEVICE_ATTR(small_core_siblings, 0444, show_small_core_siblings, 
> > NULL);
> > +
> >  static int __init topology_init(void)
> >  {
> >     int cpu, r;
> > @@ -1048,6 +1076,13 @@ static int __init topology_init(void)
> >                     register_cpu(c, cpu);
> >  
> >                     device_create_file(&c->dev, &dev_attr_physical_id);
> > +
> > +                   if (has_big_cores) {
> > +                           const struct device_attribute *attr =
> > +                                  &dev_attr_small_core_siblings;
> > +
> > +                          device_create_file(&c->dev, attr);
> > +                   }
> >             }
> >     }
> >     r = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "powerpc/topology:online",
> > -- 
> > 1.9.4
> > 
> 
> -- 
> Murilo

Reply via email to