The branch main has been updated by glebius:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=a370832bec5f4ba1077bc13ea9e369bc84e7b2a0

commit a370832bec5f4ba1077bc13ea9e369bc84e7b2a0
Author:     Gleb Smirnoff <[email protected]>
AuthorDate: 2021-12-26 16:48:24 +0000
Commit:     Gleb Smirnoff <[email protected]>
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);

Reply via email to