always_inline void
vnet_rewrite_clear_data_internal (vnet_rewrite_header_t * rw, int max_size)
{
- /* Sanity check values carefully for this memset operation */
+ /* Sanity check values carefully for this clib_memset operation */
ASSERT ((max_size > 0) && (max_size < VLIB_BUFFER_PRE_DATA_SIZE));
rw->data_bytes = 0;
- memset (rw->data, 0xfe, max_size);
+ clib_memset (rw->data, 0xfe, max_size);
}
always_inline void
vnet_rewrite_set_data_internal (vnet_rewrite_header_t * rw,
int max_size, void *data, int data_bytes)
{
- /* Sanity check values carefully for this memset operation */
+ /* Sanity check values carefully for this clib_memset operation */
ASSERT ((max_size > 0) && (max_size < VLIB_BUFFER_PRE_DATA_SIZE));
ASSERT ((data_bytes >= 0) && (data_bytes < max_size));
rw->data_bytes = data_bytes;
- clib_memcpy (rw->data + max_size - data_bytes, data, data_bytes);
- memset (rw->data, 0xfe, max_size - data_bytes);
+ clib_memcpy_fast (rw->data + max_size - data_bytes, data, data_bytes);
+ clib_memset (rw->data, 0xfe, max_size - data_bytes);
}
#define vnet_rewrite_set_data(rw,data,data_bytes) \
clib_memcpy (d, s, sizeof (eh_copy_t));
return;
}
-
+ /*
+ * Stop now if the data_bytes field is zero, to avoid the cache
+ * miss consequences of spraying [functionally harmless] junk into
+ * un-prefetched rewrite space.
+ */
+ if (PREDICT_FALSE (h0->data_bytes == 0))
+ return;
#define _(i) \
do { \
return;
}
+ /*
+ * Stop now if both rewrite data_bytes fields are zero, to avoid the cache
+ * miss consequences of spraying [functionally harmless] junk into
+ * un-prefetched rewrite space.
+ */
+ if (PREDICT_FALSE (h0->data_bytes + h1->data_bytes == 0))
+ return;
+
#define _(i) \
do { \
if (most_likely_size > ((i)-1)*sizeof (vnet_rewrite_data_t)) \
void vnet_rewrite_init (struct vnet_main_t *vnm,
u32 sw_if_index,
+ vnet_link_t linkt,
u32 this_node,
u32 next_node, vnet_rewrite_header_t * rw);
void vnet_rewrite_update_mtu (struct vnet_main_t *vnm,
- vnet_rewrite_header_t * rw);
+ vnet_link_t linkt, vnet_rewrite_header_t * rw);
u8 *vnet_build_rewrite_for_sw_interface (struct vnet_main_t *vnm,
u32 sw_if_index,