[ovs-dev] [PATCH 3/5] ofpbuf: Add ofpbuf_init_dpdk()
Pravin
pshelar at nicira.com
Tue Apr 1 04:43:24 UTC 2014
From: Pravin Shelar <pshelar at nicira.com>
Signed-off-by: Pravin B Shelar <pshelar at nicira.com>
---
lib/ofpbuf.c | 27 ++++++++++++++++++++++-----
lib/ofpbuf.h | 2 ++
2 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/lib/ofpbuf.c b/lib/ofpbuf.c
index 8763e49..f616b1c 100644
--- a/lib/ofpbuf.c
+++ b/lib/ofpbuf.c
@@ -23,6 +23,16 @@
#include "util.h"
static void
+ofpbuf_init__(struct ofpbuf *b, size_t allocated, enum ofpbuf_source source)
+{
+ b->allocated = allocated;
+ b->source = source;
+ b->l2 = NULL;
+ b->l2_5_ofs = b->l3_ofs = b->l4_ofs = UINT16_MAX;
+ list_poison(&b->list_node);
+}
+
+static void
ofpbuf_use__(struct ofpbuf *b, void *base, size_t allocated,
enum ofpbuf_source source)
{
@@ -30,11 +40,7 @@ ofpbuf_use__(struct ofpbuf *b, void *base, size_t allocated,
ofpbuf_set_data(b, base);
ofpbuf_set_size(b, 0);
- b->allocated = allocated;
- b->source = source;
- b->l2 = NULL;
- b->l2_5_ofs = b->l3_ofs = b->l4_ofs = UINT16_MAX;
- list_poison(&b->list_node);
+ ofpbuf_init__(b, allocated, source);
}
/* Initializes 'b' as an empty ofpbuf that contains the 'allocated' bytes of
@@ -101,6 +107,17 @@ ofpbuf_use_const(struct ofpbuf *b, const void *data, size_t size)
ofpbuf_set_size(b, size);
}
+/* Initializes 'b' as an empty ofpbuf that contains the 'allocated' bytes of
+ * memory starting at 'base'. DPDK allocated ofpbuf and *data is allocated
+ * from one continous memory region, so in memory data start right after
+ * ofpbuf. Therefore there is special method to free this type of
+ * buffer. */
+void
+ofpbuf_init_dpdk(struct ofpbuf *b, size_t allocated)
+{
+ ofpbuf_init__(b, allocated, OFPBUF_DPDK);
+}
+
/* Initializes 'b' as an empty ofpbuf with an initial capacity of 'size'
* bytes. */
void
diff --git a/lib/ofpbuf.h b/lib/ofpbuf.h
index a261a44..df7f189 100644
--- a/lib/ofpbuf.h
+++ b/lib/ofpbuf.h
@@ -85,6 +85,8 @@ void ofpbuf_use_stack(struct ofpbuf *, void *, size_t);
void ofpbuf_use_stub(struct ofpbuf *, void *, size_t);
void ofpbuf_use_const(struct ofpbuf *, const void *, size_t);
+void ofpbuf_init_dpdk(struct ofpbuf *b, size_t allocated);
+
void ofpbuf_init(struct ofpbuf *, size_t);
void ofpbuf_uninit(struct ofpbuf *);
static inline void *ofpbuf_get_uninit_pointer(struct ofpbuf *);
--
1.7.9.5
More information about the dev
mailing list