Re: [PATCH] tools/memory-model: Document herd7 (internal) representation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





Am 5/28/2024 um 7:58 PM schrieb Boqun Feng:
On Mon, May 27, 2024 at 03:40:13PM +0200, Jonas Oberhauser wrote:


Am 5/27/2024 um 3:28 PM schrieb Andrea Parri:
+    |                smp_store_mb | W[once] ->po F[mb]                        |

I expect this one to be hard-coded in herd7 source code, but I cannot find
it. Can you give me a pointer?

smp_store_mb() is currently mapped to { __store{once}(X,V); __fence{mb}; } in
the .def file, so it's semantically equivalent to "WRITE_ONCE(); smp_mb();".

By the way, I experimented a little with these kind of mappings to see if we
can just explicitly encode the mapping there. E.g., I had an idea to use
     { __fence{mb-successful-rmw}; __cmpxchg{once}...;
__fence{mb-successful-rmw}; }

for defining (almost) the current mapping of cmpxchg explicitly.

But none of the changes I made were accepted by herd7.

Do you know how the syntax works?


This may not be trivial. Note that cmpxchg() is an expression (it has a
value), so in .def, we want to define it as an expression. However, the
C-like multiple-statement expression is not supported by herd parser, in
other words we want:

	{
		__fence{mb-successful-rmw};
		int tmp = __cmpxchg{once}(...);
		__fence{mb-successful-rmw};
		tmp;
	}

Oh, you're right. Then probably the rule I was violating is that value-returning macros can not be defined with {} at all.

Given herd's other syntactic limitations, perhaps the best way would be to introduce these macros as

	x = cmpxchg(...) {
		__fence{mb-successful-rmw};
 		x = __cmpxchg{once}(...);
 		__fence{mb-successful-rmw};
	}

since I think x = M(...) is the only way we are allowed to use these macros anyways.





[Index of Archives]     [Linux Kernel]     [Kernel Newbies]     [x86 Platform Driver]     [Netdev]     [Linux Wireless]     [Netfilter]     [Bugtraq]     [Linux Filesystems]     [Yosemite Discussion]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]

  Powered by Linux