<snip> > >+static __rte_always_inline void >+cn10k_nix_xmit_prepare_tstamp(uintptr_t lmt_addr, const uint64_t >*cmd, >+ const uint64_t ol_flags, const uint16_t >no_segdw, >+ const uint16_t flags) >+{ >+ if (flags & NIX_TX_OFFLOAD_TSTAMP_F) { >+ const uint8_t is_ol_tstamp = !(ol_flags & >PKT_TX_IEEE1588_TMST); >+ struct nix_send_ext_s *send_hdr_ext = >+ (struct nix_send_ext_s >*)lmt_addr + 16; >+ uint64_t *lmt = (uint64_t *)lmt_addr; >+ uint16_t off = (no_segdw - 1) << 1; >+ struct nix_send_mem_s *send_mem; >+ >+ send_mem = (struct nix_send_mem_s *)(lmt + off); >+ send_hdr_ext->w0.subdc = NIX_SUBDC_EXT; >+ send_hdr_ext->w0.tstmp = 1; >+ if (flags & NIX_TX_MULTI_SEG_F) { >+ /* Retrieving the default desc values */ >+ lmt[off] = cmd[2]; >+ >+ /* Using compiler barier to avoid voilation of C >+ * aliasing rules. >+ */ >+ rte_compiler_barrier(); >+ } >+ >+ /* Packets for which PKT_TX_IEEE1588_TMST is not set, >tx tstamp >+ * should not be recorded, hence changing the alg type >to >+ * NIX_SENDMEMALG_SET and also changing send mem >addr field to >+ * next 8 bytes as it corrpt the actual tx tstamp >registered >+ * address. >+ */ >+ send_mem->w0.subdc = NIX_SUBDC_MEM; >+ send_mem->w0.alg = NIX_SENDMEMALG_SETTSTMP - >(is_ol_tstamp); >+ send_mem->addr = (rte_iova_t)((uint64_t *)cmd[3]);
Missing address increment for non-tstmp packets here. >+ } >+} >+ <snip> > static __rte_always_inline void >+cn9k_nix_xmit_prepare_tstamp(uint64_t *cmd, const uint64_t >*send_mem_desc, >+ const uint64_t ol_flags, const uint16_t >no_segdw, >+ const uint16_t flags) >+{ >+ if (flags & NIX_TX_OFFLOAD_TSTAMP_F) { >+ struct nix_send_mem_s *send_mem; >+ uint16_t off = (no_segdw - 1) << 1; >+ const uint8_t is_ol_tstamp = !(ol_flags & >PKT_TX_IEEE1588_TMST); >+ >+ send_mem = (struct nix_send_mem_s *)(cmd + off); >+ if (flags & NIX_TX_MULTI_SEG_F) { >+ /* Retrieving the default desc values */ >+ cmd[off] = send_mem_desc[6]; >+ >+ /* Using compiler barier to avoid voilation of C >+ * aliasing rules. >+ */ >+ rte_compiler_barrier(); >+ } >+ >+ /* Packets for which PKT_TX_IEEE1588_TMST is not set, >tx tstamp >+ * should not be recorded, hence changing the alg type >to >+ * NIX_SENDMEMALG_SET and also changing send mem >addr field to >+ * next 8 bytes as it corrpt the actual tx tstamp >registered >+ * address. >+ */ >+ send_mem->w0.cn9k.alg = >+ NIX_SENDMEMALG_SETTSTMP - >(is_ol_tstamp); >+ >+ send_mem->addr = (rte_iova_t)((uint64_t >*)send_mem_desc[7] + >+ (is_ol_tstamp)); Need to increment by at-least 8 bytes. >+ } >+} >+ <snip>