You need to use the extended mergeable rx buffer format. It is a virtio spec requirement, look at Linux virtio network driver or ask the virtio maintainers for Linux if you need more clarification.
On Tue, Oct 27, 2015 at 10:56 AM, Xie, Huawei <huawei.xie at intel.com> wrote: > On 10/27/2015 7:52 AM, Stephen Hemminger wrote: > > On Fri, 23 Oct 2015 09:00:38 +0000 > > "Xie, Huawei" <huawei.xie at intel.com> wrote: > > > >>>> Why use merge-able rx header here in the tx region? > >>> If mergeable rx is negotiated then the header must be used for > >>> both Tx and Rx. I chose to allocate the largest possible header > >>> needed, rather than having to deal with variable size data structure. > >> Our original code is also using merge-able header for TX descriptor if > >> this negotiated. > >> I checked the virtio spec, all of the merge-able header is about > >> receiving buffers, which is expected. That is why i feel weird here. > >> Maybe not a big deal? > > Since num_buffers is only in merge-able header, the negotiation is > implied > > to be symmetric. > > > Can we come to the conclusion that in tx case, we use merge-able header > though number_buffers is not used at all? > > Reading 0.95 spec > > > > Under "Packet Transmission" > > 3. If the driver negotatied the VIRTIO_NET_F_MGR_RXBUF feature > > the num_buffers field is set to zero. > > > > > >