[dpdk-dev] [PATCH 4/6] qede: add driver common module
From: Harish Patil Signed-off-by: Harish Patil Signed-off-by: Rasesh Mody Signed-off-by: Sony Chacko --- drivers/net/qede/ecore/bcm_osal.c| 130 + drivers/net/qede/ecore/bcm_osal.h| 408 + drivers/net/qede/ecore/common_hsi.h | 714 ++ drivers/net/qede/ecore/ecore.h | 785 ++ drivers/net/qede/ecore/ecore_attn_values.h | 13287 + drivers/net/qede/ecore/ecore_chain.h | 724 ++ drivers/net/qede/ecore/ecore_cxt.c | 2164 drivers/net/qede/ecore/ecore_cxt.h | 173 + drivers/net/qede/ecore/ecore_cxt_api.h |79 + drivers/net/qede/ecore/ecore_dcbx.c | 950 ++ drivers/net/qede/ecore/ecore_dcbx.h |55 + drivers/net/qede/ecore/ecore_dcbx_api.h | 166 + drivers/net/qede/ecore/ecore_dev.c | 3907 drivers/net/qede/ecore/ecore_dev_api.h | 497 + drivers/net/qede/ecore/ecore_gtt_reg_addr.h |42 + drivers/net/qede/ecore/ecore_gtt_values.h|33 + drivers/net/qede/ecore/ecore_hsi_common.h| 1912 drivers/net/qede/ecore/ecore_hsi_eth.h | 1912 drivers/net/qede/ecore/ecore_hsi_tools.h | 1081 ++ drivers/net/qede/ecore/ecore_hw.c| 1000 ++ drivers/net/qede/ecore/ecore_hw.h| 273 + drivers/net/qede/ecore/ecore_hw_defs.h |49 + drivers/net/qede/ecore/ecore_init_fw_funcs.c | 1275 +++ drivers/net/qede/ecore/ecore_init_fw_funcs.h | 263 + drivers/net/qede/ecore/ecore_init_ops.c | 610 ++ drivers/net/qede/ecore/ecore_init_ops.h | 103 + drivers/net/qede/ecore/ecore_int.c | 2234 + drivers/net/qede/ecore/ecore_int.h | 234 + drivers/net/qede/ecore/ecore_int_api.h | 277 + drivers/net/qede/ecore/ecore_iov_api.h | 931 ++ drivers/net/qede/ecore/ecore_iro.h | 168 + drivers/net/qede/ecore/ecore_iro_values.h|59 + drivers/net/qede/ecore/ecore_l2.c| 1801 drivers/net/qede/ecore/ecore_l2.h| 151 + drivers/net/qede/ecore/ecore_l2_api.h| 401 + drivers/net/qede/ecore/ecore_mcp.c | 1952 drivers/net/qede/ecore/ecore_mcp.h | 304 + drivers/net/qede/ecore/ecore_mcp_api.h | 629 ++ drivers/net/qede/ecore/ecore_proto_if.h |88 + drivers/net/qede/ecore/ecore_rt_defs.h | 449 + drivers/net/qede/ecore/ecore_sp_api.h|42 + drivers/net/qede/ecore/ecore_sp_commands.c | 531 + drivers/net/qede/ecore/ecore_sp_commands.h | 137 + drivers/net/qede/ecore/ecore_spq.c | 989 ++ drivers/net/qede/ecore/ecore_spq.h | 302 + drivers/net/qede/ecore/ecore_sriov.c | 3422 +++ drivers/net/qede/ecore/ecore_sriov.h | 390 + drivers/net/qede/ecore/ecore_status.h|30 + drivers/net/qede/ecore/ecore_utils.h |31 + drivers/net/qede/ecore/ecore_vf.c| 1319 +++ drivers/net/qede/ecore/ecore_vf.h| 415 + drivers/net/qede/ecore/ecore_vf_api.h| 185 + drivers/net/qede/ecore/ecore_vfpf_if.h | 588 ++ drivers/net/qede/ecore/eth_common.h | 526 + drivers/net/qede/ecore/mcp_public.h | 1243 +++ drivers/net/qede/ecore/nvm_cfg.h | 935 ++ drivers/net/qede/ecore/reg_addr.h| 1112 +++ 57 files changed, 54467 insertions(+) create mode 100644 drivers/net/qede/ecore/bcm_osal.c create mode 100644 drivers/net/qede/ecore/bcm_osal.h create mode 100644 drivers/net/qede/ecore/common_hsi.h create mode 100644 drivers/net/qede/ecore/ecore.h create mode 100644 drivers/net/qede/ecore/ecore_attn_values.h create mode 100644 drivers/net/qede/ecore/ecore_chain.h create mode 100644 drivers/net/qede/ecore/ecore_cxt.c create mode 100644 drivers/net/qede/ecore/ecore_cxt.h create mode 100644 drivers/net/qede/ecore/ecore_cxt_api.h create mode 100644 drivers/net/qede/ecore/ecore_dcbx.c create mode 100644 drivers/net/qede/ecore/ecore_dcbx.h create mode 100644 drivers/net/qede/ecore/ecore_dcbx_api.h create mode 100644 drivers/net/qede/ecore/ecore_dev.c create mode 100644 drivers/net/qede/ecore/ecore_dev_api.h create mode 100644 drivers/net/qede/ecore/ecore_gtt_reg_addr.h create mode 100644 drivers/net/qede/ecore/ecore_gtt_values.h create mode 100644 drivers/net/qede/ecore/ecore_hsi_common.h create mode 100644 drivers/net/qede/ecore/ecore_hsi_eth.h create mode 100644 drivers/net/qede/ecore/ecore_hsi_tools.h create mode 100644 drivers/net/qede/ecore/ecore_hw.c create mode 100644 drivers/net/qede/ecore/ecore_hw.h create mode 100644 drivers/net/qede/ecore/ecore_hw_defs.h create mode 100644 drivers/net/qede/ecore/ecore_init_fw_funcs.c create mode 100644 drivers/net/qede/ecore/ecore_init_fw_funcs.h create mode 100644 drivers/net/qede/ecore/ecore_init_ops.c create mode 100644 drivers/net/qede/ecore/ecore_init_ops.h create mode 100644 drivers/net/qede/ecore/ecore_int.c create mode
[dpdk-dev] [PATCH] l3fwd: Fix l3fwd crash due to unaligned load/store intrinsics
From: Harish Patil l3fwd app expects PMDs to return packets whose L2 header is 16-byte aligned due to usage of _mm_load_si128()/_mm_store_si128() intrinsics in the app. However, most of the protocol stacks expects packets such that its IP/L3 header be aligned on a 16-byte boundary. Based on the recommendations received on dpdk-dev, we are changing the l3fwd app to use _mm_loadu_si128()/_mm_loadu_si128() so that the address need not be 16-byte aligned and thereby preventing crash. We have tested that there is no performance impact due to this change. Signed-off-by: Harish Patil --- examples/l3fwd/main.c | 20 ++-- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c index 1f3e5c6..4b8b754 100644 --- a/examples/l3fwd/main.c +++ b/examples/l3fwd/main.c @@ -1220,14 +1220,14 @@ process_packet(struct lcore_conf *qconf, struct rte_mbuf *pkt, dst_ipv4 = rte_be_to_cpu_32(dst_ipv4); dp = get_dst_port(qconf, pkt, dst_ipv4, portid); - te = _mm_load_si128((__m128i *)eth_hdr); + te = _mm_loadu_si128((__m128i *)eth_hdr); ve = val_eth[dp]; dst_port[0] = dp; rfc1812_process(ipv4_hdr, dst_port, pkt->packet_type); te = _mm_blend_epi16(te, ve, MASK_ETH); - _mm_store_si128((__m128i *)eth_hdr, te); + _mm_storeu_si128((__m128i *)eth_hdr, te); } /* @@ -1313,16 +1313,16 @@ processx4_step3(struct rte_mbuf *pkt[FWDSTEP], uint16_t dst_port[FWDSTEP]) p[3] = rte_pktmbuf_mtod(pkt[3], __m128i *); ve[0] = val_eth[dst_port[0]]; - te[0] = _mm_load_si128(p[0]); + te[0] = _mm_loadu_si128(p[0]); ve[1] = val_eth[dst_port[1]]; - te[1] = _mm_load_si128(p[1]); + te[1] = _mm_loadu_si128(p[1]); ve[2] = val_eth[dst_port[2]]; - te[2] = _mm_load_si128(p[2]); + te[2] = _mm_loadu_si128(p[2]); ve[3] = val_eth[dst_port[3]]; - te[3] = _mm_load_si128(p[3]); + te[3] = _mm_loadu_si128(p[3]); /* Update first 12 bytes, keep rest bytes intact. */ te[0] = _mm_blend_epi16(te[0], ve[0], MASK_ETH); @@ -1330,10 +1330,10 @@ processx4_step3(struct rte_mbuf *pkt[FWDSTEP], uint16_t dst_port[FWDSTEP]) te[2] = _mm_blend_epi16(te[2], ve[2], MASK_ETH); te[3] = _mm_blend_epi16(te[3], ve[3], MASK_ETH); - _mm_store_si128(p[0], te[0]); - _mm_store_si128(p[1], te[1]); - _mm_store_si128(p[2], te[2]); - _mm_store_si128(p[3], te[3]); + _mm_storeu_si128(p[0], te[0]); + _mm_storeu_si128(p[1], te[1]); + _mm_storeu_si128(p[2], te[2]); + _mm_storeu_si128(p[3], te[3]); rfc1812_process((struct ipv4_hdr *)((struct ether_hdr *)p[0] + 1), &dst_port[0], pkt[0]->packet_type); -- 1.8.3.1