Based on what you've done, I'd like to suggest changing interface similar to that shown below. I believe that this could be done with minor changes to the current patches. Detailed comments that led to suggesting this change are inline in my responses.
struct ib_mad_segments { u32 num_segments; u32 segment_size; void *segment[0]; }; struct ib_mad_send_buf { ... void *mad; /* First MAD segment */ struct ib_mad_segments *segments; /* RMPP segments > 1 */ ... }; This will avoid walking through a list to find segments, and allows for efficient allocation of the segment data buffers. Multiple segments could be allocated through a single kzalloc. (For example, every n-th segment would start a new allocation, making deallocation easy as well.) >+struct ib_mad_multipacket_seg { >+ struct list_head list; >+ u32 size; >+ u8 data[0]; >+}; Should we ensure that the data alignment is on a 64-byte boundary? > struct ib_mad_send_buf { > struct ib_mad_send_buf *next; >- void *mad; >+ void *mad; /* RMPP: first segment, >+ including the MAD header */ >+ void *mad_payload; /* RMPP: changed per segment */ Mad_payload doesn't appear to be directly accessible directly by the user. It should be hidden. - 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