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

Reply via email to