From: John Fastabend <john.fastabend@gmail.com>
To: Jason Wang <jasowang@redhat.com>
Cc: davem@davemloft.net, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, mst@redhat.com,
John Fastabend <john.r.fastabend@intel.com>,
Neil Horman <nhorman@tuxdriver.com>
Subject: Re: [PATCH net 1/2] macvlan: forbid L2 fowarding offload for macvtap
Date: Sun, 05 Jan 2014 23:35:54 -0800 [thread overview]
Message-ID: <52CA5CDA.1020503@gmail.com> (raw)
In-Reply-To: <1388978467-2075-1-git-send-email-jasowang@redhat.com>
On 01/05/2014 07:21 PM, Jason Wang wrote:
> L2 fowarding offload will bypass the rx handler of real device. This will make
> the packet could not be forwarded to macvtap device. Another problem is the
> dev_hard_start_xmit() called for macvtap does not have any synchronization.
>
> Fix this by forbidding L2 forwarding for macvtap.
>
> Cc: John Fastabend <john.r.fastabend@intel.com>
> Cc: Neil Horman <nhorman@tuxdriver.com>
> Signed-off-by: Jason Wang <jasowang@redhat.com>
> ---
> drivers/net/macvlan.c | 5 ++++-
> 1 files changed, 4 insertions(+), 1 deletions(-)
>
I must be missing something.
The lower layer device should set skb->dev to the correct macvtap
device on receive so that in netif_receive_skb_core() the macvtap
handler is hit. Skipping the macvlan receive handler should be OK
because the switching was done by the hardware. If I read macvtap.c
correctly macvlan_common_newlink() is called with 'dev' where 'dev'
is the macvtap device. Any idea what I'm missing? I guess I'll need
to setup a macvtap test case.
And what synchronization are you worried about on dev_hard_start_xmit()?
In the L2 forwarding offload case macvlan_open() clears the NETIF_F_LLTX
flag so HARD_TX_LOCK protects the driver txq. We might hit this warning
in dev_queue_xmit() though,
net_crit_ratelimited("Virtual device %s asks to queue packet!\n",
Perhaps we can remove it.
> diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
> index 60406b0..5360f73 100644
> --- a/drivers/net/macvlan.c
> +++ b/drivers/net/macvlan.c
> @@ -338,6 +338,8 @@ static const struct header_ops macvlan_hard_header_ops = {
> .cache_update = eth_header_cache_update,
> };
>
> +static struct rtnl_link_ops macvlan_link_ops;
> +
> static int macvlan_open(struct net_device *dev)
> {
> struct macvlan_dev *vlan = netdev_priv(dev);
> @@ -353,7 +355,8 @@ static int macvlan_open(struct net_device *dev)
> goto hash_add;
> }
>
> - if (lowerdev->features & NETIF_F_HW_L2FW_DOFFLOAD) {
> + if (lowerdev->features & NETIF_F_HW_L2FW_DOFFLOAD &&
> + dev->rtnl_link_ops == &macvlan_link_ops) {
> vlan->fwd_priv =
> lowerdev->netdev_ops->ndo_dfwd_add_station(lowerdev, dev);
>
>
--
John Fastabend Intel Corporation
next prev parent reply other threads:[~2014-01-06 7:36 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-06 3:21 [PATCH net 1/2] macvlan: forbid L2 fowarding offload for macvtap Jason Wang
2014-01-06 3:21 ` [PATCH net 2/2] net: core: explicitly select a txq before doing l2 forwarding Jason Wang
2014-01-06 3:21 ` Jason Wang
2014-01-06 12:04 ` [E1000-devel] " Jeff Kirsher
2014-01-06 12:04 ` Jeff Kirsher
2014-01-06 12:42 ` Neil Horman
2014-01-06 15:06 ` John Fastabend
2014-01-06 15:06 ` John Fastabend
2014-01-06 15:29 ` Neil Horman
2014-01-06 15:29 ` Neil Horman
2014-01-07 3:42 ` Jason Wang
2014-01-07 3:42 ` Jason Wang
2014-01-07 13:17 ` Neil Horman
2014-01-08 3:21 ` Jason Wang
2014-01-08 3:21 ` Jason Wang
2014-01-08 14:40 ` Neil Horman
2014-01-09 8:28 ` Jason Wang
2014-01-09 8:28 ` Jason Wang
2014-01-09 11:53 ` Neil Horman
2014-01-09 11:53 ` Neil Horman
2014-01-07 8:22 ` John Fastabend
2014-01-07 8:37 ` John Fastabend
2014-01-06 7:35 ` John Fastabend [this message]
2014-01-06 7:54 ` [PATCH net 1/2] macvlan: forbid L2 fowarding offload for macvtap Jason Wang
2014-01-06 12:26 ` Neil Horman
2014-01-07 3:10 ` Jason Wang
2014-01-07 5:15 ` John Fastabend
2014-01-07 6:22 ` Jason Wang
2014-01-07 7:26 ` John Fastabend
2014-01-07 9:00 ` Jason Wang
2014-01-08 12:55 ` Michael S. Tsirkin
2014-01-08 19:05 ` John Fastabend
2014-01-09 7:17 ` Michael S. Tsirkin
2014-01-09 8:55 ` Jason Wang
2014-01-09 21:39 ` Stephen Hemminger
2014-01-09 22:03 ` Michael S. Tsirkin
2014-01-09 22:20 ` Stephen Hemminger
2014-01-10 7:06 ` Jason Wang
2014-01-10 16:40 ` Vlad Yasevich
2014-01-07 5:16 ` John Fastabend
2014-01-06 20:47 ` David Miller
2014-01-07 3:17 ` Jason Wang
2014-01-07 5:57 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52CA5CDA.1020503@gmail.com \
--to=john.fastabend@gmail.com \
--cc=davem@davemloft.net \
--cc=jasowang@redhat.com \
--cc=john.r.fastabend@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=nhorman@tuxdriver.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.