[dpdk-dev] [PATCH 2/5] vhost: refactor virtio_dev_rx
Rich Lane
rich.lane at bigswitch.com
Fri Dec 11 21:42:33 CET 2015
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.
More information about the dev
mailing list