> I've read through most of the docs (although my eyes certainly glazed
> over when I got to the tracehook stuff).

That stuff is for kernel maintainers, as it says.  You don't really need to
know.  For that part, just checking for typos is all the help it needs.

> What's there seems to be pretty good.  I think it is missing (or at
> least I missed it) a good description of how to asynchronously stop a
> thread.  What are the ins-and-outs here, knowing how/when to use
> UTRACE_STOP vs. UTRACE_INTERRUPT, etc.

Yeah, the kerneldoc-driven format doesn't lend itself to a lot of
exposition.  The details are in there in the utrace_control description.
But I guess it's not real obvious how to put it all together.

How is the "Stopping Safely" section?  That seems like the place to add
something more direct about this.  Was there something other than the
UTRACE_INTERRUPT issue that didn't seem clear?

Is that not clear to you, or is it just not clear in the documentation?

You use UTRACE_INTERRUPT when you want to interfere with system calls in
progress (or blocking page faults or whatever).  To interrupt and stop
(like PTRACE_ATTACH does) and handle it already being stopped, you really
want to do UTRACE_STOP first and see 0 if it's already stopped.  If it's
not already stopped, you get -EINPROGRESS and then can do UTRACE_INTERRUPT
to be sure that you interrupt it and that the race complexity of it being
stopped before or waking up is minimized.  (If you just do UTRACE_INTERRUPT
first, then you'll get a callback soon--unless it's stopped.  Then you
won't, but if you do UTRACE_STOP second to see if it's stopped, then you
could get the callback in between and your life gets more hairy.)

I sure wouldn't mind any help writing more text for this.
Hack at Documentation/DocBook/utrace.tmpl and send me a diff.


Thanks,
Roland

Reply via email to