Re: [PATCH] RISC-V: Don't check text_mutex during stop_machine

From: Steven Rostedt
Date: Thu May 06 2021 - 09:25:56 EST

On Thu, 6 May 2021 00:10:41 -0700
Palmer Dabbelt <palmer@xxxxxxxxxxx> wrote:

> ---
> In theory we should be able to avoid using stop_machine() with some
> clever code sequences, but that's too big of a change to be considered a
> fix. I also can't find the text I thought was in the ISA manual about
> the allowed behaviors for concurrent modification of the instruction
> stream, so I might have just mis-remembered that.
> ---

I wonder if you could at least use break points, as some other archs do,
and what x86 does.

If you have this make believe machine code:

00 00 00 00 nop

And you want to turn it into a call.

aa 12 34 56 bl ftrace_caller

And if your architecture has a way to inject a break point on live code.
Let's call this FF for the break point code.

You can inject that first:

FF 00 00 00

sync all CPUs where now all callers will hit this and jump to the break
point handler, which simply does:

ip = ip + 4;

and returns back to the instruction after this nop/call.

Change the rest of the instruction.

FF 12 34 56

sync all CPUs so that they all see this new instruction, but are still
triggering the break point.

Then finally remove the break point.

aa 12 34 56

And you just switched from the nop to the call without using stop machine.

-- Steve