From cc6d6663956d1ed5becb1f5f3cd53d3cd899fdf0 Mon Sep 17 00:00:00 2001 From: Dimitri Staessens Date: Fri, 1 May 2026 12:39:03 +0200 Subject: lib: Rename ssm_pk_buff_get_idx to ssm_pk_buff_get_off The shared memory pool is now offset based instead of block index-based like the old shm_rdrbuff allocator. This renames the API more consistently. Also changes variables names to off instead of idx for consistency. Signed-off-by: Dimitri Staessens Signed-off-by: Sander Vrijders --- src/lib/dev.c | 67 +++++++++++++++++----------------- src/lib/frct.c | 2 +- src/lib/ssm/pool.c | 4 +- src/lib/ssm/rbuff.c | 8 ++-- src/lib/ssm/tests/pool_sharding_test.c | 4 +- src/lib/timerwheel.c | 2 +- 6 files changed, 44 insertions(+), 43 deletions(-) (limited to 'src/lib') diff --git a/src/lib/dev.c b/src/lib/dev.c index 53266648..ff63b818 100644 --- a/src/lib/dev.c +++ b/src/lib/dev.c @@ -1284,7 +1284,7 @@ static int flow_tx_spb(struct flow * flow, pthread_rwlock_unlock(&proc.lock); - idx = ssm_pk_buff_get_idx(spb); + idx = ssm_pk_buff_get_off(spb); pthread_rwlock_rdlock(&proc.lock); @@ -2036,7 +2036,7 @@ int ipcp_flow_write(int fd, } static int pool_copy_spb(struct ssm_pool * src_pool, - ssize_t src_idx, + ssize_t src_off, struct ssm_pool * dst_pool, struct ssm_pk_buff ** dst_spb) { @@ -2044,14 +2044,14 @@ static int pool_copy_spb(struct ssm_pool * src_pool, uint8_t * ptr; size_t len; - src = ssm_pool_get(src_pool, src_idx); + src = ssm_pool_get(src_pool, src_off); len = ssm_pk_buff_len(src); if (ssm_pool_alloc(dst_pool, len, &ptr, dst_spb) < 0) return -ENOMEM; memcpy(ptr, ssm_pk_buff_head(src), len); - ssm_pool_remove(src_pool, src_idx); + ssm_pool_remove(src_pool, src_off); return 0; } @@ -2061,7 +2061,7 @@ int np1_flow_read(int fd, struct ssm_pool * pool) { struct flow * flow; - ssize_t idx = -1; + ssize_t off = -1; assert(fd >= 0 && fd < SYS_MAX_FLOWS); assert(spb); @@ -2072,20 +2072,20 @@ int np1_flow_read(int fd, pthread_rwlock_rdlock(&proc.lock); - idx = ssm_rbuff_read(flow->rx_rb); - if (idx < 0) { + off = ssm_rbuff_read(flow->rx_rb); + if (off < 0) { pthread_rwlock_unlock(&proc.lock); - return idx; + return off; } pthread_rwlock_unlock(&proc.lock); if (pool == NULL) { - *spb = ssm_pool_get(proc.pool, idx); + *spb = ssm_pool_get(proc.pool, off); } else { /* Cross-pool copy: PUP -> GSPP */ - if (pool_copy_spb(pool, idx, proc.pool, spb) < 0) { - ssm_pool_remove(pool, idx); + if (pool_copy_spb(pool, off, proc.pool, spb) < 0) { + ssm_pool_remove(pool, off); return -ENOMEM; } } @@ -2100,8 +2100,8 @@ int np1_flow_write(int fd, struct flow * flow; struct ssm_pk_buff * dst; int ret; - ssize_t idx; - ssize_t dst_idx; + ssize_t src_off; + ssize_t dst_off; assert(fd >= 0 && fd < SYS_MAX_FLOWS); assert(spb); @@ -2122,25 +2122,25 @@ int np1_flow_write(int fd, pthread_rwlock_unlock(&proc.lock); - idx = ssm_pk_buff_get_idx(spb); + src_off = ssm_pk_buff_get_off(spb); if (pool == NULL) { - ret = ssm_rbuff_write_b(flow->tx_rb, idx, NULL); + ret = ssm_rbuff_write_b(flow->tx_rb, src_off, NULL); if (ret < 0) return ret; ssm_flow_set_notify(flow->set, flow->info.id, FLOW_PKT); } else { /* Cross-pool copy: GSPP -> PUP */ - if (pool_copy_spb(proc.pool, idx, pool, &dst) < 0) + if (pool_copy_spb(proc.pool, src_off, pool, &dst) < 0) return -ENOMEM; - dst_idx = ssm_pk_buff_get_idx(dst); - ret = ssm_rbuff_write_b(flow->tx_rb, dst_idx, NULL); + dst_off = ssm_pk_buff_get_off(dst); + ret = ssm_rbuff_write_b(flow->tx_rb, dst_off, NULL); if (ret < 0) { - ssm_pool_remove(pool, dst_idx); + ssm_pool_remove(pool, dst_off); return ret; } ssm_flow_set_notify(flow->set, flow->info.id, FLOW_PKT); - ssm_pool_remove(proc.pool, idx); + ssm_pool_remove(proc.pool, src_off); } return 0; @@ -2154,7 +2154,7 @@ int ipcp_spb_reserve(struct ssm_pk_buff ** spb, void ipcp_spb_release(struct ssm_pk_buff * spb) { - ssm_pool_remove(proc.pool, ssm_pk_buff_get_idx(spb)); + ssm_pool_remove(proc.pool, ssm_pk_buff_get_off(spb)); } int ipcp_flow_fini(int fd) @@ -2229,7 +2229,8 @@ int local_flow_transfer(int src_fd, struct ssm_pk_buff * dst_spb; struct ssm_pool * sp; struct ssm_pool * dp; - ssize_t idx; + ssize_t src_off; + ssize_t dst_off; int ret; assert(src_fd >= 0); @@ -2243,15 +2244,15 @@ int local_flow_transfer(int src_fd, pthread_rwlock_rdlock(&proc.lock); - idx = ssm_rbuff_read(src_flow->rx_rb); - if (idx < 0) { + src_off = ssm_rbuff_read(src_flow->rx_rb); + if (src_off < 0) { pthread_rwlock_unlock(&proc.lock); - return idx; + return src_off; } if (dst_flow->info.id < 0) { pthread_rwlock_unlock(&proc.lock); - ssm_pool_remove(sp, idx); + ssm_pool_remove(sp, src_off); return -ENOTALLOC; } @@ -2259,23 +2260,23 @@ int local_flow_transfer(int src_fd, if (sp == dp) { /* Same pool: zero-copy */ - ret = ssm_rbuff_write_b(dst_flow->tx_rb, idx, NULL); + ret = ssm_rbuff_write_b(dst_flow->tx_rb, src_off, NULL); if (ret < 0) - ssm_pool_remove(sp, idx); + ssm_pool_remove(sp, src_off); else ssm_flow_set_notify(dst_flow->set, dst_flow->info.id, FLOW_PKT); } else { /* Different pools: single copy */ - if (pool_copy_spb(sp, idx, dp, &dst_spb) < 0) { - ssm_pool_remove(sp, idx); + if (pool_copy_spb(sp, src_off, dp, &dst_spb) < 0) { + ssm_pool_remove(sp, src_off); return -ENOMEM; } - idx = ssm_pk_buff_get_idx(dst_spb); - ret = ssm_rbuff_write_b(dst_flow->tx_rb, idx, NULL); + dst_off = ssm_pk_buff_get_off(dst_spb); + ret = ssm_rbuff_write_b(dst_flow->tx_rb, dst_off, NULL); if (ret < 0) - ssm_pool_remove(dp, idx); + ssm_pool_remove(dp, dst_off); else ssm_flow_set_notify(dst_flow->set, dst_flow->info.id, FLOW_PKT); diff --git a/src/lib/frct.c b/src/lib/frct.c index fad2cf69..4d14362e 100644 --- a/src/lib/frct.c +++ b/src/lib/frct.c @@ -815,7 +815,7 @@ static void __frcti_rcv(struct frcti * frcti, pci = (struct frct_pci *) ssm_pk_buff_head_release(spb, FRCT_PCILEN); - idx = ssm_pk_buff_get_idx(spb); + idx = ssm_pk_buff_get_off(spb); seqno = ntoh32(pci->seqno); pos = seqno & (RQ_SIZE - 1); diff --git a/src/lib/ssm/pool.c b/src/lib/ssm/pool.c index f17a6e65..6829b217 100644 --- a/src/lib/ssm/pool.c +++ b/src/lib/ssm/pool.c @@ -746,7 +746,7 @@ ssize_t ssm_pool_read(uint8_t ** dst, } struct ssm_pk_buff * ssm_pool_get(struct ssm_pool * pool, - size_t off) + size_t off) { struct ssm_pk_buff * blk; @@ -825,7 +825,7 @@ int ssm_pool_remove(struct ssm_pool * pool, return 0; } -size_t ssm_pk_buff_get_idx(struct ssm_pk_buff * spb) +size_t ssm_pk_buff_get_off(struct ssm_pk_buff * spb) { assert(spb != NULL); diff --git a/src/lib/ssm/rbuff.c b/src/lib/ssm/rbuff.c index e4558c31..77e23010 100644 --- a/src/lib/ssm/rbuff.c +++ b/src/lib/ssm/rbuff.c @@ -232,7 +232,7 @@ void ssm_rbuff_close(struct ssm_rbuff * rb) } int ssm_rbuff_write(struct ssm_rbuff * rb, - size_t idx) + size_t off) { size_t acl; bool was_empty; @@ -261,7 +261,7 @@ int ssm_rbuff_write(struct ssm_rbuff * rb, was_empty = IS_EMPTY(rb); - HEAD(rb) = (ssize_t) idx; + HEAD(rb) = (ssize_t) off; ADVANCE_HEAD(rb); if (was_empty) @@ -278,7 +278,7 @@ int ssm_rbuff_write(struct ssm_rbuff * rb, } int ssm_rbuff_write_b(struct ssm_rbuff * rb, - size_t idx, + size_t off, const struct timespec * abstime) { size_t acl; @@ -316,7 +316,7 @@ int ssm_rbuff_write_b(struct ssm_rbuff * rb, if (ret != -ETIMEDOUT && ret != -EFLOWDOWN) { was_empty = IS_EMPTY(rb); - HEAD(rb) = (ssize_t) idx; + HEAD(rb) = (ssize_t) off; ADVANCE_HEAD(rb); if (was_empty) pthread_cond_broadcast(rb->add); diff --git a/src/lib/ssm/tests/pool_sharding_test.c b/src/lib/ssm/tests/pool_sharding_test.c index c53105e3..f2810c53 100644 --- a/src/lib/ssm/tests/pool_sharding_test.c +++ b/src/lib/ssm/tests/pool_sharding_test.c @@ -261,7 +261,7 @@ static int test_fallback_stealing(void) /* Free them all - they go to local_shard */ for (i = 0; i < total_blocks / 2; i++) { - size_t off = ssm_pk_buff_get_idx(spbs[i]); + size_t off = ssm_pk_buff_get_off(spbs[i]); if (ssm_pool_remove(pool, off) != 0) { printf("Remove %zu failed.\n", i); free(spbs); @@ -299,7 +299,7 @@ static int test_fallback_stealing(void) /* Now all allocated blocks are in use again */ /* Cleanup - free all allocated blocks */ for (i = 0; i < total_blocks / 2; i++) { - size_t off = ssm_pk_buff_get_idx(spbs[i]); + size_t off = ssm_pk_buff_get_off(spbs[i]); ssm_pool_remove(pool, off); } diff --git a/src/lib/timerwheel.c b/src/lib/timerwheel.c index 2c796c96..3cfb77e8 100644 --- a/src/lib/timerwheel.c +++ b/src/lib/timerwheel.c @@ -239,7 +239,7 @@ static void timerwheel_move(void) r->pkt = pci; ssm_pk_buff_wait_ack(spb); #endif - idx = ssm_pk_buff_get_idx(spb); + idx = ssm_pk_buff_get_off(spb); /* Retransmit the copy. */ pci->ackno = hton32(rcv_lwe); -- cgit v1.2.3