From: Wei Yang <weiyang@linux.vnet.ibm.com> To: gwshan@linux.vnet.ibm.com, bhelgaas@google.com Cc: linuxppc-dev@lists.ozlabs.org, linux-pci@vger.kernel.org, Wei Yang <weiyang@linux.vnet.ibm.com> Subject: [PATCH V7 00/10] VF EEH on Power8 Date: Tue, 19 May 2015 18:50:02 +0800 [thread overview] Message-ID: <1432032612-21701-1-git-send-email-weiyang@linux.vnet.ibm.com> (raw) In-Reply-To: <1431999312-10517-1-git-send-email-weiyang@linux.vnet.ibm.com> This patchset enables EEH on SRIOV VFs. The general idea is to create proper VF edev and VF PE and handle them properly. Different from the Bus PE, VF PE just contain one VF. This introduces the difference of EEH error handling on a VF PE. Generally, it has several differences. First, the VF's removal and re-enumerate rely on its PF. VF has a tight relationship between its PF. This is not proper to enumerate a VF by usual scan procedure. That's why virtfn_add/virtfn_remove are exported in this patch set. Second, the reset/restore of a VF is done in kernel space. FW is not aware of the VF, this means the usual reset function done in FW will not work. One of the patch will imitate the reset/restore function in kernel space. Third, the VF may be removed during the PF's error_detected function. In this case, the original error_detected->slot_reset->resume sequence is not proper to those removed VFs, since they are re-created by PF in a fresh state. A flag in eeh_dev is introduce to mark the eeh_dev is in error state. By doing so, we track whether this device needs to be reset or not. This has been tested both on host and in guest on Power8 with latest kernel version. v7: * fix compile error when PCI_IOV is not set v6: * code / commit log refactor by Gavin v5: * remove the compound field, iterate on Master VF PE instead * some code refine on PCI config restore and reset on VF the wait time for assert and deassert PCI device address format check on edev->pcie_cap and edev->aer_cap before access them v4: * refine the change logs, comment and code style * change pnv_pci_fixup_vf_eeh() to pnv_eeh_vf_final_fixup() and remove the CONFIG_PCI_IOV macro * reorder patch 5/6 to make the logic more reasonable * remove remove_dev_pci_data() * remove the EEH_DEV_VF flag, use edev->physfn to identify a VF EEH DEV and remove related CONFIG_PCI_IOV macro * add the option for VF reset * fix the pnv_eeh_cfg_blocked() logic * replace pnv_pci_cfg_{read,write} with eeh_ops->{read,write}_config in pnv_eeh_vf_restore_config() * rename pnv_eeh_vf_restore_config() to pnv_eeh_restore_vf_config() * rename pnv_pci_fixup_vf_caps() to pnv_pci_vf_header_fixup() and move it to arch/powerpc/platforms/powernv/pci.c * add a field compound in pnv_ioda_pe to link compound PEs * handle compound PE for VF PEs v3: * add back vf_index in pci_dn to track the VF's index * rename ppdev in eeh_dev to physfn for consistency * move edev->physfn assignment before dev->dev.archdata.edev is set * move pnv_pci_fixup_vf_eeh() and pnv_pci_fixup_vf_caps() to eeh-powernv.c * more clear and detail in commit log and comment in code * merge eeh_rmv_virt_device() with eeh_rmv_device() * move the cfg_blocked check logic from pnv_eeh_read/write_config() to pnv_eeh_cfg_blocked() * move the vf reset/restore logic into its own patch, two patches are created. powerpc/powernv: Support PCI config restore for VFs powerpc/powernv: Support EEH reset for VFs * simplify the vf reset logic v2: * add prefix pci_iov_ to virtfn_add/virtfn_remove * use EEH_DEV_VF as a flag for a VF's eeh_dev * use eeh_dev instead of edev in change log * remove vf_index in eeh_dev, calculate it from pdn->busno and devfn * do eeh_add_device_late() and eeh_sysfs_add_device() both after pci_dev is well initialized * do FLR to reset a VF PE * imitate the restore function in FW for VF * remove the reverse order patch, since it is still under discussion Wei Yang (10): PCI/IOV: Rename and export virtfn_add/virtfn_remove powerpc/pci: Cache VF index in pci_dn powerpc/pci: Remove VFs prior to PF powerpc/eeh: Trace first 7 BARs in address cache powerpc/powernv: EEH device for VF powerpc/eeh: Create PE for VFs powerpc/powernv: Support EEH reset for VF PE powerpc/powernv: Support PCI config restore for VFs powerpc/eeh: Support error recovery for VF PE powerpc/powernv: compound PE for VFs arch/powerpc/include/asm/eeh.h | 4 + arch/powerpc/include/asm/pci-bridge.h | 2 + arch/powerpc/kernel/eeh.c | 8 + arch/powerpc/kernel/eeh_cache.c | 2 +- arch/powerpc/kernel/eeh_driver.c | 100 +++++++++--- arch/powerpc/kernel/eeh_pe.c | 13 +- arch/powerpc/kernel/pci-hotplug.c | 2 +- arch/powerpc/kernel/pci_dn.c | 16 +- arch/powerpc/platforms/powernv/eeh-powernv.c | 221 +++++++++++++++++++++++++- arch/powerpc/platforms/powernv/pci-ioda.c | 46 +++++- arch/powerpc/platforms/powernv/pci.c | 35 +++- drivers/pci/iov.c | 10 +- include/linux/pci.h | 8 + 13 files changed, 426 insertions(+), 41 deletions(-) -- 1.7.9.5
WARNING: multiple messages have this Message-ID (diff)
From: Wei Yang <weiyang@linux.vnet.ibm.com> To: gwshan@linux.vnet.ibm.com, bhelgaas@google.com Cc: linux-pci@vger.kernel.org, Wei Yang <weiyang@linux.vnet.ibm.com>, linuxppc-dev@lists.ozlabs.org Subject: [PATCH V7 00/10] VF EEH on Power8 Date: Tue, 19 May 2015 18:50:02 +0800 [thread overview] Message-ID: <1432032612-21701-1-git-send-email-weiyang@linux.vnet.ibm.com> (raw) In-Reply-To: <1431999312-10517-1-git-send-email-weiyang@linux.vnet.ibm.com> This patchset enables EEH on SRIOV VFs. The general idea is to create proper VF edev and VF PE and handle them properly. Different from the Bus PE, VF PE just contain one VF. This introduces the difference of EEH error handling on a VF PE. Generally, it has several differences. First, the VF's removal and re-enumerate rely on its PF. VF has a tight relationship between its PF. This is not proper to enumerate a VF by usual scan procedure. That's why virtfn_add/virtfn_remove are exported in this patch set. Second, the reset/restore of a VF is done in kernel space. FW is not aware of the VF, this means the usual reset function done in FW will not work. One of the patch will imitate the reset/restore function in kernel space. Third, the VF may be removed during the PF's error_detected function. In this case, the original error_detected->slot_reset->resume sequence is not proper to those removed VFs, since they are re-created by PF in a fresh state. A flag in eeh_dev is introduce to mark the eeh_dev is in error state. By doing so, we track whether this device needs to be reset or not. This has been tested both on host and in guest on Power8 with latest kernel version. v7: * fix compile error when PCI_IOV is not set v6: * code / commit log refactor by Gavin v5: * remove the compound field, iterate on Master VF PE instead * some code refine on PCI config restore and reset on VF the wait time for assert and deassert PCI device address format check on edev->pcie_cap and edev->aer_cap before access them v4: * refine the change logs, comment and code style * change pnv_pci_fixup_vf_eeh() to pnv_eeh_vf_final_fixup() and remove the CONFIG_PCI_IOV macro * reorder patch 5/6 to make the logic more reasonable * remove remove_dev_pci_data() * remove the EEH_DEV_VF flag, use edev->physfn to identify a VF EEH DEV and remove related CONFIG_PCI_IOV macro * add the option for VF reset * fix the pnv_eeh_cfg_blocked() logic * replace pnv_pci_cfg_{read,write} with eeh_ops->{read,write}_config in pnv_eeh_vf_restore_config() * rename pnv_eeh_vf_restore_config() to pnv_eeh_restore_vf_config() * rename pnv_pci_fixup_vf_caps() to pnv_pci_vf_header_fixup() and move it to arch/powerpc/platforms/powernv/pci.c * add a field compound in pnv_ioda_pe to link compound PEs * handle compound PE for VF PEs v3: * add back vf_index in pci_dn to track the VF's index * rename ppdev in eeh_dev to physfn for consistency * move edev->physfn assignment before dev->dev.archdata.edev is set * move pnv_pci_fixup_vf_eeh() and pnv_pci_fixup_vf_caps() to eeh-powernv.c * more clear and detail in commit log and comment in code * merge eeh_rmv_virt_device() with eeh_rmv_device() * move the cfg_blocked check logic from pnv_eeh_read/write_config() to pnv_eeh_cfg_blocked() * move the vf reset/restore logic into its own patch, two patches are created. powerpc/powernv: Support PCI config restore for VFs powerpc/powernv: Support EEH reset for VFs * simplify the vf reset logic v2: * add prefix pci_iov_ to virtfn_add/virtfn_remove * use EEH_DEV_VF as a flag for a VF's eeh_dev * use eeh_dev instead of edev in change log * remove vf_index in eeh_dev, calculate it from pdn->busno and devfn * do eeh_add_device_late() and eeh_sysfs_add_device() both after pci_dev is well initialized * do FLR to reset a VF PE * imitate the restore function in FW for VF * remove the reverse order patch, since it is still under discussion Wei Yang (10): PCI/IOV: Rename and export virtfn_add/virtfn_remove powerpc/pci: Cache VF index in pci_dn powerpc/pci: Remove VFs prior to PF powerpc/eeh: Trace first 7 BARs in address cache powerpc/powernv: EEH device for VF powerpc/eeh: Create PE for VFs powerpc/powernv: Support EEH reset for VF PE powerpc/powernv: Support PCI config restore for VFs powerpc/eeh: Support error recovery for VF PE powerpc/powernv: compound PE for VFs arch/powerpc/include/asm/eeh.h | 4 + arch/powerpc/include/asm/pci-bridge.h | 2 + arch/powerpc/kernel/eeh.c | 8 + arch/powerpc/kernel/eeh_cache.c | 2 +- arch/powerpc/kernel/eeh_driver.c | 100 +++++++++--- arch/powerpc/kernel/eeh_pe.c | 13 +- arch/powerpc/kernel/pci-hotplug.c | 2 +- arch/powerpc/kernel/pci_dn.c | 16 +- arch/powerpc/platforms/powernv/eeh-powernv.c | 221 +++++++++++++++++++++++++- arch/powerpc/platforms/powernv/pci-ioda.c | 46 +++++- arch/powerpc/platforms/powernv/pci.c | 35 +++- drivers/pci/iov.c | 10 +- include/linux/pci.h | 8 + 13 files changed, 426 insertions(+), 41 deletions(-) -- 1.7.9.5
next prev parent reply other threads:[~2015-05-19 10:51 UTC|newest] Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-05-19 1:35 [PATCH V6 00/10] VF EEH on Power8 Wei Yang 2015-05-19 1:35 ` Wei Yang 2015-05-19 1:35 ` [PATCH V6 01/10] PCI/IOV: Rename and export virtfn_add/virtfn_remove Wei Yang 2015-05-19 1:35 ` Wei Yang 2015-05-19 5:24 ` Wei Yang 2015-05-19 5:24 ` Wei Yang 2015-05-19 1:35 ` [PATCH V6 02/10] powerpc/pci: Cache VF index in pci_dn Wei Yang 2015-05-19 1:35 ` Wei Yang 2015-05-19 1:35 ` [PATCH V6 03/10] powerpc/pci: Remove VFs prior to PF Wei Yang 2015-05-19 1:35 ` Wei Yang 2015-05-19 1:35 ` [PATCH V6 04/10] powerpc/eeh: Trace first 7 BARs in address cache Wei Yang 2015-05-19 1:35 ` Wei Yang 2015-05-19 1:35 ` [PATCH V6 05/10] powerpc/powernv: EEH device for VF Wei Yang 2015-05-19 1:35 ` Wei Yang 2015-05-19 1:35 ` [PATCH V6 06/10] powerpc/eeh: Create PE for VFs Wei Yang 2015-05-19 1:35 ` Wei Yang 2015-05-19 1:35 ` [PATCH V6 07/10] powerpc/powernv: Support EEH reset for VF PE Wei Yang 2015-05-19 1:35 ` Wei Yang 2015-05-19 1:35 ` [PATCH V6 08/10] powerpc/powernv: Support PCI config restore for VFs Wei Yang 2015-05-19 1:35 ` Wei Yang 2015-05-19 1:35 ` [PATCH V6 09/10] powerpc/eeh: Support error recovery for VF PE Wei Yang 2015-05-19 1:35 ` Wei Yang 2015-05-19 1:35 ` [PATCH V6 10/10] powerpc/powernv: compound PE for VFs Wei Yang 2015-05-19 1:35 ` Wei Yang 2015-05-19 10:50 ` Wei Yang [this message] 2015-05-19 10:50 ` [PATCH V7 00/10] VF EEH on Power8 Wei Yang 2015-05-19 10:50 ` [PATCH V7 01/10] PCI/IOV: Rename and export virtfn_add/virtfn_remove Wei Yang 2015-05-19 10:50 ` Wei Yang 2015-06-02 17:19 ` Bjorn Helgaas 2015-06-03 1:38 ` Wei Yang 2015-05-19 10:50 ` [PATCH V7 02/10] powerpc/pci: Cache VF index in pci_dn Wei Yang 2015-05-19 10:50 ` Wei Yang 2015-05-19 10:50 ` [PATCH V7 03/10] powerpc/pci: Remove VFs prior to PF Wei Yang 2015-05-19 10:50 ` Wei Yang 2015-06-01 23:20 ` Bjorn Helgaas 2015-06-02 3:44 ` Wei Yang 2015-05-19 10:50 ` [PATCH V7 04/10] powerpc/eeh: Trace first 7 BARs in address cache Wei Yang 2015-05-19 10:50 ` Wei Yang 2015-06-01 23:32 ` Bjorn Helgaas 2015-06-02 3:51 ` Wei Yang 2015-06-02 4:11 ` Gavin Shan 2015-06-03 1:47 ` Wei Yang 2015-05-19 10:50 ` [PATCH V7 05/10] powerpc/powernv: EEH device for VF Wei Yang 2015-05-19 10:50 ` Wei Yang 2015-05-19 10:50 ` [PATCH V7 06/10] powerpc/eeh: Create PE for VFs Wei Yang 2015-05-19 10:50 ` Wei Yang 2015-06-01 23:46 ` Bjorn Helgaas 2015-06-03 3:31 ` Wei Yang 2015-06-03 5:10 ` Gavin Shan 2015-06-03 15:46 ` Bjorn Helgaas 2015-06-04 1:25 ` Gavin Shan 2015-06-04 5:46 ` Wei Yang 2015-06-04 7:10 ` Gavin Shan 2015-06-16 8:50 ` Wei Yang 2015-06-16 13:22 ` Bjorn Helgaas 2015-06-01 23:49 ` Bjorn Helgaas 2015-06-03 3:39 ` Wei Yang 2015-05-19 10:50 ` [PATCH V7 07/10] powerpc/powernv: Support EEH reset for VF PE Wei Yang 2015-05-19 10:50 ` Wei Yang 2015-05-19 10:50 ` [PATCH V7 08/10] powerpc/powernv: Support PCI config restore for VFs Wei Yang 2015-05-19 10:50 ` Wei Yang 2015-06-02 0:01 ` Bjorn Helgaas 2015-06-03 1:37 ` Wei Yang 2015-06-03 5:14 ` Gavin Shan 2015-05-19 10:50 ` [PATCH V7 09/10] powerpc/eeh: Support error recovery for VF PE Wei Yang 2015-05-19 10:50 ` Wei Yang 2015-05-19 10:50 ` [PATCH V7 10/10] powerpc/powernv: compound PE for VFs Wei Yang 2015-05-19 10:50 ` Wei Yang
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1432032612-21701-1-git-send-email-weiyang@linux.vnet.ibm.com \ --to=weiyang@linux.vnet.ibm.com \ --cc=bhelgaas@google.com \ --cc=gwshan@linux.vnet.ibm.com \ --cc=linux-pci@vger.kernel.org \ --cc=linuxppc-dev@lists.ozlabs.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.