Commit 782dbbf5 authored by Alexander Lobakin's avatar Alexander Lobakin Committed by Paolo Abeni

netdev_features: convert NETIF_F_FCOE_MTU to dev->fcoe_mtu

Ability to handle maximum FCoE frames of 2158 bytes can never be changed
and thus more of an attribute, not a toggleable feature.
Move it from netdev_features_t to "cold" priv flags (bitfield bool) and
free yet another feature bit.
Signed-off-by: default avatarAlexander Lobakin <aleksander.lobakin@intel.com>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 05c1280a
...@@ -167,6 +167,7 @@ unsigned:1 threaded - ...@@ -167,6 +167,7 @@ unsigned:1 threaded -
unsigned_long:1 see_all_hwtstamp_requests unsigned_long:1 see_all_hwtstamp_requests
unsigned_long:1 change_proto_down unsigned_long:1 change_proto_down
unsigned_long:1 netns_local unsigned_long:1 netns_local
unsigned_long:1 fcoe_mtu
struct_list_head net_notifier_list struct_list_head net_notifier_list
struct_macsec_ops* macsec_ops struct_macsec_ops* macsec_ops
struct_udp_tunnel_nic_info* udp_tunnel_nic_info struct_udp_tunnel_nic_info* udp_tunnel_nic_info
......
...@@ -81,8 +81,7 @@ int cxgb_fcoe_enable(struct net_device *netdev) ...@@ -81,8 +81,7 @@ int cxgb_fcoe_enable(struct net_device *netdev)
netdev->features |= NETIF_F_FCOE_CRC; netdev->features |= NETIF_F_FCOE_CRC;
netdev->vlan_features |= NETIF_F_FCOE_CRC; netdev->vlan_features |= NETIF_F_FCOE_CRC;
netdev->features |= NETIF_F_FCOE_MTU; netdev->fcoe_mtu = true;
netdev->vlan_features |= NETIF_F_FCOE_MTU;
netdev_features_change(netdev); netdev_features_change(netdev);
...@@ -112,8 +111,7 @@ int cxgb_fcoe_disable(struct net_device *netdev) ...@@ -112,8 +111,7 @@ int cxgb_fcoe_disable(struct net_device *netdev)
netdev->features &= ~NETIF_F_FCOE_CRC; netdev->features &= ~NETIF_F_FCOE_CRC;
netdev->vlan_features &= ~NETIF_F_FCOE_CRC; netdev->vlan_features &= ~NETIF_F_FCOE_CRC;
netdev->features &= ~NETIF_F_FCOE_MTU; netdev->fcoe_mtu = false;
netdev->vlan_features &= ~NETIF_F_FCOE_MTU;
netdev_features_change(netdev); netdev_features_change(netdev);
......
...@@ -317,7 +317,7 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev) ...@@ -317,7 +317,7 @@ static u8 ixgbe_dcbnl_set_all(struct net_device *netdev)
int max_frame = adapter->netdev->mtu + ETH_HLEN + ETH_FCS_LEN; int max_frame = adapter->netdev->mtu + ETH_HLEN + ETH_FCS_LEN;
#ifdef IXGBE_FCOE #ifdef IXGBE_FCOE
if (adapter->netdev->features & NETIF_F_FCOE_MTU) if (adapter->netdev->fcoe_mtu)
max_frame = max(max_frame, IXGBE_FCOE_JUMBO_FRAME_SIZE); max_frame = max(max_frame, IXGBE_FCOE_JUMBO_FRAME_SIZE);
#endif #endif
......
...@@ -858,7 +858,7 @@ int ixgbe_fcoe_enable(struct net_device *netdev) ...@@ -858,7 +858,7 @@ int ixgbe_fcoe_enable(struct net_device *netdev)
/* enable FCoE and notify stack */ /* enable FCoE and notify stack */
adapter->flags |= IXGBE_FLAG_FCOE_ENABLED; adapter->flags |= IXGBE_FLAG_FCOE_ENABLED;
netdev->features |= NETIF_F_FCOE_MTU; netdev->fcoe_mtu = true;
netdev_features_change(netdev); netdev_features_change(netdev);
/* release existing queues and reallocate them */ /* release existing queues and reallocate them */
...@@ -898,7 +898,7 @@ int ixgbe_fcoe_disable(struct net_device *netdev) ...@@ -898,7 +898,7 @@ int ixgbe_fcoe_disable(struct net_device *netdev)
/* disable FCoE and notify stack */ /* disable FCoE and notify stack */
adapter->flags &= ~IXGBE_FLAG_FCOE_ENABLED; adapter->flags &= ~IXGBE_FLAG_FCOE_ENABLED;
netdev->features &= ~NETIF_F_FCOE_MTU; netdev->fcoe_mtu = false;
netdev_features_change(netdev); netdev_features_change(netdev);
......
...@@ -981,7 +981,7 @@ static int ixgbe_alloc_q_vector(struct ixgbe_adapter *adapter, ...@@ -981,7 +981,7 @@ static int ixgbe_alloc_q_vector(struct ixgbe_adapter *adapter,
set_bit(__IXGBE_RX_CSUM_UDP_ZERO_ERR, &ring->state); set_bit(__IXGBE_RX_CSUM_UDP_ZERO_ERR, &ring->state);
#ifdef IXGBE_FCOE #ifdef IXGBE_FCOE
if (adapter->netdev->features & NETIF_F_FCOE_MTU) { if (adapter->netdev->fcoe_mtu) {
struct ixgbe_ring_feature *f; struct ixgbe_ring_feature *f;
f = &adapter->ring_feature[RING_F_FCOE]; f = &adapter->ring_feature[RING_F_FCOE];
if ((rxr_idx >= f->offset) && if ((rxr_idx >= f->offset) &&
......
...@@ -5079,7 +5079,7 @@ static void ixgbe_configure_dcb(struct ixgbe_adapter *adapter) ...@@ -5079,7 +5079,7 @@ static void ixgbe_configure_dcb(struct ixgbe_adapter *adapter)
netif_set_tso_max_size(adapter->netdev, 32768); netif_set_tso_max_size(adapter->netdev, 32768);
#ifdef IXGBE_FCOE #ifdef IXGBE_FCOE
if (adapter->netdev->features & NETIF_F_FCOE_MTU) if (adapter->netdev->fcoe_mtu)
max_frame = max(max_frame, IXGBE_FCOE_JUMBO_FRAME_SIZE); max_frame = max(max_frame, IXGBE_FCOE_JUMBO_FRAME_SIZE);
#endif #endif
...@@ -5136,8 +5136,7 @@ static int ixgbe_hpbthresh(struct ixgbe_adapter *adapter, int pb) ...@@ -5136,8 +5136,7 @@ static int ixgbe_hpbthresh(struct ixgbe_adapter *adapter, int pb)
#ifdef IXGBE_FCOE #ifdef IXGBE_FCOE
/* FCoE traffic class uses FCOE jumbo frames */ /* FCoE traffic class uses FCOE jumbo frames */
if ((dev->features & NETIF_F_FCOE_MTU) && if (dev->fcoe_mtu && tc < IXGBE_FCOE_JUMBO_FRAME_SIZE &&
(tc < IXGBE_FCOE_JUMBO_FRAME_SIZE) &&
(pb == ixgbe_fcoe_get_tc(adapter))) (pb == ixgbe_fcoe_get_tc(adapter)))
tc = IXGBE_FCOE_JUMBO_FRAME_SIZE; tc = IXGBE_FCOE_JUMBO_FRAME_SIZE;
#endif #endif
...@@ -5197,8 +5196,7 @@ static int ixgbe_lpbthresh(struct ixgbe_adapter *adapter, int pb) ...@@ -5197,8 +5196,7 @@ static int ixgbe_lpbthresh(struct ixgbe_adapter *adapter, int pb)
#ifdef IXGBE_FCOE #ifdef IXGBE_FCOE
/* FCoE traffic class uses FCOE jumbo frames */ /* FCoE traffic class uses FCOE jumbo frames */
if ((dev->features & NETIF_F_FCOE_MTU) && if (dev->fcoe_mtu && tc < IXGBE_FCOE_JUMBO_FRAME_SIZE &&
(tc < IXGBE_FCOE_JUMBO_FRAME_SIZE) &&
(pb == netdev_get_prio_tc_map(dev, adapter->fcoe.up))) (pb == netdev_get_prio_tc_map(dev, adapter->fcoe.up)))
tc = IXGBE_FCOE_JUMBO_FRAME_SIZE; tc = IXGBE_FCOE_JUMBO_FRAME_SIZE;
#endif #endif
...@@ -11096,8 +11094,7 @@ static int ixgbe_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -11096,8 +11094,7 @@ static int ixgbe_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
NETIF_F_FCOE_CRC; NETIF_F_FCOE_CRC;
netdev->vlan_features |= NETIF_F_FSO | netdev->vlan_features |= NETIF_F_FSO |
NETIF_F_FCOE_CRC | NETIF_F_FCOE_CRC;
NETIF_F_FCOE_MTU;
} }
#endif /* IXGBE_FCOE */ #endif /* IXGBE_FCOE */
if (adapter->flags2 & IXGBE_FLAG2_RSC_CAPABLE) if (adapter->flags2 & IXGBE_FLAG2_RSC_CAPABLE)
......
...@@ -495,7 +495,7 @@ static int ixgbe_set_vf_lpe(struct ixgbe_adapter *adapter, u32 max_frame, u32 vf ...@@ -495,7 +495,7 @@ static int ixgbe_set_vf_lpe(struct ixgbe_adapter *adapter, u32 max_frame, u32 vf
int err = 0; int err = 0;
#ifdef CONFIG_FCOE #ifdef CONFIG_FCOE
if (dev->features & NETIF_F_FCOE_MTU) if (dev->fcoe_mtu)
pf_max_frame = max_t(int, pf_max_frame, pf_max_frame = max_t(int, pf_max_frame,
IXGBE_FCOE_JUMBO_FRAME_SIZE); IXGBE_FCOE_JUMBO_FRAME_SIZE);
...@@ -857,7 +857,7 @@ static void ixgbe_set_vf_rx_tx(struct ixgbe_adapter *adapter, int vf) ...@@ -857,7 +857,7 @@ static void ixgbe_set_vf_rx_tx(struct ixgbe_adapter *adapter, int vf)
int pf_max_frame = dev->mtu + ETH_HLEN; int pf_max_frame = dev->mtu + ETH_HLEN;
#if IS_ENABLED(CONFIG_FCOE) #if IS_ENABLED(CONFIG_FCOE)
if (dev->features & NETIF_F_FCOE_MTU) if (dev->fcoe_mtu)
pf_max_frame = max_t(int, pf_max_frame, pf_max_frame = max_t(int, pf_max_frame,
IXGBE_FCOE_JUMBO_FRAME_SIZE); IXGBE_FCOE_JUMBO_FRAME_SIZE);
#endif /* CONFIG_FCOE */ #endif /* CONFIG_FCOE */
......
...@@ -722,7 +722,7 @@ static int fcoe_netdev_config(struct fc_lport *lport, struct net_device *netdev) ...@@ -722,7 +722,7 @@ static int fcoe_netdev_config(struct fc_lport *lport, struct net_device *netdev)
* will return 0, so do this first. * will return 0, so do this first.
*/ */
mfs = netdev->mtu; mfs = netdev->mtu;
if (netdev->features & NETIF_F_FCOE_MTU) { if (netdev->fcoe_mtu) {
mfs = FCOE_MTU; mfs = FCOE_MTU;
FCOE_NETDEV_DBG(netdev, "Supports FCOE_MTU of %d bytes\n", mfs); FCOE_NETDEV_DBG(netdev, "Supports FCOE_MTU of %d bytes\n", mfs);
} }
...@@ -1863,7 +1863,7 @@ static int fcoe_device_notification(struct notifier_block *notifier, ...@@ -1863,7 +1863,7 @@ static int fcoe_device_notification(struct notifier_block *notifier,
case NETDEV_CHANGE: case NETDEV_CHANGE:
break; break;
case NETDEV_CHANGEMTU: case NETDEV_CHANGEMTU:
if (netdev->features & NETIF_F_FCOE_MTU) if (netdev->fcoe_mtu)
break; break;
mfs = netdev->mtu - (sizeof(struct fcoe_hdr) + mfs = netdev->mtu - (sizeof(struct fcoe_hdr) +
sizeof(struct fcoe_crc_eof)); sizeof(struct fcoe_crc_eof));
......
...@@ -58,7 +58,7 @@ enum { ...@@ -58,7 +58,7 @@ enum {
NETIF_F_FCOE_CRC_BIT, /* FCoE CRC32 */ NETIF_F_FCOE_CRC_BIT, /* FCoE CRC32 */
NETIF_F_SCTP_CRC_BIT, /* SCTP checksum offload */ NETIF_F_SCTP_CRC_BIT, /* SCTP checksum offload */
NETIF_F_FCOE_MTU_BIT, /* Supports max FCoE MTU, 2158 bytes*/ __UNUSED_NETIF_F_37,
NETIF_F_NTUPLE_BIT, /* N-tuple filters supported */ NETIF_F_NTUPLE_BIT, /* N-tuple filters supported */
NETIF_F_RXHASH_BIT, /* Receive hashing offload */ NETIF_F_RXHASH_BIT, /* Receive hashing offload */
NETIF_F_RXCSUM_BIT, /* Receive checksumming offload */ NETIF_F_RXCSUM_BIT, /* Receive checksumming offload */
...@@ -105,7 +105,6 @@ enum { ...@@ -105,7 +105,6 @@ enum {
#define __NETIF_F(name) __NETIF_F_BIT(NETIF_F_##name##_BIT) #define __NETIF_F(name) __NETIF_F_BIT(NETIF_F_##name##_BIT)
#define NETIF_F_FCOE_CRC __NETIF_F(FCOE_CRC) #define NETIF_F_FCOE_CRC __NETIF_F(FCOE_CRC)
#define NETIF_F_FCOE_MTU __NETIF_F(FCOE_MTU)
#define NETIF_F_FRAGLIST __NETIF_F(FRAGLIST) #define NETIF_F_FRAGLIST __NETIF_F(FRAGLIST)
#define NETIF_F_FSO __NETIF_F(FSO) #define NETIF_F_FSO __NETIF_F(FSO)
#define NETIF_F_GRO __NETIF_F(GRO) #define NETIF_F_GRO __NETIF_F(GRO)
...@@ -210,8 +209,7 @@ static inline int find_next_netdev_feature(u64 feature, unsigned long start) ...@@ -210,8 +209,7 @@ static inline int find_next_netdev_feature(u64 feature, unsigned long start)
#define NETIF_F_ALL_TSO (NETIF_F_TSO | NETIF_F_TSO6 | \ #define NETIF_F_ALL_TSO (NETIF_F_TSO | NETIF_F_TSO6 | \
NETIF_F_TSO_ECN | NETIF_F_TSO_MANGLEID) NETIF_F_TSO_ECN | NETIF_F_TSO_MANGLEID)
#define NETIF_F_ALL_FCOE (NETIF_F_FCOE_CRC | NETIF_F_FCOE_MTU | \ #define NETIF_F_ALL_FCOE (NETIF_F_FCOE_CRC | NETIF_F_FSO)
NETIF_F_FSO)
/* List of features with software fallbacks. */ /* List of features with software fallbacks. */
#define NETIF_F_GSO_SOFTWARE (NETIF_F_ALL_TSO | NETIF_F_GSO_SCTP | \ #define NETIF_F_GSO_SOFTWARE (NETIF_F_ALL_TSO | NETIF_F_GSO_SCTP | \
......
...@@ -1969,6 +1969,7 @@ enum netdev_reg_state { ...@@ -1969,6 +1969,7 @@ enum netdev_reg_state {
* HWTSTAMP_SOURCE_NETDEV * HWTSTAMP_SOURCE_NETDEV
* @change_proto_down: device supports setting carrier via IFLA_PROTO_DOWN * @change_proto_down: device supports setting carrier via IFLA_PROTO_DOWN
* @netns_local: interface can't change network namespaces * @netns_local: interface can't change network namespaces
* @fcoe_mtu: device supports maximum FCoE MTU, 2158 bytes
* *
* @net_notifier_list: List of per-net netdev notifier block * @net_notifier_list: List of per-net netdev notifier block
* that follow this device when it is moved * that follow this device when it is moved
...@@ -2363,6 +2364,7 @@ struct net_device { ...@@ -2363,6 +2364,7 @@ struct net_device {
unsigned long see_all_hwtstamp_requests:1; unsigned long see_all_hwtstamp_requests:1;
unsigned long change_proto_down:1; unsigned long change_proto_down:1;
unsigned long netns_local:1; unsigned long netns_local:1;
unsigned long fcoe_mtu:1;
struct list_head net_notifier_list; struct list_head net_notifier_list;
......
...@@ -571,6 +571,7 @@ static int vlan_dev_init(struct net_device *dev) ...@@ -571,6 +571,7 @@ static int vlan_dev_init(struct net_device *dev)
dev->features |= dev->hw_features; dev->features |= dev->hw_features;
dev->lltx = true; dev->lltx = true;
dev->fcoe_mtu = true;
netif_inherit_tso_max(dev, real_dev); netif_inherit_tso_max(dev, real_dev);
if (dev->features & NETIF_F_VLAN_FEATURES) if (dev->features & NETIF_F_VLAN_FEATURES)
netdev_warn(real_dev, "VLAN features are set incorrectly. Q-in-Q configurations may not work correctly.\n"); netdev_warn(real_dev, "VLAN features are set incorrectly. Q-in-Q configurations may not work correctly.\n");
......
...@@ -50,7 +50,6 @@ const char netdev_features_strings[NETDEV_FEATURE_COUNT][ETH_GSTRING_LEN] = { ...@@ -50,7 +50,6 @@ const char netdev_features_strings[NETDEV_FEATURE_COUNT][ETH_GSTRING_LEN] = {
[NETIF_F_FCOE_CRC_BIT] = "tx-checksum-fcoe-crc", [NETIF_F_FCOE_CRC_BIT] = "tx-checksum-fcoe-crc",
[NETIF_F_SCTP_CRC_BIT] = "tx-checksum-sctp", [NETIF_F_SCTP_CRC_BIT] = "tx-checksum-sctp",
[NETIF_F_FCOE_MTU_BIT] = "fcoe-mtu",
[NETIF_F_NTUPLE_BIT] = "rx-ntuple-filter", [NETIF_F_NTUPLE_BIT] = "rx-ntuple-filter",
[NETIF_F_RXHASH_BIT] = "rx-hashing", [NETIF_F_RXHASH_BIT] = "rx-hashing",
[NETIF_F_RXCSUM_BIT] = "rx-checksum", [NETIF_F_RXCSUM_BIT] = "rx-checksum",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment