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. Authored by Tags None Referenced Files
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
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) |