> 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?