Hi Stephen, On 10/14/2016 01:33 AM, Stephen Hemminger wrote: > On Thu, 13 Oct 2016 16:18:39 +0800 > Yuanhan Liu <yuanhan.liu at linux.intel.com> wrote: > >> On Mon, Oct 03, 2016 at 11:00:23AM +0200, Olivier Matz wrote: >>> +/* When doing TSO, the IP length is not included in the pseudo header >>> + * checksum of the packet given to the PMD, but for virtio it is >>> + * expected. >>> + */ >>> +static void >>> +virtio_tso_fix_cksum(struct rte_mbuf *m) >>> +{ >>> + /* common case: header is not fragmented */ >>> + if (likely(rte_pktmbuf_data_len(m) >= m->l2_len + m->l3_len + >>> + m->l4_len)) { >> ... >>> + /* replace it in the packet */ >>> + th->cksum = new_cksum; >>> + } else { >> ... >>> + /* replace it in the packet */ >>> + *rte_pktmbuf_mtod_offset(m, uint8_t *, >>> + m->l2_len + m->l3_len + 16) = new_cksum.u8[0]; >>> + *rte_pktmbuf_mtod_offset(m, uint8_t *, >>> + m->l2_len + m->l3_len + 17) = new_cksum.u8[1]; >>> + } >> >> The tcp header will always be in the mbuf, right? Otherwise, you can't >> update the cksum field here. What's the point of introducing the "else >> clause" then? >> >> --yliu > > You need to check the reference count before updating any data in mbuf. >
That's correct, I'll fix that. Thanks for the comment, Olivier