Message ID | 1537464159-25919-4-git-send-email-ego@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | powerpc: Detection and scheduler optimization for POWER9 bigcore | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/apply_patch | success | next/apply_patch Successfully applied |
snowpatch_ozlabs/checkpatch | warning | Test checkpatch on branch next |
snowpatch_ozlabs/build-ppc64le | warning | Test build-ppc64le on branch next |
snowpatch_ozlabs/build-ppc64be | warning | Test build-ppc64be on branch next |
snowpatch_ozlabs/build-ppc64e | warning | Test build-ppc64e on branch next |
snowpatch_ozlabs/build-ppc32 | fail | Test build-ppc32 on branch next |
Hi Gautham, Thank you for the patch! Yet something to improve: [auto build test ERROR on powerpc/next] [also build test ERROR on v4.19-rc4 next-20180919] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Gautham-R-Shenoy/powerpc-Detection-and-scheduler-optimization-for-POWER9-bigcore/20180921-085812 base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next config: powerpc-mpc837x_mds_defconfig (attached as .config) compiler: powerpc-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree GCC_VERSION=7.2.0 make.cross ARCH=powerpc All errors (new ones prefixed by >>): arch/powerpc/kernel/sysfs.c: In function 'smallcore_thread_siblings_show': >> arch/powerpc/kernel/sysfs.c:724:45: error: implicit declaration of function 'cpu_smallcore_mask'; did you mean 'cpu_all_mask'? [-Werror=implicit-function-declaration] return cpumap_print_to_pagebuf(false, buf, cpu_smallcore_mask(cpu)); ^~~~~~~~~~~~~~~~~~ cpu_all_mask >> arch/powerpc/kernel/sysfs.c:724:45: error: passing argument 3 of 'cpumap_print_to_pagebuf' makes pointer from integer without a cast [-Werror=int-conversion] In file included from include/linux/rcupdate.h:44:0, from include/linux/radix-tree.h:28, from include/linux/idr.h:15, from include/linux/kernfs.h:14, from include/linux/sysfs.h:16, from include/linux/kobject.h:20, from include/linux/device.h:16, from arch/powerpc/kernel/sysfs.c:1: include/linux/cpumask.h:892:1: note: expected 'const struct cpumask *' but argument is of type 'int' cpumap_print_to_pagebuf(bool list, char *buf, const struct cpumask *mask) ^~~~~~~~~~~~~~~~~~~~~~~ arch/powerpc/kernel/sysfs.c: In function 'smallcore_thread_siblings_list_show': arch/powerpc/kernel/sysfs.c:734:44: error: passing argument 3 of 'cpumap_print_to_pagebuf' makes pointer from integer without a cast [-Werror=int-conversion] return cpumap_print_to_pagebuf(true, buf, cpu_smallcore_mask(cpu)); ^~~~~~~~~~~~~~~~~~ In file included from include/linux/rcupdate.h:44:0, from include/linux/radix-tree.h:28, from include/linux/idr.h:15, from include/linux/kernfs.h:14, from include/linux/sysfs.h:16, from include/linux/kobject.h:20, from include/linux/device.h:16, from arch/powerpc/kernel/sysfs.c:1: include/linux/cpumask.h:892:1: note: expected 'const struct cpumask *' but argument is of type 'int' cpumap_print_to_pagebuf(bool list, char *buf, const struct cpumask *mask) ^~~~~~~~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors vim +724 arch/powerpc/kernel/sysfs.c 717 718 static ssize_t smallcore_thread_siblings_show(struct device *dev, 719 struct device_attribute *attr, 720 char *buf) 721 { 722 int cpu = dev->id; 723 > 724 return cpumap_print_to_pagebuf(false, buf, cpu_smallcore_mask(cpu)); 725 } 726 static DEVICE_ATTR_RO(smallcore_thread_siblings); 727 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
On Fri, Sep 21, 2018 at 02:20:15PM +0800, kbuild test robot wrote: > Hi Gautham, > > Thank you for the patch! Yet something to improve: > > [auto build test ERROR on powerpc/next] > [also build test ERROR on v4.19-rc4 next-20180919] > [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] > > url: https://github.com/0day-ci/linux/commits/Gautham-R-Shenoy/powerpc-Detection-and-scheduler-optimization-for-POWER9-bigcore/20180921-085812 > base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next > config: powerpc-mpc837x_mds_defconfig (attached as .config) > compiler: powerpc-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0 > reproduce: > wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross > chmod +x ~/bin/make.cross > # save the attached .config to linux build tree > GCC_VERSION=7.2.0 make.cross ARCH=powerpc > > All errors (new ones prefixed by >>): > > arch/powerpc/kernel/sysfs.c: In function 'smallcore_thread_siblings_show': > >> arch/powerpc/kernel/sysfs.c:724:45: error: implicit declaration of function 'cpu_smallcore_mask'; did you mean 'cpu_all_mask'? [-Werror=implicit-function-declaration] > return cpumap_print_to_pagebuf(false, buf, cpu_smallcore_mask(cpu)); > ^~~~~~~~~~~~~~~~~~ No, the smallcore_thread_siblings_show, and the other functions should only be compiled for CONFIG_SMP. Will add this. Thanks bot! > cpu_all_mask > >> arch/powerpc/kernel/sysfs.c:724:45: error: passing argument 3 of 'cpumap_print_to_pagebuf' makes pointer from integer without a cast [-Werror=int-conversion] > In file included from include/linux/rcupdate.h:44:0, > from include/linux/radix-tree.h:28, > from include/linux/idr.h:15, > from include/linux/kernfs.h:14, > from include/linux/sysfs.h:16, > from include/linux/kobject.h:20, > from include/linux/device.h:16, > from arch/powerpc/kernel/sysfs.c:1: > include/linux/cpumask.h:892:1: note: expected 'const struct cpumask *' but argument is of type 'int' > cpumap_print_to_pagebuf(bool list, char *buf, const struct cpumask *mask) > ^~~~~~~~~~~~~~~~~~~~~~~ > arch/powerpc/kernel/sysfs.c: In function 'smallcore_thread_siblings_list_show': > arch/powerpc/kernel/sysfs.c:734:44: error: passing argument 3 of 'cpumap_print_to_pagebuf' makes pointer from integer without a cast [-Werror=int-conversion] > return cpumap_print_to_pagebuf(true, buf, cpu_smallcore_mask(cpu)); > ^~~~~~~~~~~~~~~~~~ > In file included from include/linux/rcupdate.h:44:0, > from include/linux/radix-tree.h:28, > from include/linux/idr.h:15, > from include/linux/kernfs.h:14, > from include/linux/sysfs.h:16, > from include/linux/kobject.h:20, > from include/linux/device.h:16, > from arch/powerpc/kernel/sysfs.c:1: > include/linux/cpumask.h:892:1: note: expected 'const struct cpumask *' but argument is of type 'int' > cpumap_print_to_pagebuf(bool list, char *buf, const struct cpumask *mask) > ^~~~~~~~~~~~~~~~~~~~~~~ > cc1: all warnings being treated as errors > > vim +724 arch/powerpc/kernel/sysfs.c > > 717 > 718 static ssize_t smallcore_thread_siblings_show(struct device *dev, > 719 struct device_attribute *attr, > 720 char *buf) > 721 { > 722 int cpu = dev->id; > 723 > > 724 return cpumap_print_to_pagebuf(false, buf, cpu_smallcore_mask(cpu)); > 725 } > 726 static DEVICE_ATTR_RO(smallcore_thread_siblings); > 727 > > --- > 0-DAY kernel test infrastructure Open Source Technology Center > https://lists.01.org/pipermail/kbuild-all Intel Corporation
diff --git a/Documentation/ABI/testing/sysfs-devices-system-cpu b/Documentation/ABI/testing/sysfs-devices-system-cpu index 7331822..2a80dc2 100644 --- a/Documentation/ABI/testing/sysfs-devices-system-cpu +++ b/Documentation/ABI/testing/sysfs-devices-system-cpu @@ -511,3 +511,17 @@ Description: Control Symetric Multi Threading (SMT) If control status is "forceoff" or "notsupported" writes are rejected. + +What: /sys/devices/system/cpu/cpu#/topology/smallcore_thread_siblings + /sys/devices/system/cpu/cpu#/topology/smallcore_thread_siblings_list +Date: Sept 2018 +Contact: Linux for PowerPC mailing list <linuxppc-dev@ozlabs.org> +Description: CPU topology files that describe the thread siblings of a + logical CPU that share the L1-cache with it on POWER9 + big-core configurations. + + smallcore_thread_siblings: internal kernel map of + cpu#'s hardware threads that share L1-cache with cpu#. + + smallcore_thread_siblings_list: human-readable list of + cpu#'s hardware threads that share L1-cache with cpu#. diff --git a/arch/powerpc/kernel/sysfs.c b/arch/powerpc/kernel/sysfs.c index 755dc98..f9c7d96 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" @@ -714,6 +715,62 @@ static void sysfs_create_dscr_default(void) #endif /* HAS_PPC_PMC_PA6T */ #endif /* HAS_PPC_PMC_CLASSIC */ +static ssize_t smallcore_thread_siblings_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + int cpu = dev->id; + + return cpumap_print_to_pagebuf(false, buf, cpu_smallcore_mask(cpu)); +} +static DEVICE_ATTR_RO(smallcore_thread_siblings); + +static ssize_t smallcore_thread_siblings_list_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + int cpu = dev->id; + + return cpumap_print_to_pagebuf(true, buf, cpu_smallcore_mask(cpu)); +} +static DEVICE_ATTR_RO(smallcore_thread_siblings_list); + +static struct attribute *smallcore_attrs[] = { + &dev_attr_smallcore_thread_siblings.attr, + &dev_attr_smallcore_thread_siblings_list.attr, + NULL +}; + +static const struct attribute_group smallcore_attr_group = { + .name = "topology", + .attrs = smallcore_attrs +}; + +static int smallcore_register_cpu_online(unsigned int cpu) +{ + int err; + struct device *cpu_dev = get_cpu_device(cpu); + + if (!has_big_cores) + return 0; + + err = sysfs_merge_group(&cpu_dev->kobj, &smallcore_attr_group); + + return err; +} + +static int smallcore_unregister_cpu_online(unsigned int cpu) +{ + struct device *cpu_dev = get_cpu_device(cpu); + + if (!has_big_cores) + return 0; + + sysfs_unmerge_group(&cpu_dev->kobj, &smallcore_attr_group); + + return 0; +} + static int register_cpu_online(unsigned int cpu) { struct cpu *c = &per_cpu(cpu_devices, cpu); @@ -1060,3 +1117,34 @@ static int __init topology_init(void) return 0; } subsys_initcall(topology_init); + +/* + * NOTE: The smallcore_register_cpu_online + * (resp. smallcore_unregister_cpu_online) callback will merge + * (resp. unmerge) a couple of additional attributes to the + * "topology" attribute group of a CPU device when the CPU comes + * online (resp. goes offline). + * + * Hence, the registration of these callbacks must happen after + * topology_sysfs_init() is called so that the topology + * attribute group is created before these additional attributes + * can be merged/unmerged. We cannot register these callbacks in + * topology_init() since this function is called before + * topology_sysfs_init(). Hence we define the following + * late_initcall for this purpose. + */ +static int __init smallcore_topology_init(void) +{ + int r; + + if (!has_big_cores) + return 0; + + r = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, + "powerpc/topology/smallcore:online", + smallcore_register_cpu_online, + smallcore_unregister_cpu_online); + WARN_ON(r < 0); + return 0; +} +late_initcall(smallcore_topology_init);