git: b8394039dc25 - main - mbuf(9): Fix size of mbuf for all 32-bit platforms (i386, ARM, PowerPC and RISCV)
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 07 Jun 2022 20:14:20 UTC
The branch main has been updated by hselasky: URL: https://cgit.FreeBSD.org/src/commit/?id=b8394039dc252698711ded30045af20481db79e0 commit b8394039dc252698711ded30045af20481db79e0 Author: Hans Petter Selasky <hselasky@FreeBSD.org> AuthorDate: 2022-06-07 19:55:01 +0000 Commit: Hans Petter Selasky <hselasky@FreeBSD.org> CommitDate: 2022-06-07 20:09:10 +0000 mbuf(9): Fix size of mbuf for all 32-bit platforms (i386, ARM, PowerPC and RISCV) Do this by reducing the size of the MBUF_PEXT_MAX_PGS, causing "struct mbuf" to be bigger than M_SIZE, and also add a missing padding field to ensure 64-bit alignment. Reviewed by: gallatin@ Reported by: Elliott Mitchell Differential revision: https://reviews.freebsd.org/D35339 MFC after: 1 week Sponsored by: NVIDIA Networking --- sys/kern/uipc_mbuf.c | 6 +++--- sys/sys/mbuf.h | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/sys/kern/uipc_mbuf.c b/sys/kern/uipc_mbuf.c index 4a5bb45e9573..02a9a120b970 100644 --- a/sys/kern/uipc_mbuf.c +++ b/sys/kern/uipc_mbuf.c @@ -184,12 +184,12 @@ CTASSERT(sizeof(struct pkthdr) == 64); CTASSERT(sizeof(struct m_ext) == 160); #else CTASSERT(offsetof(struct mbuf, m_dat) == 24); -CTASSERT(sizeof(struct pkthdr) == 52); +CTASSERT(sizeof(struct pkthdr) == 56); #if defined(__powerpc__) && defined(BOOKE) /* PowerPC booke has 64-bit physical pointers. */ -CTASSERT(sizeof(struct m_ext) == 184); +CTASSERT(sizeof(struct m_ext) == 176); #else -CTASSERT(sizeof(struct m_ext) == 180); +CTASSERT(sizeof(struct m_ext) == 172); #endif #endif diff --git a/sys/sys/mbuf.h b/sys/sys/mbuf.h index c9b3df075105..dc32a1e23c38 100644 --- a/sys/sys/mbuf.h +++ b/sys/sys/mbuf.h @@ -180,6 +180,9 @@ struct pkthdr { uint16_t fibnum; /* this packet should use this fib */ uint8_t numa_domain; /* NUMA domain of recvd pkt */ uint8_t rsstype; /* hash type */ +#if !defined(__LP64__) + uint32_t pad; /* pad for 64bit alignment */ +#endif union { uint64_t rcv_tstmp; /* timestamp in ns */ struct { @@ -245,7 +248,7 @@ struct pkthdr { #if defined(__LP64__) #define MBUF_PEXT_MAX_PGS (40 / sizeof(vm_paddr_t)) #else -#define MBUF_PEXT_MAX_PGS (72 / sizeof(vm_paddr_t)) +#define MBUF_PEXT_MAX_PGS (64 / sizeof(vm_paddr_t)) #endif #define MBUF_PEXT_MAX_BYTES \