[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