Hi Yicong,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v5.12-rc6 next-20210406]
[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]

url:    
https://github.com/0day-ci/linux/commits/Yicong-Yang/Add-support-for-HiSilicon-PCIe-Tune-and-Trace-device/20210406-204959
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
0a50438c84363bd37fe18fe432888ae9a074dcab
config: nios2-allyesconfig (attached as .config)
compiler: nios2-linux-gcc (GCC) 9.3.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/0day-ci/linux/commit/8d755179573b25c8c165509321a32c3c04b10ab5
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review 
Yicong-Yang/Add-support-for-HiSilicon-PCIe-Tune-and-Trace-device/20210406-204959
        git checkout 8d755179573b25c8c165509321a32c3c04b10ab5
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross 
ARCH=nios2 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>):

   drivers/hwtracing/hisilicon/hisi_ptt.c: In function 'hisi_ptt_irq_register':
>> drivers/hwtracing/hisilicon/hisi_ptt.c:1067:3: error: implicit declaration 
>> of function 'pci_free_irq_vectors'; did you mean 'pci_alloc_irq_vectors'? 
>> [-Werror=implicit-function-declaration]
    1067 |   pci_free_irq_vectors(pdev);
         |   ^~~~~~~~~~~~~~~~~~~~
         |   pci_alloc_irq_vectors
   drivers/hwtracing/hisilicon/hisi_ptt.c: In function 'hisi_ptt_init_ctrls':
>> drivers/hwtracing/hisilicon/hisi_ptt.c:1231:8: error: implicit declaration 
>> of function 'pci_find_bus'; did you mean 'pci_find_next_bus'? 
>> [-Werror=implicit-function-declaration]
    1231 |  bus = pci_find_bus(pci_domain_nr(hisi_ptt->pdev->bus),
         |        ^~~~~~~~~~~~
         |        pci_find_next_bus
   drivers/hwtracing/hisilicon/hisi_ptt.c:1231:6: warning: assignment to 
'struct pci_bus *' from 'int' makes pointer from integer without a cast 
[-Wint-conversion]
    1231 |  bus = pci_find_bus(pci_domain_nr(hisi_ptt->pdev->bus),
         |      ^
>> drivers/hwtracing/hisilicon/hisi_ptt.c:1234:3: error: implicit declaration 
>> of function 'pci_walk_bus' [-Werror=implicit-function-declaration]
    1234 |   pci_walk_bus(bus, hisi_ptt_init_filters, hisi_ptt);
         |   ^~~~~~~~~~~~
   drivers/hwtracing/hisilicon/hisi_ptt.c: In function 'hisi_ptt_probe':
>> drivers/hwtracing/hisilicon/hisi_ptt.c:1359:31: error: 'pci_bus_type' 
>> undeclared (first use in this function); did you mean 'pci_pcie_type'?
    1359 |  ret = bus_register_notifier(&pci_bus_type, &hisi_ptt->hisi_ptt_nb);
         |                               ^~~~~~~~~~~~
         |                               pci_pcie_type
   drivers/hwtracing/hisilicon/hisi_ptt.c:1359:31: note: each undeclared 
identifier is reported only once for each function it appears in
   drivers/hwtracing/hisilicon/hisi_ptt.c: At top level:
   drivers/hwtracing/hisilicon/hisi_ptt.c:1366:6: warning: no previous 
prototype for 'hisi_ptt_remove' [-Wmissing-prototypes]
    1366 | void hisi_ptt_remove(struct pci_dev *pdev)
         |      ^~~~~~~~~~~~~~~
   drivers/hwtracing/hisilicon/hisi_ptt.c: In function 'hisi_ptt_remove':
   drivers/hwtracing/hisilicon/hisi_ptt.c:1370:27: error: 'pci_bus_type' 
undeclared (first use in this function); did you mean 'pci_pcie_type'?
    1370 |  bus_unregister_notifier(&pci_bus_type, &hisi_ptt->hisi_ptt_nb);
         |                           ^~~~~~~~~~~~
         |                           pci_pcie_type
   cc1: some warnings being treated as errors


vim +1067 drivers/hwtracing/hisilicon/hisi_ptt.c

  1048  
  1049  static int hisi_ptt_irq_register(struct hisi_ptt *hisi_ptt)
  1050  {
  1051          struct pci_dev *pdev = hisi_ptt->pdev;
  1052          int ret;
  1053  
  1054          ret = pci_alloc_irq_vectors(pdev, HISI_PTT_IRQ_NUMS, 
HISI_PTT_IRQ_NUMS,
  1055                                      PCI_IRQ_MSI);
  1056          if (ret < 0) {
  1057                  pci_err(pdev, "failed to allocate irq vector, ret = 
%d\n", ret);
  1058                  return ret;
  1059          }
  1060  
  1061          ret = request_threaded_irq(pci_irq_vector(pdev, 
HISI_PTT_DMA_IRQ),
  1062                                     hisi_ptt_irq, hisi_ptt_isr, 
IRQF_SHARED,
  1063                                     "hisi-ptt", hisi_ptt);
  1064          if (ret) {
  1065                  pci_err(pdev, "failed to request irq %d, ret = %d\n",
  1066                          pci_irq_vector(pdev, HISI_PTT_DMA_IRQ), ret);
> 1067                  pci_free_irq_vectors(pdev);
  1068                  return ret;
  1069          }
  1070  
  1071          return 0;
  1072  }
  1073  
  1074  static void hisi_ptt_irq_unregister(struct hisi_ptt *hisi_ptt)
  1075  {
  1076          struct pci_dev *pdev = hisi_ptt->pdev;
  1077  
  1078          free_irq(pci_irq_vector(pdev, HISI_PTT_DMA_IRQ), hisi_ptt);
  1079          pci_free_irq_vectors(pdev);
  1080  }
  1081  
  1082  static void hisi_ptt_update_filters(struct work_struct *work)
  1083  {
  1084          struct delayed_work *delayed_work = to_delayed_work(work);
  1085          struct hisi_ptt_filter_update_info info;
  1086          struct hisi_ptt_filter_desc *filter;
  1087          struct list_head *target_list;
  1088          struct hisi_ptt *hisi_ptt;
  1089  
  1090          hisi_ptt = container_of(delayed_work, struct hisi_ptt, work);
  1091  
  1092          if (!mutex_trylock(&hisi_ptt->mutex)) {
  1093                  schedule_delayed_work(&hisi_ptt->work, 
HISI_PTT_WORK_DELAY_MS);
  1094                  return;
  1095          }
  1096  
  1097          while (kfifo_get(&hisi_ptt->filter_update_kfifo, &info)) {
  1098                  target_list = info.is_port ? &hisi_ptt->port_filters :
  1099                                &hisi_ptt->req_filters;
  1100  
  1101                  if (info.is_add) {
  1102                          filter = kzalloc(sizeof(*filter), GFP_KERNEL);
  1103                          if (!filter) {
  1104                                  pci_err(hisi_ptt->pdev,
  1105                                          "failed to update the 
filters\n");
  1106                                  continue;
  1107                          }
  1108  
  1109                          filter->pdev = info.pdev;
  1110                          filter->val = info.val;
  1111  
  1112                          list_add_tail(&filter->list, target_list);
  1113                  } else {
  1114                          list_for_each_entry(filter, target_list, list)
  1115                                  if (filter->val == info.val) {
  1116                                          list_del(&filter->list);
  1117                                          kfree(filter);
  1118                                          break;
  1119                                  }
  1120                  }
  1121          }
  1122  
  1123          mutex_unlock(&hisi_ptt->mutex);
  1124  }
  1125  
  1126  static void hisi_ptt_update_fifo_in(struct hisi_ptt *hisi_ptt,
  1127                                      struct hisi_ptt_filter_update_info 
*info)
  1128  {
  1129          struct pci_dev *root_port = pcie_find_root_port(info->pdev);
  1130  
  1131          if (!root_port)
  1132                  return;
  1133  
  1134          info->port_devid = PCI_DEVID(root_port->bus->number, 
root_port->devfn);
  1135          if (info->port_devid < hisi_ptt->lower ||
  1136              info->port_devid > hisi_ptt->upper)
  1137                          return;
  1138  
  1139          info->is_port = pci_pcie_type(info->pdev) == 
PCI_EXP_TYPE_ROOT_PORT;
  1140          info->val = hisi_ptt_get_filter_val(info->pdev);
  1141  
  1142          if (kfifo_in_spinlocked(&hisi_ptt->filter_update_kfifo, info, 1,
  1143                                  &hisi_ptt->filter_update_lock))
  1144                  schedule_delayed_work(&hisi_ptt->work, 0);
  1145          else
  1146                  pci_warn(hisi_ptt->pdev,
  1147                           "filter update fifo overflow for target %s\n",
  1148                           pci_name(info->pdev));
  1149  }
  1150  
  1151  /*
  1152   * A PCI bus notifier is used here for dynamically updating the filter
  1153   * list.
  1154   */
  1155  static int hisi_ptt_notifier_call(struct notifier_block *nb,
  1156                                    unsigned long action,
  1157                                    void *data)
  1158  {
  1159          struct hisi_ptt *hisi_ptt = container_of(nb, struct hisi_ptt, 
hisi_ptt_nb);
  1160          struct hisi_ptt_filter_update_info info;
  1161          struct device *dev = data;
  1162          struct pci_dev *pdev = to_pci_dev(dev);
  1163  
  1164          info.pdev = pdev;
  1165  
  1166          switch (action) {
  1167          case BUS_NOTIFY_ADD_DEVICE:
  1168                  info.is_add = true;
  1169                  break;
  1170          case BUS_NOTIFY_DEL_DEVICE:
  1171                  info.is_add = false;
  1172                  break;
  1173          default:
  1174                  return 0;
  1175          }
  1176  
  1177          hisi_ptt_update_fifo_in(hisi_ptt, &info);
  1178  
  1179          return 0;
  1180  }
  1181  
  1182  static int hisi_ptt_init_filters(struct pci_dev *pdev, void *data)
  1183  {
  1184          struct hisi_ptt_filter_update_info info = {
  1185                  .pdev = pdev,
  1186                  .is_add = true,
  1187          };
  1188          struct hisi_ptt *hisi_ptt = data;
  1189  
  1190          hisi_ptt_update_fifo_in(hisi_ptt, &info);
  1191  
  1192          return 0;
  1193  }
  1194  
  1195  static void hisi_ptt_release_filters(struct hisi_ptt *hisi_ptt)
  1196  {
  1197          struct hisi_ptt_filter_desc *filter, *tfilter;
  1198  
  1199          list_for_each_entry_safe(filter, tfilter, 
&hisi_ptt->req_filters, list) {
  1200                  list_del(&filter->list);
  1201                  kfree(filter);
  1202          }
  1203  
  1204          list_for_each_entry_safe(filter, tfilter, 
&hisi_ptt->port_filters, list) {
  1205                  list_del(&filter->list);
  1206                  kfree(filter);
  1207          }
  1208  }
  1209  
  1210  static void hisi_ptt_init_ctrls(struct hisi_ptt *hisi_ptt)
  1211  {
  1212          struct pci_bus *bus;
  1213          u32 reg;
  1214  
  1215          INIT_LIST_HEAD(&hisi_ptt->port_filters);
  1216          INIT_LIST_HEAD(&hisi_ptt->req_filters);
  1217  
  1218          /*
  1219           * The device range register provides the information about the
  1220           * root ports which the RCiEP can control and trace. The RCiEP
  1221           * and the root ports it support are on the same PCIe core, with
  1222           * same domain number but maybe different bus number. The device
  1223           * range register will tell us which root ports we can support,
  1224           * Bit[31:16] indicates the upper BDF numbers of the root port,
  1225           * while Bit[15:0] indicates the lower.
  1226           */
  1227          reg = readl(hisi_ptt->iobase + HISI_PTT_DEVICE_RANGE);
  1228          hisi_ptt->upper = reg >> 16;
  1229          hisi_ptt->lower = reg & 0xffff;
  1230  
> 1231          bus = pci_find_bus(pci_domain_nr(hisi_ptt->pdev->bus),
  1232                             PCI_BUS_NUM(hisi_ptt->upper));
  1233          if (bus)
> 1234                  pci_walk_bus(bus, hisi_ptt_init_filters, hisi_ptt);
  1235  
  1236          /* Initialize trace controls */
  1237          INIT_LIST_HEAD(&hisi_ptt->trace_ctrl.trace_buf);
  1238          hisi_ptt->trace_ctrl.buflet_nums = 
HISI_PTT_DEFAULT_TRACE_BUF_CNT;
  1239          hisi_ptt->trace_ctrl.buflet_size = 
HISI_PTT_TRACE_DEFAULT_BUFLET_SIZE;
  1240          hisi_ptt->trace_ctrl.rxtx = 
HISI_PTT_TRACE_DEFAULT_RXTX.event_code;
  1241          hisi_ptt->trace_ctrl.tr_event = 
HISI_PTT_TRACE_DEFAULT_EVENT.event_code;
  1242  }
  1243  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

Reply via email to