dp-packet: Merge 'allocated' member with DPDK mbuf 'buf_len'.
authorDaniele Di Proietto <diproiettod@vmware.com>
Mon, 18 May 2015 17:47:47 +0000 (10:47 -0700)
committerPravin B Shelar <pshelar@nicira.com>
Mon, 18 May 2015 22:14:02 +0000 (15:14 -0700)
DPDK buf_len is only 16-bit wide ('allocated' was 32-bit), but it should
be enough to store the number of allocated bytes.

This will reduce 'struct dp_packet' size.

Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
Acked-by: Pravin B Shelar <pshelar@nicira.com>
lib/dp-packet.c
lib/dp-packet.h

index 375b7b7..31fe9d3 100644 (file)
@@ -25,7 +25,7 @@
 static void
 dp_packet_init__(struct dp_packet *b, size_t allocated, enum dp_packet_source source)
 {
-    b->allocated = allocated;
+    dp_packet_set_allocated(b, allocated);
     b->source = source;
     b->l2_pad_size = 0;
     b->l2_5_ofs = b->l3_ofs = b->l4_ofs = UINT16_MAX;
@@ -243,7 +243,7 @@ dp_packet_resize__(struct dp_packet *b, size_t new_headroom, size_t new_tailroom
         OVS_NOT_REACHED();
     }
 
-    b->allocated = new_allocated;
+    dp_packet_set_allocated(b, new_allocated);
     dp_packet_set_base(b, new_base);
 
     new_data = (char *) new_base + new_headroom;
@@ -441,7 +441,7 @@ dp_packet_to_string(const struct dp_packet *b, size_t maxbytes)
 
     ds_init(&s);
     ds_put_format(&s, "size=%"PRIu32", allocated=%"PRIu32", head=%"PRIuSIZE", tail=%"PRIuSIZE"\n",
-                  dp_packet_size(b), b->allocated,
+                  dp_packet_size(b), dp_packet_get_allocated(b),
                   dp_packet_headroom(b), dp_packet_tailroom(b));
     ds_put_hex_dump(&s, dp_packet_data(b), MIN(dp_packet_size(b), maxbytes), 0, false);
     return ds_cstr(&s);
index 54a3445..1d10d99 100644 (file)
@@ -44,12 +44,11 @@ struct dp_packet {
     struct rte_mbuf mbuf;       /* DPDK mbuf */
 #else
     void *base_;                /* First byte of allocated space. */
+    uint16_t allocated_;        /* Number of bytes allocated. */
     uint16_t data_ofs;          /* First byte actually in use. */
     uint32_t size_;             /* Number of bytes in use. */
     uint32_t rss_hash;          /* Packet hash. */
 #endif
-    uint32_t allocated;         /* Number of bytes allocated. */
-
     enum dp_packet_source source;  /* Source of memory allocated as 'base'. */
     uint8_t l2_pad_size;           /* Detected l2 padding size.
                                     * Padding is non-pullable. */
@@ -69,6 +68,9 @@ static inline void dp_packet_set_base(struct dp_packet *, void *);
 static inline uint32_t dp_packet_size(const struct dp_packet *);
 static inline void dp_packet_set_size(struct dp_packet *, uint32_t);
 
+static inline uint16_t dp_packet_get_allocated(const struct dp_packet *);
+static inline void dp_packet_set_allocated(struct dp_packet *, uint16_t);
+
 void * dp_packet_resize_l2(struct dp_packet *, int increment);
 void * dp_packet_resize_l2_5(struct dp_packet *, int increment);
 static inline void * dp_packet_l2(const struct dp_packet *);
@@ -194,7 +196,7 @@ static inline void *dp_packet_tail(const struct dp_packet *b)
  * not necessarily in use) in 'b'. */
 static inline void *dp_packet_end(const struct dp_packet *b)
 {
-    return (char *) dp_packet_base(b) + b->allocated;
+    return (char *) dp_packet_base(b) + dp_packet_get_allocated(b);
 }
 
 /* Returns the number of bytes of headroom in 'b', that is, the number of bytes
@@ -408,6 +410,15 @@ static inline void __packet_set_data(struct dp_packet *b, uint16_t v)
     b->mbuf.data_off = v;
 }
 
+static inline uint16_t dp_packet_get_allocated(const struct dp_packet *b)
+{
+    return b->mbuf.buf_len;
+}
+
+static inline void dp_packet_set_allocated(struct dp_packet *b, uint16_t s)
+{
+    b->mbuf.buf_len = s;
+}
 #else
 static inline void * dp_packet_base(const struct dp_packet *b)
 {
@@ -439,6 +450,15 @@ static inline void __packet_set_data(struct dp_packet *b, uint16_t v)
     b->data_ofs = v;
 }
 
+static inline uint16_t dp_packet_get_allocated(const struct dp_packet *b)
+{
+    return b->allocated_;
+}
+
+static inline void dp_packet_set_allocated(struct dp_packet *b, uint16_t s)
+{
+    b->allocated_ = s;
+}
 #endif
 
 static inline void * dp_packet_data(const struct dp_packet *b)