X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fvlib%2Fbuffer.h;h=6170323c8154270c5f10bd5c9416e75a97acfc52;hb=58c947650cb864c592779530a655ea108b960b1a;hp=5504bf7c90b22f59cc5857dad8f7252f938e79a5;hpb=b6a8ed7fa0709bbf8e091826803f50e6330689cf;p=vpp.git diff --git a/src/vlib/buffer.h b/src/vlib/buffer.h index 5504bf7c90b..6170323c815 100644 --- a/src/vlib/buffer.h +++ b/src/vlib/buffer.h @@ -123,7 +123,8 @@ typedef struct u8 n_add_refs; /**< Number of additional references to this buffer. */ - u8 dont_waste_me[2]; /**< Available space in the (precious) + u8 buffer_pool_index; /**< index of buffer pool this buffer belongs. */ + u8 dont_waste_me[1]; /**< Available space in the (precious) first 32 octets of buffer metadata Before allocating any of it, discussion required! */ @@ -142,7 +143,8 @@ typedef struct /**< Only valid for first buffer in chain. Current length plus total length given here give total number of bytes in buffer chain. */ - u32 opaque2[13]; /**< More opaque data, currently unused */ + u32 align_pad; /**< available */ + u32 opaque2[12]; /**< More opaque data, see ../vnet/vnet/buffer.h */ /***** end of second cache line */ CLIB_CACHE_LINE_ALIGN_MARK (cacheline2); @@ -401,6 +403,14 @@ typedef struct extern vlib_buffer_callbacks_t *vlib_buffer_callbacks; +typedef struct +{ + CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); + uword start; + uword size; + vlib_physmem_region_index_t physmem_region; +} vlib_buffer_pool_t; + typedef struct { CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); @@ -408,6 +418,7 @@ typedef struct buffer index */ uword buffer_mem_start; uword buffer_mem_size; + vlib_buffer_pool_t *buffer_pools; /* Buffer free callback, for subversive activities */ u32 (*buffer_free_callback) (struct vlib_main_t * vm, @@ -440,9 +451,10 @@ typedef struct int callbacks_registered; } vlib_buffer_main_t; -void vlib_buffer_add_mem_range (struct vlib_main_t *vm, uword start, - uword size); -void vlib_buffer_cb_init (struct vlib_main_t *vm); +u8 vlib_buffer_add_physmem_region (struct vlib_main_t *vm, + vlib_physmem_region_index_t region); + +clib_error_t *vlib_buffer_main_init (struct vlib_main_t *vm); typedef struct { @@ -511,7 +523,11 @@ serialize_vlib_buffer_n_bytes (serialize_main_t * m) #define VLIB_BUFFER_TRACE_TRAJECTORY 0 #if VLIB_BUFFER_TRACE_TRAJECTORY > 0 -#define VLIB_BUFFER_TRACE_TRAJECTORY_INIT(b) (b)->pre_data[0]=0 +extern void (*vlib_buffer_trace_trajectory_cb) (vlib_buffer_t * b, u32 index); +extern void (*vlib_buffer_trace_trajectory_init_cb) (vlib_buffer_t * b); +extern void vlib_buffer_trace_trajectory_init (vlib_buffer_t * b); +#define VLIB_BUFFER_TRACE_TRAJECTORY_INIT(b) \ + vlib_buffer_trace_trajectory_init (b); #else #define VLIB_BUFFER_TRACE_TRAJECTORY_INIT(b) #endif /* VLIB_BUFFER_TRACE_TRAJECTORY */