[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