From: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
To: Christophe Leroy <christophe.leroy@c-s.fr>
Cc: apopple@linux.ibm.com, mikey@neuling.org,
Ravi Bangoria <ravi.bangoria@linux.ibm.com>,
peterz@infradead.org, oleg@redhat.com, npiggin@gmail.com,
linux-kernel@vger.kernel.org, paulus@samba.org, jolsa@kernel.org,
fweisbec@gmail.com, naveen.n.rao@linux.vnet.ibm.com,
linuxppc-dev@lists.ozlabs.org, mingo@kernel.org
Subject: Re: [PATCH 13/15] powerpc/watchpoint: Don't allow concurrent perf and ptrace events
Date: Wed, 18 Mar 2020 18:05:44 +0530 [thread overview]
Message-ID: <ee92b133-c5f8-0191-a4b0-858794ebe69a@linux.ibm.com> (raw)
In-Reply-To: <673cf087-1422-84b3-e3bc-13c4dd491414@c-s.fr>
On 3/17/20 4:38 PM, Christophe Leroy wrote:
>
>
> Le 09/03/2020 à 09:58, Ravi Bangoria a écrit :
>> ptrace and perf watchpoints on powerpc behaves differently. Ptrace
>
> On the 8xx, ptrace generates signal after executing the instruction.
8xx logic is unchanged. I should have mentioned "Book3s DAWR".
>
>> watchpoint works in one-shot mode and generates signal before executing
>> instruction. It's ptrace user's job to single-step the instruction and
>> re-enable the watchpoint. OTOH, in case of perf watchpoint, kernel
>> emulates/single-steps the instruction and then generates event. If perf
>> and ptrace creates two events with same or overlapping address ranges,
>> it's ambiguous to decide who should single-step the instruction. Because
>> of this issue ptrace and perf event can't coexist when the address range
>> overlaps.
>
> Ok, and then ? What's the purpose of this (big) patch ?
Don't allow perf and ptrace watchpoint at the same time if their address
range overlaps.
...
>> +struct breakpoint {
>> + struct list_head list;
>> + struct perf_event *bp;
>> + bool ptrace_bp;
>> +};
>
> Don't we have an equivalent struct already ?
No. Using this we track percpu and perthread watchpoints for both perf and
ptrace. This problems is powerpc(DAWR) specific and thus we need to hook arch
specific logic in watchopint installation/uninstallation path.
...
>> +static bool bp_addr_range_overlap(struct perf_event *bp1, struct perf_event *bp2)
>> +{
>> + __u64 bp1_saddr, bp1_eaddr, bp2_saddr, bp2_eaddr;
>> +
>> + bp1_saddr = bp1->attr.bp_addr & ~HW_BREAKPOINT_ALIGN;
>> + bp1_eaddr = (bp1->attr.bp_addr + bp1->attr.bp_len - 1) | HW_BREAKPOINT_ALIGN;
>> + bp2_saddr = bp2->attr.bp_addr & ~HW_BREAKPOINT_ALIGN;
>> + bp2_eaddr = (bp2->attr.bp_addr + bp2->attr.bp_len - 1) | HW_BREAKPOINT_ALIGN;
>> +
>> + return (bp1_saddr <= bp2_eaddr && bp1_eaddr >= bp2_saddr);
>
> Would be better with something like (HW_BREAKPOINT_SIZE needs to be defined).
>
> bp1_saddr = ALIGN_DOWN(bp1->attr.bp_addr, HW_BREAKPOINT_SIZE);
> bp1_eaddr = ALIGN(bp1->attr.bp_addr, HW_BREAKPOINT_SIZE);
> bp2_saddr = ALIGN_DOWN(bp2->attr.bp_addr, HW_BREAKPOINT_SIZE);
> bp2_eaddr = ALIGN(bp2->attr.bp_addr, HW_BREAKPOINT_SIZE);
>
> return (bp1_saddr < bp2_eaddr && bp1_eaddr > bp2_saddr);
Ok.
Thanks,
Ravi
next prev parent reply other threads:[~2020-03-18 12:40 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-09 8:57 [PATCH 00/15] powerpc/watchpoint: Preparation for more than one watchpoint Ravi Bangoria
2020-03-09 8:57 ` [PATCH 01/15] powerpc/watchpoint: Rename current DAWR macros Ravi Bangoria
2020-03-17 10:14 ` Christophe Leroy
2020-03-18 12:40 ` Ravi Bangoria
2020-03-09 8:57 ` [PATCH 02/15] powerpc/watchpoint: Add SPRN macros for second DAWR Ravi Bangoria
2020-03-17 10:16 ` Christophe Leroy
2020-03-18 18:30 ` Segher Boessenkool
2020-03-09 8:57 ` [PATCH 03/15] powerpc/watchpoint: Introduce function to get nr watchpoints dynamically Ravi Bangoria
2020-03-17 10:21 ` Christophe Leroy
2020-03-18 5:50 ` Ravi Bangoria
2020-03-09 8:57 ` [PATCH 04/15] powerpc/watchpoint/ptrace: Return actual num of available watchpoints Ravi Bangoria
2020-03-09 8:57 ` [PATCH 05/15] powerpc/watchpoint: Provide DAWR number to set_dawr Ravi Bangoria
2020-03-17 10:28 ` Christophe Leroy
2020-03-18 6:18 ` Ravi Bangoria
2020-03-09 8:57 ` [PATCH 06/15] powerpc/watchpoint: Provide DAWR number to __set_breakpoint Ravi Bangoria
2020-03-09 8:57 ` [PATCH 07/15] powerpc/watchpoint: Get watchpoint count dynamically while disabling them Ravi Bangoria
2020-03-17 10:32 ` Christophe Leroy
2020-03-18 6:57 ` Ravi Bangoria
2020-03-26 3:32 ` Ravi Bangoria
2020-03-09 8:57 ` [PATCH 08/15] powerpc/watchpoint: Disable all available watchpoints when !dawr_force_enable Ravi Bangoria
2020-03-17 10:35 ` Christophe Leroy
2020-03-18 7:32 ` Ravi Bangoria
2020-03-09 8:58 ` [PATCH 09/15] powerpc/watchpoint: Convert thread_struct->hw_brk to an array Ravi Bangoria
2020-03-17 10:37 ` Christophe Leroy
2020-03-18 8:36 ` Ravi Bangoria
2020-03-18 8:56 ` Christophe Leroy
2020-03-18 9:22 ` Ravi Bangoria
2020-03-09 8:58 ` [PATCH 10/15] powerpc/watchpoint: Use loop for thread_struct->ptrace_bps Ravi Bangoria
2020-03-17 10:48 ` Christophe Leroy
2020-03-18 9:43 ` Ravi Bangoria
2020-03-09 8:58 ` [PATCH 11/15] powerpc/watchpoint: Introduce is_ptrace_bp() function Ravi Bangoria
2020-03-17 10:49 ` Christophe Leroy
2020-03-09 8:58 ` [PATCH 12/15] powerpc/watchpoint: Prepare handler to handle more than one watcnhpoint Ravi Bangoria
2020-03-17 10:59 ` Christophe Leroy
2020-03-18 11:35 ` Michael Ellerman
2020-03-18 11:44 ` Christophe Leroy
2020-03-18 21:27 ` Segher Boessenkool
2020-03-18 23:36 ` Michael Ellerman
2020-03-18 12:14 ` Ravi Bangoria
2020-03-09 8:58 ` [PATCH 13/15] powerpc/watchpoint: Don't allow concurrent perf and ptrace events Ravi Bangoria
2020-03-17 11:08 ` Christophe Leroy
2020-03-18 12:35 ` Ravi Bangoria [this message]
2020-03-09 8:58 ` [PATCH 14/15] powerpc/watchpoint/xmon: Don't allow breakpoint overwriting Ravi Bangoria
2020-03-17 11:10 ` Christophe Leroy
2020-03-18 12:37 ` Ravi Bangoria
2020-03-18 13:31 ` Christophe Leroy
2020-03-09 8:58 ` [PATCH 15/15] powerpc/watchpoint/xmon: Support 2nd dawr Ravi Bangoria
2020-03-17 11:14 ` Christophe Leroy
2020-03-18 12:39 ` Ravi Bangoria
2020-03-16 15:05 ` [PATCH 00/15] powerpc/watchpoint: Preparation for more than one watchpoint Christophe Leroy
2020-03-16 18:43 ` Segher Boessenkool
2020-03-17 5:56 ` Christophe Leroy
2020-03-18 12:52 ` Ravi Bangoria
2020-03-23 13:37 ` Ravi Bangoria
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=ee92b133-c5f8-0191-a4b0-858794ebe69a@linux.ibm.com \
--to=ravi.bangoria@linux.ibm.com \
--cc=apopple@linux.ibm.com \
--cc=christophe.leroy@c-s.fr \
--cc=fweisbec@gmail.com \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mikey@neuling.org \
--cc=mingo@kernel.org \
--cc=naveen.n.rao@linux.vnet.ibm.com \
--cc=npiggin@gmail.com \
--cc=oleg@redhat.com \
--cc=paulus@samba.org \
--cc=peterz@infradead.org \
/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).