From patchwork Wed Jun 15 22:07:47 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Duyck X-Patchwork-Id: 636104 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 3rVLHH2Xpxz9t1d for ; Thu, 16 Jun 2016 08:07:55 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=mirantis.com header.i=@mirantis.com header.b=ZbM2z/qE; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753408AbcFOWHw (ORCPT ); Wed, 15 Jun 2016 18:07:52 -0400 Received: from mail-pf0-f177.google.com ([209.85.192.177]:33664 "EHLO mail-pf0-f177.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753113AbcFOWHu (ORCPT ); Wed, 15 Jun 2016 18:07:50 -0400 Received: by mail-pf0-f177.google.com with SMTP id i123so8980126pfg.0 for ; Wed, 15 Jun 2016 15:07:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mirantis.com; s=google; h=subject:from:to:cc:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=8F345clA+CPPr2wJZmL/4k0b6qG8Ka62aAE3azWb3+U=; b=ZbM2z/qE9G94PIIErqSJI0Ue0g3W/mEwidir1pvH9jiy9/+wijf7JBzQo9WUR74jz2 e3vxqgbFo2amDr061Le0iXcBSd5NJGpDl5Q8vc6dfyzE2g5PvJUkZzGUeaF9mtrFlH1F 9IfVZysc+rmTF8aids2aIf2ppcRpDvxUpQjGU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:from:to:cc:date:message-id:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=8F345clA+CPPr2wJZmL/4k0b6qG8Ka62aAE3azWb3+U=; b=UTqRSf6a0k9TLpkzGGUukEZS7enC8AhlqZQq41jcL2k0U51FlfelVDqWw0hSdYOxjz 16ZaBzkaKBGHEGMWUYgO77TV2tax0tezIqgXDG1NBaMV3xeX92AYaN0AfS4N41XZDGbd 1xV08eoGpD+AC1krkJ57oi8tyi7BMqUyT9HQd0PymKgfByh4MND2manvR42rRd3y0HZ1 dwrJCa+KExpKNfecAjhHAXBLB1/bHSoDeg7P3EB3/SWPbaKAMdkGkL0rxMGBI3it7spW Q4IKJobuYKoZUgCBkRhHgYJf3D4laqdmmkXW4sjdx88qIctM7XfIYFvFYM1lgDRlFsnZ LpGg== X-Gm-Message-State: ALyK8tKErA3ynnrf6Mc9kJYT15O+x6mLxL0NqL89ixDZVWddiZstgZRyZymOPjrXqur8Cpbj X-Received: by 10.98.204.2 with SMTP id a2mr1038411pfg.149.1466028468998; Wed, 15 Jun 2016 15:07:48 -0700 (PDT) Received: from localhost.localdomain ([2001:470:b:9c3:9e5c:8eff:fe4f:f2d0]) by smtp.gmail.com with ESMTPSA id ut6sm55281583pac.37.2016.06.15.15.07.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 15 Jun 2016 15:07:48 -0700 (PDT) Subject: [net-next PATCH v2 05/17] bnxt: Update drivers to support unified UDP encapsulation offload functions From: Alexander Duyck To: netdev@vger.kernel.org, intel-wired-lan@lists.osuosl.org Cc: hannes@redhat.com, jesse@kernel.org, eugenia@mellanox.com, jbenc@redhat.com, alexander.duyck@gmail.com, saeedm@mellanox.com, ariel.elior@qlogic.com, tom@herbertland.com, michael.chan@broadcom.com, Dept-GELinuxNICDev@qlogic.com, davem@davemloft.net Date: Wed, 15 Jun 2016 15:07:47 -0700 Message-ID: <20160615220747.15575.31433.stgit@localhost.localdomain> In-Reply-To: <20160615220449.15575.17031.stgit@localhost.localdomain> References: <20160615220449.15575.17031.stgit@localhost.localdomain> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch ends up doing several things. First it updates the driver to make use of the new unified UDP tunnel offload notifier functions. In addition I updated the code so that we can work around the bits that were checking for if VXLAN was enabled since we are now using a notifier based setup. Finally I moved the hard-coded GENEVE port over to using the notifier based setup so that we can update it if needed. Signed-off-by: Alexander Duyck Acked-by: Michael Chan --- drivers/net/ethernet/broadcom/Kconfig | 1 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 68 +++++++++++++++++------------ 2 files changed, 40 insertions(+), 29 deletions(-) diff --git a/drivers/net/ethernet/broadcom/Kconfig b/drivers/net/ethernet/broadcom/Kconfig index d92c37fa8036..d74a92e1c27d 100644 --- a/drivers/net/ethernet/broadcom/Kconfig +++ b/drivers/net/ethernet/broadcom/Kconfig @@ -166,7 +166,6 @@ config SYSTEMPORT config BNXT tristate "Broadcom NetXtreme-C/E support" depends on PCI - depends on VXLAN || VXLAN=n select FW_LOADER select LIBCRC32C ---help--- diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index c777cde85ce4..bb66091b7dd6 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -37,9 +37,7 @@ #include #include #include -#if defined(CONFIG_VXLAN) || defined(CONFIG_VXLAN_MODULE) -#include -#endif +#include #ifdef CONFIG_NET_RX_BUSY_POLL #include #endif @@ -5074,9 +5072,7 @@ static int __bnxt_open_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init) } if (irq_re_init) { -#if defined(CONFIG_VXLAN) || defined(CONFIG_VXLAN_MODULE) - vxlan_get_rx_port(bp->dev); -#endif + udp_tunnel_get_rx_info(bp->dev); if (!bnxt_hwrm_tunnel_dst_port_alloc( bp, htons(0x17c1), TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_GENEVE)) @@ -6048,47 +6044,63 @@ static void bnxt_cfg_ntp_filters(struct bnxt *bp) #endif /* CONFIG_RFS_ACCEL */ -static void bnxt_add_vxlan_port(struct net_device *dev, sa_family_t sa_family, - __be16 port) +static void bnxt_udp_tunnel_add(struct net_device *dev, + struct udp_tunnel_info *ti) { struct bnxt *bp = netdev_priv(dev); - if (!netif_running(dev)) + if (ti->sa_family != AF_INET6 && ti->sa_family != AF_INET) return; - if (sa_family != AF_INET6 && sa_family != AF_INET) + if (!netif_running(dev)) return; - if (bp->vxlan_port_cnt && bp->vxlan_port != port) - return; + switch (ti->type) { + case UDP_TUNNEL_TYPE_VXLAN: + if (bp->vxlan_port_cnt && bp->vxlan_port != ti->port) + return; - bp->vxlan_port_cnt++; - if (bp->vxlan_port_cnt == 1) { - bp->vxlan_port = port; - set_bit(BNXT_VXLAN_ADD_PORT_SP_EVENT, &bp->sp_event); - schedule_work(&bp->sp_task); + bp->vxlan_port_cnt++; + if (bp->vxlan_port_cnt == 1) { + bp->vxlan_port = ti->port; + set_bit(BNXT_VXLAN_ADD_PORT_SP_EVENT, &bp->sp_event); + schedule_work(&bp->sp_task); + } + break; + default: + return; } + + schedule_work(&bp->sp_task); } -static void bnxt_del_vxlan_port(struct net_device *dev, sa_family_t sa_family, - __be16 port) +static void bnxt_udp_tunnel_del(struct net_device *dev, + struct udp_tunnel_info *ti) { struct bnxt *bp = netdev_priv(dev); - if (!netif_running(dev)) + if (ti->sa_family != AF_INET6 && ti->sa_family != AF_INET) return; - if (sa_family != AF_INET6 && sa_family != AF_INET) + if (!netif_running(dev)) return; - if (bp->vxlan_port_cnt && bp->vxlan_port == port) { + switch (ti->type) { + case UDP_TUNNEL_TYPE_VXLAN: + if (!bp->vxlan_port_cnt || bp->vxlan_port != ti->port) + return; bp->vxlan_port_cnt--; - if (bp->vxlan_port_cnt == 0) { - set_bit(BNXT_VXLAN_DEL_PORT_SP_EVENT, &bp->sp_event); - schedule_work(&bp->sp_task); - } + if (bp->vxlan_port_cnt != 0) + return; + + set_bit(BNXT_VXLAN_DEL_PORT_SP_EVENT, &bp->sp_event); + break; + default: + return; } + + schedule_work(&bp->sp_task); } static const struct net_device_ops bnxt_netdev_ops = { @@ -6119,8 +6131,8 @@ static const struct net_device_ops bnxt_netdev_ops = { #ifdef CONFIG_RFS_ACCEL .ndo_rx_flow_steer = bnxt_rx_flow_steer, #endif - .ndo_add_vxlan_port = bnxt_add_vxlan_port, - .ndo_del_vxlan_port = bnxt_del_vxlan_port, + .ndo_udp_tunnel_add = bnxt_udp_tunnel_add, + .ndo_udp_tunnel_del = bnxt_udp_tunnel_del, #ifdef CONFIG_NET_RX_BUSY_POLL .ndo_busy_poll = bnxt_busy_poll, #endif