bnx2x: Move all UDP port notifiers to single function

This patch goes through and combines the notifiers for VXLAN and GENEVE
into a single function for each action.  So there is now one combined
function for getting ports, one for adding the ports, and one for deleting
the ports.

I also went through and dropped the BNX2X VXLAN and GENEVE specific build
flags.

Signed-off-by: Alexander Duyck <aduyck@mirantis.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Alexander Duyck 2016-06-16 12:21:09 -07:00 committed by David S. Miller
parent 7c46a640de
commit 6b3529123d
2 changed files with 33 additions and 81 deletions

View file

@ -139,26 +139,6 @@ config BNX2X_SRIOV
Virtualization support in the 578xx and 57712 products. This
allows for virtual function acceleration in virtual environments.
config BNX2X_VXLAN
bool "Virtual eXtensible Local Area Network support"
default n
depends on BNX2X && VXLAN && !(BNX2X=y && VXLAN=m)
---help---
This enables hardward offload support for VXLAN protocol over the
NetXtremeII series adapters.
Say Y here if you want to enable hardware offload support for
Virtual eXtensible Local Area Network (VXLAN) in the driver.
config BNX2X_GENEVE
bool "Generic Network Virtualization Encapsulation (GENEVE) support"
depends on BNX2X && GENEVE && !(BNX2X=y && GENEVE=m)
---help---
This allows one to create GENEVE virtual interfaces that provide
Layer 2 Networks over Layer 3 Networks. GENEVE is often used
to tunnel virtual network infrastructure in virtualized environments.
Say Y here if you want to enable hardware offload support for
Generic Network Virtualization Encapsulation (GENEVE) in the driver.
config BGMAC
tristate "BCMA bus GBit core support"
depends on BCMA && BCMA_HOST_SOC

View file

@ -59,9 +59,6 @@
#include <linux/semaphore.h>
#include <linux/stringify.h>
#include <linux/vmalloc.h>
#if IS_ENABLED(CONFIG_BNX2X_GENEVE)
#include <net/geneve.h>
#endif
#include "bnx2x.h"
#include "bnx2x_init.h"
#include "bnx2x_init_ops.h"
@ -10076,7 +10073,6 @@ static void bnx2x_parity_recover(struct bnx2x *bp)
}
}
#if defined(CONFIG_BNX2X_VXLAN) || IS_ENABLED(CONFIG_BNX2X_GENEVE)
static int bnx2x_udp_port_update(struct bnx2x *bp)
{
struct bnx2x_func_switch_update_params *switch_update_params;
@ -10177,47 +10173,42 @@ static void __bnx2x_del_udp_port(struct bnx2x *bp, u16 port,
DP(BNX2X_MSG_SP, "Deleted UDP tunnel [%d] port %d\n",
type, port);
}
#endif
#ifdef CONFIG_BNX2X_VXLAN
static void bnx2x_add_vxlan_port(struct net_device *netdev,
sa_family_t sa_family, __be16 port)
static void bnx2x_udp_tunnel_add(struct net_device *netdev,
struct udp_tunnel_info *ti)
{
struct bnx2x *bp = netdev_priv(netdev);
u16 t_port = ntohs(port);
u16 t_port = ntohs(ti->port);
__bnx2x_add_udp_port(bp, t_port, BNX2X_UDP_PORT_VXLAN);
switch (ti->type) {
case UDP_TUNNEL_TYPE_VXLAN:
__bnx2x_add_udp_port(bp, t_port, BNX2X_UDP_PORT_VXLAN);
break;
case UDP_TUNNEL_TYPE_GENEVE:
__bnx2x_add_udp_port(bp, t_port, BNX2X_UDP_PORT_GENEVE);
break;
default:
break;
}
}
static void bnx2x_del_vxlan_port(struct net_device *netdev,
sa_family_t sa_family, __be16 port)
static void bnx2x_udp_tunnel_del(struct net_device *netdev,
struct udp_tunnel_info *ti)
{
struct bnx2x *bp = netdev_priv(netdev);
u16 t_port = ntohs(port);
u16 t_port = ntohs(ti->port);
__bnx2x_del_udp_port(bp, t_port, BNX2X_UDP_PORT_VXLAN);
switch (ti->type) {
case UDP_TUNNEL_TYPE_VXLAN:
__bnx2x_del_udp_port(bp, t_port, BNX2X_UDP_PORT_VXLAN);
break;
case UDP_TUNNEL_TYPE_GENEVE:
__bnx2x_del_udp_port(bp, t_port, BNX2X_UDP_PORT_GENEVE);
break;
default:
break;
}
}
#endif
#if IS_ENABLED(CONFIG_BNX2X_GENEVE)
static void bnx2x_add_geneve_port(struct net_device *netdev,
sa_family_t sa_family, __be16 port)
{
struct bnx2x *bp = netdev_priv(netdev);
u16 t_port = ntohs(port);
__bnx2x_add_udp_port(bp, t_port, BNX2X_UDP_PORT_GENEVE);
}
static void bnx2x_del_geneve_port(struct net_device *netdev,
sa_family_t sa_family, __be16 port)
{
struct bnx2x *bp = netdev_priv(netdev);
u16 t_port = ntohs(port);
__bnx2x_del_udp_port(bp, t_port, BNX2X_UDP_PORT_GENEVE);
}
#endif
static int bnx2x_close(struct net_device *dev);
@ -10325,7 +10316,6 @@ static void bnx2x_sp_rtnl_task(struct work_struct *work)
&bp->sp_rtnl_state))
bnx2x_update_mng_version(bp);
#if defined(CONFIG_BNX2X_VXLAN) || IS_ENABLED(CONFIG_BNX2X_GENEVE)
if (test_and_clear_bit(BNX2X_SP_RTNL_CHANGE_UDP_PORT,
&bp->sp_rtnl_state)) {
if (bnx2x_udp_port_update(bp)) {
@ -10335,20 +10325,14 @@ static void bnx2x_sp_rtnl_task(struct work_struct *work)
BNX2X_UDP_PORT_MAX);
} else {
/* Since we don't store additional port information,
* if no port is configured for any feature ask for
* if no ports are configured for any feature ask for
* information about currently configured ports.
*/
#ifdef CONFIG_BNX2X_VXLAN
if (!bp->udp_tunnel_ports[BNX2X_UDP_PORT_VXLAN].count)
vxlan_get_rx_port(bp->dev);
#endif
#if IS_ENABLED(CONFIG_BNX2X_GENEVE)
if (!bp->udp_tunnel_ports[BNX2X_UDP_PORT_GENEVE].count)
geneve_get_rx_port(bp->dev);
#endif
if (!bp->udp_tunnel_ports[BNX2X_UDP_PORT_VXLAN].count &&
!bp->udp_tunnel_ports[BNX2X_UDP_PORT_GENEVE].count)
udp_tunnel_get_rx_info(bp->dev);
}
}
#endif
/* work which needs rtnl lock not-taken (as it takes the lock itself and
* can be called from other contexts as well)
@ -12551,14 +12535,8 @@ static int bnx2x_open(struct net_device *dev)
if (rc)
return rc;
#ifdef CONFIG_BNX2X_VXLAN
if (IS_PF(bp))
vxlan_get_rx_port(dev);
#endif
#if IS_ENABLED(CONFIG_BNX2X_GENEVE)
if (IS_PF(bp))
geneve_get_rx_port(dev);
#endif
udp_tunnel_get_rx_info(dev);
return 0;
}
@ -13045,14 +13023,8 @@ static const struct net_device_ops bnx2x_netdev_ops = {
.ndo_get_phys_port_id = bnx2x_get_phys_port_id,
.ndo_set_vf_link_state = bnx2x_set_vf_link_state,
.ndo_features_check = bnx2x_features_check,
#ifdef CONFIG_BNX2X_VXLAN
.ndo_add_vxlan_port = bnx2x_add_vxlan_port,
.ndo_del_vxlan_port = bnx2x_del_vxlan_port,
#endif
#if IS_ENABLED(CONFIG_BNX2X_GENEVE)
.ndo_add_geneve_port = bnx2x_add_geneve_port,
.ndo_del_geneve_port = bnx2x_del_geneve_port,
#endif
.ndo_udp_tunnel_add = bnx2x_udp_tunnel_add,
.ndo_udp_tunnel_del = bnx2x_udp_tunnel_del,
};
static int bnx2x_set_coherency_mask(struct bnx2x *bp)