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;