> From: Wei Hu <weh@xxxxxxxxxxxxx> > Sent: Sunday, April 26, 2020 6:25 AM > Subject: [PATCH] PCI: pci-hyperv: Retry PCI bus D0 entry when the first attempt > failed with invalid device state 0xC0000184. The title looks too long. :-) Ideally it should be shorter than 75 chars. I suggest the part "with invalid device state 0xC0000184. " should be removed. > +#define STATUS_INVALID_DEVICE_STATE 0xC0000184 > + > +static int hv_pci_bus_exit(struct hv_device *hdev, bool hibernating); Should we change the name of the parameter 'hibernating'? > /** > * hv_pci_enter_d0() - Bring the "bus" into the D0 power state > * @hdev: VMBus's tracking struct for this root PCI bus > @@ -2748,8 +2752,10 @@ static int hv_pci_enter_d0(struct hv_device *hdev) > struct pci_bus_d0_entry *d0_entry; > struct hv_pci_compl comp_pkt; > struct pci_packet *pkt; > + bool retry = true; > int ret; > > +enter_d0_retry: > /* > * Tell the host that the bus is ready to use, and moved into the > * powered-on state. This includes telling the host which region > @@ -2780,6 +2786,30 @@ static int hv_pci_enter_d0(struct hv_device *hdev) > dev_err(&hdev->device, > "PCI Pass-through VSP failed D0 Entry with status %x\n", > comp_pkt.completion_status); > + > + /* > + * In certain case (Kdump) the pci device of interest was > + * not cleanly shut down and resource is still held on host > + * side, the host could return STATUS_INVALID_DEVICE_STATE. > + * We need to explicitly request host to release the resource > + * and try to enter D0 again. > + */ > + if (comp_pkt.completion_status == STATUS_INVALID_DEVICE_STATE > && > + retry) { Maybe it's better to just retry for any error in comp_pkt.completion_status? Just in case the host returns a slightly different error code in future. Thanks, -- Dexuan