On 2018-07-01 13:14, Lukas Wunner wrote:
On Thu, Jun 28, 2018 at 03:31:05PM -0400, Sinan Kaya wrote:
+static pci_ers_result_t pciehp_reset_link(struct pci_dev *pdev)
+{
+       struct pcie_device *pciedev;
+       struct controller *ctrl;
+       struct device *devhp;
+       struct slot *slot;
+       int rc;
+
+       devhp = pcie_port_find_device(pdev, PCIE_PORT_SERVICE_HP);
+       pciedev = to_pcie_device(devhp);
+       ctrl = get_service_data(pciedev);
+       slot = ctrl->slot;
+
+       rc = reset_slot(slot->hotplug_slot, 0);
+
+       return !rc ? PCI_ERS_RESULT_RECOVERED : PCI_ERS_RESULT_DISCONNECT;
+}

This looks like a bit of a detour.  There's a "struct pci_slot *slot"
pointer in struct pci_dev.  Any reason not to simply call:

        rc = reset_slot(pdev->slot->hotplug_slot)

pdev here is the bridge. Slot pointers are only valid for children objects.



Lukas

Reply via email to