On Fri, 21 April 2006 18:52:47 +0200, Ingo Oeser wrote: > What about sth. like > > struct netchannel { > /* This is only read/written by the writer (producer) */ > unsigned long write_ptr; > struct netchannel_buftrailer *netchan_queue[NET_CHANNEL_ENTRIES]; > > /* This is modified by both */ > atomic_t filled_entries; /* cache_line_align this? */ > > /* This is only read/written by the reader (consumer) */ > unsigned long read_ptr; > } > > This would prevent this bug from the beginning and let us still use the > full queue size. > > If cacheline bouncing because of the shared filled_entries becomes an issue, > you are receiving or sending a lot.
Unless I completely misunderstand something, one of the main points of the netchannels if to have *zero* fields written to by both producer and consumer. Receiving and sending a lot can be expected to be the common case, so taking a performance hit in this case is hardly a good idea. I haven't looked at Davem's implementation at all, but Van simply seperated fields in consumer-written and producer-written, with proper alignment between them. Some consumer-written fields are also read by the producer and vice versa. But none of this results in cacheline pingpong. If your description of the problem is correct, it should only mean that the implementation has a problem, not the concept. Jörn -- Time? What's that? Time is only worth what you do with it. -- Theo de Raadt - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html