[dpdk-dev] [PATCH 2/5] vhost: refactor virtio_dev_rx

Yuanhan Liu yuanhan.liu at linux.intel.com
Mon Dec 14 02:47:16 CET 2015


On Fri, Dec 11, 2015 at 12:42:33PM -0800, Rich Lane wrote:
> On Wed, Dec 2, 2015 at 10:06 PM, Yuanhan Liu <yuanhan.liu at linux.intel.com>
> wrote:
> 
>     +static inline int __attribute__((always_inline))
>     +copy_mbuf_to_desc(struct virtio_net *dev, struct vhost_virtqueue *vq,
>     +                 struct rte_mbuf *m, uint16_t desc_idx, uint32_t *copied)
>     +{
>     ...
>     +       while (1) {
>     +               /* done with current mbuf, fetch next */
>     +               if (mbuf_avail == 0) {
>     +                       m = m->next;
>     +                       if (m == NULL)
>     +                               break;
>     +
>     +                       mbuf_offset = 0;
>     +                       mbuf_avail  = rte_pktmbuf_data_len(m);
>     +               }
>     +
>     +               /* done with current desc buf, fetch next */
>     +               if (desc_avail == 0) {
>     +                       if ((desc->flags & VRING_DESC_F_NEXT) == 0) {
>     +                               /* Room in vring buffer is not enough */
>     +                               return -1;
>     +                       }
>     +
>     +                       desc = &vq->desc[desc->next];
>     +                       desc_addr   = gpa_to_vva(dev, desc->addr);
>     +                       desc_offset = 0;
>     +                       desc_avail  = desc->len;
>     +               }
>     +
>     +               COPY(desc_addr + desc_offset,
>     +                       rte_pktmbuf_mtod_offset(m, uint64_t, mbuf_offset));
>     +               PRINT_PACKET(dev, (uintptr_t)(desc_addr + desc_offset),
>     +                            cpy_len, 0);
>     +       }
>     +       *copied = rte_pktmbuf_pkt_len(m);
> 
> 
> AFAICT m will always be NULL at this point so the call to rte_pktmbuf_len will
> segfault.

Right, I should move it in the beginning of this function.

	--yliu


More information about the dev mailing list