>               if ((status & (RL_ISR_TIMEOUT_EXPIRED|RL_ISR_RX_OK)) ==
>                                                                    ^^
>                   (RL_ISR_TIMEOUT_EXPIRED|RL_ISR_RX_OK))
>                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> 
> It appears that the loop will always run RL_TIMEOUT cycles
> because the test is for >both< RL_ISR_TIMEOUT_EXPIRED and RL_ISR_RX_OK.

That's the intended behaviour, it waits for BOTH the RX to complete
and for the 'timeout expired' bit to be set in the ISR, note that
RL_ISR_TIMEOUT_EXPIRED and RL_TIMEOUT are different things.
Have you actually tested if removing it 'fixes' it on your machine?
Of course removing re_diag() altogether will 'fix' it too.
I have heard of re_diag() failing in this way for others but
in very rare cases and the cause hasn't been determined...

And can you include a dmesg please?

Reply via email to