On Sun, Jul 09, 2023 at 10:25:46AM +0300, YASUOKA Masahiko wrote:
> On Sat, 08 Jul 2023 21:58:30 +0300 (EEST)
> YASUOKA Masahiko <[email protected]> wrote:
> > The diff makes the mbstat be the same size which is actually used.
> > Also revert the previous that the mbstat is located on the stack.
>
> The userland program also needed to be changed.
>
> ok?
The code in netstat still has some more 256 bits:
bool seen[256]; /* "have we seen this type yet?" */
I guess that can be fixed once this is in tree.
The diff is OK claudio@
> Index: sys/kern/kern_sysctl.c
> ===================================================================
> RCS file: /cvs/src/sys/kern/kern_sysctl.c,v
> retrieving revision 1.417
> diff -u -p -r1.417 kern_sysctl.c
> --- sys/kern/kern_sysctl.c 7 Jul 2023 16:27:46 -0000 1.417
> +++ sys/kern/kern_sysctl.c 9 Jul 2023 07:22:58 -0000
> @@ -515,22 +515,20 @@ kern_sysctl(int *name, u_int namelen, vo
> case KERN_MBSTAT: {
> extern struct cpumem *mbstat;
> uint64_t counters[MBSTAT_COUNT];
> - struct mbstat *mbs;
> + struct mbstat mbs;
> unsigned int i;
> - int ret;
>
> - mbs = malloc(sizeof(*mbs), M_TEMP, M_WAITOK | M_ZERO);
> + memset(&mbs, 0, sizeof(mbs));
> counters_read(mbstat, counters, MBSTAT_COUNT);
> for (i = 0; i < MBSTAT_TYPES; i++)
> - mbs->m_mtypes[i] = counters[i];
> + mbs.m_mtypes[i] = counters[i];
>
> - mbs->m_drops = counters[MBSTAT_DROPS];
> - mbs->m_wait = counters[MBSTAT_WAIT];
> - mbs->m_drain = counters[MBSTAT_DRAIN];
> + mbs.m_drops = counters[MBSTAT_DROPS];
> + mbs.m_wait = counters[MBSTAT_WAIT];
> + mbs.m_drain = counters[MBSTAT_DRAIN];
>
> - ret = sysctl_rdstruct(oldp, oldlenp, newp, mbs, sizeof(*mbs));
> - free(mbs, M_TEMP, sizeof(*mbs));
> - return (ret);
> + return (sysctl_rdstruct(oldp, oldlenp, newp,
> + &mbs, sizeof(mbs)));
> }
> case KERN_MSGBUFSIZE:
> case KERN_CONSBUFSIZE: {
> Index: sys/sys/mbuf.h
> ===================================================================
> RCS file: /cvs/src/sys/sys/mbuf.h,v
> retrieving revision 1.260
> diff -u -p -r1.260 mbuf.h
> --- sys/sys/mbuf.h 7 Jul 2023 14:17:34 -0000 1.260
> +++ sys/sys/mbuf.h 9 Jul 2023 07:22:58 -0000
> @@ -363,6 +363,12 @@ u_int mextfree_register(void (*)(caddr_t
> /* length to m_copy to copy all */
> #define M_COPYALL 1000000000
>
> +#define MBSTAT_TYPES MT_NTYPES
> +#define MBSTAT_DROPS (MBSTAT_TYPES + 0)
> +#define MBSTAT_WAIT (MBSTAT_TYPES + 1)
> +#define MBSTAT_DRAIN (MBSTAT_TYPES + 2)
> +#define MBSTAT_COUNT (MBSTAT_TYPES + 3)
> +
> /*
> * Mbuf statistics.
> * For statistics related to mbuf and cluster allocations, see also the
> @@ -372,14 +378,9 @@ struct mbstat {
> u_long m_drops; /* times failed to find space */
> u_long m_wait; /* times waited for space */
> u_long m_drain; /* times drained protocols for space */
> - u_long m_mtypes[256]; /* type specific mbuf allocations */
> + u_long m_mtypes[MBSTAT_COUNT];
> + /* type specific mbuf allocations */
> };
> -
> -#define MBSTAT_TYPES MT_NTYPES
> -#define MBSTAT_DROPS (MBSTAT_TYPES + 0)
> -#define MBSTAT_WAIT (MBSTAT_TYPES + 1)
> -#define MBSTAT_DRAIN (MBSTAT_TYPES + 2)
> -#define MBSTAT_COUNT (MBSTAT_TYPES + 3)
>
> #include <sys/mutex.h>
>
> Index: usr.bin/netstat/mbuf.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/netstat/mbuf.c,v
> retrieving revision 1.44
> diff -u -p -r1.44 mbuf.c
> --- usr.bin/netstat/mbuf.c 7 Jul 2023 14:17:35 -0000 1.44
> +++ usr.bin/netstat/mbuf.c 9 Jul 2023 07:22:58 -0000
> @@ -93,7 +93,7 @@ mbpr(void)
> struct mbtypes *mp;
> size_t size;
>
> - if (nmbtypes != 256) {
> + if (nmbtypes != MBSTAT_COUNT) {
> fprintf(stderr,
> "%s: unexpected change to mbstat; check source\n",
> __progname);
>
>
>
>
--
:wq Claudio