From: Alan Stern <stern@rowland.harvard.edu>
To: Roland McGrath <roland@redhat.com>
Cc: Prasanna S Panchamukhi <prasanna@in.ibm.com>,
Kernel development list <linux-kernel@vger.kernel.org>
Subject: Re: [RFC] hwbkpt: Hardware breakpoints (was Kwatch)
Date: Wed, 7 Mar 2007 14:11:00 -0500 (EST) [thread overview]
Message-ID: <Pine.LNX.4.44L0.0703071127530.6624-100000@iolanthe.rowland.org> (raw)
In-Reply-To: <20070307034932.09F5A1801C4@magilla.sf.frob.com>
On Tue, 6 Mar 2007, Roland McGrath wrote:
> > > Yeah, I guess that's right. It should still return NOTIFY_STOP when
> > > args->err has no other bits set, so notifiers aren't called with zero.
> >
> > In practice that might not work. On my machine, at least, reads of DR6
> > return ones in all the reserved bit positions.
>
> Does that mean asm("mov %1,%%dr6; mov %%dr6,%0" : "=r" (mask) : "r" (0));
> puts in mask the set of reserved bits? We could collect that value at CPU
> startup and mask it off args->err, then OR it back into vdr6.
That sounds like a rather fragile approach to avoiding a minimal amount of
work. Debug exceptions don't occur very often, and when they do it won't
matter too much if we go through some extra notifier-chain callouts.
Back to a previous topic:
> > The actual guarantee I need is that nobody will switch_to() the task while
> > my routines are running.
>
> You can't get that. It can always be woken for SIGKILL (which is a good
> thing). What you are guaranteed is that if it does, it will never return
> to user mode. So it has to be ok for switching in to use the bits in any
> intermediate state you might get them, meaning any possible garbage state
> is harmful only to user mode or is otherwise recoverable (worst case
> perhaps the exception handler has to know to ignore some traps). This is
> already true with ptrace and ->thread.debugreg, as well as the normal user
> registers. In your case, if you wanted to be paranoid you could clear
> TIF_DEBUG before you touch anything, and set it again only after you're
> done (with memory barriers as needed).
It turns out that this won't work correctly unless I use something
stronger, like a spinlock or RCU. Either one seems like overkill.
Is there any way to find out from within the
switch_to_thread_hw_breakpoint routine whether the task is in this unusual
state? (By which I mean the task is being debugged and the debugger
hasn't told it to start running.) Would (tsk->exit_code == SIGKILL) work?
If not, can we add a TIF_DEBUG_STOPPED flag? Or should I just go with a
spinlock?
Is SIGKILL the only way this can happen?
In a similar vein, I need a reliable way to know whether a task has gone
through exit_thread(). If it has, then its hw_breakpoint area has been
deallocated and a new one must not be allocated. Will (tsk->flags &
PF_EXITING) always be true once that happens?
Alan Stern
next prev parent reply other threads:[~2007-03-07 19:11 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20070207025008.1B11118005D@magilla.sf.frob.com>
2007-02-07 19:22 ` [PATCH] Kwatch: kernel watchpoints using CPU debug registers Alan Stern
2007-02-07 22:08 ` Bob Copeland
2007-02-09 10:21 ` Roland McGrath
2007-02-09 15:54 ` Alan Stern
2007-02-09 23:31 ` Roland McGrath
2007-02-10 4:32 ` Alan Stern
2007-02-18 3:03 ` Roland McGrath
2007-02-21 20:35 ` Alan Stern
2007-02-22 11:43 ` S. P. Prasanna
2007-02-23 2:19 ` Roland McGrath
2007-02-23 16:55 ` Alan Stern
2007-02-24 0:08 ` Roland McGrath
2007-03-02 17:19 ` [RFC] hwbkpt: Hardware breakpoints (was Kwatch) Alan Stern
2007-03-05 7:01 ` Roland McGrath
2007-03-05 13:36 ` Christoph Hellwig
2007-03-05 16:16 ` Alan Stern
2007-03-05 16:49 ` Christoph Hellwig
2007-03-05 22:04 ` Roland McGrath
2007-03-05 17:25 ` Alan Stern
2007-03-06 3:13 ` Roland McGrath
2007-03-06 15:23 ` Alan Stern
2007-03-07 3:49 ` Roland McGrath
2007-03-07 19:11 ` Alan Stern [this message]
2007-03-09 6:52 ` Roland McGrath
2007-03-09 18:40 ` Alan Stern
2007-03-13 8:00 ` Roland McGrath
2007-03-13 13:07 ` Alan Cox
2007-03-13 18:56 ` Alan Stern
2007-03-14 3:00 ` Roland McGrath
2007-03-14 19:11 ` Alan Stern
2007-03-28 21:39 ` Roland McGrath
2007-03-29 21:35 ` Alan Stern
2007-04-13 21:09 ` Alan Stern
2007-05-11 15:25 ` Alan Stern
2007-05-13 10:39 ` Roland McGrath
2007-05-14 15:42 ` Alan Stern
2007-05-14 21:25 ` Roland McGrath
2007-05-16 19:03 ` Alan Stern
2007-05-23 8:47 ` Roland McGrath
2007-06-01 19:39 ` Alan Stern
2007-06-14 6:48 ` Roland McGrath
2007-06-19 20:35 ` Alan Stern
2007-06-25 10:52 ` Roland McGrath
2007-06-25 15:36 ` Alan Stern
2007-06-26 20:49 ` Roland McGrath
2007-06-27 3:26 ` Alan Stern
2007-06-27 21:04 ` Roland McGrath
2007-06-29 3:00 ` Alan Stern
2007-07-11 6:59 ` Roland McGrath
2007-06-28 3:02 ` Roland McGrath
2007-06-25 11:32 ` Roland McGrath
2007-06-25 15:37 ` Alan Stern
2007-06-25 20:51 ` Alan Stern
2007-06-26 18:17 ` Roland McGrath
2007-06-27 2:43 ` Alan Stern
2007-05-17 20:39 ` Alan Stern
2007-03-16 21:07 ` Alan Stern
2007-03-22 19:44 ` Alan Stern
[not found] <20070628023100.E46AB4D05E6@magilla.localdomain>
2007-06-29 3:36 ` Alan Stern
2007-07-06 20:48 ` Alan Stern
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.LNX.4.44L0.0703071127530.6624-100000@iolanthe.rowland.org \
--to=stern@rowland.harvard.edu \
--cc=linux-kernel@vger.kernel.org \
--cc=prasanna@in.ibm.com \
--cc=roland@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).