[dpdk-dev] [PATCH v4 3/3] net/virtio: support GUEST ANNOUNCE
Tiwei Bie
tiwei.bie at intel.com
Thu Jan 4 12:13:19 CET 2018
On Thu, Jan 04, 2018 at 07:59:38AM -0800, Xiao Wang wrote:
[...]
> +static void
> +virtio_notify_peers(struct rte_eth_dev *dev)
> +{
> + struct virtio_hw *hw = dev->data->dev_private;
> + struct virtnet_tx *txvq = dev->data->tx_queues[0];
> + struct virtnet_rx *rxvq = dev->data->rx_queues[0];
> + struct rte_mbuf **rarp_buf;
> +
> + rarp_buf = rte_zmalloc("rarp_buf", sizeof(struct rte_mbuf *), 0);
> + if (!rarp_buf) {
> + PMD_INIT_LOG(ERR, "Failed to allocate rarp pointer");
> + return;
> + }
> +
> + rarp_buf[0] = rte_mbuf_raw_alloc(rxvq->mpool);
> + if (rarp_buf[0] == NULL) {
> + PMD_DRV_LOG(ERR, "first mbuf allocate free_bufed");
> + goto free_buf;
> + }
> +
> + if (make_rarp_packet(rarp_buf[0],
> + (struct ether_addr *)hw->mac_addr)) {
> + rte_pktmbuf_free(rarp_buf[0]);
> + goto free_buf;
> + }
> +
> + /* If virtio port just stopped, no need to send RARP */
> + if (virtio_dev_pause(dev) < 0) {
> + rte_pktmbuf_free(rarp_buf[0]);
> + goto free_buf;
> + }
> +
> + virtio_inject_pkts(dev, txvq, rarp_buf, 1);
You don't need to define rarp_buf as `struct rte_mbuf **`,
and dynamically alloc the mbuf pointer. You could alloc a
mbuf pointer on the stack directly, e.g.:
struct rte_mbuf *rarp_mbuf;
rarp_mbuf = rte_pktmbuf_alloc(...);
...
if (make_rarp_packet(rarp_mbuf, ...))
...
virtio_inject_pkts(..., &rarp_mbuf, 1);
Thanks,
Tiwei
More information about the dev
mailing list