On Tue, Apr 19, 2022 at 06:28:53AM -0700, Richard Cochran wrote:
On Tue, Apr 19, 2022 at 08:52:20AM +0800, Tan Tee Min wrote:
I agree that the fsleep(1) (=1us) is a big hammer. Thus in order to improve this, I’ve figured out a smaller delay time that is enough for the context descriptor to be ready which is ndelay(500) (=500ns).
Why isn't the context descriptor ready?
I mean, the frame already belongs to the CPU, right?
No. The context descriptor (frame) is possibly still owned by the DMA controller in this situation. This is why a looping in the original code to wait for the descriptor to be owned by the application CPU. However, when NAPI is busy polling, the context descriptor might be still owned by the DMA controller even after the looping.
Thus, we are adding an additional nanosecond delay inside the loop, so that the DMA controller can get a short moment to breathe and complete the context descriptor.
Thanks, Tee Min
Thanks, Richard