linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: Will Deacon <will.deacon@arm.com>
Cc: "Jon Medhurst (Tixy)" <tixy@linaro.org>,
	Russell King - ARM Linux <linux@arm.linux.org.uk>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Rabin Vincent <rabin@rab.in>, Ingo Molnar <mingo@redhat.com>,
	"linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH] ARM: ftrace: Ensure code modifications are synchronised across all cpus
Date: Mon, 10 Dec 2012 08:02:17 -0500	[thread overview]
Message-ID: <1355144537.17101.155.camel@gandalf.local.home> (raw)
In-Reply-To: <20121210100433.GB6624@mudshark.cambridge.arm.com>

On Mon, 2012-12-10 at 10:04 +0000, Will Deacon wrote:
> Hi Jon,
> 
> Back-pedalling a bit here, but I'm confused by one of your points below:
> 
> On Fri, Dec 07, 2012 at 05:45:47PM +0000, Jon Medhurst (Tixy) wrote:
> > On Fri, 2012-12-07 at 12:13 -0500, Steven Rostedt wrote:
> > > I'll make my question more general:
> > > 
> > > If I have a nop, that is a size of a call (branch and link), which is
> > > near the beginning of a function and not part of any conditional, and I
> > > want to convert it into a call (branch and link), would adding a
> > > breakpoint to it, modifying it to the call, and then removing the
> > > breakpoint be possible? Of course it would require syncing in between
> > > steps, but my question is, if the above is possible on a thumb2 ARM
> > > processor?
> > 
> > I believe so. The details are (repeating your earlier explanation) ...
> > 
> > 1. Replace first half of nop with 16bit 'breakpoint' instruction.
> 
> Sort of -- you'd actually need 2x16-bit nops to make this work.

Why?

> 
> > 2. Sync.(cache flush to PoU + IPIs to make other cores invalidate the
> > icache for changed part of the nop instruction).
> 
> Why do you need to use IPIs for I-cache invalidation on other cores? For
> ARMv7 SMP (i.e. the multi-processing extensions) doing I-cache invalidation
> by MVA to PoU will be broadcast to the applicable domain for the
> shareability attributes of the address. So if you do icimvau with an
> inner-shareable virtual address, it will be broadcast by the hardware.
> 
> > However, wouldn't we need any of this breakpoint malarkey, why not just
> > just use a 16-bit branch instruction which branches over the second half
> > of the nop? :-)
> 
> Yes, and I think if you do use two 16-bit nops, you can even get rid of all
> the intermediate `sync' operations (I guess you might want one at the end if
> you want the call to become visible at a particular point).

Wont work. We are replacing a 32bit call with a nop. That nop must also
be 32bits, because we could eventually replace the nop(s) with a 32bit
call. Basically, we can never allow the second 16bit part ever be the
next instruction. If the first 16bit nop is executed, and then the task
gets preempted. The nops get converted to a 32bit call. The task gets
scheduled again and now is executing the second 16bits of the 32bit call
and we get unexpected (probably crashing) results.

By having either a 16bit breakpoint whose handler returns after the
second 16bit part, or a 16bit jump that simply jumps over the second
half, then all this should work. When the CPU processes a 32bit
instruction, it either processes all or non of it, correct?

-- Steve



  reply	other threads:[~2012-12-10 13:02 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-06 18:11 [PATCH] ARM: ftrace: Ensure code modifications are synchronised across all cpus Jon Medhurst (Tixy)
2012-12-06 19:19 ` Steven Rostedt
2012-12-07  9:22   ` Jon Medhurst (Tixy)
2012-12-07 14:03     ` Steven Rostedt
2012-12-07 14:55       ` Jon Medhurst (Tixy)
2012-12-07 15:28         ` Steven Rostedt
2012-12-07 15:40           ` Jon Medhurst (Tixy)
2012-12-07 16:09             ` Steven Rostedt
2012-12-07 16:23           ` Russell King - ARM Linux
2012-12-07 16:36             ` Steven Rostedt
2012-12-07 16:45               ` Russell King - ARM Linux
2012-12-07 17:13                 ` Steven Rostedt
2012-12-07 17:45                   ` Jon Medhurst (Tixy)
2012-12-07 18:06                     ` Steven Rostedt
2012-12-07 18:17                       ` Steven Rostedt
2012-12-07 18:18                       ` Jon Medhurst (Tixy)
2012-12-10 10:04                     ` Will Deacon
2012-12-10 13:02                       ` Steven Rostedt [this message]
2012-12-10 13:33                         ` Will Deacon
2012-12-10 13:40                         ` Jamie Lokier
2012-12-10 14:56                           ` Will Deacon
2012-12-10 13:57                         ` Russell King - ARM Linux
2012-12-10 14:06                           ` Steven Rostedt
2012-12-10 14:07                             ` Russell King - ARM Linux
2012-12-10 14:46                               ` Steven Rostedt
2012-12-10 15:25                                 ` Russell King - ARM Linux
2012-12-10 16:31                                   ` Steven Rostedt
2012-12-10 16:45                       ` Jon Medhurst (Tixy)
2012-12-07 18:13                   ` Russell King - ARM Linux
2012-12-07 18:43                     ` Steven Rostedt
2012-12-07 19:02                       ` Will Deacon
2012-12-07 20:01                         ` Steven Rostedt
2012-12-10 11:04                         ` Jon Medhurst (Tixy)
2012-12-10 11:24                           ` Will Deacon
2012-12-10 14:02                             ` Steven Rostedt

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=1355144537.17101.155.camel@gandalf.local.home \
    --to=rostedt@goodmis.org \
    --cc=fweisbec@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=mingo@redhat.com \
    --cc=rabin@rab.in \
    --cc=tixy@linaro.org \
    --cc=will.deacon@arm.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).