Line data Source code
1 : /* 2 : * vr_dpdk_offloads.h -- dpdk callbacks for datapath flow offloads management 3 : * 4 : * Copyright 2018 Mellanox Technologies, Ltd 5 : */ 6 : #ifndef __VR_DPDK_OFFLOADS_H__ 7 : #define __VR_DPDK_OFFLOADS_H__ 8 : 9 : #include "vr_offloads.h" 10 : #include "vr_dpdk.h" 11 : 12 : int dpdk_offload_flow_destroy(struct vr_offload_flow *oflow); 13 : 14 : int dpdk_offload_flow_create(struct vr_offload_flow *oflow); 15 : 16 : void dpdk_offload_prepare(struct vr_packet *pkt, struct vr_forwarding_md *fmd); 17 : 18 : static inline void 19 0 : dpdk_offload_flow_burst_prefetch(struct rte_mbuf *pkts[VR_DPDK_RX_BURST_SZ], 20 : struct vr_offload_flow *oflows[VR_DPDK_RX_BURST_SZ], 21 : uint32_t nb_pkts) 22 : { 23 0 : struct vr_offload_flow **oflow = &oflows[0]; 24 : int i; 25 : 26 0 : for (i = 0; i < nb_pkts; i++, oflow++) { 27 0 : if (pkts[i]->ol_flags & PKT_RX_FDIR_ID) { 28 0 : *oflow = vr_offloads_flow_get(pkts[i]->hash.fdir.hi); 29 0 : if (*oflow) 30 0 : rte_prefetch0(*oflow); 31 : } else 32 0 : *oflow = NULL; 33 : } 34 0 : } 35 : 36 : static inline void 37 0 : vr_dpdk_offloads_flow_prefetch(struct vr_offload_flow *oflow) 38 : { 39 0 : rte_prefetch0(oflow->fe); 40 0 : rte_prefetch0((char *)oflow->fe + RTE_CACHE_LINE_SIZE); 41 0 : rte_prefetch0(oflow->nh); 42 0 : rte_prefetch0((char *)oflow->nh + RTE_CACHE_LINE_SIZE); 43 0 : } 44 : 45 : #endif /* __VR_DPDK_OFFLOADS_H__ */