Mark Kettenis <[email protected]> wrote:
> So isn't the real problem that some of the lower-level code involved
> in the resume path isn't properly marked to not do the
> instrumentation? Traditionally that was assembly code and we'd use
> NENTRY() (in amd64) or ENTRY_NP() (on some other architectures) to
> prevent thise functions from calling _mcount(). But that was only
> ever done for code used during early bootstrap of the kernel. And
> these days there may be C code that needs this as well.
>
> With your diff, functions in the suspend/resume path will still call
> _mcount() which may not be safe.
I guess you can make critical functions not do _PROF_PROLOGUE
or you can make __mcount or _mcount aware that they should "do nothing",
or "nothing scary".
Hell, save & toggle the 'gmoninit' variable during the suspend/resume
sequence, and then adjust one comment:
/*
* Do not profile execution if memory for the current CPU
* descriptor and profiling buffers has not yet been allocated
* or if the CPU we are running on has not yet set its trap
- * handler
+ * handler, or disabled during a suspend/resume sequence
*/
if (gmoninit == 0)
return;
Does this really need another variable?
It feels like this can be 4 1-line diffs.