mbuf: support attaching external buffer
authorYongseok Koh <yskoh@mellanox.com>
Fri, 27 Apr 2018 17:22:51 +0000 (10:22 -0700)
committerThomas Monjalon <thomas@monjalon.net>
Fri, 27 Apr 2018 18:11:25 +0000 (20:11 +0200)
commita53aa2b9f3bedec2019c95e17513064da479a8e3
tree934dc1d70286c26c3de86cd84df5d2b09eea12fa
parent613e827fb28687a990428dab4f34b41c1f180462
mbuf: support attaching external buffer

This patch introduces a new way of attaching an external buffer to a mbuf.

Attaching an external buffer is quite similar to mbuf indirection in
replacing buffer addresses and length of a mbuf, but a few differences:
  - When an indirect mbuf is attached, refcnt of the direct mbuf would be
    2 as long as the direct mbuf itself isn't freed after the attachment.
    In such cases, the buffer area of a direct mbuf must be read-only. But
    external buffer has its own refcnt and it starts from 1. Unless
    multiple mbufs are attached to a mbuf having an external buffer, the
    external buffer is writable.
  - There's no need to allocate buffer from a mempool. Any buffer can be
    attached with appropriate free callback.
  - Smaller metadata is required to maintain shared data such as refcnt.

Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Andrew Rybchenko <arybchenko@solarflare.com>
lib/librte_mbuf/rte_mbuf.h