From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Samudrala, Sridhar" Subject: Re: [RFC PATCH net-next v2 2/2] virtio_net: Extend virtio to use VF datapath when available Date: Tue, 23 Jan 2018 08:03:08 -0800 Message-ID: References: <1515736720-39368-1-git-send-email-sridhar.samudrala@intel.com> <1515736720-39368-3-git-send-email-sridhar.samudrala@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit To: Jason Wang , mst@redhat.com, stephen@networkplumber.org, davem@davemloft.net, netdev@vger.kernel.org, virtualization@lists.linux-foundation.org, virtio-dev@lists.oasis-open.org, jesse.brandeburg@intel.com, alexander.h.duyck@intel.com, kubakici@wp.pl Return-path: Received: from mga04.intel.com ([192.55.52.120]:51606 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751255AbeAWQDJ (ORCPT ); Tue, 23 Jan 2018 11:03:09 -0500 In-Reply-To: Content-Language: en-US Sender: netdev-owner@vger.kernel.org List-ID: On 1/23/2018 2:33 AM, Jason Wang wrote: > > > On 2018年01月12日 13:58, Sridhar Samudrala wrote: >>   static netdev_tx_t start_xmit(struct sk_buff *skb, struct >> net_device *dev) >>   { >>       struct virtnet_info *vi = netdev_priv(dev); >>       int qnum = skb_get_queue_mapping(skb); >>       struct send_queue *sq = &vi->sq[qnum]; >> +    struct net_device *vf_netdev; >>       int err; >>       struct netdev_queue *txq = netdev_get_tx_queue(dev, qnum); >>       bool kick = !skb->xmit_more; >>       bool use_napi = sq->napi.weight; >>   +    /* If VF is present and up then redirect packets >> +     * called with rcu_read_lock_bh >> +     */ >> +    vf_netdev = rcu_dereference_bh(vi->vf_netdev); >> +    if (vf_netdev && netif_running(vf_netdev) && >> +        !netpoll_tx_running(dev) && >> +        is_unicast_ether_addr(eth_hdr(skb)->h_dest)) >> +        return virtnet_vf_xmit(dev, vf_netdev, skb); >> + > > A question here. > > If I read the code correctly, all features were validated against > virtio instead VF before transmitting. This assumes VF's feature is a > superset of virtio, does this really work? Do we need to sanitize the > feature before joining? (e.g at last NETIF_R_GSO_ROBUST needs to be > removed). Actually, virtnet_vf_xmit() calls dev_queue_xmit() after updating skb->dev to vf netdev. So the features get validated against VF features and the right tx queue is selected before the real transmit. Thanks Sridhar