From patchwork Thu Nov 13 08:28:20 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hiroshi Shimamoto X-Patchwork-Id: 410310 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 48669140082 for ; Thu, 13 Nov 2014 20:03:07 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932167AbaKMJCn (ORCPT ); Thu, 13 Nov 2014 04:02:43 -0500 Received: from TYO200.gate.nec.co.jp ([210.143.35.50]:41158 "EHLO tyo200.gate.nec.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753709AbaKMJCk convert rfc822-to-8bit (ORCPT ); Thu, 13 Nov 2014 04:02:40 -0500 X-Greylist: delayed 2009 seconds by postgrey-1.27 at vger.kernel.org; Thu, 13 Nov 2014 04:02:39 EST Received: from tyo202.gate.nec.co.jp ([10.7.69.202]) by tyo200.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id sAD8TAew020215 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 13 Nov 2014 17:29:10 +0900 (JST) Received: from mailgate3.nec.co.jp ([10.7.69.160]) by tyo202.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id sAD8SxjY012511; Thu, 13 Nov 2014 17:28:59 +0900 (JST) Received: from mailsv3.nec.co.jp (imss63.nec.co.jp [10.7.69.158]) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) with ESMTP id sAD8Sw806926; Thu, 13 Nov 2014 17:28:58 +0900 (JST) Received: from mail03.kamome.nec.co.jp (mail03.kamome.nec.co.jp [10.25.43.7]) by mailsv3.nec.co.jp (8.13.8/8.13.4) with ESMTP id sAD8SvbD013160; Thu, 13 Nov 2014 17:28:58 +0900 (JST) Received: from bpxc99gp.gisp.nec.co.jp ([10.38.151.143] [10.38.151.143]) by mail03.kamome.nec.co.jp with ESMTP id BT-MMP-3312909; Thu, 13 Nov 2014 17:28:22 +0900 Received: from BPXM14GP.gisp.nec.co.jp ([169.254.1.73]) by BPXC15GP.gisp.nec.co.jp ([10.38.151.143]) with mapi id 14.03.0174.002; Thu, 13 Nov 2014 17:28:21 +0900 From: Hiroshi Shimamoto To: "e1000-devel@lists.sourceforge.net" CC: Hayato Momma , "Choi, Sy Jong" , "linux-kernel@vger.kernel.org" , "netdev@vger.kernel.org" Subject: [PATCH] ixgbe: make VLAN filter conditional in SR-IOV case Thread-Topic: [PATCH] ixgbe: make VLAN filter conditional in SR-IOV case Thread-Index: Ac//G8Ebgt2hdo25TzufE5RPi0Crjg== Date: Thu, 13 Nov 2014 08:28:20 +0000 Message-ID: <7F861DC0615E0C47A872E6F3C5FCDDBD05D9D336@BPXM14GP.gisp.nec.co.jp> Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.205.5.123] MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Hiroshi Shimamoto Disable hardware VLAN filtering if netdev->features VLAN flag is dropped. In SR-IOV case, there is a use case which needs to disable VLAN filter. For example, we need to make a network function with VF in virtualized environment. That network function may be a software switch, a router or etc. It means that that network function will be an end point which terminates many VLANs. In the current implementation, VLAN filtering always be turned on and VF can receive only 63 VLANs. It means that only 63 VLANs can be used and it's not enough at all for building a virtual router. With this patch, if the user turns VLAN filtering off on the host, VF can receive every VLAN packet. The behavior is changed only if VLAN filtering is turned off by ethtool. Signed-off-by: Hiroshi Shimamoto CC: Choi, Sy Jong --- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 10 ++++++++++ drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index d2df4e3..91ce3a8 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -3948,6 +3948,12 @@ void ixgbe_set_rx_mode(struct net_device *netdev) hw->addr_ctrl.user_set_promisc = false; } + /* Disable hardware VLAN filter if the feature flag is dropped */ + if (!(netdev->features & NETIF_F_HW_VLAN_CTAG_FILTER)) { + dev_info(&adapter->pdev->dev, "Disable HW VLAN filter\n"); + vlnctrl &= ~(IXGBE_VLNCTRL_VFE | IXGBE_VLNCTRL_CFIEN); + } + /* * Write addresses to available RAR registers, if there is not * sufficient space to store all the addresses then enable @@ -7634,6 +7640,10 @@ static int ixgbe_set_features(struct net_device *netdev, else ixgbe_vlan_strip_disable(adapter); + /* reset if HW VLAN filter is changed */ + if (changed & NETIF_F_HW_VLAN_CTAG_FILTER) + need_reset = true; + if (changed & NETIF_F_RXALL) need_reset = true; diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c index 13916d8..5508d8a 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c @@ -776,6 +776,10 @@ static int ixgbe_set_vf_vlan_msg(struct ixgbe_adapter *adapter, u32 bits; u8 tcs = netdev_get_num_tc(adapter->netdev); + /* Ignore if VLAN filter is disabled */ + if (!(adapter->netdev->features & NETIF_F_HW_VLAN_CTAG_FILTER)) + return 0; + if (adapter->vfinfo[vf].pf_vlan || tcs) { e_warn(drv, "VF %d attempted to override administratively set VLAN configuration\n"