If we load rd_seq after goal rd_seq may have already advanced beyond goal making the comparison incorrect.

While here fix up the limits on invariants kernels because it was polling way too frequently.

Differential D23464
Fix a race in smr_advance() that could result in unnecessary poll calls. jeff on Feb 2 2020, 12:25 AM.
Details If we load rd_seq after goal rd_seq may have already advanced beyond goal making the comparison incorrect. While here fix up the limits on invariants kernels because it was polling way too frequently.
Diff Detail - Repository
- rS FreeBSD src repository
- Lint
Automatic diff as part of commit; lint not applicable. - Unit
Automatic diff as part of commit; unit tests not applicable.
## Event TimelineComment Actions Looks good.
Comment Actions It was in the review, but it looks like sys/sys/smr.h was left out of commit r357641. Thanks for reporting. Comment Actions How about something like this? Index: sys/sys/smr.h =================================================================== --- sys/sys/smr.h (revision 357642) +++ sys/sys/smr.h (working copy) @@ -45,10 +45,11 @@ * Modular arithmetic for comparing sequence numbers that have * potentially wrapped. Copied from tcp_seq.h. */ -#define SMR_SEQ_LT(a, b) ((int32_t)((a)-(b)) < 0) -#define SMR_SEQ_LEQ(a, b) ((int32_t)((a)-(b)) <= 0) -#define SMR_SEQ_GT(a, b) ((int32_t)((a)-(b)) > 0) -#define SMR_SEQ_GEQ(a, b) ((int32_t)((a)-(b)) >= 0) +#define SMR_SEQ_DELTA(a, b) (int32_t)((a) - (b)) +#define SMR_SEQ_LT(a, b) (SMR_SEQ_DELTA(a, b) < 0) +#define SMR_SEQ_LEQ(a, b) (SMR_SEQ_DELTA(a, b) <= 0) +#define SMR_SEQ_GT(a, b) (SMR_SEQ_DELTA(a, b) > 0) +#define SMR_SEQ_GEQ(a, b) (SMR_SEQ_DELTA(a, b) >= 0) |