RE: [PATCH v4 2/4] perf: add arm64 smmuv3 pmu driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----Original Message-----
> From: kbuild test robot [mailto:lkp@xxxxxxxxx]
> Sent: 17 October 2018 22:53
> To: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@xxxxxxxxxx>
> Cc: kbuild-all@xxxxxx; lorenzo.pieralisi@xxxxxxx; robin.murphy@xxxxxxx;
> jean-philippe.brucker@xxxxxxx; will.deacon@xxxxxxx;
> mark.rutland@xxxxxxx; Guohanjun (Hanjun Guo) <guohanjun@xxxxxxxxxx>;
> John Garry <john.garry@xxxxxxxxxx>; pabba@xxxxxxxxxxxxxx;
> vkilari@xxxxxxxxxxxxxx; rruigrok@xxxxxxxxxxxxxx; linux-
> acpi@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; linux-arm-
> kernel@xxxxxxxxxxxxxxxxxxx; Linuxarm <linuxarm@xxxxxxxxxx>;
> neil.m.leeder@xxxxxxxxx
> Subject: Re: [PATCH v4 2/4] perf: add arm64 smmuv3 pmu driver
> 
> Hi Neil,
> 
> Thank you for the patch! Yet something to improve:
> 
> [auto build test ERROR on linux-sof-driver/master]
> [also build test ERROR on v4.19-rc8 next-20181017]
> [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/Shameer-Kolothum/arm64-
> SMMUv3-PMU-driver-with-IORT-support/20181017-063949
> base:   https://github.com/thesofproject/linux master
> config: xtensa-allyesconfig (attached as .config)
> compiler: xtensa-linux-gcc (GCC) 8.1.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=8.1.0 make.cross ARCH=xtensa
> 
> All errors (new ones prefixed by >>):
> 
>    In file included from include/linux/kernel.h:11,
>                     from include/linux/list.h:9,
>                     from include/linux/resource_ext.h:17,
>                     from include/linux/acpi.h:26,
>                     from drivers//perf/arm_smmuv3_pmu.c:37:
>    drivers//perf/arm_smmuv3_pmu.c: In function
> 'smmu_pmu_counter_set_value':
>    include/linux/bitops.h:7:24: warning: left shift count >= width of type [-Wshift-
> count-overflow]
>     #define BIT(nr)   (1UL << (nr))
>                            ^~
>    drivers//perf/arm_smmuv3_pmu.c:145:31: note: in expansion of macro 'BIT'
>      if (smmu_pmu->counter_mask & BIT(32))
>                                   ^~~
>    drivers//perf/arm_smmuv3_pmu.c:146:3: error: implicit declaration of
> function 'writeq'; did you mean 'writel'? [-Werror=implicit-function-
> declaration]
>       writeq(value, smmu_pmu->reloc_base + SMMU_PMCG_EVCNTR(idx, 8));
>       ^~~~~~
>       writel
>    In file included from include/linux/kernel.h:11,
>                     from include/linux/list.h:9,
>                     from include/linux/resource_ext.h:17,
>                     from include/linux/acpi.h:26,
>                     from drivers//perf/arm_smmuv3_pmu.c:37:
>    drivers//perf/arm_smmuv3_pmu.c: In function
> 'smmu_pmu_counter_get_value':
>    include/linux/bitops.h:7:24: warning: left shift count >= width of type [-Wshift-
> count-overflow]
>     #define BIT(nr)   (1UL << (nr))
>                            ^~
>    drivers//perf/arm_smmuv3_pmu.c:155:31: note: in expansion of macro 'BIT'
>      if (smmu_pmu->counter_mask & BIT(32))
>                                   ^~~
>    drivers//perf/arm_smmuv3_pmu.c:156:11: error: implicit declaration of
> function 'readq'; did you mean 'readl'? [-Werror=implicit-function-declaration]
>       value = readq(smmu_pmu->reloc_base + SMMU_PMCG_EVCNTR(idx, 8));
>               ^~~~~
>               readl

Right. This again is linked to the COMPILE_TEST added in this version of the series.
It looks like these functions has dependency on architecture (CONFIG_64BIT). I will 
take care of this in next revision.

Thanks,
Shameer

>    drivers//perf/arm_smmuv3_pmu.c: In function 'smmu_pmu_reset':
>    drivers//perf/arm_smmuv3_pmu.c:607:2: error: implicit declaration of
> function 'writeq_relaxed'; did you mean 'writel_relaxed'? [-Werror=implicit-
> function-declaration]
>      writeq_relaxed(smmu_pmu->counter_present_mask,
>      ^~~~~~~~~~~~~~
>      writel_relaxed
>    drivers//perf/arm_smmuv3_pmu.c: In function 'smmu_pmu_probe':
> >> drivers//perf/arm_smmuv3_pmu.c:666:15: error: implicit declaration of
> function 'readq_relaxed'; did you mean 'readl_relaxed'? [-Werror=implicit-
> function-declaration]
>      ceid_64[0] = readq_relaxed(smmu_pmu->reg_base +
> SMMU_PMCG_CEID0);
>                   ^~~~~~~~~~~~~
>                   readl_relaxed
>    drivers//perf/arm_smmuv3_pmu.c:687:64: warning: format '%llx' expects
> argument of type 'long long unsigned int', but argument 4 has type
> 'resource_size_t' {aka 'unsigned int'} [-Wformat=]
>      name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "smmuv3_pmcg_%llx",
>                                                                 ~~~^
>                                                                 %x
>    cc1: some warnings being treated as errors
> 
> vim +666 drivers//perf/arm_smmuv3_pmu.c
> 
>    601
>    602	static void smmu_pmu_reset(struct smmu_pmu *smmu_pmu)
>    603	{
>    604		smmu_pmu_disable(&smmu_pmu->pmu);
>    605
>    606		/* Disable counter and interrupt */
>  > 607		writeq_relaxed(smmu_pmu->counter_present_mask,
>    608			       smmu_pmu->reg_base +
> SMMU_PMCG_CNTENCLR0);
>    609		writeq_relaxed(smmu_pmu->counter_present_mask,
>    610			       smmu_pmu->reg_base +
> SMMU_PMCG_INTENCLR0);
>    611		writeq_relaxed(smmu_pmu->counter_present_mask,
>    612			       smmu_pmu->reloc_base +
> SMMU_PMCG_OVSCLR0);
>    613	}
>    614
>    615	static int smmu_pmu_probe(struct platform_device *pdev)
>    616	{
>    617		struct smmu_pmu *smmu_pmu;
>    618		struct resource *res_0, *res_1;
>    619		u32 cfgr, reg_size;
>    620		u64 ceid_64[2];
>    621		int irq, err;
>    622		char *name;
>    623		struct device *dev = &pdev->dev;
>    624
>    625		smmu_pmu = devm_kzalloc(dev, sizeof(*smmu_pmu),
> GFP_KERNEL);
>    626		if (!smmu_pmu)
>    627			return -ENOMEM;
>    628
>    629		smmu_pmu->dev = dev;
>    630		platform_set_drvdata(pdev, smmu_pmu);
>    631
>    632		smmu_pmu->pmu = (struct pmu) {
>    633			.task_ctx_nr    = perf_invalid_context,
>    634			.pmu_enable	= smmu_pmu_enable,
>    635			.pmu_disable	= smmu_pmu_disable,
>    636			.event_init	= smmu_pmu_event_init,
>    637			.add		= smmu_pmu_event_add,
>    638			.del		= smmu_pmu_event_del,
>    639			.start		= smmu_pmu_event_start,
>    640			.stop		= smmu_pmu_event_stop,
>    641			.read		= smmu_pmu_event_read,
>    642			.attr_groups	= smmu_pmu_attr_grps,
>    643		};
>    644
>    645		res_0 = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>    646		smmu_pmu->reg_base = devm_ioremap_resource(dev, res_0);
>    647		if (IS_ERR(smmu_pmu->reg_base))
>    648			return PTR_ERR(smmu_pmu->reg_base);
>    649
>    650		cfgr = readl_relaxed(smmu_pmu->reg_base +
> SMMU_PMCG_CFGR);
>    651
>    652		/* Determine if page 1 is present */
>    653		if (cfgr & SMMU_PMCG_CFGR_RELOC_CTRS) {
>    654			res_1 = platform_get_resource(pdev,
> IORESOURCE_MEM, 1);
>    655			smmu_pmu->reloc_base =
> devm_ioremap_resource(dev, res_1);
>    656			if (IS_ERR(smmu_pmu->reloc_base))
>    657				return PTR_ERR(smmu_pmu->reloc_base);
>    658		} else {
>    659			smmu_pmu->reloc_base = smmu_pmu->reg_base;
>    660		}
>    661
>    662		irq = platform_get_irq(pdev, 0);
>    663		if (irq > 0)
>    664			smmu_pmu->irq = irq;
>    665
>  > 666		ceid_64[0] = readq_relaxed(smmu_pmu->reg_base +
> SMMU_PMCG_CEID0);
>    667		ceid_64[1] = readq_relaxed(smmu_pmu->reg_base +
> SMMU_PMCG_CEID1);
>    668		bitmap_from_arr32(smmu_pmu->supported_events, (u32
> *)ceid_64,
>    669				  SMMU_ARCH_MAX_EVENTS);
>    670
>    671		smmu_pmu->num_counters =
> FIELD_GET(SMMU_PMCG_CFGR_NCTR_MASK, cfgr) + 1;
>    672		smmu_pmu->counter_present_mask = GENMASK(smmu_pmu-
> >num_counters - 1, 0);
>    673
>    674		smmu_pmu->sid_filter_global = !!(cfgr &
> SMMU_PMCG_CFGR_SID_FILTER_TYPE);
>    675
>    676		reg_size = FIELD_GET(SMMU_PMCG_CFGR_SIZE_MASK, cfgr);
>    677		smmu_pmu->counter_mask = GENMASK_ULL(reg_size, 0);
>    678
>    679		smmu_pmu_reset(smmu_pmu);
>    680
>    681		err = smmu_pmu_setup_irq(smmu_pmu);
>    682		if (err) {
>    683			dev_err(dev, "Setup irq failed, PMU @%pa\n", &res_0-
> >start);
>    684			return err;
>    685		}
>    686
>    687		name = devm_kasprintf(&pdev->dev, GFP_KERNEL,
> "smmuv3_pmcg_%llx",
>    688				      (res_0->start) >> SMMU_PA_SHIFT);
>    689		if (!name) {
>    690			dev_err(dev, "Create name failed, PMU @%pa\n",
> &res_0->start);
>    691			return -EINVAL;
>    692		}
>    693
>    694		/* Pick one CPU to be the preferred one to use */
>    695		smmu_pmu->on_cpu = get_cpu();
>    696		WARN_ON(irq_set_affinity(smmu_pmu->irq,
> cpumask_of(smmu_pmu->on_cpu)));
>    697
>    698		err = cpuhp_state_add_instance_nocalls(cpuhp_state_num,
>    699						       &smmu_pmu->node);
>    700		if (err) {
>    701			dev_err(dev, "Error %d registering hotplug, PMU
> @%pa\n",
>    702				err, &res_0->start);
>    703			goto out_cpuhp_err;
>    704		}
>    705
>    706		err = perf_pmu_register(&smmu_pmu->pmu, name, -1);
>    707		if (err) {
>    708			dev_err(dev, "Error %d registering PMU @%pa\n",
>    709				err, &res_0->start);
>    710			goto out_unregister;
>    711		}
>    712
>    713		put_cpu();
>    714		dev_info(dev, "Registered PMU @ %pa using %d counters with
> %s filter settings\n",
>    715			 &res_0->start, smmu_pmu->num_counters,
>    716			 smmu_pmu->sid_filter_global ? "Global(Counter0)" :
>    717			 "Individual");
>    718
>    719		return 0;
>    720
>    721	out_unregister:
>    722		cpuhp_state_remove_instance_nocalls(cpuhp_state_num,
> &smmu_pmu->node);
>    723	out_cpuhp_err:
>    724		put_cpu();
>    725		return err;
>    726	}
>    727
> 
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation



[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux