On Mon, Oct 24, 2016 at 02:48:03PM +1000, David Gwynne wrote:
> cos its not resizing the allocation, its allocating them for new cpus.
realloc is not a good name, so yes to renaming.
> the same goes for counters_realloc being named counters_alloc_ncpus.
Does the n mean new? This is never mentioned, I initially thought
it means number. What about ..._newcpus or ..._allcpus?
> +.Fn COUNTERS_BOOT_INITIALIZER
> +is used to initialise a cpumem pointer with the memory that was previously
> +allocated using
> +.Fn COUNTERS_BOOT_MEMORY
> +and identified by
> +.Fa NAME .
The boot counters are zero initially.
> +The
> +.Fa type
> +argument specifies the type of memory that the counters will be
> +allocated as via
> +.Xr malloc 9 .
> +The memory will be zeroed on allocation by passing
> +.Fn M_ZERO
Is the M_ZERO an implementation detail for counters that should not
be mentionend in the man page?
> +to
> +.Xr malloc 9 .
The counters on the boot cpu are preserved.
> +.Fn CPUMEM_BOOT_INITIALIZER
> +is used to initialise a cpumem pointer with the memory that was previously
> +allocated using
> +.Fn CPUMEM_BOOT_MEMORY
> +and identified by
> +.Fa NAME .
The boot cpu uses static memory that is initially zero.
> +.Fn cpumem_malloc_ncpus
> +allocates
> +.Fa sz
> +bytes of
> +.Fa type
> +memory for each additional CPU using
> +.Xr malloc 9 .
> +The memory will be zeroed on allocation by passing
> +.Fn M_ZERO
> +to
> +.Xr malloc 9 .
The the memory of the boot cpu is preserved.
> ===================================================================
> RCS file: /cvs/src/sys/kern/subr_percpu.c,v
> retrieving revision 1.3
> diff -u -p -r1.3 subr_percpu.c
> --- sys/kern/subr_percpu.c 24 Oct 2016 03:15:38 -0000 1.3
> +++ sys/kern/subr_percpu.c 24 Oct 2016 04:43:34 -0000
> @@ -76,7 +76,7 @@ cpumem_malloc(size_t sz, int type)
> }
>
> struct cpumem *
> -cpumem_realloc(struct cpumem *bootcm, size_t sz, int type)
> +cpumem_alloc_ncpus(struct cpumem *bootcm, size_t sz, int type)
This should be cpumem_malloc_ncpus.
> {
> struct cpumem *cm;
> unsigned int cpu;
> @@ -146,10 +146,10 @@ counters_alloc(unsigned int n, int type)
> }
>
> struct cpumem *
> -counters_realloc(struct cpumem *cm, unsigned int n, int type)
> +counters_alloc_ncpus(struct cpumem *cm, unsigned int n, int type)
> {
> n++; /* the generation number */
> - return (cpumem_realloc(cm, n * sizeof(uint64_t), type));
> + return (cpumem_alloc_ncpus(cm, n * sizeof(uint64_t), type));
This should be cpumem_malloc_ncpus.
> }
>
> void
> @@ -259,7 +259,7 @@ cpumem_malloc(size_t sz, int type)
> }
>
> struct cpumem *
> -cpumem_realloc(struct cpumem *cm, size_t sz, int type)
> +cpumem_allod_ncpus(struct cpumem *cm, size_t sz, int type)
This should be cpumem_malloc_ncpus.
> {
> return (cm);
> }
> @@ -291,10 +291,10 @@ counters_alloc(unsigned int n, int type)
> }
>
> struct cpumem *
> -counters_realloc(struct cpumem *cm, unsigned int n, int type)
> +counters_alloc_ncpus(struct cpumem *cm, unsigned int n, int type)
> {
> /* this is unecessary, but symmetrical */
> - return (cpumem_realloc(cm, n * sizeof(uint64_t), type));
> + return (cpumem_alloc_ncpus(cm, n * sizeof(uint64_t), type));
This should be cpumem_malloc_ncpus.
> }
>
> void
> Index: sys/sys/percpu.h
> ===================================================================
> RCS file: /cvs/src/sys/sys/percpu.h,v
> retrieving revision 1.2
> diff -u -p -r1.2 percpu.h
> --- sys/sys/percpu.h 24 Oct 2016 03:15:35 -0000 1.2
> +++ sys/sys/percpu.h 24 Oct 2016 04:43:34 -0000
> @@ -54,7 +54,7 @@ struct cpumem *cpumem_get(struct pool *)
> void cpumem_put(struct pool *, struct cpumem *);
>
> struct cpumem *cpumem_malloc(size_t, int);
> -struct cpumem *cpumem_realloc(struct cpumem *, size_t, int);
> +struct cpumem *cpumem_malloc_ncpus(struct cpumem *, size_t, int);
I wonder how this compiled as you use cpumem_malloc_ncpus correctly
here.
> void cpumem_free(struct cpumem *, int, size_t);
>
> void *cpumem_first(struct cpumem_iter *, struct cpumem *);
> @@ -111,7 +111,7 @@ static struct {
> \
> */
>
> struct cpumem *counters_alloc(unsigned int, int);
> -struct cpumem *counters_realloc(struct cpumem *, unsigned int, int);
> +struct cpumem *counters_alloc_ncpus(struct cpumem *, unsigned int,
> int);
> void counters_free(struct cpumem *, int, unsigned int);
> void counters_read(struct cpumem *, uint64_t *, unsigned int);
> void counters_zero(struct cpumem *, unsigned int);