[PATCH v2 8/9] powerpc/eeh: Factor out common code eeh_reset_device()

kbuild test robot lkp at intel.com
Tue Mar 20 19:31:58 AEDT 2018


Hi Sam,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on v4.16-rc4]
[also build test ERROR on next-20180319]
[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/Sam-Bobroff/EEH-refactoring-1/20180320-024729
config: powerpc-ppc64_defconfig (attached as .config)
compiler: powerpc64-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
        make.cross ARCH=powerpc 

Note: the linux-review/Sam-Bobroff/EEH-refactoring-1/20180320-024729 HEAD 28e7cc1fa029b84221b827a6ea2908dc33b43d10 builds fine.
      It only hurts bisectibility.

All errors (new ones prefixed by >>):

   In file included from include/linux/kernel.h:14:0,
                    from include/linux/delay.h:22,
                    from arch/powerpc/kernel/eeh_driver.c:25:
   arch/powerpc/kernel/eeh_driver.c: In function 'eeh_reset_device':
>> arch/powerpc/kernel/eeh_driver.c:692:5: error: 'eeh_aware_driver' undeclared (first use in this function); did you mean 'device_driver'?
       (eeh_aware_driver ? "partial" : "complete"));
        ^
   include/linux/printk.h:308:34: note: in definition of macro 'pr_info'
     printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
                                     ^~~~~~~~~~~
   arch/powerpc/kernel/eeh_driver.c:692:5: note: each undeclared identifier is reported only once for each function it appears in
       (eeh_aware_driver ? "partial" : "complete"));
        ^
   include/linux/printk.h:308:34: note: in definition of macro 'pr_info'
     printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
                                     ^~~~~~~~~~~

vim +692 arch/powerpc/kernel/eeh_driver.c

   619	
   620	/**
   621	 * eeh_reset_device - Perform actual reset of a pci slot
   622	 * @driver_eeh_aware: Does the device's driver provide EEH support?
   623	 * @pe: EEH PE
   624	 * @bus: PCI bus corresponding to the isolcated slot
   625	 * @rmv_data: Optional, list to record removed devices
   626	 *
   627	 * This routine must be called to do reset on the indicated PE.
   628	 * During the reset, udev might be invoked because those affected
   629	 * PCI devices will be removed and then added.
   630	 */
   631	static int eeh_reset_device(struct eeh_pe *pe, struct pci_bus *bus,
   632				    struct eeh_rmv_data *rmv_data,
   633				    bool driver_eeh_aware)
   634	{
   635		time64_t tstamp;
   636		int cnt, rc;
   637		struct eeh_dev *edev;
   638	
   639		/* pcibios will clear the counter; save the value */
   640		cnt = pe->freeze_count;
   641		tstamp = pe->tstamp;
   642	
   643		/*
   644		 * We don't remove the corresponding PE instances because
   645		 * we need the information afterwords. The attached EEH
   646		 * devices are expected to be attached soon when calling
   647		 * into pci_hp_add_devices().
   648		 */
   649		eeh_pe_state_mark(pe, EEH_PE_KEEP);
   650		if (driver_eeh_aware || (pe->type & EEH_PE_VF)) {
   651			eeh_pe_dev_traverse(pe, eeh_rmv_device, rmv_data);
   652		} else {
   653			pci_lock_rescan_remove();
   654			pci_hp_remove_devices(bus);
   655			pci_unlock_rescan_remove();
   656		}
   657	
   658		/*
   659		 * Reset the pci controller. (Asserts RST#; resets config space).
   660		 * Reconfigure bridges and devices. Don't try to bring the system
   661		 * up if the reset failed for some reason.
   662		 *
   663		 * During the reset, it's very dangerous to have uncontrolled PCI
   664		 * config accesses. So we prefer to block them. However, controlled
   665		 * PCI config accesses initiated from EEH itself are allowed.
   666		 */
   667		rc = eeh_pe_reset_full(pe);
   668		if (rc)
   669			return rc;
   670	
   671		pci_lock_rescan_remove();
   672	
   673		/* Restore PE */
   674		eeh_ops->configure_bridge(pe);
   675		eeh_pe_restore_bars(pe);
   676	
   677		/* Clear frozen state */
   678		rc = eeh_clear_pe_frozen_state(pe, false);
   679		if (rc) {
   680			pci_unlock_rescan_remove();
   681			return rc;
   682		}
   683	
   684		/* Give the system 5 seconds to finish running the user-space
   685		 * hotplug shutdown scripts, e.g. ifdown for ethernet.  Yes,
   686		 * this is a hack, but if we don't do this, and try to bring
   687		 * the device up before the scripts have taken it down,
   688		 * potentially weird things happen.
   689		 */
   690		if (!driver_eeh_aware || rmv_data->removed) {
   691			pr_info("EEH: Sleep 5s ahead of %s hotplug\n",
 > 692				(eeh_aware_driver ? "partial" : "complete"));
   693			ssleep(5);
   694	
   695			/*
   696			 * The EEH device is still connected with its parent
   697			 * PE. We should disconnect it so the binding can be
   698			 * rebuilt when adding PCI devices.
   699			 */
   700			edev = list_first_entry(&pe->edevs, struct eeh_dev, list);
   701			eeh_pe_traverse(pe, eeh_pe_detach_dev, NULL);
   702			if (pe->type & EEH_PE_VF) {
   703				eeh_add_virt_device(edev, NULL);
   704			} else {
   705				if (!eeh_aware_driver)
   706					eeh_pe_state_clear(pe, EEH_PE_PRI_BUS);
   707				pci_hp_add_devices(bus);
   708			}
   709		}
   710		eeh_pe_state_clear(pe, EEH_PE_KEEP);
   711	
   712		pe->tstamp = tstamp;
   713		pe->freeze_count = cnt;
   714	
   715		pci_unlock_rescan_remove();
   716		return 0;
   717	}
   718	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 24150 bytes
Desc: not available
URL: <http://lists.ozlabs.org/pipermail/linuxppc-dev/attachments/20180320/7fbc91e6/attachment-0001.gz>


More information about the Linuxppc-dev mailing list