2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-30 22:05:19 +00:00

dp-packet: Refactor DPDK packet initialization.

DPDK uses dp-packet pools and manages the mbuf portion of
each packet. When a pool is created, partial initialization is
also done on the OVS portion (i.e. non-mbuf).  Since packet
memory is reused, this is not very useful for transient
fields and is also misleading.  Furthermore, some of these
transient fields are properly initialized for DPDK packets
entering OVS anyways, which is the only reasonable way to do this.
Another field, cutlen, is initialized in this manner in the pool
and intended to be reset when cutlen is applied on sending the
packet out. However, if cutlen context is set but the packet is
not sent out for some reason, then the packet header would be
corrupted in the memory pool.  It is better to just reset the
cutlen in the packets when received.  I did not detect a
degradation in performance, however, I would be willing to
have some degradation, since this is a proper way to handle
this.  In addition to initializing cutlen in received packets,
the other OVS transient fields are removed from the DPDK pool
initialization.

Acked-by: Sugesh Chandran <sugesh.chandran@intel.com>
Signed-off-by: Darrell Ball <dlu998@gmail.com>
This commit is contained in:
Darrell Ball
2017-08-24 22:09:58 -07:00
parent 441cb3ebc0
commit 11d4c7a843
3 changed files with 21 additions and 7 deletions

View File

@@ -800,6 +800,16 @@ dp_packet_delete_batch(struct dp_packet_batch *batch, bool may_steal)
}
}
static inline void
dp_packet_batch_init_cutlen(struct dp_packet_batch *batch)
{
struct dp_packet *packet;
DP_PACKET_BATCH_FOR_EACH (packet, batch) {
dp_packet_reset_cutlen(packet);
}
}
static inline void
dp_packet_batch_apply_cutlen(struct dp_packet_batch *batch)
{