[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [DOC v1] Xen transport for 9pfs
On Wed, 30 Nov 2016, David Vrabel wrote: > On 29/11/16 23:34, Stefano Stabellini wrote: > > > > The producer (the backend for **in**, the frontend for **out**) writes to > > the > > array in the following way: > > > - read memory barrier > > - read *cons*, *prod* from shared memory > > - write to array at position *prod* up to *cons*, wrapping around the > > circular > > buffer when necessary > - write memory barrier > > - increase *prod* > > - notify the other end via evtchn > > > > The consumer (the backend for **out**, the frontend for **in**) reads from > > the > > array in the following way: > > - read memory barrier > > - read *prod*, *cons* from shared memory > > - read from array at position *cons* up to *prod*, wrapping around the > > circular > > buffer when necessary > > - memory barrier > > - increase *cons* > > - notify the other end via evtchn > > Your barriers are wrong (see corrections above). Thanks for the review. Sorry for not specifying the type of memory barriers. I agree with some of your suggestions, but I don't understand why you moved the read memory barrier before reading prod and cons. Shouldn't it be for a producer: - read *cons*, *prod* from shared memory - read memory barrier - write to array at position *prod* up to *cons*, wrapping around the circular buffer when necessary - write memory barrier - increase *prod* - notify the other end via evtchn and for a consumer: - read *prod*, *cons* from shared memory - read memory barrier - read from array at position *cons* up to *prod*, wrapping around the circular buffer when necessary - general memory barrier - increase *cons* - notify the other end via evtchn If this is wrong, could you please explain why? > I think you should use a private copy of cons/prod in the > consumer/producer and use this to validate that the shared prod/cons is > within a sensible range. With the masking macro provided (MASK_XEN_9PFS_IDX), indices cannot go out of range: #define MASK_XEN_9PFS_IDX(idx) ((idx) & (XEN_9PFS_RING_SIZE - 1)) That said, it could be a cheap additional validation. > You're missing a mechanism to omit unnecessary evtchn notifications > (like the standard ring protocol has). Yes, indeed. I'll see what I can do. > This all looks like a generic "transfer byte stream" mechanism which > could be usefully made generic and not specific to 9pfs. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |