diff --git a/sys/netinet/tcp_hpts.c b/sys/netinet/tcp_hpts.c index 9d192b17c41..8c4d2d41a3e 100644 --- a/sys/netinet/tcp_hpts.c +++ b/sys/netinet/tcp_hpts.c @@ -820,7 +820,7 @@ tcp_hpts_insert_diag(struct tcpcb *tp, uint32_t slot, int32_t line, struct hpts_ INP_WLOCK_ASSERT(tptoinpcb(tp)); MPASS(!(tptoinpcb(tp)->inp_flags & INP_DROPPED)); - MPASS(!tcp_in_hpts(tp)); + MPASS(!(tp->t_in_hpts == IHPTS_ONQUEUE)); /* * We now return the next-slot the hpts will be on, beyond its diff --git a/sys/netinet/tcp_hpts.h b/sys/netinet/tcp_hpts.h index 0c5cfac28a6..b097a2b98db 100644 --- a/sys/netinet/tcp_hpts.h +++ b/sys/netinet/tcp_hpts.h @@ -115,7 +115,9 @@ void tcp_hpts_remove(struct tcpcb *); static inline bool tcp_in_hpts(struct tcpcb *tp) { - return (tp->t_in_hpts == IHPTS_ONQUEUE); + return ((tp->t_in_hpts == IHPTS_ONQUEUE) || + ((tp->t_in_hpts == IHPTS_MOVING) && + (tp->t_hpts_slot != -1))); } /* @@ -208,6 +210,17 @@ tcp_gethptstick(struct timeval *sv) return (tcp_tv_to_hptstick(sv)); } +static __inline uint64_t +tcp_get_u64_usecs(struct timeval *tv) +{ + struct timeval tvd; + + if (tv == NULL) + tv = &tvd; + microuptime(tv); + return (tcp_tv_to_lusectick(tv)); +} + static __inline uint32_t tcp_get_usecs(struct timeval *tv) {