git: a370832bec5f - main - tcp: remove delayed drop KPI
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 26 Dec 2021 16:49:34 UTC
The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=a370832bec5f4ba1077bc13ea9e369bc84e7b2a0 commit a370832bec5f4ba1077bc13ea9e369bc84e7b2a0 Author: Gleb Smirnoff <glebius@FreeBSD.org> AuthorDate: 2021-12-26 16:48:24 +0000 Commit: Gleb Smirnoff <glebius@FreeBSD.org> CommitDate: 2021-12-26 16:48:24 +0000 tcp: remove delayed drop KPI No longer needed after tcp_output() can ask caller to drop. Reviewed by: rrs, tuexen Differential revision: https://reviews.freebsd.org/D33371 --- sys/netinet/in_pcb.c | 4 +- sys/netinet/in_pcb.h | 6 -- sys/netinet/tcp_hpts.c | 207 +-------------------------------------- sys/netinet/tcp_hpts.h | 6 +- sys/netinet/tcp_log_buf.h | 2 +- sys/netinet/tcp_lro.c | 3 +- sys/netinet/tcp_stacks/bbr.c | 17 ++-- sys/netinet/tcp_stacks/rack.c | 29 ++---- sys/netinet/tcp_stacks/tcp_bbr.h | 2 +- sys/netinet/tcp_subr.c | 3 +- sys/netinet/tcp_timewait.c | 2 +- sys/netinet/tcp_usrreq.c | 2 +- 12 files changed, 28 insertions(+), 255 deletions(-) diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c index d9d36c1d64c4..b1cbef537c88 100644 --- a/sys/netinet/in_pcb.c +++ b/sys/netinet/in_pcb.c @@ -620,7 +620,7 @@ in_pcballoc(struct socket *so, struct inpcbinfo *pcbinfo) * If using hpts lets drop a random number in so * not all new connections fall on the same CPU. */ - inp->inp_hpts_cpu = inp->inp_dropq_cpu = hpts_random_cpu(inp); + inp->inp_hpts_cpu = hpts_random_cpu(inp); #endif refcount_init(&inp->inp_refcount, 1); /* Reference from socket. */ INP_WLOCK(inp); @@ -1750,7 +1750,6 @@ in_pcbrele_rlocked(struct inpcb *inp) MPASS(inp->inp_flags & INP_FREED); MPASS(inp->inp_socket == NULL); MPASS(inp->inp_in_hpts == 0); - MPASS(inp->inp_in_dropq == 0); INP_RUNLOCK(inp); uma_zfree_smr(inp->inp_pcbinfo->ipi_zone, inp); return (true); @@ -1768,7 +1767,6 @@ in_pcbrele_wlocked(struct inpcb *inp) MPASS(inp->inp_flags & INP_FREED); MPASS(inp->inp_socket == NULL); MPASS(inp->inp_in_hpts == 0); - MPASS(inp->inp_in_dropq == 0); INP_WUNLOCK(inp); uma_zfree_smr(inp->inp_pcbinfo->ipi_zone, inp); return (true); diff --git a/sys/netinet/in_pcb.h b/sys/netinet/in_pcb.h index 77dd85241e01..02e6c7b60e38 100644 --- a/sys/netinet/in_pcb.h +++ b/sys/netinet/in_pcb.h @@ -235,19 +235,15 @@ struct inpcb { */ #if defined(__amd64__) || defined(__i386__) uint8_t inp_in_hpts; /* on output hpts (lock b) */ - uint8_t inp_in_dropq; /* on input hpts (lock b) */ #else uint32_t inp_in_hpts; /* on output hpts (lock b) */ - uint32_t inp_in_dropq; /* on input hpts (lock b) */ #endif volatile uint16_t inp_hpts_cpu; /* Lock (i) */ volatile uint16_t inp_irq_cpu; /* Set by LRO in behalf of or the driver */ u_int inp_refcount; /* (i) refcount */ int inp_flags; /* (i) generic IP/datagram flags */ int inp_flags2; /* (i) generic IP/datagram flags #2*/ - uint16_t inp_dropq_cpu; /* Lock (i) */ uint8_t inp_hpts_cpu_set :1, /* on output hpts (i) */ - inp_dropq_cpu_set : 1, /* on input hpts (i) */ inp_hpts_calls :1, /* (i) from output hpts */ inp_irq_cpu_set :1, /* (i) from LRO/Driver */ inp_spare_bits2 : 3; @@ -256,8 +252,6 @@ struct inpcb { struct socket *inp_socket; /* (i) back pointer to socket */ int32_t inp_hptsslot; /* Hpts wheel slot this tcb is Lock(i&b) */ uint32_t inp_hpts_drop_reas; /* reason we are dropping the PCB (lock i&b) */ - uint32_t inp_dropq_gencnt; - TAILQ_ENTRY(inpcb) inp_dropq; /* hpts drop queue next lock(b) */ struct inpcbinfo *inp_pcbinfo; /* (c) PCB list info */ struct ucred *inp_cred; /* (c) cache of socket cred */ u_int32_t inp_flow; /* (i) IPv6 flow information */ diff --git a/sys/netinet/tcp_hpts.c b/sys/netinet/tcp_hpts.c index 40ae9a5cc3ad..f17e610ff613 100644 --- a/sys/netinet/tcp_hpts.c +++ b/sys/netinet/tcp_hpts.c @@ -100,25 +100,6 @@ __FBSDID("$FreeBSD$"); * function (ctf_do_queued_segments()) requires that * you have defined the tfb_do_segment_nounlock() as * described above. - * - * Now the second function the tcp_hpts system provides is the ability - * to abort a connection later. Why would you want to do this? - * To not have to worry about untangling any recursive locks. - * - * The second feature of the input side of hpts is the - * dropping of a connection. This is due to the way that - * locking may have occured on the INP_WLOCK. So if - * a stack wants to drop a connection it calls: - * - * tcp_set_inp_to_drop(tp, ETIMEDOUT) - * - * To schedule the tcp_hpts system to call - * - * tcp_drop(tp, drop_reason) - * - * at a future point. This is quite handy to prevent locking - * issues when dropping connections. - * */ #include <sys/param.h> @@ -222,14 +203,11 @@ struct tcp_hpts_entry { p_avail:5; uint8_t p_fill[3]; /* Fill to 32 bits */ /* Cache line 0x40 */ - TAILQ_HEAD(, inpcb) p_dropq; /* Delayed drop queue */ struct hptsh { TAILQ_HEAD(, inpcb) head; uint32_t count; uint32_t gencnt; } *p_hptss; /* Hptsi wheel */ - uint32_t p_dropq_cnt; /* Count on drop queue */ - uint32_t p_dropq_gencnt; uint32_t p_hpts_sleep_time; /* Current sleep interval having a max * of 255ms */ uint32_t overidden_sleep; /* what was overrided by min-sleep for logging */ @@ -473,7 +451,7 @@ tcp_hpts_log(struct tcp_hpts_entry *hpts, struct tcpcb *tp, struct timeval *tv, * Unused logs are * 64 bit - delRate, rttProp, bw_inuse * 16 bit - cwnd_gain - * 8 bit - bbr_state, bbr_substate, inhpts, ininput; + * 8 bit - bbr_state, bbr_substate, inhpts; */ memset(&log.u_bbr, 0, sizeof(log.u_bbr)); log.u_bbr.flex1 = hpts->p_nxt_slot; @@ -565,19 +543,6 @@ tcp_hpts_lock(struct inpcb *inp) return (hpts); } -static struct tcp_hpts_entry * -tcp_dropq_lock(struct inpcb *inp) -{ - struct tcp_hpts_entry *hpts; - - INP_LOCK_ASSERT(inp); - - hpts = tcp_pace.rp_ent[inp->inp_dropq_cpu]; - HPTS_LOCK(hpts); - - return (hpts); -} - static void inp_hpts_release(struct inpcb *inp) { @@ -588,69 +553,20 @@ inp_hpts_release(struct inpcb *inp) MPASS(released == false); } -static void -tcp_dropq_remove(struct tcp_hpts_entry *hpts, struct inpcb *inp) -{ - bool released __diagused; - - HPTS_MTX_ASSERT(hpts); - INP_WLOCK_ASSERT(inp); - - if (inp->inp_in_dropq != IHPTS_ONQUEUE) - return; - - MPASS(hpts->p_cpu == inp->inp_dropq_cpu); - if (__predict_true(inp->inp_dropq_gencnt == hpts->p_dropq_gencnt)) { - TAILQ_REMOVE(&hpts->p_dropq, inp, inp_dropq); - MPASS(hpts->p_dropq_cnt > 0); - hpts->p_dropq_cnt--; - inp->inp_in_dropq = IHPTS_NONE; - released = in_pcbrele_wlocked(inp); - MPASS(released == false); - } else { - /* - * tcp_delayed_drop() now owns the TAILQ head of this inp. - * Can't TAILQ_REMOVE, just mark it. - */ -#ifdef INVARIANTS - struct inpcb *tmp; - - TAILQ_FOREACH(tmp, &hpts->p_dropq, inp_dropq) - MPASS(tmp != inp); -#endif - inp->inp_in_dropq = IHPTS_MOVING; - } - -} - /* * Called normally with the INP_LOCKED but it * does not matter, the hpts lock is the key * but the lock order allows us to hold the * INP lock and then get the hpts lock. - * - * Valid values in the flags are - * HPTS_REMOVE_OUTPUT - remove from the output of the hpts. - * HPTS_REMOVE_DROPQ - remove from the drop queue of the hpts. - * Note that you can use one or both values together - * and get two actions. */ void -__tcp_hpts_remove(struct inpcb *inp, int32_t flags, int32_t line) +tcp_hpts_remove(struct inpcb *inp) { struct tcp_hpts_entry *hpts; struct hptsh *hptsh; INP_WLOCK_ASSERT(inp); - if (flags & HPTS_REMOVE_DROPQ) { - hpts = tcp_dropq_lock(inp); - tcp_dropq_remove(hpts, inp); - mtx_unlock(&hpts->p_mtx); - } - - MPASS(flags & HPTS_REMOVE_OUTPUT); - hpts = tcp_hpts_lock(inp); if (inp->inp_in_hpts == IHPTS_ONQUEUE) { hptsh = &hpts->p_hptss[inp->inp_hptsslot]; @@ -1074,32 +990,6 @@ tcp_hpts_insert_diag(struct inpcb *inp, uint32_t slot, int32_t line, struct hpts return (slot_on); } -void -tcp_set_inp_to_drop(struct inpcb *inp, uint16_t reason) -{ - struct tcp_hpts_entry *hpts; - struct tcpcb *tp = intotcpcb(inp); - - INP_WLOCK_ASSERT(inp); - inp->inp_hpts_drop_reas = reason; - if (inp->inp_in_dropq != IHPTS_NONE) - return; - hpts = tcp_dropq_lock(tp->t_inpcb); - MPASS(hpts->p_cpu == inp->inp_dropq_cpu); - - TAILQ_INSERT_TAIL(&hpts->p_dropq, inp, inp_dropq); - inp->inp_in_dropq = IHPTS_ONQUEUE; - inp->inp_dropq_gencnt = hpts->p_dropq_gencnt; - hpts->p_dropq_cnt++; - in_pcbref(inp); - - if ((hpts->p_hpts_active == 0) && (hpts->p_on_min_sleep == 0)){ - hpts->p_direct_wake = 1; - tcp_wakehpts(hpts); - } - HPTS_UNLOCK(hpts); -} - uint16_t hpts_random_cpu(struct inpcb *inp){ /* @@ -1109,12 +999,9 @@ hpts_random_cpu(struct inpcb *inp){ uint32_t ran; /* - * If one has been set use it i.e. we want both in and out on the - * same hpts. + * Shortcut if it is already set. XXXGL: does it happen? */ - if (inp->inp_dropq_cpu_set) { - return (inp->inp_dropq_cpu); - } else if (inp->inp_hpts_cpu_set) { + if (inp->inp_hpts_cpu_set) { return (inp->inp_hpts_cpu); } /* Nothing set use a random number */ @@ -1132,13 +1019,7 @@ hpts_cpuid(struct inpcb *inp, int *failed) #endif *failed = 0; - /* - * If one has been set use it i.e. we want both in and out on the - * same hpts. - */ - if (inp->inp_dropq_cpu_set) { - return (inp->inp_dropq_cpu); - } else if (inp->inp_hpts_cpu_set) { + if (inp->inp_hpts_cpu_set) { return (inp->inp_hpts_cpu); } /* @@ -1204,57 +1085,6 @@ tcp_drop_in_pkts(struct tcpcb *tp) } } -/* - * Delayed drop functionality is factored out into separate function, - * but logic is similar to the logic of tcp_hptsi(). - */ -static void -tcp_delayed_drop(struct tcp_hpts_entry *hpts) -{ - TAILQ_HEAD(, inpcb) head = TAILQ_HEAD_INITIALIZER(head); - struct inpcb *inp, *tmp; - struct tcpcb *tp; - - HPTS_MTX_ASSERT(hpts); - NET_EPOCH_ASSERT(); - - TAILQ_SWAP(&head, &hpts->p_dropq, inpcb, inp_dropq); - hpts->p_dropq_cnt = 0; - hpts->p_dropq_gencnt++; - HPTS_UNLOCK(hpts); - - TAILQ_FOREACH_SAFE(inp, &head, inp_dropq, tmp) { - INP_WLOCK(inp); - MPASS(inp->inp_hpts_drop_reas != 0); - if (__predict_false(inp->inp_in_dropq == IHPTS_MOVING)) { - inp->inp_in_dropq = IHPTS_NONE; - if (in_pcbrele_wlocked(inp) == false) - INP_WUNLOCK(inp); - continue; - } - MPASS(inp->inp_in_dropq == IHPTS_ONQUEUE); - inp->inp_in_dropq = IHPTS_NONE; - if ((inp->inp_flags & (INP_TIMEWAIT | INP_DROPPED))) { - if (in_pcbrele_wlocked(inp) == false) - INP_WUNLOCK(inp); - continue; - } - CURVNET_SET(inp->inp_vnet); - if (__predict_true((tp = intotcpcb(inp)) != NULL)) { - MPASS(tp->t_inpcb == inp); - tcp_drop_in_pkts(tp); - tp = tcp_drop(tp, inp->inp_hpts_drop_reas); - if (tp == NULL) - INP_WLOCK(inp); - } - if (in_pcbrele_wlocked(inp) == false) - INP_WUNLOCK(inp); - CURVNET_RESTORE(); - } - - mtx_lock(&hpts->p_mtx); /* XXXGL */ -} - static void tcp_hpts_set_max_sleep(struct tcp_hpts_entry *hpts, int wrap_loop_cnt) { @@ -1392,10 +1222,6 @@ again: hpts->p_nxt_slot = hpts->p_prev_slot; hpts->p_runningslot = hpts_slot(hpts->p_prev_slot, 1); } - KASSERT((((TAILQ_EMPTY(&hpts->p_dropq) != 0) && (hpts->p_dropq_cnt == 0)) || - ((TAILQ_EMPTY(&hpts->p_dropq) == 0) && (hpts->p_dropq_cnt > 0))), - ("%s hpts:%p in_hpts cnt:%d and queue state mismatch", - __FUNCTION__, hpts, hpts->p_dropq_cnt)); if (hpts->p_on_queue_cnt == 0) { goto no_one; } @@ -1615,10 +1441,6 @@ no_one: * Check to see if we took an excess amount of time and need to run * more ticks (if we did not hit eno-bufs). */ - KASSERT((((TAILQ_EMPTY(&hpts->p_dropq) != 0) && (hpts->p_dropq_cnt == 0)) || - ((TAILQ_EMPTY(&hpts->p_dropq) == 0) && (hpts->p_dropq_cnt > 0))), - ("%s hpts:%p in_hpts cnt:%d queue state mismatch", - __FUNCTION__, hpts, hpts->p_dropq_cnt)); hpts->p_prev_slot = hpts->p_cur_slot; hpts->p_lasttick = hpts->p_curtick; if ((from_callout == 0) || (loop_cnt > max_pacer_loops)) { @@ -1660,11 +1482,6 @@ no_run: * input. */ hpts->p_wheel_complete = 1; - /* - * Run any input that may be there not covered - * in running data. - */ - tcp_delayed_drop(hpts); /* * Now did we spend too long running input and need to run more ticks? * Note that if wrap_loop_cnt < 2 then we should have the conditions @@ -1712,14 +1529,6 @@ __tcp_set_hpts(struct inpcb *inp, int32_t line) inp->inp_hpts_cpu_set = 1; } mtx_unlock(&hpts->p_mtx); - hpts = tcp_dropq_lock(inp); - if ((inp->inp_dropq_cpu_set == 0) && - (inp->inp_in_dropq == 0)) { - inp->inp_dropq_cpu = hpts_cpuid(inp, &failed); - if (failed == 0) - inp->inp_dropq_cpu_set = 1; - } - mtx_unlock(&hpts->p_mtx); } static void @@ -2037,7 +1846,6 @@ tcp_init_hptsi(void *st) */ mtx_init(&hpts->p_mtx, "tcp_hpts_lck", "hpts", MTX_DEF | MTX_DUPOK); - TAILQ_INIT(&hpts->p_dropq); for (j = 0; j < NUM_OF_HPTSI_SLOTS; j++) { TAILQ_INIT(&hpts->p_hptss[j].head); hpts->p_hptss[j].count = 0; @@ -2051,11 +1859,6 @@ tcp_init_hptsi(void *st) unit, CTLFLAG_RW | CTLFLAG_MPSAFE, 0, ""); - SYSCTL_ADD_INT(&hpts->hpts_ctx, - SYSCTL_CHILDREN(hpts->hpts_root), - OID_AUTO, "in_qcnt", CTLFLAG_RD, - &hpts->p_dropq_cnt, 0, - "Count TCB's awaiting delayed drop"); SYSCTL_ADD_INT(&hpts->hpts_ctx, SYSCTL_CHILDREN(hpts->hpts_root), OID_AUTO, "out_qcnt", CTLFLAG_RD, diff --git a/sys/netinet/tcp_hpts.h b/sys/netinet/tcp_hpts.h index ac99296e34f3..161cf9721051 100644 --- a/sys/netinet/tcp_hpts.h +++ b/sys/netinet/tcp_hpts.h @@ -114,11 +114,7 @@ struct hpts_diag { #ifdef _KERNEL -#define tcp_hpts_remove(a, b) __tcp_hpts_remove(a, b, __LINE__) -void __tcp_hpts_remove(struct inpcb *inp, int32_t flags, int32_t line); -#define HPTS_REMOVE_DROPQ 0x01 -#define HPTS_REMOVE_OUTPUT 0x02 -#define HPTS_REMOVE_ALL (HPTS_REMOVE_DROPQ | HPTS_REMOVE_OUTPUT) +void tcp_hpts_remove(struct inpcb *); bool tcp_in_hpts(struct inpcb *); /* diff --git a/sys/netinet/tcp_log_buf.h b/sys/netinet/tcp_log_buf.h index 820f345a758f..1290a8ce6b29 100644 --- a/sys/netinet/tcp_log_buf.h +++ b/sys/netinet/tcp_log_buf.h @@ -95,7 +95,7 @@ struct tcp_log_bbr { uint8_t bbr_state; uint8_t bbr_substate; uint8_t inhpts; - uint8_t ininput; + uint8_t __spare; uint8_t use_lt_bw; uint8_t flex8; uint32_t pkt_epoch; diff --git a/sys/netinet/tcp_lro.c b/sys/netinet/tcp_lro.c index 215b9097a4fd..5b4fe5f20c90 100644 --- a/sys/netinet/tcp_lro.c +++ b/sys/netinet/tcp_lro.c @@ -1353,8 +1353,7 @@ tcp_lro_flush_tcphpts(struct lro_ctrl *lc, struct lro_entry *le) /* Check if any data mbufs left. */ if (le->m_head != NULL) { counter_u64_add(tcp_inp_lro_direct_queue, 1); - tcp_lro_log(tp, lc, le, NULL, 22, 1, - inp->inp_flags2, inp->inp_in_dropq, 1); + tcp_lro_log(tp, lc, le, NULL, 22, 1, inp->inp_flags2, 0, 1); tcp_queue_pkts(inp, tp, le); } if (should_wake) { diff --git a/sys/netinet/tcp_stacks/bbr.c b/sys/netinet/tcp_stacks/bbr.c index ada278d629d0..4bb0015e3cf5 100644 --- a/sys/netinet/tcp_stacks/bbr.c +++ b/sys/netinet/tcp_stacks/bbr.c @@ -1059,7 +1059,7 @@ bbr_timer_audit(struct tcpcb *tp, struct tcp_bbr *bbr, uint32_t cts, struct sock wrong_timer: if ((bbr->r_ctl.rc_hpts_flags & PACE_PKT_OUTPUT) == 0) { if (tcp_in_hpts(inp)) - tcp_hpts_remove(inp, HPTS_REMOVE_OUTPUT); + tcp_hpts_remove(inp); bbr_timer_cancel(bbr, __LINE__, cts); bbr_start_hpts_timer(bbr, tp, cts, 1, bbr->r_ctl.rc_last_delay_val, 0); @@ -1884,7 +1884,6 @@ bbr_fill_in_logging_data(struct tcp_bbr *bbr, struct tcp_log_bbr *l, uint32_t ct l->pacing_gain = bbr->r_ctl.rc_bbr_hptsi_gain; l->cwnd_gain = bbr->r_ctl.rc_bbr_cwnd_gain; l->inhpts = tcp_in_hpts(bbr->rc_inp); - l->ininput = bbr->rc_inp->inp_in_dropq; l->use_lt_bw = bbr->rc_lt_use_bw; l->pkts_out = bbr->r_ctl.rc_flight_at_input; l->pkt_epoch = bbr->r_ctl.rc_pkt_epoch; @@ -5265,7 +5264,7 @@ bbr_timer_cancel(struct tcp_bbr *bbr, int32_t line, uint32_t cts) * must remove ourselves from the hpts. */ hpts_removed = 1; - tcp_hpts_remove(bbr->rc_inp, HPTS_REMOVE_OUTPUT); + tcp_hpts_remove(bbr->rc_inp); if (bbr->r_ctl.rc_last_delay_val) { /* Update the last hptsi delay too */ uint32_t time_since_send; @@ -7966,7 +7965,7 @@ bbr_exit_persist(struct tcpcb *tp, struct tcp_bbr *bbr, uint32_t cts, int32_t li * for our sum's calculations. */ if (tcp_in_hpts(bbr->rc_inp)) { - tcp_hpts_remove(bbr->rc_inp, HPTS_REMOVE_OUTPUT); + tcp_hpts_remove(bbr->rc_inp); bbr->rc_timer_first = 0; bbr->r_ctl.rc_hpts_flags = 0; bbr->r_ctl.rc_last_delay_val = 0; @@ -11656,7 +11655,7 @@ bbr_do_segment_nounlock(struct mbuf *m, struct tcphdr *th, struct socket *so, ; } else { if (tcp_in_hpts(bbr->rc_inp)) { - tcp_hpts_remove(bbr->rc_inp, HPTS_REMOVE_OUTPUT); + tcp_hpts_remove(bbr->rc_inp); if ((bbr->r_ctl.rc_hpts_flags & PACE_PKT_OUTPUT) && (TSTMP_GT(lcts, bbr->rc_pacer_started))) { uint32_t del; @@ -12035,7 +12034,7 @@ bbr_output_wtime(struct tcpcb *tp, const struct timeval *tv) return (0); } } - tcp_hpts_remove(inp, HPTS_REMOVE_OUTPUT); + tcp_hpts_remove(inp); bbr_timer_cancel(bbr, __LINE__, cts); } if (bbr->r_ctl.rc_last_delay_val) { @@ -12052,7 +12051,7 @@ bbr_output_wtime(struct tcpcb *tp, const struct timeval *tv) (tp->t_state < TCPS_ESTABLISHED)) { /* Timeouts or early states are exempt */ if (tcp_in_hpts(inp)) - tcp_hpts_remove(inp, HPTS_REMOVE_OUTPUT); + tcp_hpts_remove(inp); } else if (tcp_in_hpts(inp)) { if ((bbr->r_ctl.rc_last_delay_val) && (bbr->r_ctl.rc_hpts_flags & PACE_PKT_OUTPUT) && @@ -12065,10 +12064,10 @@ bbr_output_wtime(struct tcpcb *tp, const struct timeval *tv) */ counter_u64_add(bbr_out_size[TCP_MSS_ACCT_LATE], 1); bbr->r_ctl.rc_last_delay_val = 0; - tcp_hpts_remove(inp, HPTS_REMOVE_OUTPUT); + tcp_hpts_remove(inp); } else if (tp->t_state == TCPS_CLOSED) { bbr->r_ctl.rc_last_delay_val = 0; - tcp_hpts_remove(inp, HPTS_REMOVE_OUTPUT); + tcp_hpts_remove(inp); } else { /* * On the hpts, you shall not pass! even if ACKNOW diff --git a/sys/netinet/tcp_stacks/rack.c b/sys/netinet/tcp_stacks/rack.c index 204533b3b778..67dd837a391a 100644 --- a/sys/netinet/tcp_stacks/rack.c +++ b/sys/netinet/tcp_stacks/rack.c @@ -2295,7 +2295,6 @@ rack_log_retran_reason(struct tcp_rack *rack, struct rack_sendmap *rsm, uint32_t log.u_bbr.flex6 = rsm->r_end; log.u_bbr.flex8 = mod; log.u_bbr.inhpts = tcp_in_hpts(rack->rc_inp); - log.u_bbr.ininput = rack->rc_inp->inp_in_dropq; log.u_bbr.timeStamp = tcp_get_usecs(&tv); log.u_bbr.inflight = ctf_flight_size(rack->rc_tp, rack->r_ctl.rc_sacked); log.u_bbr.pkts_out = rack->r_ctl.rc_out_at_rto; @@ -2330,7 +2329,6 @@ rack_log_to_start(struct tcp_rack *rack, uint32_t cts, uint32_t to, int32_t slot else log.u_bbr.pkts_out = rack->r_ctl.rc_prr_sndcnt; log.u_bbr.inhpts = tcp_in_hpts(rack->rc_inp); - log.u_bbr.ininput = rack->rc_inp->inp_in_dropq; log.u_bbr.timeStamp = tcp_get_usecs(&tv); log.u_bbr.inflight = ctf_flight_size(rack->rc_tp, rack->r_ctl.rc_sacked); log.u_bbr.pkts_out = rack->r_ctl.rc_out_at_rto; @@ -2355,7 +2353,6 @@ rack_log_to_event(struct tcp_rack *rack, int32_t to_num, struct rack_sendmap *rs memset(&log.u_bbr, 0, sizeof(log.u_bbr)); log.u_bbr.inhpts = tcp_in_hpts(rack->rc_inp); - log.u_bbr.ininput = rack->rc_inp->inp_in_dropq; log.u_bbr.flex8 = to_num; log.u_bbr.flex1 = rack->r_ctl.rc_rack_min_rtt; log.u_bbr.flex2 = rack->rc_rack_rtt; @@ -2394,7 +2391,6 @@ rack_log_map_chg(struct tcpcb *tp, struct tcp_rack *rack, memset(&log.u_bbr, 0, sizeof(log.u_bbr)); log.u_bbr.flex8 = flag; log.u_bbr.inhpts = tcp_in_hpts(rack->rc_inp); - log.u_bbr.ininput = rack->rc_inp->inp_in_dropq; log.u_bbr.cur_del_rate = (uint64_t)prev; log.u_bbr.delRate = (uint64_t)rsm; log.u_bbr.rttProp = (uint64_t)next; @@ -2439,7 +2435,6 @@ rack_log_rtt_upd(struct tcpcb *tp, struct tcp_rack *rack, uint32_t t, uint32_t l struct timeval tv; memset(&log.u_bbr, 0, sizeof(log.u_bbr)); log.u_bbr.inhpts = tcp_in_hpts(rack->rc_inp); - log.u_bbr.ininput = rack->rc_inp->inp_in_dropq; log.u_bbr.flex1 = t; log.u_bbr.flex2 = len; log.u_bbr.flex3 = rack->r_ctl.rc_rack_min_rtt; @@ -2589,7 +2584,6 @@ rack_log_progress_event(struct tcp_rack *rack, struct tcpcb *tp, uint32_t tick, memset(&log.u_bbr, 0, sizeof(log.u_bbr)); log.u_bbr.inhpts = tcp_in_hpts(rack->rc_inp); - log.u_bbr.ininput = rack->rc_inp->inp_in_dropq; log.u_bbr.flex1 = line; log.u_bbr.flex2 = tick; log.u_bbr.flex3 = tp->t_maxunacktime; @@ -2616,7 +2610,6 @@ rack_log_type_bbrsnd(struct tcp_rack *rack, uint32_t len, uint32_t slot, uint32_ memset(&log.u_bbr, 0, sizeof(log.u_bbr)); log.u_bbr.inhpts = tcp_in_hpts(rack->rc_inp); - log.u_bbr.ininput = rack->rc_inp->inp_in_dropq; log.u_bbr.flex1 = slot; if (rack->rack_no_prr) log.u_bbr.flex2 = 0; @@ -2718,7 +2711,6 @@ rack_log_type_just_return(struct tcp_rack *rack, uint32_t cts, uint32_t tlen, ui memset(&log.u_bbr, 0, sizeof(log.u_bbr)); log.u_bbr.inhpts = tcp_in_hpts(rack->rc_inp); - log.u_bbr.ininput = rack->rc_inp->inp_in_dropq; log.u_bbr.flex1 = slot; log.u_bbr.flex2 = rack->r_ctl.rc_hpts_flags; log.u_bbr.flex4 = reason; @@ -2751,7 +2743,6 @@ rack_log_to_cancel(struct tcp_rack *rack, int32_t hpts_removed, int line, uint32 memset(&log.u_bbr, 0, sizeof(log.u_bbr)); log.u_bbr.inhpts = tcp_in_hpts(rack->rc_inp); - log.u_bbr.ininput = rack->rc_inp->inp_in_dropq; log.u_bbr.flex1 = line; log.u_bbr.flex2 = rack->r_ctl.rc_last_output_to; log.u_bbr.flex3 = flags_on_entry; @@ -4476,7 +4467,7 @@ rack_do_goodput_measurement(struct tcpcb *tp, struct tcp_rack *rack, * Stop the pacer and clear up all the aggregate * delays etc. */ - tcp_hpts_remove(rack->rc_inp, HPTS_REMOVE_OUTPUT); + tcp_hpts_remove(rack->rc_inp); rack->r_ctl.rc_hpts_flags = 0; rack->r_ctl.rc_last_output_to = 0; } @@ -5679,7 +5670,7 @@ static void rack_exit_persist(struct tcpcb *tp, struct tcp_rack *rack, uint32_t cts) { if (tcp_in_hpts(rack->rc_inp)) { - tcp_hpts_remove(rack->rc_inp, HPTS_REMOVE_OUTPUT); + tcp_hpts_remove(rack->rc_inp); rack->r_ctl.rc_hpts_flags = 0; } #ifdef NETFLIX_SHARED_CWND @@ -7229,7 +7220,7 @@ rack_timer_cancel(struct tcpcb *tp, struct tcp_rack *rack, uint32_t cts, int lin if ((rack->r_ctl.rc_hpts_flags & PACE_PKT_OUTPUT) && ((TSTMP_GEQ(us_cts, rack->r_ctl.rc_last_output_to)) || ((tp->snd_max - tp->snd_una) == 0))) { - tcp_hpts_remove(rack->rc_inp, HPTS_REMOVE_OUTPUT); + tcp_hpts_remove(rack->rc_inp); hpts_removed = 1; /* If we were not delayed cancel out the flag. */ if ((tp->snd_max - tp->snd_una) == 0) @@ -7245,7 +7236,7 @@ rack_timer_cancel(struct tcpcb *tp, struct tcp_rack *rack, uint32_t cts, int lin * paced. We also must remove ourselves from the * hpts. */ - tcp_hpts_remove(rack->rc_inp, HPTS_REMOVE_OUTPUT); + tcp_hpts_remove(rack->rc_inp); hpts_removed = 1; } rack->r_ctl.rc_hpts_flags &= ~(PACE_TMR_MASK); @@ -13231,7 +13222,7 @@ rack_timer_audit(struct tcpcb *tp, struct tcp_rack *rack, struct sockbuf *sb) } rack->r_ctl.rc_hpts_flags &= ~PACE_PKT_OUTPUT; } - tcp_hpts_remove(tp->t_inpcb, HPTS_REMOVE_OUTPUT); + tcp_hpts_remove(tp->t_inpcb); } rack_timer_cancel(tp, rack, rack->r_ctl.rc_rcvtime, __LINE__); rack_start_hpts_timer(rack, tp, tcp_get_usecs(NULL), 0, 0, 0); @@ -13317,7 +13308,6 @@ rack_log_input_packet(struct tcpcb *tp, struct tcp_rack *rack, struct tcp_ackent #endif memset(&log.u_bbr, 0, sizeof(log.u_bbr)); log.u_bbr.inhpts = tcp_in_hpts(rack->rc_inp); - log.u_bbr.ininput = rack->rc_inp->inp_in_dropq; if (rack->rack_no_prr == 0) log.u_bbr.flex1 = rack->r_ctl.rc_prr_sndcnt; else @@ -14313,7 +14303,6 @@ rack_do_segment_nounlock(struct mbuf *m, struct tcphdr *th, struct socket *so, #endif memset(&log.u_bbr, 0, sizeof(log.u_bbr)); log.u_bbr.inhpts = tcp_in_hpts(rack->rc_inp); - log.u_bbr.ininput = rack->rc_inp->inp_in_dropq; if (rack->rack_no_prr == 0) log.u_bbr.flex1 = rack->r_ctl.rc_prr_sndcnt; else @@ -14688,7 +14677,7 @@ do_output_now: late = 1; rack->r_ctl.rc_hpts_flags &= ~PACE_PKT_OUTPUT; } - tcp_hpts_remove(tp->t_inpcb, HPTS_REMOVE_OUTPUT); + tcp_hpts_remove(tp->t_inpcb); } if (late && (did_out == 0)) { /* @@ -15605,7 +15594,6 @@ rack_log_fsb(struct tcp_rack *rack, struct tcpcb *tp, struct socket *so, uint32_ memset(&log.u_bbr, 0, sizeof(log.u_bbr)); log.u_bbr.inhpts = tcp_in_hpts(rack->rc_inp); - log.u_bbr.ininput = rack->rc_inp->inp_in_dropq; log.u_bbr.flex1 = error; log.u_bbr.flex2 = flags; log.u_bbr.flex3 = rsm_is_null; @@ -16121,7 +16109,6 @@ rack_fast_rsm_output(struct tcpcb *tp, struct tcp_rack *rack, struct rack_sendma memset(&log.u_bbr, 0, sizeof(log.u_bbr)); log.u_bbr.inhpts = tcp_in_hpts(rack->rc_inp); - log.u_bbr.ininput = rack->rc_inp->inp_in_dropq; if (rack->rack_no_prr) log.u_bbr.flex1 = 0; else @@ -16622,7 +16609,6 @@ again: memset(&log.u_bbr, 0, sizeof(log.u_bbr)); log.u_bbr.inhpts = tcp_in_hpts(rack->rc_inp); - log.u_bbr.ininput = rack->rc_inp->inp_in_dropq; if (rack->rack_no_prr) log.u_bbr.flex1 = 0; else @@ -16909,7 +16895,7 @@ rack_output(struct tcpcb *tp) (tp->t_state < TCPS_ESTABLISHED)) { rack->rc_ack_can_sendout_data = 0; if (tcp_in_hpts(rack->rc_inp)) - tcp_hpts_remove(rack->rc_inp, HPTS_REMOVE_OUTPUT); + tcp_hpts_remove(rack->rc_inp); } else if (tcp_in_hpts(rack->rc_inp)) { /* * On the hpts you can't pass even if ACKNOW is on, we will @@ -18804,7 +18790,6 @@ send: memset(&log.u_bbr, 0, sizeof(log.u_bbr)); log.u_bbr.inhpts = tcp_in_hpts(rack->rc_inp); - log.u_bbr.ininput = rack->rc_inp->inp_in_dropq; if (rack->rack_no_prr) log.u_bbr.flex1 = 0; else diff --git a/sys/netinet/tcp_stacks/tcp_bbr.h b/sys/netinet/tcp_stacks/tcp_bbr.h index b5fd3e9b946b..1e63c2118d70 100644 --- a/sys/netinet/tcp_stacks/tcp_bbr.h +++ b/sys/netinet/tcp_stacks/tcp_bbr.h @@ -269,7 +269,7 @@ struct bbr_log { uint8_t n_sackblks; uint8_t applied; /* UU */ uint8_t inhpts; /* UU */ - uint8_t ininput; /* UU */ + uint8_t __spare; /* UU */ uint8_t use_lt_bw; /* UU */ }; diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c index dde8616dcec6..041e639a447b 100644 --- a/sys/netinet/tcp_subr.c +++ b/sys/netinet/tcp_subr.c @@ -2103,7 +2103,6 @@ tcp_respond(struct tcpcb *tp, void *ipgen, struct tcphdr *th, struct mbuf *m, memset(&log.u_bbr, 0, sizeof(log.u_bbr)); log.u_bbr.inhpts = tp->t_inpcb->inp_in_hpts; - log.u_bbr.ininput = tp->t_inpcb->inp_in_dropq; log.u_bbr.flex8 = 4; log.u_bbr.pkts_out = tp->t_maxseg; log.u_bbr.timeStamp = tcp_get_usecs(&tv); @@ -2596,7 +2595,7 @@ tcp_close(struct tcpcb *tp) tp->t_tfo_pending = NULL; } #ifdef TCPHPTS - tcp_hpts_remove(inp, HPTS_REMOVE_ALL); + tcp_hpts_remove(inp); #endif in_pcbdrop(inp); TCPSTAT_INC(tcps_closed); diff --git a/sys/netinet/tcp_timewait.c b/sys/netinet/tcp_timewait.c index 32b2e72c3484..1efc93aef1f9 100644 --- a/sys/netinet/tcp_timewait.c +++ b/sys/netinet/tcp_timewait.c @@ -347,7 +347,7 @@ tcp_twstart(struct tcpcb *tp) * and might not be needed here any longer. */ #ifdef TCPHPTS - tcp_hpts_remove(inp, HPTS_REMOVE_ALL); + tcp_hpts_remove(inp); #endif tcp_discardcb(tp); soisdisconnected(so); diff --git a/sys/netinet/tcp_usrreq.c b/sys/netinet/tcp_usrreq.c index 55071a46e470..06dee4c90ed6 100644 --- a/sys/netinet/tcp_usrreq.c +++ b/sys/netinet/tcp_usrreq.c @@ -1845,7 +1845,7 @@ tcp_ctloutput_set(struct inpcb *inp, struct sockopt *sopt) } #ifdef TCPHPTS /* Assure that we are not on any hpts */ - tcp_hpts_remove(tp->t_inpcb, HPTS_REMOVE_ALL); + tcp_hpts_remove(tp->t_inpcb); #endif if (blk->tfb_tcp_fb_init) { error = (*blk->tfb_tcp_fb_init)(tp);