From: David Gibson <dwg@au1.ibm.com>
To: "K.Prasad" <prasad@linux.vnet.ibm.com>
Cc: Michael Neuling <mikey@neuling.org>,
Benjamin Herrenschmidt <benh@au1.ibm.com>,
linuxppc-dev@ozlabs.org, paulus@samba.org,
Alan Stern <stern@rowland.harvard.edu>,
Roland McGrath <roland@redhat.com>
Subject: Re: [Patch 2/6] Introduce PPC64 specific Hardware Breakpoint interfaces
Date: Fri, 19 Jun 2009 15:04:09 +1000 [thread overview]
Message-ID: <20090619050409.GC17986@yookeroo.seuss> (raw)
In-Reply-To: <20090618182045.GC4590@in.ibm.com>
On Thu, Jun 18, 2009 at 11:50:45PM +0530, K.Prasad wrote:
> On Wed, Jun 17, 2009 at 02:32:24PM +1000, David Gibson wrote:
> > On Wed, Jun 10, 2009 at 02:38:06PM +0530, K.Prasad wrote:
[snip]
> > > +int arch_validate_hwbkpt_settings(struct hw_breakpoint *bp,
> > > + struct task_struct *tsk)
> > > +{
> > > + int is_kernel, ret = -EINVAL;
> > > +
> > > + if (!bp)
> > > + return ret;
> > > +
> > > + switch (bp->info.type) {
> > > + case HW_BREAKPOINT_READ:
> > > + case HW_BREAKPOINT_WRITE:
> > > + case HW_BREAKPOINT_RW:
> > > + break;
> > > + default:
> > > + return ret;
> > > + }
> > > +
> > > + if (bp->triggered)
> > > + ret = arch_store_info(bp, tsk);
> >
> > Under what circumstances would triggered be NULL? It's not clear to
> > me that you wouldn't still need arch_store_info() in this case.
> >
>
> Simple, triggered would be NULL when a user fails to specify it!
> This function would return EINVAL if that's the case.
Ah, right, yes. This seems a really non obvious control flow for a
NULL triggered value to lead to EINVAL. I'd prefer:
if (!bp->triggered)
return -EINVAL
/* Then the kernel address test */
return arch_store_info(bp, tsk);
[snip]
> > > + /* Verify if dar lies within the address range occupied by the symbol
> > > + * being watched. Since we cannot get the symbol size for
> > > + * user-space requests we skip this check in that case
> > > + */
> > > + if ((hbp_kernel_pos == 0) &&
> > > + !((bp->info.address <= dar) &&
> > > + (dar <= (bp->info.address + bp->info.symbolsize))))
> > > + /*
> > > + * This exception is triggered not because of a memory access on
> > > + * the monitored variable but in the double-word address range
> > > + * in which it is contained. We will consume this exception,
> > > + * considering it as 'noise'.
> > > + */
> > > + goto out;
> > > +
> > > + (bp->triggered)(bp, regs);
> >
> > So this confuses me. You go to great efforts to step over the
> > instruction to generate a SIGTRAP after the instruction, for
> > consistency with x86. But that SIGTRAP is *never* used, since the
> > only way to set userspace breakpoints is through ptrace at the moment.
> > At the same time, the triggered function is called here before the
> > instruction is executed, so not consistent with x86 anyway.
> >
> > It just seems strange to me that sending a SIGTRAP is a special case
> > anyway. Why can't sending a SIGTRAP be just a particular triggered
> > function.
>
> The consistency in the interface across architectures that I referred to
> in my previous mail was w.r.t. continuous triggering of breakpoints and
> not to implement a trigger-before or trigger-after behaviour across
> architectures. In fact, this behaviour differs even on the same
> processor depending upon the breakpoint type (trigger-before for
> instructions and trigger-after for data in x86), and introducing
> uniformity might be a) at the cost of loss of some unique & innovative
> uses for each of them b) may not be always possible e.g. trigger-after
> to trigger-before.
Hrm. Well (a) is why I was suggesting an option to allow trigger
before on powerpc. Plus, I don't see why you think (a) is important
for the triggered function, but not for the timing of a SIGTRAP to
userspace.
As for (b), well there are already a bunch of things which can only be
done on certain archs/processors, so I don't see that's anything
really new.
How do you handle continuous breakpoints in the trigger-before case
(instruction breakpoints) on x86? Do you need to step over an
instruction is the same manner as you do for powerpc? In this case
where does x86 send the SIGTRAP?
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
next prev parent reply other threads:[~2009-06-19 5:04 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20090610090316.898961359@prasadkr_t60p.in.ibm.com>
2009-06-10 9:08 ` [Patch 1/6] Prepare the PowerPC platform for HW Breakpoint infrastructure K.Prasad
2009-06-10 9:08 ` [Patch 2/6] Introduce PPC64 specific Hardware Breakpoint interfaces K.Prasad
2009-06-17 4:32 ` David Gibson
2009-06-18 18:20 ` K.Prasad
2009-06-19 5:04 ` David Gibson [this message]
2009-07-03 8:11 ` K.Prasad
2009-06-10 9:08 ` [Patch 3/6] Modify ptrace code to use " K.Prasad
2009-06-10 9:08 ` [Patch 4/6] Modify process and processor handling code to recognise hardware debug registers K.Prasad
2009-06-17 4:14 ` David Gibson
2009-06-18 17:56 ` K.Prasad
2009-06-19 4:57 ` David Gibson
2009-06-10 9:08 ` [Patch 5/6] Modify Data storage exception code to recognise DABR match first K.Prasad
2009-06-17 4:13 ` David Gibson
2009-06-10 9:08 ` [Patch 6/6] Adapt kexec and samples code to recognise PPC64 hardware breakpoint usage K.Prasad
[not found] <20090726235854.574539012@prasadkr_t60p.in.ibm.com>
2009-07-27 0:13 ` [Patch 2/6] Introduce PPC64 specific Hardware Breakpoint interfaces K.Prasad
2009-07-31 6:16 ` David Gibson
2009-08-03 20:59 ` K.Prasad
2009-08-05 2:55 ` David Gibson
[not found] <20090603162741.197115376@prasadkr_t60p.in.ibm.com>
2009-06-03 16:35 ` K.Prasad
2009-06-05 5:11 ` David Gibson
2009-06-10 6:43 ` K.Prasad
2009-06-15 6:40 ` David Gibson
2009-06-15 7:18 ` K.Prasad
2009-06-17 4:45 ` David Gibson
[not found] <20090525004730.944465878@prasadkr_t60p.in.ibm.com>
2009-05-25 1:15 ` K.Prasad
2009-05-29 4:18 ` David Gibson
2009-05-29 13:54 ` K.Prasad
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=20090619050409.GC17986@yookeroo.seuss \
--to=dwg@au1.ibm.com \
--cc=benh@au1.ibm.com \
--cc=linuxppc-dev@ozlabs.org \
--cc=mikey@neuling.org \
--cc=paulus@samba.org \
--cc=prasad@linux.vnet.ibm.com \
--cc=roland@redhat.com \
--cc=stern@rowland.harvard.edu \
/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).