Re: [PATCH v4 3/4] drivers/perf: add DesignWare PCIe PMU driver

From: Shuai Xue
Date: Tue May 16 2023 - 23:38:05 EST




On 2023/5/17 07:21, kernel test robot wrote:
> Hi Shuai,
>
> kernel test robot noticed the following build errors:
>
> [auto build test ERROR on pci/next]
> [also build test ERROR on pci/for-linus soc/for-next linus/master v6.4-rc2 next-20230516]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
>
> url: https://github.com/intel-lab-lkp/linux/commits/Shuai-Xue/PCI-move-Alibaba-Vendor-ID-linux-pci_ids-h/20230517-013326
> base: https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git next
> patch link: https://lore.kernel.org/r/20230516130110.59632-4-xueshuai%40linux.alibaba.com
> patch subject: [PATCH v4 3/4] drivers/perf: add DesignWare PCIe PMU driver
> config: sh-allmodconfig
> compiler: sh4-linux-gcc (GCC) 12.1.0
> reproduce (this is a W=1 build):
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # https://github.com/intel-lab-lkp/linux/commit/f576345a26fff4584ed49f0f42e03c65d8a7f2bf
> git remote add linux-review https://github.com/intel-lab-lkp/linux
> git fetch --no-tags linux-review Shuai-Xue/PCI-move-Alibaba-Vendor-ID-linux-pci_ids-h/20230517-013326
> git checkout f576345a26fff4584ed49f0f42e03c65d8a7f2bf
> # save the config file
> mkdir build_dir && cp config build_dir/.config
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=sh olddefconfig
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=sh SHELL=/bin/bash drivers/perf/
>
> If you fix the issue, kindly add following tag where applicable
> | Reported-by: kernel test robot <lkp@xxxxxxxxx>
> | Link: https://lore.kernel.org/oe-kbuild-all/202305170639.XU3djFZX-lkp@xxxxxxxxx/
>
> All errors (new ones prefixed by >>):
>
> drivers/perf/dwc_pcie_pmu.c: In function '__dwc_pcie_pmu_probe':
>>> drivers/perf/dwc_pcie_pmu.c:507:24: error: implicit declaration of function 'pci_find_vsec_capability'; did you mean 'pci_find_ext_capability'? [-Werror=implicit-function-declaration]
> 507 | vsec = pci_find_vsec_capability(pdev, PCI_VENDOR_ID_ALIBABA,
> | ^~~~~~~~~~~~~~~~~~~~~~~~
> | pci_find_ext_capability
> cc1: some warnings being treated as errors

This will be fixed by:

- remove COMPILE_TEST and add depend on PCI in kconfig

Thank you.
Shuai

>
> vim +507 drivers/perf/dwc_pcie_pmu.c
>
> 487
> 488 static int __dwc_pcie_pmu_probe(struct dwc_pcie_pmu_priv *priv)
> 489 {
> 490 struct pci_dev *pdev = NULL;
> 491 struct dwc_pcie_pmu *pcie_pmu;
> 492 char *name;
> 493 u32 bdf;
> 494 int ret;
> 495
> 496 INIT_LIST_HEAD(&priv->pmu_nodes);
> 497
> 498 /* Match the rootport with VSEC_RAS_DES_ID, and register a PMU for it */
> 499 for_each_pci_dev(pdev) {
> 500 u16 vsec;
> 501 u32 val;
> 502
> 503 if (!(pci_is_pcie(pdev) &&
> 504 pci_pcie_type(pdev) == PCI_EXP_TYPE_ROOT_PORT))
> 505 continue;
> 506
> > 507 vsec = pci_find_vsec_capability(pdev, PCI_VENDOR_ID_ALIBABA,
> 508 DWC_PCIE_VSEC_RAS_DES_ID);
> 509 if (!vsec)
> 510 continue;
> 511
> 512 pci_read_config_dword(pdev, vsec + PCI_VNDR_HEADER, &val);
> 513 if (PCI_VNDR_HEADER_REV(val) != 0x04 ||
> 514 PCI_VNDR_HEADER_LEN(val) != 0x100)
> 515 continue;
> 516 pci_dbg(pdev,
> 517 "Detected PCIe Vendor-Specific Extended Capability RAS DES\n");
> 518
> 519 bdf = PCI_DEVID(pdev->bus->number, pdev->devfn);
> 520 name = devm_kasprintf(priv->dev, GFP_KERNEL, "dwc_rootport_%x",
> 521 bdf);
> 522 if (!name)
> 523 return -ENOMEM;
> 524
> 525 /* All checks passed, go go go */
> 526 pcie_pmu = devm_kzalloc(&pdev->dev, sizeof(*pcie_pmu), GFP_KERNEL);
> 527 if (!pcie_pmu) {
> 528 pci_dev_put(pdev);
> 529 return -ENOMEM;
> 530 }
> 531
> 532 pcie_pmu->pdev = pdev;
> 533 pcie_pmu->ras_des = vsec;
> 534 pcie_pmu->nr_lanes = pcie_get_width_cap(pdev);
> 535 pcie_pmu->pmu = (struct pmu){
> 536 .module = THIS_MODULE,
> 537 .attr_groups = dwc_pcie_attr_groups,
> 538 .capabilities = PERF_PMU_CAP_NO_EXCLUDE,
> 539 .task_ctx_nr = perf_invalid_context,
> 540 .event_init = dwc_pcie_pmu_event_init,
> 541 .add = dwc_pcie_pmu_event_add,
> 542 .del = dwc_pcie_pmu_event_del,
> 543 .start = dwc_pcie_pmu_event_start,
> 544 .stop = dwc_pcie_pmu_event_stop,
> 545 .read = dwc_pcie_pmu_event_update,
> 546 };
> 547
> 548 /* Add this instance to the list used by the offline callback */
> 549 ret = cpuhp_state_add_instance(dwc_pcie_pmu_hp_state,
> 550 &pcie_pmu->cpuhp_node);
> 551 if (ret) {
> 552 pci_err(pcie_pmu->pdev,
> 553 "Error %d registering hotplug @%x\n", ret, bdf);
> 554 return ret;
> 555 }
> 556 ret = perf_pmu_register(&pcie_pmu->pmu, name, -1);
> 557 if (ret) {
> 558 pci_err(pcie_pmu->pdev,
> 559 "Error %d registering PMU @%x\n", ret, bdf);
> 560 cpuhp_state_remove_instance_nocalls(
> 561 dwc_pcie_pmu_hp_state, &pcie_pmu->cpuhp_node);
> 562 return ret;
> 563 }
> 564
> 565 /* Add registered PMUs and unregister them when this driver remove */
> 566 list_add(&pcie_pmu->pmu_node, &priv->pmu_nodes);
> 567 }
> 568
> 569 return 0;
> 570 }
> 571
>