tree: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next-test head: 2e60265c1feb6848c77dbea22d38bbe262ec49db commit: b90e1cfa05bddc2fa0e314a790df603479259637 [179/194] powerpc/pseries/eeh: Rework device EEH PE determination config: powerpc64-randconfig-r035-20200923 (attached as .config) compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project d6ac649ccda289ecc2d2c0cb51892d57e8ec328c) 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 # install powerpc64 cross compiling tool for clang build # apt-get install binutils-powerpc64-linux-gnu git checkout b90e1cfa05bddc2fa0e314a790df603479259637 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=powerpc64
If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <l...@intel.com> All errors (new ones prefixed by >>): arch/powerpc/platforms/pseries/eeh_pseries.c:46:6: error: no previous prototype for function 'pseries_pcibios_bus_add_device' [-Werror,-Wmissing-prototypes] void pseries_pcibios_bus_add_device(struct pci_dev *pdev) ^ arch/powerpc/platforms/pseries/eeh_pseries.c:46:1: note: declare 'static' if the function is not intended to be used outside of this translation unit void pseries_pcibios_bus_add_device(struct pci_dev *pdev) ^ static >> arch/powerpc/platforms/pseries/eeh_pseries.c:420:6: error: variable 'ret' is >> used uninitialized whenever 'if' condition is true >> [-Werror,-Wsometimes-uninitialized] if (addr == 0) { ^~~~~~~~~ arch/powerpc/platforms/pseries/eeh_pseries.c:449:67: note: uninitialized use occurs here eeh_edev_dbg(edev, "EEH is unsupported on device (code = %d)\n", ret); ^~~ arch/powerpc/include/asm/eeh.h:162:75: note: expanded from macro 'eeh_edev_dbg' #define eeh_edev_dbg(edev, fmt, ...) EEH_EDEV_PRINT(debug, (edev), fmt, ##__VA_ARGS__) ^~~~~~~~~~~ arch/powerpc/include/asm/eeh.h:161:52: note: expanded from macro 'EEH_EDEV_PRINT' ((edev)->pe ? (edev)->pe_config_addr : 0xffff), ##__VA_ARGS__) ^~~~~~~~~~~ include/linux/printk.h:423:35: note: expanded from macro 'pr_debug' printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) ^~~~~~~~~~~ arch/powerpc/platforms/pseries/eeh_pseries.c:420:2: note: remove the 'if' if its condition is always false if (addr == 0) { ^~~~~~~~~~~~~~~~ arch/powerpc/platforms/pseries/eeh_pseries.c:362:9: note: initialize the variable 'ret' to silence this warning int ret; ^ = 0 2 errors generated. # https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id=b90e1cfa05bddc2fa0e314a790df603479259637 git remote add powerpc https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git git fetch --no-tags powerpc next-test git checkout b90e1cfa05bddc2fa0e314a790df603479259637 vim +420 arch/powerpc/platforms/pseries/eeh_pseries.c 345 346 /** 347 * pseries_eeh_init_edev - initialise the eeh_dev and eeh_pe for a pci_dn 348 * 349 * @pdn: PCI device node 350 * 351 * When we discover a new PCI device via the device-tree we create a 352 * corresponding pci_dn and we allocate, but don't initialise, an eeh_dev. 353 * This function takes care of the initialisation and inserts the eeh_dev 354 * into the correct eeh_pe. If no eeh_pe exists we'll allocate one. 355 */ 356 void pseries_eeh_init_edev(struct pci_dn *pdn) 357 { 358 struct eeh_pe pe, *parent; 359 struct eeh_dev *edev; 360 int addr; 361 u32 pcie_flags; 362 int ret; 363 364 if (WARN_ON_ONCE(!eeh_has_flag(EEH_PROBE_MODE_DEVTREE))) 365 return; 366 367 /* 368 * Find the eeh_dev for this pdn. The storage for the eeh_dev was 369 * allocated at the same time as the pci_dn. 370 * 371 * XXX: We should probably re-visit that. 372 */ 373 edev = pdn_to_eeh_dev(pdn); 374 if (!edev) 375 return; 376 377 /* 378 * If ->pe is set then we've already probed this device. We hit 379 * this path when a pci_dev is removed and rescanned while recovering 380 * a PE (i.e. for devices where the driver doesn't support error 381 * recovery). 382 */ 383 if (edev->pe) 384 return; 385 386 /* Check class/vendor/device IDs */ 387 if (!pdn->vendor_id || !pdn->device_id || !pdn->class_code) 388 return; 389 390 /* Skip for PCI-ISA bridge */ 391 if ((pdn->class_code >> 8) == PCI_CLASS_BRIDGE_ISA) 392 return; 393 394 eeh_edev_dbg(edev, "Probing device\n"); 395 396 /* 397 * Update class code and mode of eeh device. We need 398 * correctly reflects that current device is root port 399 * or PCIe switch downstream port. 400 */ 401 edev->pcix_cap = pseries_eeh_find_cap(pdn, PCI_CAP_ID_PCIX); 402 edev->pcie_cap = pseries_eeh_find_cap(pdn, PCI_CAP_ID_EXP); 403 edev->aer_cap = pseries_eeh_find_ecap(pdn, PCI_EXT_CAP_ID_ERR); 404 edev->mode &= 0xFFFFFF00; 405 if ((pdn->class_code >> 8) == PCI_CLASS_BRIDGE_PCI) { 406 edev->mode |= EEH_DEV_BRIDGE; 407 if (edev->pcie_cap) { 408 rtas_read_config(pdn, edev->pcie_cap + PCI_EXP_FLAGS, 409 2, &pcie_flags); 410 pcie_flags = (pcie_flags & PCI_EXP_FLAGS_TYPE) >> 4; 411 if (pcie_flags == PCI_EXP_TYPE_ROOT_PORT) 412 edev->mode |= EEH_DEV_ROOT_PORT; 413 else if (pcie_flags == PCI_EXP_TYPE_DOWNSTREAM) 414 edev->mode |= EEH_DEV_DS_PORT; 415 } 416 } 417 418 /* first up, find the pe_config_addr for the PE containing the device */ 419 addr = pseries_eeh_get_pe_config_addr(pdn); > 420 if (addr == 0) { 421 eeh_edev_dbg(edev, "Unable to find pe_config_addr\n"); 422 goto err; 423 } 424 425 /* Try enable EEH on the fake PE */ 426 memset(&pe, 0, sizeof(struct eeh_pe)); 427 pe.phb = pdn->phb; 428 pe.addr = addr; 429 430 eeh_edev_dbg(edev, "Enabling EEH on device\n"); 431 ret = eeh_ops->set_option(&pe, EEH_OPT_ENABLE); 432 if (ret) { 433 eeh_edev_dbg(edev, "EEH failed to enable on device (code %d)\n", ret); 434 goto err; 435 } 436 437 edev->pe_config_addr = addr; 438 439 eeh_add_flag(EEH_ENABLED); 440 441 parent = pseries_eeh_pe_get_parent(edev); 442 eeh_pe_tree_insert(edev, parent); 443 eeh_save_bars(edev); 444 eeh_edev_dbg(edev, "EEH enabled for device"); 445 446 return; 447 448 err: 449 eeh_edev_dbg(edev, "EEH is unsupported on device (code = %d)\n", ret); 450 } 451 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org
.config.gz
Description: application/gzip