mirror of
https://git.freebsd.org/ports.git
synced 2025-04-28 01:26:39 -04:00
84 lines
2.5 KiB
Text
84 lines
2.5 KiB
Text
From fdb5c4920b45139fb3c37e1144643c0f756364b6 Mon Sep 17 00:00:00 2001
|
|
From: Maria Matejka <mq@ucw.cz>
|
|
Date: Tue, 24 Dec 2024 13:22:56 +0100
|
|
Subject: [PATCH] BGP: TX bucket storage moved to Stonehenge
|
|
|
|
---
|
|
proto/bgp/attrs.c | 11 +++++++----
|
|
proto/bgp/bgp.h | 4 ++--
|
|
2 files changed, 9 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/proto/bgp/attrs.c b/proto/bgp/attrs.c
|
|
index a2feaef53..725c469ff 100644
|
|
--- proto/bgp/attrs.c
|
|
+++ proto/bgp/attrs.c
|
|
@@ -1734,13 +1734,16 @@ bgp_get_bucket(struct bgp_ptx_private *c, ea_list *new)
|
|
uint size = sizeof(struct bgp_bucket) + ea_size;
|
|
|
|
/* Allocate the bucket */
|
|
- b = mb_alloc(c->pool, size);
|
|
+ sth_block blk = sth_alloc(c->sth, size);
|
|
+ b = blk.block;
|
|
*b = (struct bgp_bucket) { };
|
|
init_list(&b->prefixes);
|
|
b->hash = hash;
|
|
|
|
/* Copy the ea_list */
|
|
ea_list_copy(b->eattrs, new, ea_size);
|
|
+ if (blk.large)
|
|
+ b->eattrs->flags |= EALF_HUGE;
|
|
|
|
/* Insert the bucket to bucket hash */
|
|
HASH_INSERT2(c->bucket_hash, RBH, c->pool, b);
|
|
@@ -1764,7 +1767,7 @@ static void
|
|
bgp_free_bucket(struct bgp_ptx_private *c, struct bgp_bucket *b)
|
|
{
|
|
HASH_REMOVE2(c->bucket_hash, RBH, c->pool, b);
|
|
- mb_free(b);
|
|
+ sth_free((sth_block) { b, !!(b->eattrs->flags & EALF_HUGE) });
|
|
}
|
|
|
|
int
|
|
@@ -2086,6 +2089,7 @@ bgp_init_pending_tx(struct bgp_channel *c)
|
|
|
|
bpp->lock = dom;
|
|
bpp->pool = p;
|
|
+ bpp->sth = sth_new(p);
|
|
bpp->c = c;
|
|
|
|
bgp_init_bucket_table(bpp);
|
|
@@ -2160,8 +2164,7 @@ bgp_free_pending_tx(struct bgp_channel *bc)
|
|
HASH_WALK_END;
|
|
|
|
HASH_FREE(c->bucket_hash);
|
|
- sl_delete(c->bucket_slab);
|
|
- c->bucket_slab = NULL;
|
|
+ sth_delete(c->sth);
|
|
|
|
rp_free(c->pool);
|
|
|
|
diff --git a/proto/bgp/bgp.h b/proto/bgp/bgp.h
|
|
index 202e78ba3..dac6e84ea 100644
|
|
--- proto/bgp/bgp.h
|
|
+++ proto/bgp/bgp.h
|
|
@@ -452,7 +452,8 @@ struct bgp_ptx_private {
|
|
struct { BGP_PTX_PUBLIC; };
|
|
struct bgp_ptx_private **locked_at;
|
|
|
|
- pool *pool; /* Resource pool for TX related allocations */
|
|
+ pool *pool; /* Pool for infrequent long-term blocks */
|
|
+ stonehenge *sth; /* Bucket allocator */
|
|
|
|
HASH(struct bgp_bucket) bucket_hash; /* Hash table of route buckets */
|
|
struct bgp_bucket *withdraw_bucket; /* Withdrawn routes */
|
|
@@ -461,7 +462,6 @@ struct bgp_ptx_private {
|
|
HASH(struct bgp_prefix) prefix_hash; /* Hash table of pending prefices */
|
|
|
|
slab *prefix_slab; /* Slab holding prefix nodes */
|
|
- slab *bucket_slab; /* Slab holding buckets to send */
|
|
|
|
char bmp; /* This is a fake ptx for BMP encoding */
|
|
};
|
|
--
|
|
GitLab
|
|
|