On Wed, Sep 06, 2023 at 12:23:33PM -0500, Scott Cheloha wrote:
> On Wed, Sep 06, 2023 at 01:04:19PM +0100, Martin Pieuchot wrote:
> > Debugging OOM is hard.  UVM uses per-CPU counters and sadly
> > counters_read(9) needs to allocate memory.  This is not acceptable in
> > ddb(4).  As a result I cannot see the content of UVM counters in OOM
> > situations.
> > 
> > Diff below introduces a *_static() variant of counters_read(9) that
> > takes a secondary buffer to avoid calling malloc(9).  Is it fine?  Do
> > you have a better idea?  Should we make it the default or using the
> > stack might be a problem?
> 
> Instead of adding a second interface I think we could get away with
> just extending counters_read(9) to take a scratch buffer as an optional
> fourth parameter:
> 
> void
> counters_read(struct cpumem *cm, uint64_t *output, unsigned int n,
>     uint64_t *scratch);
> 
> "scratch"?  "temp"?  "tmp"?

scratch is fine for me

> This kinda looks like a case where we could annotate these pointers
> with 'restrict', but I have never fully understood when 'restrict' is
> appropriate vs. when it is overkill or useless.

restrict scares me

#ifdef MULTIPROCESSOR

>  void
> -counters_read(struct cpumem *cm, uint64_t *output, unsigned int n)
> +counters_read(struct cpumem *cm, uint64_t *output, unsigned int n,
> +    uint64_t *scratch)

#else

>  void
> -counters_read(struct cpumem *cm, uint64_t *output, unsigned int n)
> +counters_read(struct cpumem *cm, uint64_t *output, uint64_t *scratch,
> +    unsigned int n)

Here scratch and n are swapped.  Build a ramdisk kernel :-)

bluhm

Reply via email to