Dear xen-devel team,
Recently I encountered one technical issue on Xen platform. I want to request your help.
I code one ring buffer by myself for 2 domains to transmit data, one domain is producer, and the other is consumer. I do not use the ring buffer defined in “include/xen/interface/io/ring.h”. Just like the ring buffer provided by xen, I also use 2 pointers for producer and consumer, separately. To ensure memory access order is consistent, I use memory barrier between memory store/load operation and pointer update operation.
The transmitted data contains 2 parts, one is header, and the other is payload. Each time, one domain transmits the header first, and then the payload is sent out.
Each time I can get right header at the consumer side, however, sometimes, the data I get at the consumer side contains part of invalid information.
Xen-4.0.1 + Linux-2.6.24-29-xen
Could you please give me some suggestion on this issue?
1. Is it reasonable to use spin lock to protect shared memory between 2 different domains?
2. Previously I use one atomic variable to do the synchronization between producer and consumer, however, sometimes I cannot get correct header at the consumer side. Is it one known-issue?
I am looking forward to your letters. Thanks in advance.