On 04/30/2018 05:27 PM, Marek Marczykowski-Górecki wrote: > On Mon, Apr 30, 2018 at 05:25:52PM -0400, Boris Ostrovsky wrote: >> Also, perhaps the two can be collapsed together, along the lines of >> >> #define RING_COPY_(action, _r, _idx, _msg) do {                          \ >>         /* Use volatile to force the copy into _msg. */                 \ >>         *(_msg) = *(volatile typeof(_msg))RING_GET_##action(_r, _idx);   \ >> } while (0) >> >> #define RING_COPY_REQUEST(_r, _idx, _req)  RING_COPY_(REQUEST, _r, _idx, >> _req) >> #define RING_COPY_RESPONSE(_r, _idx, _rsp)  RING_COPY_(RESPONSE, _r, >> _idx, _rsp) >> >> >> (I have not tried to compile this so it may well be wrong) > It works, thanks :) > I'll wait with v2 until I get feedback on other patches. > Oh, and one more thing --- the canonical version of this file lives in Xen (include/public/io/ring.h) so it needs first to be accepted by Xen maintainers. -boris