This is useful data, thanks! Did you get chance to check between 100 and 1000, to narrow down further, from which point (does need to be exact value) between 100 and 1000, you start seeing degradation at, for ex. 250, 500 , ...?
Is it also possible to try experiment 10 and 11 with below diff.
What I have done in below diff is, call srcu_get_delay() only once
in try_check_zero() (and not for every loop iteration); also
retry with a different delay for the extra iteration which is done
when srcu_get_delay(ssp) returns 0.
Once we have this data, can you also try by changing SRCU_RETRY_CHECK_LONG_DELAY to 100, on top of below diff.
#define SRCU_RETRY_CHECK_LONG_DELAY 100