Hi Padmarao,
On 05/08/2026 12:33, Padmarao Begari wrote:
> PBUF_POOL_SIZE/IP_REASS_MAX_PBUFS are only scaled up for large TFTP
> block sizes when CONFIG_TFTP_BLOCKSIZE is strictly greater than
> TFTP_BLOCKSIZE_THRESHOLD (4096). Since the threshold itself is 4096,
> setting CONFIG_TFTP_BLOCKSIZE=4096 exactly falls through to the small
> fixed pool (PBUF_POOL_SIZE=8, IP_REASS_MAX_PBUFS=4) instead of the
> scaled one.
What practical benefit do we get by using the scaled velues (for 4096
that's PBUF_POOL_SIZE=9, IP_REASS_MAX_PBUFS=5 if I'm not mistaken)?
>
> At blocksize 4096, the full UDP datagram (4096 data + 4-byte TFTP
> header + 8-byte UDP header = 4108 bytes) exceeds the usable IP fragment
> size (1480 bytes) and is split into 3 IP fragments that lwIP must
> reassemble on receive. The scaled sizing accounts for this explicitly
> (giving PBUF_POOL_SIZE=9, IP_REASS_MAX_PBUFS=5), so the threshold
> should include the boundary value rather than exclude it.
>
> Change the comparison to '>=' so that CONFIG_TFTP_BLOCKSIZE=4096 also
> gets the scaled pool sizing.
>
> Fixes: 67586012490a ("net: lwip: scale buffer pool size with TFTP block size")
> Signed-off-by: Padmarao Begari <[email protected]>
> ---
> lib/lwip/u-boot/lwipopts.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/lib/lwip/u-boot/lwipopts.h b/lib/lwip/u-boot/lwipopts.h
> index 8dae004f1a2..733478a0cda 100644
> --- a/lib/lwip/u-boot/lwipopts.h
> +++ b/lib/lwip/u-boot/lwipopts.h
> @@ -72,7 +72,7 @@
> #define PBUF_POOL_RESERVE 4
> #define TFTP_BLOCKSIZE_THRESHOLD 4096
>
> -#if defined(CONFIG_TFTP_BLOCKSIZE) && (CONFIG_TFTP_BLOCKSIZE >
> TFTP_BLOCKSIZE_THRESHOLD)
> +#if defined(CONFIG_TFTP_BLOCKSIZE) && (CONFIG_TFTP_BLOCKSIZE >=
> TFTP_BLOCKSIZE_THRESHOLD)
> #define PBUF_POOL_SIZE (((CONFIG_TFTP_BLOCKSIZE +
> (IP_FRAG_MTU_USABLE - 1)) / \
> IP_FRAG_MTU_USABLE) +
> PBUF_POOL_HEADROOM)
I realize that this computation of PBUF_POOL_SIZE does not take into account
the TFTP overhead. Shouldn't this be:
#define TFTP_PACKET_OVERHEAD (4 + 8)
#define PBUF_POOL_SIZE \
(((CONFIG_TFTP_BLOCKSIZE + TFTP_PACKET_OVERHEAD + \
IP_FRAG_MTU_USABLE - 1) / IP_FRAG_MTU_USABLE) + \
PBUF_POOL_HEADROOM)
?
Thanks,
--
Jerome