[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAFULd4aQTEmJz6Q9B6vSm-90A41g7T1pVntaR_PUMSoFRQUGZg@mail.gmail.com>
Date: Wed, 1 Mar 2023 18:57:13 +0100
From: Uros Bizjak <ubizjak@...il.com>
To: Steven Rostedt <rostedt@...dmis.org>
Cc: linux-trace-kernel@...r.kernel.org, linux-kernel@...r.kernel.org,
Masami Hiramatsu <mhiramat@...nel.org>,
"Paul E. McKenney" <paulmck@...nel.org>,
Joel Fernandes <joel@...lfernandes.org>
Subject: Re: [PATCH 3/3] ring_buffer: Use try_cmpxchg instead of cmpxchg
On Wed, Mar 1, 2023 at 5:28 PM Steven Rostedt <rostedt@...dmis.org> wrote:
>
> On Wed, 1 Mar 2023 11:18:50 -0500
> Steven Rostedt <rostedt@...dmis.org> wrote:
>
> > But with gcc 12.2.0 I don't really see the benefit. And I'm worried that
> > the side effect of modifying the old variable could cause a bug in the
> > future, if it is used after the try_cmpxchg(). At least for the second case.
>
> Actually, I like Joel's recommendation of adding a cmpxchg_succeeded()
> function, that does the try_cmpxchg() without needing to save the old
> variable. That's my main concern, as it does have that side effect that
> could be missed when updating the code.
The "controversial" part of the patch would then look like the
attached patch. As expected, the compiler again produces expected
code:
eb8: 48 8b 0e mov (%rsi),%rcx
ebb: 48 83 e1 fc and $0xfffffffffffffffc,%rcx
ebf: 48 83 c9 01 or $0x1,%rcx
ec3: 48 89 c8 mov %rcx,%rax
ec6: f0 48 0f b1 3e lock cmpxchg %rdi,(%rsi)
ecb: 48 39 c1 cmp %rax,%rcx
ece: 74 2d je efd <rb_get_reader_page+0x12d>
to:
eb8: 48 8b 01 mov (%rcx),%rax
ebb: 48 83 e0 fc and $0xfffffffffffffffc,%rax
ebf: 48 83 c8 01 or $0x1,%rax
ec3: f0 48 0f b1 31 lock cmpxchg %rsi,(%rcx)
ec8: 74 2d je ef7 <rb_get_reader_page+0x127>
Uros.
View attachment "p.diff.txt" of type "text/plain" (1735 bytes)
Powered by blists - more mailing lists