I was reading the documentation and I saw that if an incomming request has an ECRC error the Application layer deletes the request. If it is a non-posted request it automatically sends the Completion Abort response. That sounds ok, but a question comes up when dealing with Completions in response to read requests from the application layer.It seems the request is simply deleted. Is there some notification that the request was deleted? I presume the IP does not reissue the read request, so the applicaiton layer would have to do this. If there is no notification do I have to look for discontinuities in strings of CplD packets (in case the read request was split) or maybe simply rely on the timeout mechanism?
Both, you look for discontinuity and for timeout. What the application does in reaction to the missing completions is application-specific: For example, if you already fed some data into a consuming fifo received as part of the completions, followed by a timeout, you might be out of luck rerunning the transaction. But if you buffer the whole request in memory and only forward it internally once it is completed, you can rollback the whole or just the remaining read request to re-issue it.btw, it might be easier to just wait for the timeout and rollback the whole read request, if possible. If one of a couple of completion TLPs is missing, you will most probably not receive all data and run into the timeout. – Matthias