From 2e19de4c2f4b47f0259ba265ea7d1786f1b44cd7 Mon Sep 17 00:00:00 2001 From: Gavin Shan Date: Fri, 14 Oct 2016 15:26:07 +1100 Subject: hw/phb3: Override root slot's prepare_link_change() with PHB's For PCI slot behind root port, its prepare_link_change() should be same to PHB's. Otherwise, the UTL events cannot be masked when the slot is reseted, leading to EEH error because of UTL link-down event. Cc: stable # 5.3.0+ Signed-off-by: Gavin Shan Signed-off-by: Stewart Smith --- hw/phb3.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/hw/phb3.c b/hw/phb3.c index 35bc73a..1c09ffe 100644 --- a/hw/phb3.c +++ b/hw/phb3.c @@ -284,6 +284,14 @@ static void phb3_root_port_init(struct phb *phb, struct pci_device *dev, uint16_t val16; uint32_t val32; + /* Use PHB's callback so that the UTL events will be masked + * or unmasked when the link is down or up. + */ + if (dev->slot && dev->slot->ops.prepare_link_change && + phb->slot && phb->slot->ops.prepare_link_change) + dev->slot->ops.prepare_link_change = + phb->slot->ops.prepare_link_change; + /* Mask UTL link down event if root slot supports surprise * hotplug as the event should be handled by hotplug driver * instead of EEH subsystem. -- cgit v1.1