On Thu, Mar 14, 2024 at 08:53:48PM +0530, Manivannan Sadhasivam wrote: > As per the PCIe base spec r5.0, section 5.2, Link Down event can happen > under any of the following circumstances: > > 1. Fundamental/Hot reset > 2. Link disable transmission by upstream component > 3. Moving from L2/L3 to L0 > > When the event happens, the EPC driver capable of detecting it may pass the > notification to the EPF driver through link_down() callback in 'struct > pci_epc_bus_event_ops'. > > While the PCIe spec has not defined the actual behavior of the endpoint > when the Link Down event happens, we may assume that atleast the ongoing Nit: s/atleast/at least/ Reviewed-by: Niklas Cassel <cassel@xxxxxxxxxx> > transactions need to be stopped as the link won't be active. So let's > cancel the command handler work in the callback implementation > pci_epf_test_link_down(). The work will be started again in > pci_epf_test_link_up() once the link comes back again. > > Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx> > --- > drivers/pci/endpoint/functions/pci-epf-test.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/endpoint/functions/pci-epf-test.c > index 84cd47ebac22..97245228c9eb 100644 > --- a/drivers/pci/endpoint/functions/pci-epf-test.c > +++ b/drivers/pci/endpoint/functions/pci-epf-test.c > @@ -823,6 +823,15 @@ static int pci_epf_test_link_up(struct pci_epf *epf) > return 0; > } > > +static int pci_epf_test_link_down(struct pci_epf *epf) > +{ > + struct pci_epf_test *epf_test = epf_get_drvdata(epf); > + > + cancel_delayed_work(&epf_test->cmd_handler); > + > + return 0; > +} > + > static const struct pci_epc_event_ops pci_epf_test_epc_event_ops = { > .init = pci_epf_test_epc_init, > .deinit = pci_epf_test_epc_deinit, > @@ -830,6 +839,7 @@ static const struct pci_epc_event_ops pci_epf_test_epc_event_ops = { > > static const struct pci_epc_bus_event_ops pci_epf_test_bus_event_ops = { > .link_up = pci_epf_test_link_up, > + .link_down = pci_epf_test_link_down, > }; > > static int pci_epf_test_alloc_space(struct pci_epf *epf) > > -- > 2.25.1 >