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

Re: [Xen-devel] read_atomic, write_atomic, add_sized



>>> On 12.06.17 at 12:24, <julien.grall@xxxxxxx> wrote:
> I am trying to understand why we decided to implement the helpers 
> read_atomic, write_atomic, add_sized in assembly rather than directly in C.
> 
> AFAICT implementation in C similar to Linux helpers WRITE_ONCE/READ_ONCE 
> would work here. Did I miss anything?

For one at least our current ACCESS_ONCE() doesn't allow non-
scalar types to be read/written, whereas {read,write}_atomic()
solely look at sizeof(). Plus ACCESS_ONCE() doesn't enforce a
single instruction to be used in the resulting assembly - while the
compiler may not fold multiple accesses, it still may break them
up if it wishes to (but of course it usually won't it the whole thing
can be expressed with a single instruction).

For add_sized() it's even worse: The macro enforces (on x86) an
operation on a memory operand (i.e. again a single instruction).
"ACCESS_ONCE(x) += n", otoh, may (and iirc normally will) be
translated to a memory of x, addition of the read value with n,
and a memory write.

> Note that the naming is also confusing as it is easily to mix with the 
> atomic_read, atomic_write helpers.

Well, yes, unfortunately.

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.