Michael S. Tsirkin wrote:
As far as I can see, we decided that the list of segments is the right approach.

Agreed.

It also seems you are also inclining towards uniform handling of the first
segment and the rest of them, so I hope this means the simplification
achieved by always using an s/g list of size 2 is also accepted.

I would prefer to keep single segment MADs to a single SGE, but this isn't a big deal.

For a list of segments, my preference is to match what was done for the receive side on completions. The first ib_mad_recv_buf is also in the rmpp_list. This made the code simpler when dealing with multiple receive buffers that comprised a single MAD. I'm anticipating that the same will be true for send handling.

It seems to me the only issue left is the extra list walks needed when we
look up the segment by number. The simplest solution to that would
probably be tracking the chunk addressed by seg_num, or something
along these lines.

This is the primary issue. Both the internal code and user should be able to access segments without walking through the list multiple times. Internally, the RMPP code can do this using a couple of additional pointers. Externally, a user should have access to the segment list directly, rather than through a function call.

The latest idea that I was suggesting was to separate the MAD header from the data segments for multi-segment/RMPP active MADs. Let *mad reference the header, and rmpp_list reference all data segments. Non-RMPP MADs would use *mad to reference the entire buffer. For an RMPP MAD (one with RMPP active) that fits into a single segment, I can go either way.

- Sean

_______________________________________________
openib-general mailing list
openib-general@openib.org
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to