Thread (121 messages) 121 messages, 13 authors, 2021-09-24

Re: [RFC] LKMM: Add volatile_if()

From: Alan Stern <stern@rowland.harvard.edu>
Date: 2021-06-04 18:27:11
Also in: linux-arch, lkml

On Fri, Jun 04, 2021 at 06:17:20PM +0200, Peter Zijlstra wrote:
On Fri, Jun 04, 2021 at 11:51:54AM -0400, Alan Stern wrote:
quoted
On Fri, Jun 04, 2021 at 05:42:28PM +0200, Peter Zijlstra wrote:
quoted
quoted
#define volatile_if(cond) if (({ bool __t = (cond); BUILD_BUG_ON(__builtin_constant_p(__t)); volatile_cond(__t); }))
That won't help with more complicated examples, such as:

	volatile_if (READ_ONCE(*x) * 0 + READ_ONCE(*y))
That's effectively:

	volatile_if (READ_ONCE(*y))
		WRITE_ONCE(*y, 42);
Sorry, what I meant to write was:

	volatile_if (READ_ONCE(*x) * 0 + READ_ONCE(*y))
		WRITE_ONCE(*z, 42);

where there is no ordering between *x and *z.  It's not daft, and yes, a 
macro won't be able to warn about it.

Alan
which is a valid, but daft, LOAD->STORE order, no? A compiler might
maybe be able to WARN on that, but that's definitely beyond what we can
do with macros.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help