this gives us back 5k on amd64. ok?
Index: ip_ipsp.c =================================================================== RCS file: /cvs/src/sys/netinet/ip_ipsp.c,v retrieving revision 1.214 diff -u -p -r1.214 ip_ipsp.c --- ip_ipsp.c 23 May 2015 12:38:53 -0000 1.214 +++ ip_ipsp.c 6 Sep 2016 05:06:27 -0000 @@ -98,12 +98,14 @@ struct ipsec_ids_tree ipsec_ids_tree; struct ipsec_ids_flows ipsec_ids_flows; void ipsp_ids_timeout(void *); -static int ipsp_ids_cmp(struct ipsec_ids *, struct ipsec_ids *); -static int ipsp_ids_flow_cmp(struct ipsec_ids *, struct ipsec_ids *); -RB_PROTOTYPE(ipsec_ids_tree, ipsec_ids, id_node_flow, ipsp_ids_cmp); -RB_PROTOTYPE(ipsec_ids_flows, ipsec_ids, id_node_id, ipsp_ids_flow_cmp); -RB_GENERATE(ipsec_ids_tree, ipsec_ids, id_node_flow, ipsp_ids_cmp); -RB_GENERATE(ipsec_ids_flows, ipsec_ids, id_node_id, ipsp_ids_flow_cmp); +static inline int ipsp_ids_cmp(const struct ipsec_ids *, + const struct ipsec_ids *); +static inline int ipsp_ids_flow_cmp(const struct ipsec_ids *, + const struct ipsec_ids *); +RBT_PROTOTYPE(ipsec_ids_tree, ipsec_ids, id_node_flow, ipsp_ids_cmp); +RBT_PROTOTYPE(ipsec_ids_flows, ipsec_ids, id_node_id, ipsp_ids_flow_cmp); +RBT_GENERATE(ipsec_ids_tree, ipsec_ids, id_node_flow, ipsp_ids_cmp); +RBT_GENERATE(ipsec_ids_flows, ipsec_ids, id_node_id, ipsp_ids_flow_cmp); /* * This is the proper place to define the various encapsulation transforms. @@ -905,7 +907,7 @@ ipsp_ids_insert(struct ipsec_ids *ids) struct ipsec_ids *found; u_int32_t start_flow; - found = RB_INSERT(ipsec_ids_tree, &ipsec_ids_tree, ids); + found = RBT_INSERT(ipsec_ids_tree, &ipsec_ids_tree, ids); if (found) { /* if refcount was zero, then timeout is running */ if (found->id_refcount++ == 0) @@ -917,7 +919,7 @@ ipsp_ids_insert(struct ipsec_ids *ids) ids->id_flow = start_flow = ipsec_ids_next_flow; if (++ipsec_ids_next_flow == 0) ipsec_ids_next_flow = 1; - while (RB_INSERT(ipsec_ids_flows, &ipsec_ids_flows, ids) != NULL) { + while (RBT_INSERT(ipsec_ids_flows, &ipsec_ids_flows, ids) != NULL) { ids->id_flow = ipsec_ids_next_flow; if (++ipsec_ids_next_flow == 0) ipsec_ids_next_flow = 1; @@ -939,7 +941,7 @@ ipsp_ids_lookup(u_int32_t ipsecflowinfo) struct ipsec_ids key; key.id_flow = ipsecflowinfo; - return RB_FIND(ipsec_ids_flows, &ipsec_ids_flows, &key); + return RBT_FIND(ipsec_ids_flows, &ipsec_ids_flows, &key); } /* free ids only from delayed timeout */ @@ -952,8 +954,8 @@ ipsp_ids_timeout(void *arg) DPRINTF(("%s: ids %p count %d\n", __func__, ids, ids->id_refcount)); KASSERT(ids->id_refcount == 0); s = splsoftnet(); - RB_REMOVE(ipsec_ids_tree, &ipsec_ids_tree, ids); - RB_REMOVE(ipsec_ids_flows, &ipsec_ids_flows, ids); + RBT_REMOVE(ipsec_ids_tree, &ipsec_ids_tree, ids); + RBT_REMOVE(ipsec_ids_flows, &ipsec_ids_flows, ids); free(ids->id_local, M_CREDENTIALS, 0); free(ids->id_remote, M_CREDENTIALS, 0); free(ids, M_CREDENTIALS, 0); @@ -988,8 +990,8 @@ ipsp_id_cmp(struct ipsec_id *a, struct i return memcmp(a + 1, b + 1, a->len); } -static int -ipsp_ids_cmp(struct ipsec_ids *a, struct ipsec_ids *b) +static inline int +ipsp_ids_cmp(const struct ipsec_ids *a, const struct ipsec_ids *b) { int ret; @@ -999,8 +1001,8 @@ ipsp_ids_cmp(struct ipsec_ids *a, struct return ipsp_id_cmp(a->id_local, b->id_local); } -static int -ipsp_ids_flow_cmp(struct ipsec_ids *a, struct ipsec_ids *b) +static inline int +ipsp_ids_flow_cmp(const struct ipsec_ids *a, const struct ipsec_ids *b) { if (a->id_flow > b->id_flow) return 1; Index: ip_ipsp.h =================================================================== RCS file: /cvs/src/sys/netinet/ip_ipsp.h,v retrieving revision 1.173 diff -u -p -r1.173 ip_ipsp.h --- ip_ipsp.h 3 Dec 2015 13:12:20 -0000 1.173 +++ ip_ipsp.h 6 Sep 2016 05:06:27 -0000 @@ -166,16 +166,16 @@ struct ipsec_id { }; struct ipsec_ids { - RB_ENTRY(ipsec_ids) id_node_id; - RB_ENTRY(ipsec_ids) id_node_flow; + RBT_ENTRY(ipsec_ids) id_node_id; + RBT_ENTRY(ipsec_ids) id_node_flow; struct ipsec_id *id_local; struct ipsec_id *id_remote; u_int32_t id_flow; int id_refcount; struct timeout id_timeout; }; -RB_HEAD(ipsec_ids_flows, ipsec_ids); -RB_HEAD(ipsec_ids_tree, ipsec_ids); +RBT_HEAD(ipsec_ids_flows, ipsec_ids); +RBT_HEAD(ipsec_ids_tree, ipsec_ids); struct ipsec_acquire { union sockaddr_union ipa_addr;