* [PATCH 00/20] extending (hw_/wanted_/vlan_)features fields to a bitmap. @ 2011-04-06 0:44 Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 01/20] net-core: " Mahesh Bandewar 0 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Extend "*features" from word to a BITMAP. This will eliminate the current upper bound. Also making it a bitmap will allow us to use (set/test/clear)_bit() macros/inline functions. So operation - dev->features |= NETIF_F_SG can be performed like- set_bit(NETIF_F_SG_BIT, dev->feature); Again it's not as easy as it looks since operations like - bitmap = bitmap-a & bitmap-b will be difficult but at the same time it would be imposible to use |= operations for multi-word flags too. Bitmap will make it easier to manage multi-word features but will need some macro / wrapper writing to achieve complex bit manipulations. Since the use of "features" is wide-spread, this can not be done in one shot. So breaking the work into following 4 steps of which first two steps will be achieved by this patch. Third step is the one which will take longer. (1) convert hw_features and wanted_features to a bitmap but maintain the backword compatibility with legacy_* option. (2) Define fake macros for vlan_features and features until all the work of converion is not complete. (3) Complete the conversion. (4) Define bitmaps for features and vlan_features. We can add step (5) which is to convert the use of legacy_* stuff and use the newer way only. Mahesh Bandewar (20): net-core: extending (hw_/wanted_/vlan_)features fields to a bitmap. net-ipv4: extending (hw_/wanted_/vlan_)features fields to a bitmap. net-ipv6: extending (hw_/wanted_/vlan_)features fields to a bitmap. net-vlan: extending (hw_/wanted_/vlan_)features fields to a bitmap. net-bridge: extending (hw_/wanted_/vlan_)features fields to a bitmap. net-decnet: extending (hw_/wanted_/vlan_)features fields to a bitmap. net-dsa: extending (hw_/wanted_/vlan_)features fields to a bitmap. net-l2tp: extending (hw_/wanted_/vlan_)features fields to a bitmap. net-phonet: extending (hw_/wanted_/vlan_)features fields to a bitmap. net-sctp: extending (hw_/wanted_/vlan_)features fields to a bitmap. net-wireless: extending (hw_/wanted_/vlan_)features fields to a bitmap. loopback: extending (hw_/wanted_/vlan_)features fields to a bitmap. veth: extending (hw_/wanted_/vlan_)features fields to a bitmap. jme: extending (hw_/wanted_/vlan_)features fields to a bitmap. sungem: extending (hw_/wanted_/vlan_)features fields to a bitmap. sunhme: extending (hw_/wanted_/vlan_)features fields to a bitmap. usb-smsc75xx: extending (hw_/wanted_/vlan_)features fields to a bitmap. usb-smsc95xx: extending (hw_/wanted_/vlan_)features fields to a bitmap. virtio_net: extending (hw_/wanted_/vlan_)features fields to a bitmap. xen: extending (hw_/wanted_/vlan_)features fields to a bitmap. drivers/net/jme.c | 12 ++-- drivers/net/loopback.c | 4 +- drivers/net/sungem.c | 7 +- drivers/net/sunhme.c | 8 +- drivers/net/usb/smsc75xx.c | 12 ++-- drivers/net/usb/smsc95xx.c | 12 ++-- drivers/net/veth.c | 6 +- drivers/net/virtio_net.c | 21 ++++--- drivers/net/xen-netfront.c | 8 +- include/linux/if_vlan.h | 4 +- include/linux/netdevice.h | 110 +++++++++++++++++++++++++----------- net/8021q/vlan.c | 12 ++-- net/8021q/vlan_dev.c | 9 ++- net/bridge/br_device.c | 2 +- net/bridge/br_if.c | 4 +- net/core/dev.c | 51 +++++++++-------- net/core/ethtool.c | 97 ++++++++++++++++---------------- net/core/net-sysfs.c | 4 +- net/core/sock.c | 2 +- net/dccp/ipv6.c | 2 +- net/decnet/af_decnet.c | 2 +- net/decnet/dn_nsp_out.c | 2 +- net/dsa/slave.c | 4 +- net/ipv4/ip_gre.c | 6 +- net/ipv4/ip_output.c | 12 ++-- net/ipv4/ipip.c | 4 +- net/ipv4/ipmr.c | 2 +- net/ipv4/netfilter/nf_nat_helper.c | 2 +- net/ipv6/ip6_output.c | 6 +- net/ipv6/ip6_tunnel.c | 2 +- net/ipv6/ip6mr.c | 2 +- net/ipv6/sit.c | 4 +- net/l2tp/l2tp_core.c | 2 +- net/phonet/pep-gprs.c | 2 +- net/sctp/output.c | 4 +- net/wireless/core.c | 10 ++-- 36 files changed, 251 insertions(+), 202 deletions(-) -- 1.7.3.1 ^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH 01/20] net-core: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 [PATCH 00/20] extending (hw_/wanted_/vlan_)features fields to a bitmap Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 02/20] net-ipv4: " Mahesh Bandewar ` (3 more replies) 0 siblings, 4 replies; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- include/linux/netdevice.h | 110 +++++++++++++++++++++++++++++++------------- net/core/dev.c | 51 +++++++++++---------- net/core/ethtool.c | 97 ++++++++++++++++++++------------------- net/core/net-sysfs.c | 4 +- net/core/sock.c | 2 +- 5 files changed, 155 insertions(+), 109 deletions(-) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 09d2624..637bf2a 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -980,6 +980,42 @@ struct net_device_ops { u32 features); }; +enum netdev_features { + NETIF_F_SG_BIT, /* Scatter/gather IO. */ + NETIF_F_IP_CSUM_BIT, /* Can checksum TCP/UDP over IPv4. */ + NETIF_F_NO_CSUM_BIT, /* Does not require checksum. F.e. loopack. */ + NETIF_F_HW_CSUM_BIT, /* Can checksum all the packets. */ + NETIF_F_IPV6_CSUM_BIT, /* Can checksum TCP/UDP over IPV6 */ + NETIF_F_HIGHDMA_BIT, /* Can DMA to high memory. */ + NETIF_F_FRAGLIST_BIT, /* Scatter/gather IO. */ + NETIF_F_HW_VLAN_TX_BIT, /* Transmit VLAN hw acceleration */ + NETIF_F_HW_VLAN_RX_BIT, /* Receive VLAN hw acceleration */ + NETIF_F_HW_VLAN_FILTER_BIT, /* Receive filtering on VLAN */ + NETIF_F_VLAN_CHALLENGED_BIT, /* Device cannot handle VLAN packets */ + NETIF_F_GSO_BIT, /* Enable software GSO. */ + NETIF_F_LLTX_BIT, /* LockLess TX - deprecated. Please */ + /* do not use LLTX in new drivers */ + NETIF_F_NETNS_LOCAL_BIT, /* Does not change network namespaces */ + NETIF_F_GRO_BIT, /* Generic receive offload */ + NETIF_F_LRO_BIT, /* large receive offload */ + /* the GSO_MASK reserves bits 16 through 23 */ + RESERVED1_BIT, + RESERVED2_BIT, + RESERVED3_BIT, + RESERVED4_BIT, + RESERVED5_BIT, + RESERVED6_BIT, + RESERVED7_BIT, + RESERVED8_BIT, + NETIF_F_FCOE_CRC_BIT, /* FCoE CRC32 */ + NETIF_F_SCTP_CSUM_BIT, /* SCTP checksum offload */ + NETIF_F_FCOE_MTU_BIT, /* Supports max FCoE MTU, 2158 bytes*/ + NETIF_F_NTUPLE_BIT, /* N-tuple filters supported */ + NETIF_F_RXHASH_BIT, /* Receive hashing offload */ + NETIF_F_RXCSUM_BIT, /* Receive checksumming offload */ + NETIF_F_NOCACHE_COPY_BIT, /* Use no-cache copyfromuser */ +}; + /* * The DEVICE structure. * Actually, this whole structure is a big mistake. It mixes I/O @@ -1029,44 +1065,51 @@ struct net_device { struct list_head napi_list; struct list_head unreg_list; +#define DEV_FEATURE_WORDS 2 +#define DEV_FEATURE_BITS (DEV_FEATURE_WORDS*sizeof(long)*BITS_PER_BYTE) +#define LEGACY_FEATURE_WORD 0 + /* currently active device features */ - u32 features; + unsigned long features; /* user-changeable features */ - u32 hw_features; + DECLARE_BITMAP(hw_feature, DEV_FEATURE_BITS); /* user-requested features */ - u32 wanted_features; + DECLARE_BITMAP(wanted_feature, DEV_FEATURE_BITS); /* VLAN feature mask */ - u32 vlan_features; + unsigned long vlan_features; + +#define legacy_features features +#define legacy_hw_features hw_feature[LEGACY_FEATURE_WORD] +#define legacy_wanted_features wanted_feature[LEGACY_FEATURE_WORD] +#define legacy_vlan_features vlan_features /* Net device feature bits; if you change something, * also update netdev_features_strings[] in ethtool.c */ -#define NETIF_F_SG 1 /* Scatter/gather IO. */ -#define NETIF_F_IP_CSUM 2 /* Can checksum TCP/UDP over IPv4. */ -#define NETIF_F_NO_CSUM 4 /* Does not require checksum. F.e. loopack. */ -#define NETIF_F_HW_CSUM 8 /* Can checksum all the packets. */ -#define NETIF_F_IPV6_CSUM 16 /* Can checksum TCP/UDP over IPV6 */ -#define NETIF_F_HIGHDMA 32 /* Can DMA to high memory. */ -#define NETIF_F_FRAGLIST 64 /* Scatter/gather IO. */ -#define NETIF_F_HW_VLAN_TX 128 /* Transmit VLAN hw acceleration */ -#define NETIF_F_HW_VLAN_RX 256 /* Receive VLAN hw acceleration */ -#define NETIF_F_HW_VLAN_FILTER 512 /* Receive filtering on VLAN */ -#define NETIF_F_VLAN_CHALLENGED 1024 /* Device cannot handle VLAN packets */ -#define NETIF_F_GSO 2048 /* Enable software GSO. */ -#define NETIF_F_LLTX 4096 /* LockLess TX - deprecated. Please */ - /* do not use LLTX in new drivers */ -#define NETIF_F_NETNS_LOCAL 8192 /* Does not change network namespaces */ -#define NETIF_F_GRO 16384 /* Generic receive offload */ -#define NETIF_F_LRO 32768 /* large receive offload */ - +#define NETIF_F_SG (1 << NETIF_F_SG_BIT) +#define NETIF_F_IP_CSUM (1 << NETIF_F_IP_CSUM_BIT) +#define NETIF_F_NO_CSUM (1 << NETIF_F_NO_CSUM_BIT) +#define NETIF_F_HW_CSUM (1 << NETIF_F_HW_CSUM_BIT) +#define NETIF_F_IPV6_CSUM (1 << NETIF_F_IPV6_CSUM_BIT) +#define NETIF_F_HIGHDMA (1 << NETIF_F_HIGHDMA_BIT) +#define NETIF_F_FRAGLIST (1 << NETIF_F_FRAGLIST_BIT) +#define NETIF_F_HW_VLAN_TX (1 << NETIF_F_HW_VLAN_TX_BIT) +#define NETIF_F_HW_VLAN_RX (1 << NETIF_F_HW_VLAN_RX_BIT) +#define NETIF_F_HW_VLAN_FILTER (1 << NETIF_F_HW_VLAN_FILTER_BIT) +#define NETIF_F_VLAN_CHALLENGED (1 << NETIF_F_VLAN_CHALLENGED_BIT) +#define NETIF_F_GSO (1 << NETIF_F_GSO_BIT) +#define NETIF_F_LLTX (1 << NETIF_F_LLTX_BIT) +#define NETIF_F_NETNS_LOCAL (1 << NETIF_F_NETNS_LOCAL_BIT) +#define NETIF_F_GRO (1 << NETIF_F_GRO_BIT) +#define NETIF_F_LRO (1 << NETIF_F_LRO_BIT) /* the GSO_MASK reserves bits 16 through 23 */ -#define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */ -#define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */ -#define NETIF_F_FCOE_MTU (1 << 26) /* Supports max FCoE MTU, 2158 bytes*/ -#define NETIF_F_NTUPLE (1 << 27) /* N-tuple filters supported */ -#define NETIF_F_RXHASH (1 << 28) /* Receive hashing offload */ -#define NETIF_F_RXCSUM (1 << 29) /* Receive checksumming offload */ -#define NETIF_F_NOCACHE_COPY (1 << 30) /* Use no-cache copyfromuser */ +#define NETIF_F_FCOE_CRC (1 << NETIF_F_FCOE_CRC_BIT) +#define NETIF_F_SCTP_CSUM (1 << NETIF_F_SCTP_CSUM_BIT) +#define NETIF_F_FCOE_MTU (1 << NETIF_F_FCOE_MTU_BIT) +#define NETIF_F_NTUPLE (1 << NETIF_F_NTUPLE_BIT) +#define NETIF_F_RXHASH (1 << NETIF_F_RXHASH_BIT) +#define NETIF_F_RXCSUM (1 << NETIF_F_RXCSUM_BIT) +#define NETIF_F_NOCACHE_COPY (1 << NETIF_F_NOCACHE_COPY_BIT) /* Segmentation offload features */ #define NETIF_F_GSO_SHIFT 16 @@ -2376,13 +2419,13 @@ static inline void netif_tx_unlock_bh(struct net_device *dev) } #define HARD_TX_LOCK(dev, txq, cpu) { \ - if ((dev->features & NETIF_F_LLTX) == 0) { \ + if ((dev->legacy_features & NETIF_F_LLTX) == 0) { \ __netif_tx_lock(txq, cpu); \ } \ } #define HARD_TX_UNLOCK(dev, txq) { \ - if ((dev->features & NETIF_F_LLTX) == 0) { \ + if ((dev->legacy_features & NETIF_F_LLTX) == 0) { \ __netif_tx_unlock(txq); \ } \ } @@ -2547,7 +2590,8 @@ extern void linkwatch_run_queue(void); static inline u32 netdev_get_wanted_features(struct net_device *dev) { - return (dev->features & ~dev->hw_features) | dev->wanted_features; + return (dev->legacy_features & ~dev->legacy_hw_features) | + dev->legacy_wanted_features; } u32 netdev_increment_features(u32 all, u32 one, u32 mask); u32 netdev_fix_features(struct net_device *dev, u32 features); @@ -2600,7 +2644,7 @@ static inline int dev_ethtool_get_settings(struct net_device *dev, static inline u32 dev_ethtool_get_rx_csum(struct net_device *dev) { - if (dev->features & NETIF_F_RXCSUM) + if (dev->legacy_features & NETIF_F_RXCSUM) return 1; if (!dev->ethtool_ops || !dev->ethtool_ops->get_rx_csum) return 0; diff --git a/net/core/dev.c b/net/core/dev.c index 5d0b4f6..8cad38d 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1315,7 +1315,7 @@ void dev_disable_lro(struct net_device *dev) return; __ethtool_set_flags(dev, flags & ~ETH_FLAG_LRO); - WARN_ON(dev->features & NETIF_F_LRO); + WARN_ON(dev->legacy_features & NETIF_F_LRO); } EXPORT_SYMBOL(dev_disable_lro); @@ -1871,7 +1871,7 @@ struct sk_buff *skb_gso_segment(struct sk_buff *skb, u32 features) dev->ethtool_ops->get_drvinfo(dev, &info); WARN(1, "%s: caps=(0x%lx, 0x%lx) len=%d data_len=%d ip_summed=%d\n", - info.driver, dev ? dev->features : 0L, + info.driver, dev ? dev->legacy_features : 0L, skb->sk ? skb->sk->sk_route_caps : 0L, skb->len, skb->data_len, skb->ip_summed); @@ -1926,7 +1926,7 @@ static int illegal_highdma(struct net_device *dev, struct sk_buff *skb) { #ifdef CONFIG_HIGHMEM int i; - if (!(dev->features & NETIF_F_HIGHDMA)) { + if (!(dev->legacy_features & NETIF_F_HIGHDMA)) { for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) if (PageHighMem(skb_shinfo(skb)->frags[i].page)) return 1; @@ -2043,7 +2043,7 @@ static u32 harmonize_features(struct sk_buff *skb, __be16 protocol, u32 features u32 netif_skb_features(struct sk_buff *skb) { __be16 protocol = skb->protocol; - u32 features = skb->dev->features; + u32 features = skb->dev->legacy_features; if (protocol == htons(ETH_P_8021Q)) { struct vlan_ethhdr *veh = (struct vlan_ethhdr *)skb->data; @@ -2052,7 +2052,7 @@ u32 netif_skb_features(struct sk_buff *skb) return harmonize_features(skb, protocol, features); } - features &= (skb->dev->vlan_features | NETIF_F_HW_VLAN_TX); + features &= (skb->dev->legacy_vlan_features | NETIF_F_HW_VLAN_TX); if (protocol != htons(ETH_P_8021Q)) { return harmonize_features(skb, protocol, features); @@ -2589,7 +2589,7 @@ set_rps_cpu(struct net_device *dev, struct sk_buff *skb, /* Should we steer this flow to a different hardware queue? */ if (!skb_rx_queue_recorded(skb) || !dev->rx_cpu_rmap || - !(dev->features & NETIF_F_NTUPLE)) + !(dev->legacy_features & NETIF_F_NTUPLE)) goto out; rxq_index = cpu_rmap_lookup_index(dev->rx_cpu_rmap, next_cpu); if (rxq_index == skb_get_rx_queue(skb)) @@ -3350,7 +3350,7 @@ enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb) int mac_len; enum gro_result ret; - if (!(skb->dev->features & NETIF_F_GRO) || netpoll_rx_on(skb)) + if (!(skb->dev->legacy_features & NETIF_F_GRO) || netpoll_rx_on(skb)) goto normal; if (skb_is_gso(skb) || skb_has_frag_list(skb)) @@ -5249,11 +5249,11 @@ int __netdev_update_features(struct net_device *dev) /* driver might be less strict about feature dependencies */ features = netdev_fix_features(dev, features); - if (dev->features == features) + if (dev->legacy_features == features) return 0; netdev_info(dev, "Features changed: 0x%08x -> 0x%08x\n", - dev->features, features); + dev->legacy_features, features); if (dev->netdev_ops->ndo_set_features) err = dev->netdev_ops->ndo_set_features(dev, features); @@ -5261,12 +5261,12 @@ int __netdev_update_features(struct net_device *dev) if (unlikely(err < 0)) { netdev_err(dev, "set_features() failed (%d); wanted 0x%08x, left 0x%08x\n", - err, features, dev->features); + err, features, dev->legacy_features); return -1; } if (!err) - dev->features = features; + dev->legacy_features = features; return 1; } @@ -5415,29 +5415,30 @@ int register_netdevice(struct net_device *dev) /* Transfer changeable features to wanted_features and enable * software offloads (GSO and GRO). */ - dev->hw_features |= NETIF_F_SOFT_FEATURES; - dev->features |= NETIF_F_SOFT_FEATURES; - dev->wanted_features = dev->features & dev->hw_features; + dev->legacy_hw_features |= NETIF_F_SOFT_FEATURES; + dev->legacy_features |= NETIF_F_SOFT_FEATURES; + dev->legacy_wanted_features = + dev->legacy_features & dev->legacy_hw_features; /* Avoid warning from netdev_fix_features() for GSO without SG */ - if (!(dev->wanted_features & NETIF_F_SG)) { - dev->wanted_features &= ~NETIF_F_GSO; - dev->features &= ~NETIF_F_GSO; + if (!(dev->legacy_wanted_features & NETIF_F_SG)) { + dev->legacy_wanted_features &= ~NETIF_F_GSO; + dev->legacy_features &= ~NETIF_F_GSO; } /* Turn on no cache copy if HW is doing checksum */ - dev->hw_features |= NETIF_F_NOCACHE_COPY; - if ((dev->features & NETIF_F_ALL_CSUM) && - !(dev->features & NETIF_F_NO_CSUM)) { - dev->wanted_features |= NETIF_F_NOCACHE_COPY; - dev->features |= NETIF_F_NOCACHE_COPY; + dev->legacy_hw_features |= NETIF_F_NOCACHE_COPY; + if ((dev->legacy_features & NETIF_F_ALL_CSUM) && + !(dev->legacy_features & NETIF_F_NO_CSUM)) { + dev->legacy_wanted_features |= NETIF_F_NOCACHE_COPY; + dev->legacy_features |= NETIF_F_NOCACHE_COPY; } /* Enable GRO and NETIF_F_HIGHDMA for vlans by default, * vlan_dev_init() will do the dev->features check, so these features * are enabled only if supported by underlying device. */ - dev->vlan_features |= (NETIF_F_GRO | NETIF_F_HIGHDMA); + dev->legacy_vlan_features |= (NETIF_F_GRO | NETIF_F_HIGHDMA); ret = call_netdevice_notifiers(NETDEV_POST_INIT, dev); ret = notifier_to_errno(ret); @@ -6019,7 +6020,7 @@ int dev_change_net_namespace(struct net_device *dev, struct net *net, const char /* Don't allow namespace local devices to be moved. */ err = -EINVAL; - if (dev->features & NETIF_F_NETNS_LOCAL) + if (dev->legacy_features & NETIF_F_NETNS_LOCAL) goto out; /* Ensure the device has been registrered */ @@ -6352,7 +6353,7 @@ static void __net_exit default_device_exit(struct net *net) char fb_name[IFNAMSIZ]; /* Ignore unmoveable devices (i.e. loopback) */ - if (dev->features & NETIF_F_NETNS_LOCAL) + if (dev->legacy_features & NETIF_F_NETNS_LOCAL) continue; /* Leave virtual devices for the generic cleanup */ diff --git a/net/core/ethtool.c b/net/core/ethtool.c index 719670a..fd03c53 100644 --- a/net/core/ethtool.c +++ b/net/core/ethtool.c @@ -36,16 +36,16 @@ EXPORT_SYMBOL(ethtool_op_get_link); u32 ethtool_op_get_tx_csum(struct net_device *dev) { - return (dev->features & NETIF_F_ALL_CSUM) != 0; + return (dev->legacy_features & NETIF_F_ALL_CSUM) != 0; } EXPORT_SYMBOL(ethtool_op_get_tx_csum); int ethtool_op_set_tx_csum(struct net_device *dev, u32 data) { if (data) - dev->features |= NETIF_F_IP_CSUM; + dev->legacy_features |= NETIF_F_IP_CSUM; else - dev->features &= ~NETIF_F_IP_CSUM; + dev->legacy_features &= ~NETIF_F_IP_CSUM; return 0; } @@ -54,9 +54,9 @@ EXPORT_SYMBOL(ethtool_op_set_tx_csum); int ethtool_op_set_tx_hw_csum(struct net_device *dev, u32 data) { if (data) - dev->features |= NETIF_F_HW_CSUM; + dev->legacy_features |= NETIF_F_HW_CSUM; else - dev->features &= ~NETIF_F_HW_CSUM; + dev->legacy_features &= ~NETIF_F_HW_CSUM; return 0; } @@ -65,9 +65,9 @@ EXPORT_SYMBOL(ethtool_op_set_tx_hw_csum); int ethtool_op_set_tx_ipv6_csum(struct net_device *dev, u32 data) { if (data) - dev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; + dev->legacy_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; else - dev->features &= ~(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM); + dev->legacy_features &= ~(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM); return 0; } @@ -75,16 +75,16 @@ EXPORT_SYMBOL(ethtool_op_set_tx_ipv6_csum); u32 ethtool_op_get_sg(struct net_device *dev) { - return (dev->features & NETIF_F_SG) != 0; + return (dev->legacy_features & NETIF_F_SG) != 0; } EXPORT_SYMBOL(ethtool_op_get_sg); int ethtool_op_set_sg(struct net_device *dev, u32 data) { if (data) - dev->features |= NETIF_F_SG; + dev->legacy_features |= NETIF_F_SG; else - dev->features &= ~NETIF_F_SG; + dev->legacy_features &= ~NETIF_F_SG; return 0; } @@ -92,16 +92,16 @@ EXPORT_SYMBOL(ethtool_op_set_sg); u32 ethtool_op_get_tso(struct net_device *dev) { - return (dev->features & NETIF_F_TSO) != 0; + return (dev->legacy_features & NETIF_F_TSO) != 0; } EXPORT_SYMBOL(ethtool_op_get_tso); int ethtool_op_set_tso(struct net_device *dev, u32 data) { if (data) - dev->features |= NETIF_F_TSO; + dev->legacy_features |= NETIF_F_TSO; else - dev->features &= ~NETIF_F_TSO; + dev->legacy_features &= ~NETIF_F_TSO; return 0; } @@ -109,16 +109,16 @@ EXPORT_SYMBOL(ethtool_op_set_tso); u32 ethtool_op_get_ufo(struct net_device *dev) { - return (dev->features & NETIF_F_UFO) != 0; + return (dev->legacy_features & NETIF_F_UFO) != 0; } EXPORT_SYMBOL(ethtool_op_get_ufo); int ethtool_op_set_ufo(struct net_device *dev, u32 data) { if (data) - dev->features |= NETIF_F_UFO; + dev->legacy_features |= NETIF_F_UFO; else - dev->features &= ~NETIF_F_UFO; + dev->legacy_features &= ~NETIF_F_UFO; return 0; } EXPORT_SYMBOL(ethtool_op_set_ufo); @@ -137,7 +137,7 @@ u32 ethtool_op_get_flags(struct net_device *dev) * by a simple masking operation */ - return dev->features & flags_dup_features; + return dev->legacy_features & flags_dup_features; } EXPORT_SYMBOL(ethtool_op_get_flags); @@ -148,7 +148,7 @@ EXPORT_SYMBOL(ethtool_op_get_flags); */ bool ethtool_invalid_flags(struct net_device *dev, u32 data, u32 supported) { - u32 features = dev->features & flags_dup_features; + u32 features = dev->legacy_features & flags_dup_features; /* "data" can contain only flags_dup_features bits, * see __ethtool_set_flags */ @@ -161,7 +161,7 @@ int ethtool_op_set_flags(struct net_device *dev, u32 data, u32 supported) if (ethtool_invalid_flags(dev, data, supported)) return -EINVAL; - dev->features = ((dev->features & ~flags_dup_features) | + dev->legacy_features = ((dev->legacy_features & ~flags_dup_features) | (data & flags_dup_features)); return 0; } @@ -261,9 +261,9 @@ static int ethtool_get_features(struct net_device *dev, void __user *useraddr) }; struct ethtool_get_features_block features[ETHTOOL_DEV_FEATURE_WORDS] = { { - .available = dev->hw_features, - .requested = dev->wanted_features, - .active = dev->features, + .available = dev->legacy_hw_features, + .requested = dev->legacy_wanted_features, + .active = dev->legacy_features, .never_changed = NETIF_F_NEVER_CHANGE, }, }; @@ -310,16 +310,17 @@ static int ethtool_set_features(struct net_device *dev, void __user *useraddr) if (ethtool_set_features_compat(dev, features)) ret |= ETHTOOL_F_COMPAT; - if (features[0].valid & ~dev->hw_features) { - features[0].valid &= dev->hw_features; + if (features[0].valid & ~dev->legacy_hw_features) { + features[0].valid &= dev->legacy_hw_features; ret |= ETHTOOL_F_UNSUPPORTED; } - dev->wanted_features &= ~features[0].valid; - dev->wanted_features |= features[0].valid & features[0].requested; + dev->legacy_wanted_features &= ~features[0].valid; + dev->legacy_wanted_features |= features[0].valid & features[0].requested; __netdev_update_features(dev); - if ((dev->wanted_features ^ dev->features) & features[0].valid) + if ((dev->legacy_wanted_features ^ dev->legacy_features) + & features[0].valid) ret |= ETHTOOL_F_WISH; return ret; @@ -445,7 +446,7 @@ static void *__ethtool_get_one_feature_actor(struct net_device *dev, u32 ethcmd) static u32 __ethtool_get_rx_csum_oldbug(struct net_device *dev) { - return !!(dev->features & NETIF_F_ALL_CSUM); + return !!(dev->legacy_features & NETIF_F_ALL_CSUM); } static int ethtool_get_one_feature(struct net_device *dev, @@ -454,11 +455,11 @@ static int ethtool_get_one_feature(struct net_device *dev, u32 mask = ethtool_get_feature_mask(ethcmd); struct ethtool_value edata = { .cmd = ethcmd, - .data = !!(dev->features & mask), + .data = !!(dev->legacy_features & mask), }; /* compatibility with discrete get_ ops */ - if (!(dev->hw_features & mask)) { + if (!(dev->legacy_hw_features & mask)) { u32 (*actor)(struct net_device *); actor = __ethtool_get_one_feature_actor(dev, ethcmd); @@ -492,12 +493,12 @@ static int ethtool_set_one_feature(struct net_device *dev, return -EFAULT; mask = ethtool_get_feature_mask(ethcmd); - mask &= dev->hw_features; + mask &= dev->legacy_hw_features; if (mask) { if (edata.data) - dev->wanted_features |= mask; + dev->legacy_wanted_features |= mask; else - dev->wanted_features &= ~mask; + dev->legacy_wanted_features &= ~mask; __netdev_update_features(dev); return 0; @@ -537,19 +538,19 @@ int __ethtool_set_flags(struct net_device *dev, u32 data) /* legacy set_flags() op */ if (dev->ethtool_ops->set_flags) { - if (unlikely(dev->hw_features & flags_dup_features)) + if (unlikely(dev->legacy_hw_features & flags_dup_features)) netdev_warn(dev, "driver BUG: mixed hw_features and set_flags()\n"); return dev->ethtool_ops->set_flags(dev, data); } /* allow changing only bits set in hw_features */ - changed = (data ^ dev->wanted_features) & flags_dup_features; - if (changed & ~dev->hw_features) - return (changed & dev->hw_features) ? -EINVAL : -EOPNOTSUPP; + changed = (data ^ dev->legacy_wanted_features) & flags_dup_features; + if (changed & ~dev->legacy_hw_features) + return (changed & dev->legacy_hw_features) ? -EINVAL : -EOPNOTSUPP; - dev->wanted_features = - (dev->wanted_features & ~changed) | data; + dev->legacy_wanted_features = + (dev->legacy_wanted_features & ~changed) | data; __netdev_update_features(dev); @@ -908,7 +909,7 @@ static noinline_for_stack int ethtool_set_rx_ntuple(struct net_device *dev, struct ethtool_rx_ntuple_flow_spec_container *fsc = NULL; int ret; - if (!(dev->features & NETIF_F_NTUPLE)) + if (!(dev->legacy_features & NETIF_F_NTUPLE)) return -EINVAL; if (copy_from_user(&cmd, useraddr, sizeof(cmd))) @@ -1475,7 +1476,7 @@ static int __ethtool_set_sg(struct net_device *dev, u32 data) if (!dev->ethtool_ops->set_sg) return -EOPNOTSUPP; - if (data && !(dev->features & NETIF_F_ALL_CSUM)) + if (data && !(dev->legacy_features & NETIF_F_ALL_CSUM)) return -EINVAL; if (!data && dev->ethtool_ops->set_tso) { @@ -1514,7 +1515,7 @@ static int __ethtool_set_rx_csum(struct net_device *dev, u32 data) return -EOPNOTSUPP; if (!data) - dev->features &= ~NETIF_F_GRO; + dev->legacy_features &= ~NETIF_F_GRO; return dev->ethtool_ops->set_rx_csum(dev, data); } @@ -1524,7 +1525,7 @@ static int __ethtool_set_tso(struct net_device *dev, u32 data) if (!dev->ethtool_ops->set_tso) return -EOPNOTSUPP; - if (data && !(dev->features & NETIF_F_SG)) + if (data && !(dev->legacy_features & NETIF_F_SG)) return -EINVAL; return dev->ethtool_ops->set_tso(dev, data); @@ -1534,10 +1535,10 @@ static int __ethtool_set_ufo(struct net_device *dev, u32 data) { if (!dev->ethtool_ops->set_ufo) return -EOPNOTSUPP; - if (data && !(dev->features & NETIF_F_SG)) + if (data && !(dev->legacy_features & NETIF_F_SG)) return -EINVAL; - if (data && !((dev->features & NETIF_F_GEN_CSUM) || - (dev->features & (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM)) + if (data && !((dev->legacy_features & NETIF_F_GEN_CSUM) || + (dev->legacy_features & (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM)) == (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) return -EINVAL; return dev->ethtool_ops->set_ufo(dev, data); @@ -1805,7 +1806,7 @@ int dev_ethtool(struct net *net, struct ifreq *ifr) if (rc < 0) return rc; } - old_features = dev->features; + old_features = dev->legacy_features; switch (ethcmd) { case ETHTOOL_GSET: @@ -1960,7 +1961,7 @@ int dev_ethtool(struct net *net, struct ifreq *ifr) if (dev->ethtool_ops->complete) dev->ethtool_ops->complete(dev); - if (old_features != dev->features) + if (old_features != dev->legacy_features) netdev_features_change(dev); return rc; diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index 5ceb257..088a2d4 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -99,7 +99,7 @@ NETDEVICE_SHOW(addr_assign_type, fmt_dec); NETDEVICE_SHOW(addr_len, fmt_dec); NETDEVICE_SHOW(iflink, fmt_dec); NETDEVICE_SHOW(ifindex, fmt_dec); -NETDEVICE_SHOW(features, fmt_hex); +NETDEVICE_SHOW(legacy_features, fmt_hex); NETDEVICE_SHOW(type, fmt_dec); NETDEVICE_SHOW(link_mode, fmt_dec); @@ -316,7 +316,7 @@ static struct device_attribute net_class_attributes[] = { __ATTR(ifalias, S_IRUGO | S_IWUSR, show_ifalias, store_ifalias), __ATTR(iflink, S_IRUGO, show_iflink, NULL), __ATTR(ifindex, S_IRUGO, show_ifindex, NULL), - __ATTR(features, S_IRUGO, show_features, NULL), + __ATTR(legacy_features, S_IRUGO, show_legacy_features, NULL), __ATTR(type, S_IRUGO, show_type, NULL), __ATTR(link_mode, S_IRUGO, show_link_mode, NULL), __ATTR(address, S_IRUGO, show_address, NULL), diff --git a/net/core/sock.c b/net/core/sock.c index 7dfed79..4f067df 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -1301,7 +1301,7 @@ EXPORT_SYMBOL_GPL(sk_clone); void sk_setup_caps(struct sock *sk, struct dst_entry *dst) { __sk_dst_set(sk, dst); - sk->sk_route_caps = dst->dev->features; + sk->sk_route_caps = dst->dev->legacy_features; if (sk->sk_route_caps & NETIF_F_GSO) sk->sk_route_caps |= NETIF_F_GSO_SOFTWARE; sk->sk_route_caps &= ~sk->sk_route_nocaps; -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 02/20] net-ipv4: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 01/20] net-core: " Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 03/20] net-ipv6: " Mahesh Bandewar 2011-04-06 1:27 ` [PATCH 01/20] net-core: " Ben Hutchings ` (2 subsequent siblings) 3 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- net/ipv4/ip_gre.c | 6 +++--- net/ipv4/ip_output.c | 12 ++++++------ net/ipv4/ipip.c | 4 ++-- net/ipv4/ipmr.c | 2 +- net/ipv4/netfilter/nf_nat_helper.c | 2 +- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index da5941f..e358cbf 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c @@ -1260,7 +1260,7 @@ static void ipgre_tunnel_setup(struct net_device *dev) dev->flags = IFF_NOARP; dev->iflink = 0; dev->addr_len = 4; - dev->features |= NETIF_F_NETNS_LOCAL; + dev->legacy_features |= NETIF_F_NETNS_LOCAL; dev->priv_flags &= ~IFF_XMIT_DST_RELEASE; } @@ -1506,7 +1506,7 @@ static void ipgre_tap_setup(struct net_device *dev) dev->destructor = ipgre_dev_free; dev->iflink = 0; - dev->features |= NETIF_F_NETNS_LOCAL; + dev->legacy_features |= NETIF_F_NETNS_LOCAL; } static int ipgre_newlink(struct net *src_net, struct net_device *dev, struct nlattr *tb[], @@ -1533,7 +1533,7 @@ static int ipgre_newlink(struct net *src_net, struct net_device *dev, struct nla /* Can use a lockless transmit, unless we generate output sequences */ if (!(nt->parms.o_flags & GRE_SEQ)) - dev->features |= NETIF_F_LLTX; + dev->legacy_features |= NETIF_F_LLTX; err = register_netdevice(dev); if (err) diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 86a2843..cb83f7f 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c @@ -816,7 +816,7 @@ static int __ip_append_data(struct sock *sk, struct sk_buff_head *queue, */ if (transhdrlen && length + fragheaderlen <= mtu && - rt->dst.dev->features & NETIF_F_V4_CSUM && + rt->dst.dev->legacy_features & NETIF_F_V4_CSUM && !exthdrlen) csummode = CHECKSUM_PARTIAL; @@ -825,7 +825,7 @@ static int __ip_append_data(struct sock *sk, struct sk_buff_head *queue, cork->length += length; if (((length > mtu) || (skb && skb_is_gso(skb))) && (sk->sk_protocol == IPPROTO_UDP) && - (rt->dst.dev->features & NETIF_F_UFO)) { + (rt->dst.dev->legacy_features & NETIF_F_UFO)) { err = ip_ufo_append_data(sk, queue, getfrag, from, length, hh_len, fragheaderlen, transhdrlen, mtu, flags); @@ -873,7 +873,7 @@ alloc_new_skb: fraglen = datalen + fragheaderlen; if ((flags & MSG_MORE) && - !(rt->dst.dev->features&NETIF_F_SG)) + !(rt->dst.dev->legacy_features & NETIF_F_SG)) alloclen = mtu; else alloclen = fraglen; @@ -960,7 +960,7 @@ alloc_new_skb: if (copy > length) copy = length; - if (!(rt->dst.dev->features&NETIF_F_SG)) { + if (!(rt->dst.dev->legacy_features & NETIF_F_SG)) { unsigned int off; off = skb->len; @@ -1131,7 +1131,7 @@ ssize_t ip_append_page(struct sock *sk, struct page *page, if (inet->cork.flags & IPCORK_OPT) opt = inet->cork.opt; - if (!(rt->dst.dev->features&NETIF_F_SG)) + if (!(rt->dst.dev->legacy_features & NETIF_F_SG)) return -EOPNOTSUPP; hh_len = LL_RESERVED_SPACE(rt->dst.dev); @@ -1151,7 +1151,7 @@ ssize_t ip_append_page(struct sock *sk, struct page *page, inet->cork.length += size; if ((size + skb->len > mtu) && (sk->sk_protocol == IPPROTO_UDP) && - (rt->dst.dev->features & NETIF_F_UFO)) { + (rt->dst.dev->legacy_features & NETIF_F_UFO)) { skb_shinfo(skb)->gso_size = mtu - fragheaderlen; skb_shinfo(skb)->gso_type = SKB_GSO_UDP; } diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c index bfc17c5..37360d6 100644 --- a/net/ipv4/ipip.c +++ b/net/ipv4/ipip.c @@ -751,8 +751,8 @@ static void ipip_tunnel_setup(struct net_device *dev) dev->flags = IFF_NOARP; dev->iflink = 0; dev->addr_len = 4; - dev->features |= NETIF_F_NETNS_LOCAL; - dev->features |= NETIF_F_LLTX; + dev->legacy_features |= NETIF_F_NETNS_LOCAL; + dev->legacy_features |= NETIF_F_LLTX; dev->priv_flags &= ~IFF_XMIT_DST_RELEASE; } diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c index 1f62eae..f94b754 100644 --- a/net/ipv4/ipmr.c +++ b/net/ipv4/ipmr.c @@ -469,7 +469,7 @@ static void reg_vif_setup(struct net_device *dev) dev->flags = IFF_NOARP; dev->netdev_ops = ®_vif_netdev_ops, dev->destructor = free_netdev; - dev->features |= NETIF_F_NETNS_LOCAL; + dev->legacy_features |= NETIF_F_NETNS_LOCAL; } static struct net_device *ipmr_reg_vif(struct net *net, struct mr_table *mrt) diff --git a/net/ipv4/netfilter/nf_nat_helper.c b/net/ipv4/netfilter/nf_nat_helper.c index 31427fb..7c4e698 100644 --- a/net/ipv4/netfilter/nf_nat_helper.c +++ b/net/ipv4/netfilter/nf_nat_helper.c @@ -160,7 +160,7 @@ static void nf_nat_csum(struct sk_buff *skb, struct iphdr *iph, void *data, if (skb->ip_summed != CHECKSUM_PARTIAL) { if (!(rt->rt_flags & RTCF_LOCAL) && - skb->dev->features & NETIF_F_V4_CSUM) { + skb->dev->legacy_features & NETIF_F_V4_CSUM) { skb->ip_summed = CHECKSUM_PARTIAL; skb->csum_start = skb_headroom(skb) + skb_network_offset(skb) + -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 03/20] net-ipv6: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 02/20] net-ipv4: " Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 04/20] net-vlan: " Mahesh Bandewar 0 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- net/dccp/ipv6.c | 2 +- net/ipv6/ip6_output.c | 6 +++--- net/ipv6/ip6_tunnel.c | 2 +- net/ipv6/ip6mr.c | 2 +- net/ipv6/sit.c | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c index de1b7e3..254a6df 100644 --- a/net/dccp/ipv6.c +++ b/net/dccp/ipv6.c @@ -555,7 +555,7 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk, */ __ip6_dst_store(newsk, dst, NULL, NULL); - newsk->sk_route_caps = dst->dev->features & ~(NETIF_F_IP_CSUM | + newsk->sk_route_caps = dst->dev->legacy_features & ~(NETIF_F_IP_CSUM | NETIF_F_TSO); newdp6 = (struct dccp6_sock *)newsk; newinet = inet_sk(newsk); diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index 1820887..ba1183d 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c @@ -1276,7 +1276,7 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to, } if (proto == IPPROTO_UDP && - (rt->dst.dev->features & NETIF_F_UFO)) { + (rt->dst.dev->legacy_features & NETIF_F_UFO)) { err = ip6_ufo_append_data(sk, getfrag, from, length, hh_len, fragheaderlen, @@ -1322,7 +1322,7 @@ alloc_new_skb: fraglen = datalen + fragheaderlen; if ((flags & MSG_MORE) && - !(rt->dst.dev->features&NETIF_F_SG)) + !(rt->dst.dev->legacy_features & NETIF_F_SG)) alloclen = mtu; else alloclen = datalen + fragheaderlen; @@ -1419,7 +1419,7 @@ alloc_new_skb: if (copy > length) copy = length; - if (!(rt->dst.dev->features&NETIF_F_SG)) { + if (!(rt->dst.dev->legacy_features & NETIF_F_SG)) { unsigned int off; off = skb->len; diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c index c1b1bd3..6ae9598 100644 --- a/net/ipv6/ip6_tunnel.c +++ b/net/ipv6/ip6_tunnel.c @@ -1385,7 +1385,7 @@ static void ip6_tnl_dev_setup(struct net_device *dev) dev->mtu-=8; dev->flags |= IFF_NOARP; dev->addr_len = sizeof(struct in6_addr); - dev->features |= NETIF_F_NETNS_LOCAL; + dev->legacy_features |= NETIF_F_NETNS_LOCAL; dev->priv_flags &= ~IFF_XMIT_DST_RELEASE; } diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c index 29e4859..d137089 100644 --- a/net/ipv6/ip6mr.c +++ b/net/ipv6/ip6mr.c @@ -719,7 +719,7 @@ static void reg_vif_setup(struct net_device *dev) dev->flags = IFF_NOARP; dev->netdev_ops = ®_vif_netdev_ops; dev->destructor = free_netdev; - dev->features |= NETIF_F_NETNS_LOCAL; + dev->legacy_features |= NETIF_F_NETNS_LOCAL; } static struct net_device *ip6mr_reg_vif(struct net *net, struct mr6_table *mrt) diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c index 43b3337..38aba2f 100644 --- a/net/ipv6/sit.c +++ b/net/ipv6/sit.c @@ -1139,8 +1139,8 @@ static void ipip6_tunnel_setup(struct net_device *dev) dev->priv_flags &= ~IFF_XMIT_DST_RELEASE; dev->iflink = 0; dev->addr_len = 4; - dev->features |= NETIF_F_NETNS_LOCAL; - dev->features |= NETIF_F_LLTX; + dev->legacy_features |= NETIF_F_NETNS_LOCAL; + dev->legacy_features |= NETIF_F_LLTX; } static int ipip6_tunnel_init(struct net_device *dev) -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 04/20] net-vlan: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 03/20] net-ipv6: " Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 05/20] net-bridge: " Mahesh Bandewar 0 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- include/linux/if_vlan.h | 4 ++-- net/8021q/vlan.c | 12 ++++++------ net/8021q/vlan_dev.c | 9 +++++---- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h index 635e1fa..1c71568 100644 --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h @@ -276,7 +276,7 @@ static inline struct sk_buff *__vlan_hwaccel_put_tag(struct sk_buff *skb, */ static inline struct sk_buff *vlan_put_tag(struct sk_buff *skb, u16 vlan_tci) { - if (skb->dev->features & NETIF_F_HW_VLAN_TX) { + if (skb->dev->legacy_features & NETIF_F_HW_VLAN_TX) { return __vlan_hwaccel_put_tag(skb, vlan_tci); } else { return __vlan_put_tag(skb, vlan_tci); @@ -332,7 +332,7 @@ static inline int __vlan_hwaccel_get_tag(const struct sk_buff *skb, */ static inline int vlan_get_tag(const struct sk_buff *skb, u16 *vlan_tci) { - if (skb->dev->features & NETIF_F_HW_VLAN_TX) { + if (skb->dev->legacy_features & NETIF_F_HW_VLAN_TX) { return __vlan_hwaccel_get_tag(skb, vlan_tci); } else { return __vlan_get_tag(skb, vlan_tci); diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index e47600b..93325b8 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c @@ -119,7 +119,7 @@ void unregister_vlan_dev(struct net_device *dev, struct list_head *head) * HW accelerating devices or SW vlan input packet processing if * VLAN is not 0 (leave it there for 802.1p). */ - if (vlan_id && (real_dev->features & NETIF_F_HW_VLAN_FILTER)) + if (vlan_id && (real_dev->legacy_features & NETIF_F_HW_VLAN_FILTER)) ops->ndo_vlan_rx_kill_vid(real_dev, vlan_id); grp->nr_vlans--; @@ -151,12 +151,12 @@ int vlan_check_real_dev(struct net_device *real_dev, u16 vlan_id) const char *name = real_dev->name; const struct net_device_ops *ops = real_dev->netdev_ops; - if (real_dev->features & NETIF_F_VLAN_CHALLENGED) { + if (real_dev->legacy_features & NETIF_F_VLAN_CHALLENGED) { pr_info("8021q: VLANs not supported on %s\n", name); return -EOPNOTSUPP; } - if ((real_dev->features & NETIF_F_HW_VLAN_FILTER) && + if ((real_dev->legacy_features & NETIF_F_HW_VLAN_FILTER) && (!ops->ndo_vlan_rx_add_vid || !ops->ndo_vlan_rx_kill_vid)) { pr_info("8021q: Device %s has buggy VLAN hw accel\n", name); return -EOPNOTSUPP; @@ -212,7 +212,7 @@ int register_vlan_dev(struct net_device *dev) ops->ndo_vlan_rx_register(real_dev, ngrp); rcu_assign_pointer(real_dev->vlgrp, ngrp); } - if (real_dev->features & NETIF_F_HW_VLAN_FILTER) + if (real_dev->legacy_features & NETIF_F_HW_VLAN_FILTER) ops->ndo_vlan_rx_add_vid(real_dev, vlan_id); return 0; @@ -329,7 +329,7 @@ static void vlan_transfer_features(struct net_device *dev, { vlandev->gso_max_size = dev->gso_max_size; - if (dev->features & NETIF_F_HW_VLAN_TX) + if (dev->legacy_features & NETIF_F_HW_VLAN_TX) vlandev->hard_header_len = dev->hard_header_len; else vlandev->hard_header_len = dev->hard_header_len + VLAN_HLEN; @@ -375,7 +375,7 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event, __vlan_device_event(dev, event); if ((event == NETDEV_UP) && - (dev->features & NETIF_F_HW_VLAN_FILTER) && + (dev->legacy_features & NETIF_F_HW_VLAN_FILTER) && dev->netdev_ops->ndo_vlan_rx_add_vid) { pr_info("8021q: adding VLAN 0 to HW filter on device %s\n", dev->name); diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index b84a46b..52f2f44 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c @@ -704,8 +704,9 @@ static int vlan_dev_init(struct net_device *dev) (1<<__LINK_STATE_DORMANT))) | (1<<__LINK_STATE_PRESENT); - dev->hw_features = real_dev->vlan_features & NETIF_F_ALL_TX_OFFLOADS; - dev->features |= real_dev->vlan_features | NETIF_F_LLTX; + dev->legacy_hw_features = + real_dev->legacy_vlan_features & NETIF_F_ALL_TX_OFFLOADS; + dev->legacy_features |= real_dev->legacy_vlan_features | NETIF_F_LLTX; dev->gso_max_size = real_dev->gso_max_size; /* ipv6 shared card related stuff */ @@ -721,7 +722,7 @@ static int vlan_dev_init(struct net_device *dev) #endif dev->needed_headroom = real_dev->needed_headroom; - if (real_dev->features & NETIF_F_HW_VLAN_TX) { + if (real_dev->legacy_features & NETIF_F_HW_VLAN_TX) { dev->header_ops = real_dev->header_ops; dev->hard_header_len = real_dev->hard_header_len; } else { @@ -763,7 +764,7 @@ static u32 vlan_dev_fix_features(struct net_device *dev, u32 features) { struct net_device *real_dev = vlan_dev_info(dev)->real_dev; - features &= (real_dev->features | NETIF_F_LLTX); + features &= (real_dev->legacy_features | NETIF_F_LLTX); if (dev_ethtool_get_rx_csum(real_dev)) features |= NETIF_F_RXCSUM; -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 05/20] net-bridge: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 04/20] net-vlan: " Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 06/20] net-decnet: " Mahesh Bandewar 0 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- net/bridge/br_device.c | 2 +- net/bridge/br_if.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c index 45cfd54..e509040 100644 --- a/net/bridge/br_device.c +++ b/net/bridge/br_device.c @@ -387,7 +387,7 @@ void br_dev_setup(struct net_device *dev) dev->tx_queue_len = 0; dev->priv_flags = IFF_EBRIDGE; - dev->features = NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HIGHDMA | + dev->legacy_features = NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HIGHDMA | NETIF_F_GSO_MASK | NETIF_F_NO_CSUM | NETIF_F_LLTX | NETIF_F_NETNS_LOCAL | NETIF_F_GSO | NETIF_F_HW_VLAN_TX; diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c index 7f5379c..17d94b0 100644 --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c @@ -304,11 +304,11 @@ void br_features_recompute(struct net_bridge *br) list_for_each_entry(p, &br->port_list, list) { features = netdev_increment_features(features, - p->dev->features, mask); + p->dev->legacy_features, mask); } done: - br->dev->features = netdev_fix_features(br->dev, features); + br->dev->legacy_features = netdev_fix_features(br->dev, features); } /* called with RTNL */ -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 06/20] net-decnet: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 05/20] net-bridge: " Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 07/20] net-dsa: " Mahesh Bandewar 0 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- net/decnet/af_decnet.c | 2 +- net/decnet/dn_nsp_out.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c index ea3b6ee..5f0a6f9 100644 --- a/net/decnet/af_decnet.c +++ b/net/decnet/af_decnet.c @@ -955,7 +955,7 @@ static int __dn_connect(struct sock *sk, struct sockaddr_dn *addr, int addrlen, fld.flowidn_proto = DNPROTO_NSP; if (dn_route_output_sock(&sk->sk_dst_cache, &fld, sk, flags) < 0) goto out; - sk->sk_route_caps = sk->sk_dst_cache->dev->features; + sk->sk_route_caps = sk->sk_dst_cache->dev->legacy_features; sock->state = SS_CONNECTING; scp->state = DN_CI; scp->segsize_loc = dst_metric_advmss(sk->sk_dst_cache); diff --git a/net/decnet/dn_nsp_out.c b/net/decnet/dn_nsp_out.c index bd78836..4f70026 100644 --- a/net/decnet/dn_nsp_out.c +++ b/net/decnet/dn_nsp_out.c @@ -99,7 +99,7 @@ try_again: fld.flowidn_proto = DNPROTO_NSP; if (dn_route_output_sock(&sk->sk_dst_cache, &fld, sk, 0) == 0) { dst = sk_dst_get(sk); - sk->sk_route_caps = dst->dev->features; + sk->sk_route_caps = dst->dev->legacy_features; goto try_again; } -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 07/20] net-dsa: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 06/20] net-decnet: " Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 08/20] net-l2tp: " Mahesh Bandewar 0 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- net/dsa/slave.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/net/dsa/slave.c b/net/dsa/slave.c index 64ca2a6..fb40250 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -349,7 +349,7 @@ dsa_slave_create(struct dsa_switch *ds, struct device *parent, if (slave_dev == NULL) return slave_dev; - slave_dev->features = master->vlan_features; + slave_dev->legacy_features = master->legacy_vlan_features; SET_ETHTOOL_OPS(slave_dev, &dsa_slave_ethtool_ops); memcpy(slave_dev->dev_addr, master->dev_addr, ETH_ALEN); slave_dev->tx_queue_len = 0; @@ -375,7 +375,7 @@ dsa_slave_create(struct dsa_switch *ds, struct device *parent, } SET_NETDEV_DEV(slave_dev, parent); - slave_dev->vlan_features = master->vlan_features; + slave_dev->legacy_vlan_features = master->legacy_vlan_features; p = netdev_priv(slave_dev); p->dev = slave_dev; -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 08/20] net-l2tp: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 07/20] net-dsa: " Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 09/20] net-phonet: " Mahesh Bandewar 0 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- net/l2tp/l2tp_core.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c index c64ce0a..265cda5 100644 --- a/net/l2tp/l2tp_core.c +++ b/net/l2tp/l2tp_core.c @@ -1081,7 +1081,7 @@ int l2tp_xmit_skb(struct l2tp_session *session, struct sk_buff *skb, int hdr_len if (sk->sk_no_check == UDP_CSUM_NOXMIT) skb->ip_summed = CHECKSUM_NONE; else if ((skb_dst(skb) && skb_dst(skb)->dev) && - (!(skb_dst(skb)->dev->features & NETIF_F_V4_CSUM))) { + (!(skb_dst(skb)->dev->legacy_features & NETIF_F_V4_CSUM))) { skb->ip_summed = CHECKSUM_COMPLETE; csum = skb_checksum(skb, 0, udp_len, 0); uh->check = csum_tcpudp_magic(inet->inet_saddr, -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 09/20] net-phonet: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 08/20] net-l2tp: " Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 10/20] net-sctp: " Mahesh Bandewar 0 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- net/phonet/pep-gprs.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/net/phonet/pep-gprs.c b/net/phonet/pep-gprs.c index d012089..d0fcbe5 100644 --- a/net/phonet/pep-gprs.c +++ b/net/phonet/pep-gprs.c @@ -236,7 +236,7 @@ static const struct net_device_ops gprs_netdev_ops = { static void gprs_setup(struct net_device *dev) { - dev->features = NETIF_F_FRAGLIST; + dev->legacy_features = NETIF_F_FRAGLIST; dev->type = ARPHRD_PHONET_PIPE; dev->flags = IFF_POINTOPOINT | IFF_NOARP; dev->mtu = GPRS_DEFAULT_MTU; -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 10/20] net-sctp: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 09/20] net-phonet: " Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 11/20] net-wireless: " Mahesh Bandewar 0 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- net/sctp/output.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/net/sctp/output.c b/net/sctp/output.c index 60600d3..36efd46 100644 --- a/net/sctp/output.c +++ b/net/sctp/output.c @@ -501,7 +501,7 @@ int sctp_packet_transmit(struct sctp_packet *packet) * by CRC32-C as described in <draft-ietf-tsvwg-sctpcsum-02.txt>. */ if (!sctp_checksum_disable && - !(dst->dev->features & (NETIF_F_NO_CSUM | NETIF_F_SCTP_CSUM))) { + !(dst->dev->legacy_features & (NETIF_F_NO_CSUM | NETIF_F_SCTP_CSUM))) { __u32 crc32 = sctp_start_cksum((__u8 *)sh, cksum_buf_len); /* 3) Put the resultant value into the checksum field in the @@ -509,7 +509,7 @@ int sctp_packet_transmit(struct sctp_packet *packet) */ sh->checksum = sctp_end_cksum(crc32); } else { - if (dst->dev->features & NETIF_F_SCTP_CSUM) { + if (dst->dev->legacy_features & NETIF_F_SCTP_CSUM) { /* no need to seed psuedo checksum for SCTP */ nskb->ip_summed = CHECKSUM_PARTIAL; nskb->csum_start = (skb_transport_header(nskb) - -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 11/20] net-wireless: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 10/20] net-sctp: " Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 12/20] loopback: " Mahesh Bandewar 0 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- net/wireless/core.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/net/wireless/core.c b/net/wireless/core.c index fe01de2..f5b619d 100644 --- a/net/wireless/core.c +++ b/net/wireless/core.c @@ -235,11 +235,11 @@ int cfg80211_switch_netns(struct cfg80211_registered_device *rdev, return -EOPNOTSUPP; list_for_each_entry(wdev, &rdev->netdev_list, list) { - wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL; + wdev->netdev->legacy_features &= ~NETIF_F_NETNS_LOCAL; err = dev_change_net_namespace(wdev->netdev, net, "wlan%d"); if (err) break; - wdev->netdev->features |= NETIF_F_NETNS_LOCAL; + wdev->netdev->legacy_features |= NETIF_F_NETNS_LOCAL; } if (err) { @@ -248,11 +248,11 @@ int cfg80211_switch_netns(struct cfg80211_registered_device *rdev, list_for_each_entry_continue_reverse(wdev, &rdev->netdev_list, list) { - wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL; + wdev->netdev->legacy_features &= ~NETIF_F_NETNS_LOCAL; err = dev_change_net_namespace(wdev->netdev, net, "wlan%d"); WARN_ON(err); - wdev->netdev->features |= NETIF_F_NETNS_LOCAL; + wdev->netdev->legacy_features |= NETIF_F_NETNS_LOCAL; } return err; @@ -697,7 +697,7 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb, list_add_rcu(&wdev->list, &rdev->netdev_list); rdev->devlist_generation++; /* can only change netns with wiphy */ - dev->features |= NETIF_F_NETNS_LOCAL; + dev->legacy_features |= NETIF_F_NETNS_LOCAL; if (sysfs_create_link(&dev->dev.kobj, &rdev->wiphy.dev.kobj, "phy80211")) { -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 12/20] loopback: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 11/20] net-wireless: " Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 13/20] veth: " Mahesh Bandewar 0 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- drivers/net/loopback.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c index ea0dc45..673fbcc 100644 --- a/drivers/net/loopback.c +++ b/drivers/net/loopback.c @@ -165,8 +165,8 @@ static void loopback_setup(struct net_device *dev) dev->type = ARPHRD_LOOPBACK; /* 0x0001*/ dev->flags = IFF_LOOPBACK; dev->priv_flags &= ~IFF_XMIT_DST_RELEASE; - dev->hw_features = NETIF_F_ALL_TSO | NETIF_F_UFO; - dev->features = NETIF_F_SG | NETIF_F_FRAGLIST + dev->legacy_hw_features = NETIF_F_ALL_TSO | NETIF_F_UFO; + dev->legacy_features = NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_ALL_TSO | NETIF_F_UFO | NETIF_F_NO_CSUM -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 13/20] veth: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 12/20] loopback: " Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 14/20] jme: " Mahesh Bandewar 0 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- drivers/net/veth.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/net/veth.c b/drivers/net/veth.c index 6542288..a0acfe8 100644 --- a/drivers/net/veth.c +++ b/drivers/net/veth.c @@ -131,7 +131,7 @@ static netdev_tx_t veth_xmit(struct sk_buff *skb, struct net_device *dev) /* don't change ip_summed == CHECKSUM_PARTIAL, as that will cause bad checksum on forwarded packets */ if (skb->ip_summed == CHECKSUM_NONE && - rcv->features & NETIF_F_RXCSUM) + rcv->legacy_features & NETIF_F_RXCSUM) skb->ip_summed = CHECKSUM_UNNECESSARY; length = skb->len; @@ -265,10 +265,10 @@ static void veth_setup(struct net_device *dev) dev->netdev_ops = &veth_netdev_ops; dev->ethtool_ops = &veth_ethtool_ops; - dev->features |= NETIF_F_LLTX; + dev->legacy_features |= NETIF_F_LLTX; dev->destructor = veth_dev_free; - dev->hw_features = NETIF_F_NO_CSUM | NETIF_F_SG | NETIF_F_RXCSUM; + dev->legacy_hw_features = NETIF_F_NO_CSUM | NETIF_F_SG | NETIF_F_RXCSUM; } /* -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 14/20] jme: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 13/20] veth: " Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 15/20] sungem: " Mahesh Bandewar 0 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- drivers/net/jme.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/net/jme.c b/drivers/net/jme.c index be4773f..10b972e 100644 --- a/drivers/net/jme.c +++ b/drivers/net/jme.c @@ -741,7 +741,7 @@ jme_set_clean_rxdesc(struct jme_adapter *jme, int i) rxdesc->desc1.bufaddrl = cpu_to_le32( (__u64)rxbi->mapping & 0xFFFFFFFFUL); rxdesc->desc1.datalen = cpu_to_le16(rxbi->len); - if (jme->dev->features & NETIF_F_HIGHDMA) + if (jme->dev->legacy_features & NETIF_F_HIGHDMA) rxdesc->desc1.flags = RXFLAG_64BIT; wmb(); rxdesc->desc1.flags |= RXFLAG_OWN | RXFLAG_INT; @@ -1917,7 +1917,7 @@ jme_map_tx_skb(struct jme_adapter *jme, struct sk_buff *skb, int idx) struct jme_ring *txring = &(jme->txring[0]); struct txdesc *txdesc = txring->desc, *ctxdesc; struct jme_buffer_info *txbi = txring->bufinf, *ctxbi; - u8 hidma = jme->dev->features & NETIF_F_HIGHDMA; + u8 hidma = jme->dev->legacy_features & NETIF_F_HIGHDMA; int i, nr_frags = skb_shinfo(skb)->nr_frags; int mask = jme->tx_ring_mask; struct skb_frag_struct *frag; @@ -2911,13 +2911,13 @@ jme_init_one(struct pci_dev *pdev, netdev->netdev_ops = &jme_netdev_ops; netdev->ethtool_ops = &jme_ethtool_ops; netdev->watchdog_timeo = TX_TIMEOUT; - netdev->hw_features = NETIF_F_IP_CSUM | + netdev->legacy_hw_features = NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_RXCSUM; - netdev->features = NETIF_F_IP_CSUM | + netdev->legacy_features = NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_SG | NETIF_F_TSO | @@ -2925,7 +2925,7 @@ jme_init_one(struct pci_dev *pdev, NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; if (using_dac) - netdev->features |= NETIF_F_HIGHDMA; + netdev->legacy_features |= NETIF_F_HIGHDMA; SET_NETDEV_DEV(netdev, &pdev->dev); pci_set_drvdata(pdev, netdev); @@ -3002,7 +3002,7 @@ jme_init_one(struct pci_dev *pdev, jme->reg_gpreg1 = GPREG1_DEFAULT; if (jme->reg_rxmcs & RXMCS_CHECKSUM) - netdev->features |= NETIF_F_RXCSUM; + netdev->legacy_features |= NETIF_F_RXCSUM; /* * Get Max Read Req Size from PCI Config Space -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 15/20] sungem: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 14/20] jme: " Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 16/20] sunhme: " Mahesh Bandewar 0 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- drivers/net/sungem.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/net/sungem.c b/drivers/net/sungem.c index a935426..8ee36c1 100644 --- a/drivers/net/sungem.c +++ b/drivers/net/sungem.c @@ -3146,10 +3146,11 @@ static int __devinit gem_init_one(struct pci_dev *pdev, gp->phy_mii.def ? gp->phy_mii.def->name : "no"); /* GEM can do it all... */ - dev->hw_features = NETIF_F_SG | NETIF_F_HW_CSUM; - dev->features |= dev->hw_features | NETIF_F_RXCSUM | NETIF_F_LLTX; + dev->legacy_hw_features = NETIF_F_SG | NETIF_F_HW_CSUM; + dev->legacy_features |= + dev->legacy_hw_features | NETIF_F_RXCSUM | NETIF_F_LLTX; if (pci_using_dac) - dev->features |= NETIF_F_HIGHDMA; + dev->legacy_features |= NETIF_F_HIGHDMA; return 0; -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 16/20] sunhme: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 15/20] sungem: " Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 17/20] usb-smsc75xx: " Mahesh Bandewar 0 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- drivers/net/sunhme.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/net/sunhme.c b/drivers/net/sunhme.c index 80e907d..9d05f86 100644 --- a/drivers/net/sunhme.c +++ b/drivers/net/sunhme.c @@ -2788,8 +2788,8 @@ static int __devinit happy_meal_sbus_probe_one(struct platform_device *op, int i dev->ethtool_ops = &hme_ethtool_ops; /* Happy Meal can do it all... */ - dev->hw_features = NETIF_F_SG | NETIF_F_HW_CSUM; - dev->features |= dev->hw_features | NETIF_F_RXCSUM; + dev->legacy_hw_features = NETIF_F_SG | NETIF_F_HW_CSUM; + dev->legacy_features |= dev->legacy_hw_features | NETIF_F_RXCSUM; dev->irq = op->archdata.irqs[0]; @@ -3114,8 +3114,8 @@ static int __devinit happy_meal_pci_probe(struct pci_dev *pdev, dev->dma = 0; /* Happy Meal can do it all... */ - dev->hw_features = NETIF_F_SG | NETIF_F_HW_CSUM; - dev->features |= dev->hw_features | NETIF_F_RXCSUM; + dev->legacy_hw_features = NETIF_F_SG | NETIF_F_HW_CSUM; + dev->legacy_features |= dev->legacy_hw_features | NETIF_F_RXCSUM; #if defined(CONFIG_SBUS) && defined(CONFIG_PCI) /* Hook up PCI register/descriptor accessors. */ -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 17/20] usb-smsc75xx: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 16/20] sunhme: " Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 18/20] usb-smsc95xx: " Mahesh Bandewar 0 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- drivers/net/usb/smsc75xx.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/net/usb/smsc75xx.c b/drivers/net/usb/smsc75xx.c index 860a20c..9c22f04 100644 --- a/drivers/net/usb/smsc75xx.c +++ b/drivers/net/usb/smsc75xx.c @@ -927,7 +927,7 @@ static int smsc75xx_reset(struct usbnet *dev) netif_dbg(dev, ifup, dev->net, "RFE_CTL set to 0x%08x", pdata->rfe_ctl); /* Enable or disable checksum offload engines */ - smsc75xx_set_features(dev->net, dev->net->features); + smsc75xx_set_features(dev->net, dev->net->legacy_features); smsc75xx_set_multicast(dev->net); @@ -1030,15 +1030,15 @@ static int smsc75xx_bind(struct usbnet *dev, struct usb_interface *intf) INIT_WORK(&pdata->set_multicast, smsc75xx_deferred_multicast_write); if (DEFAULT_TX_CSUM_ENABLE) { - dev->net->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; + dev->net->legacy_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; if (DEFAULT_TSO_ENABLE) - dev->net->features |= NETIF_F_SG | + dev->net->legacy_features |= NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6; } if (DEFAULT_RX_CSUM_ENABLE) - dev->net->features |= NETIF_F_RXCSUM; + dev->net->legacy_features |= NETIF_F_RXCSUM; - dev->net->hw_features = NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | + dev->net->legacy_hw_features = NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_RXCSUM; /* Init all registers */ @@ -1065,7 +1065,7 @@ static void smsc75xx_unbind(struct usbnet *dev, struct usb_interface *intf) static void smsc75xx_rx_csum_offload(struct usbnet *dev, struct sk_buff *skb, u32 rx_cmd_a, u32 rx_cmd_b) { - if (!(dev->net->features & NETIF_F_RXCSUM) || + if (!(dev->net->legacy_features & NETIF_F_RXCSUM) || unlikely(rx_cmd_a & RX_CMD_A_LCSM)) { skb->ip_summed = CHECKSUM_NONE; } else { -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 18/20] usb-smsc95xx: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 17/20] usb-smsc75xx: " Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 19/20] virtio_net: " Mahesh Bandewar 0 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- drivers/net/usb/smsc95xx.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c index 708f208..ffdc654 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c @@ -933,7 +933,7 @@ static int smsc95xx_reset(struct usbnet *dev) } /* Enable or disable checksum offload engines */ - smsc95xx_set_features(dev->net, dev->net->features); + smsc95xx_set_features(dev->net, dev->net->legacy_features); smsc95xx_set_multicast(dev->net); @@ -1000,11 +1000,11 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf) spin_lock_init(&pdata->mac_cr_lock); if (DEFAULT_TX_CSUM_ENABLE) - dev->net->features |= NETIF_F_HW_CSUM; + dev->net->legacy_features |= NETIF_F_HW_CSUM; if (DEFAULT_RX_CSUM_ENABLE) - dev->net->features |= NETIF_F_RXCSUM; + dev->net->legacy_features |= NETIF_F_RXCSUM; - dev->net->hw_features = NETIF_F_HW_CSUM | NETIF_F_RXCSUM; + dev->net->legacy_hw_features = NETIF_F_HW_CSUM | NETIF_F_RXCSUM; smsc95xx_init_mac_address(dev); @@ -1079,7 +1079,7 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) /* last frame in this batch */ if (skb->len == size) { - if (dev->net->features & NETIF_F_RXCSUM) + if (dev->net->legacy_features & NETIF_F_RXCSUM) smsc95xx_rx_csum_offload(skb); skb_trim(skb, skb->len - 4); /* remove fcs */ skb->truesize = size + sizeof(struct sk_buff); @@ -1097,7 +1097,7 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) ax_skb->data = packet; skb_set_tail_pointer(ax_skb, size); - if (dev->net->features & NETIF_F_RXCSUM) + if (dev->net->legacy_features & NETIF_F_RXCSUM) smsc95xx_rx_csum_offload(ax_skb); skb_trim(ax_skb, ax_skb->len - 4); /* remove fcs */ ax_skb->truesize = size + sizeof(struct sk_buff); -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 19/20] virtio_net: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 18/20] usb-smsc95xx: " Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 20/20] xen: " Mahesh Bandewar 0 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- drivers/net/virtio_net.c | 21 +++++++++++---------- 1 files changed, 11 insertions(+), 10 deletions(-) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 0cb0b06..36eed90 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -892,33 +892,34 @@ static int virtnet_probe(struct virtio_device *vdev) /* Set up network device as normal. */ dev->netdev_ops = &virtnet_netdev; - dev->features = NETIF_F_HIGHDMA; + dev->legacy_features = NETIF_F_HIGHDMA; SET_ETHTOOL_OPS(dev, &virtnet_ethtool_ops); SET_NETDEV_DEV(dev, &vdev->dev); /* Do we support "hardware" checksums? */ if (virtio_has_feature(vdev, VIRTIO_NET_F_CSUM)) { /* This opens up the world of extra features. */ - dev->hw_features |= NETIF_F_HW_CSUM|NETIF_F_SG|NETIF_F_FRAGLIST; + dev->legacy_hw_features |= NETIF_F_HW_CSUM|NETIF_F_SG|NETIF_F_FRAGLIST; if (csum) - dev->features |= NETIF_F_HW_CSUM|NETIF_F_SG|NETIF_F_FRAGLIST; + dev->legacy_features |= NETIF_F_HW_CSUM|NETIF_F_SG|NETIF_F_FRAGLIST; if (virtio_has_feature(vdev, VIRTIO_NET_F_GSO)) { - dev->hw_features |= NETIF_F_TSO | NETIF_F_UFO + dev->legacy_hw_features |= NETIF_F_TSO | NETIF_F_UFO | NETIF_F_TSO_ECN | NETIF_F_TSO6; } /* Individual feature bits: what can host handle? */ if (virtio_has_feature(vdev, VIRTIO_NET_F_HOST_TSO4)) - dev->hw_features |= NETIF_F_TSO; + dev->legacy_hw_features |= NETIF_F_TSO; if (virtio_has_feature(vdev, VIRTIO_NET_F_HOST_TSO6)) - dev->hw_features |= NETIF_F_TSO6; + dev->legacy_hw_features |= NETIF_F_TSO6; if (virtio_has_feature(vdev, VIRTIO_NET_F_HOST_ECN)) - dev->hw_features |= NETIF_F_TSO_ECN; + dev->legacy_hw_features |= NETIF_F_TSO_ECN; if (virtio_has_feature(vdev, VIRTIO_NET_F_HOST_UFO)) - dev->hw_features |= NETIF_F_UFO; + dev->legacy_hw_features |= NETIF_F_UFO; if (gso) - dev->features |= dev->hw_features & (NETIF_F_ALL_TSO|NETIF_F_UFO); + dev->legacy_features |= + dev->legacy_hw_features & (NETIF_F_ALL_TSO|NETIF_F_UFO); /* (!csum && gso) case will be fixed by register_netdev() */ } @@ -965,7 +966,7 @@ static int virtnet_probe(struct virtio_device *vdev) vi->cvq = vqs[2]; if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_VLAN)) - dev->features |= NETIF_F_HW_VLAN_FILTER; + dev->legacy_features |= NETIF_F_HW_VLAN_FILTER; } err = register_netdev(dev); -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 20/20] xen: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 19/20] virtio_net: " Mahesh Bandewar @ 2011-04-06 0:44 ` Mahesh Bandewar 0 siblings, 0 replies; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 0:44 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- drivers/net/xen-netfront.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c index db9a763..2b7e5b1 100644 --- a/drivers/net/xen-netfront.c +++ b/drivers/net/xen-netfront.c @@ -193,7 +193,7 @@ static void xennet_sysfs_delif(struct net_device *netdev); static int xennet_can_sg(struct net_device *dev) { - return dev->features & NETIF_F_SG; + return dev->legacy_features & NETIF_F_SG; } @@ -1247,9 +1247,9 @@ static struct net_device * __devinit xennet_create_dev(struct xenbus_device *dev netdev->netdev_ops = &xennet_netdev_ops; netif_napi_add(netdev, &np->napi, xennet_poll, 64); - netdev->features = NETIF_F_IP_CSUM | NETIF_F_RXCSUM | + netdev->legacy_features = NETIF_F_IP_CSUM | NETIF_F_RXCSUM | NETIF_F_GSO_ROBUST; - netdev->hw_features = NETIF_F_IP_CSUM | NETIF_F_SG | NETIF_F_TSO; + netdev->legacy_hw_features = NETIF_F_IP_CSUM | NETIF_F_SG | NETIF_F_TSO; /* * Assume that all hw features are available for now. This set @@ -1257,7 +1257,7 @@ static struct net_device * __devinit xennet_create_dev(struct xenbus_device *dev * xennet_connect() which is the earliest point where we can * negotiate with the backend regarding supported features. */ - netdev->features |= netdev->hw_features; + netdev->legacy_features |= netdev->legacy_hw_features; SET_ETHTOOL_OPS(netdev, &xennet_ethtool_ops); SET_NETDEV_DEV(netdev, &dev->dev); -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: [PATCH 01/20] net-core: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 01/20] net-core: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 02/20] net-ipv4: " Mahesh Bandewar @ 2011-04-06 1:27 ` Ben Hutchings 2011-04-06 1:35 ` Mahesh Bandewar 2011-04-06 10:29 ` Michał Mirosław 2011-04-07 15:00 ` [PATCHv2 " Mahesh Bandewar 3 siblings, 1 reply; 27+ messages in thread From: Ben Hutchings @ 2011-04-06 1:27 UTC (permalink / raw) To: Mahesh Bandewar; +Cc: David Miller, netdev On Tue, 2011-04-05 at 17:44 -0700, Mahesh Bandewar wrote: > Converting current use of (hw_/wanted_/vlan_)features to > legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. [...] > @@ -1029,44 +1065,51 @@ struct net_device { > struct list_head napi_list; > struct list_head unreg_list; > > +#define DEV_FEATURE_WORDS 2 > +#define DEV_FEATURE_BITS (DEV_FEATURE_WORDS*sizeof(long)*BITS_PER_BYTE) > +#define LEGACY_FEATURE_WORD 0 > + > /* currently active device features */ > - u32 features; > + unsigned long features; > /* user-changeable features */ > - u32 hw_features; > + DECLARE_BITMAP(hw_feature, DEV_FEATURE_BITS); [...] Sorry, you can't get rid of hw_features without converting all the callers at the same time. All code has to remain compilable after each single commit. Ben. -- Ben Hutchings, Senior Software Engineer, Solarflare Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked. ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH 01/20] net-core: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 1:27 ` [PATCH 01/20] net-core: " Ben Hutchings @ 2011-04-06 1:35 ` Mahesh Bandewar 2011-04-06 1:45 ` Ben Hutchings 0 siblings, 1 reply; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 1:35 UTC (permalink / raw) To: Ben Hutchings; +Cc: David Miller, netdev On Tue, Apr 5, 2011 at 6:27 PM, Ben Hutchings <bhutchings@solarflare.com> wrote: > On Tue, 2011-04-05 at 17:44 -0700, Mahesh Bandewar wrote: >> Converting current use of (hw_/wanted_/vlan_)features to >> legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. > [...] >> @@ -1029,44 +1065,51 @@ struct net_device { >> struct list_head napi_list; >> struct list_head unreg_list; >> >> +#define DEV_FEATURE_WORDS 2 >> +#define DEV_FEATURE_BITS (DEV_FEATURE_WORDS*sizeof(long)*BITS_PER_BYTE) >> +#define LEGACY_FEATURE_WORD 0 >> + >> /* currently active device features */ >> - u32 features; >> + unsigned long features; >> /* user-changeable features */ >> - u32 hw_features; >> + DECLARE_BITMAP(hw_feature, DEV_FEATURE_BITS); > [...] > > Sorry, you can't get rid of hw_features without converting all the > callers at the same time. All code has to remain compilable after each > single commit. > I thought I did! My "make allyesconfig; make all" went through. Did I miss something? > Ben. > > -- > Ben Hutchings, Senior Software Engineer, Solarflare > Not speaking for my employer; that's the marketing department's job. > They asked us to note that Solarflare product names are trademarked. > > ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH 01/20] net-core: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 1:35 ` Mahesh Bandewar @ 2011-04-06 1:45 ` Ben Hutchings 0 siblings, 0 replies; 27+ messages in thread From: Ben Hutchings @ 2011-04-06 1:45 UTC (permalink / raw) To: Mahesh Bandewar; +Cc: David Miller, netdev On Tue, 2011-04-05 at 18:35 -0700, Mahesh Bandewar wrote: > On Tue, Apr 5, 2011 at 6:27 PM, Ben Hutchings <bhutchings@solarflare.com> wrote: > > On Tue, 2011-04-05 at 17:44 -0700, Mahesh Bandewar wrote: > >> Converting current use of (hw_/wanted_/vlan_)features to > >> legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. > > [...] > >> @@ -1029,44 +1065,51 @@ struct net_device { > >> struct list_head napi_list; > >> struct list_head unreg_list; > >> > >> +#define DEV_FEATURE_WORDS 2 > >> +#define DEV_FEATURE_BITS (DEV_FEATURE_WORDS*sizeof(long)*BITS_PER_BYTE) > >> +#define LEGACY_FEATURE_WORD 0 > >> + > >> /* currently active device features */ > >> - u32 features; > >> + unsigned long features; > >> /* user-changeable features */ > >> - u32 hw_features; > >> + DECLARE_BITMAP(hw_feature, DEV_FEATURE_BITS); > > [...] > > > > Sorry, you can't get rid of hw_features without converting all the > > callers at the same time. All code has to remain compilable after each > > single commit. > > > I thought I did! My "make allyesconfig; make all" went through. Did I > miss something? After 1 commit, or after all 20? Ben. -- Ben Hutchings, Senior Software Engineer, Solarflare Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked. ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH 01/20] net-core: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 01/20] net-core: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 02/20] net-ipv4: " Mahesh Bandewar 2011-04-06 1:27 ` [PATCH 01/20] net-core: " Ben Hutchings @ 2011-04-06 10:29 ` Michał Mirosław 2011-04-06 17:34 ` Mahesh Bandewar 2011-04-07 15:00 ` [PATCHv2 " Mahesh Bandewar 3 siblings, 1 reply; 27+ messages in thread From: Michał Mirosław @ 2011-04-06 10:29 UTC (permalink / raw) To: Mahesh Bandewar; +Cc: David Miller, netdev 2011/4/6 Mahesh Bandewar <maheshb@google.com>: > Converting current use of (hw_/wanted_/vlan_)features to > legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. > > Signed-off-by: Mahesh Bandewar <maheshb@google.com> > --- > include/linux/netdevice.h | 110 +++++++++++++++++++++++++++++++------------- > net/core/dev.c | 51 +++++++++++---------- > net/core/ethtool.c | 97 ++++++++++++++++++++------------------- > net/core/net-sysfs.c | 4 +- > net/core/sock.c | 2 +- > 5 files changed, 155 insertions(+), 109 deletions(-) > > diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h > index 09d2624..637bf2a 100644 > --- a/include/linux/netdevice.h > +++ b/include/linux/netdevice.h > @@ -980,6 +980,42 @@ struct net_device_ops { > u32 features); > }; > > +enum netdev_features { > + NETIF_F_SG_BIT, /* Scatter/gather IO. */ > + NETIF_F_IP_CSUM_BIT, /* Can checksum TCP/UDP over IPv4. */ > + NETIF_F_NO_CSUM_BIT, /* Does not require checksum. F.e. loopack. */ > + NETIF_F_HW_CSUM_BIT, /* Can checksum all the packets. */ > + NETIF_F_IPV6_CSUM_BIT, /* Can checksum TCP/UDP over IPV6 */ > + NETIF_F_HIGHDMA_BIT, /* Can DMA to high memory. */ > + NETIF_F_FRAGLIST_BIT, /* Scatter/gather IO. */ > + NETIF_F_HW_VLAN_TX_BIT, /* Transmit VLAN hw acceleration */ > + NETIF_F_HW_VLAN_RX_BIT, /* Receive VLAN hw acceleration */ > + NETIF_F_HW_VLAN_FILTER_BIT, /* Receive filtering on VLAN */ > + NETIF_F_VLAN_CHALLENGED_BIT, /* Device cannot handle VLAN packets */ > + NETIF_F_GSO_BIT, /* Enable software GSO. */ > + NETIF_F_LLTX_BIT, /* LockLess TX - deprecated. Please */ > + /* do not use LLTX in new drivers */ > + NETIF_F_NETNS_LOCAL_BIT, /* Does not change network namespaces */ > + NETIF_F_GRO_BIT, /* Generic receive offload */ > + NETIF_F_LRO_BIT, /* large receive offload */ > + /* the GSO_MASK reserves bits 16 through 23 */ > + RESERVED1_BIT, > + RESERVED2_BIT, > + RESERVED3_BIT, > + RESERVED4_BIT, > + RESERVED5_BIT, > + RESERVED6_BIT, > + RESERVED7_BIT, > + RESERVED8_BIT, > + NETIF_F_FCOE_CRC_BIT, /* FCoE CRC32 */ > + NETIF_F_SCTP_CSUM_BIT, /* SCTP checksum offload */ > + NETIF_F_FCOE_MTU_BIT, /* Supports max FCoE MTU, 2158 bytes*/ > + NETIF_F_NTUPLE_BIT, /* N-tuple filters supported */ > + NETIF_F_RXHASH_BIT, /* Receive hashing offload */ > + NETIF_F_RXCSUM_BIT, /* Receive checksumming offload */ > + NETIF_F_NOCACHE_COPY_BIT, /* Use no-cache copyfromuser */ > +}; > + This should be a separate cleanup patch. And after that, for the conversion you would add as a last entry: NETIF_F_NUM_BITS and use it later (see below). > /* > * The DEVICE structure. > * Actually, this whole structure is a big mistake. It mixes I/O > @@ -1029,44 +1065,51 @@ struct net_device { > struct list_head napi_list; > struct list_head unreg_list; > > +#define DEV_FEATURE_WORDS 2 > +#define DEV_FEATURE_BITS (DEV_FEATURE_WORDS*sizeof(long)*BITS_PER_BYTE) > +#define LEGACY_FEATURE_WORD 0 > + #define DEV_FEATURE_WORDS BITS_TO_LONGS(NETIF_F_NUM_BITS) #define DEV_FEATURE_BITS (DEV_FEATURE_WORDS*BITS_PER_LONG) Though using bitmaps will make a mess for 32 versus 64 bit archs. It would be better to stick to u32 as the base type instead of long. [...] > @@ -2376,13 +2419,13 @@ static inline void netif_tx_unlock_bh(struct net_device *dev) > } > > #define HARD_TX_LOCK(dev, txq, cpu) { \ > - if ((dev->features & NETIF_F_LLTX) == 0) { \ > + if ((dev->legacy_features & NETIF_F_LLTX) == 0) { \ [...] For those type of conversion there is really no point in using the macro. Changing it to dev->features[0] instead of dev->legacy_features needs the same effort but avoids the cleanup later. Flags in other feature words could have names line NETIF_F2_xxx so that it would be clear in which word they belong. Best Regards, Michał Mirosław ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH 01/20] net-core: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 10:29 ` Michał Mirosław @ 2011-04-06 17:34 ` Mahesh Bandewar 0 siblings, 0 replies; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-06 17:34 UTC (permalink / raw) To: Michał Mirosław; +Cc: David Miller, netdev On Wed, Apr 6, 2011 at 3:29 AM, Michał Mirosław <mirqus@gmail.com> wrote: > 2011/4/6 Mahesh Bandewar <maheshb@google.com>: >> Converting current use of (hw_/wanted_/vlan_)features to >> legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. >> >> Signed-off-by: Mahesh Bandewar <maheshb@google.com> >> --- >> include/linux/netdevice.h | 110 +++++++++++++++++++++++++++++++------------- >> net/core/dev.c | 51 +++++++++++---------- >> net/core/ethtool.c | 97 ++++++++++++++++++++------------------- >> net/core/net-sysfs.c | 4 +- >> net/core/sock.c | 2 +- >> 5 files changed, 155 insertions(+), 109 deletions(-) >> >> diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h >> index 09d2624..637bf2a 100644 >> --- a/include/linux/netdevice.h >> +++ b/include/linux/netdevice.h >> @@ -980,6 +980,42 @@ struct net_device_ops { >> u32 features); >> }; >> >> +enum netdev_features { >> + NETIF_F_SG_BIT, /* Scatter/gather IO. */ >> + NETIF_F_IP_CSUM_BIT, /* Can checksum TCP/UDP over IPv4. */ >> + NETIF_F_NO_CSUM_BIT, /* Does not require checksum. F.e. loopack. */ >> + NETIF_F_HW_CSUM_BIT, /* Can checksum all the packets. */ >> + NETIF_F_IPV6_CSUM_BIT, /* Can checksum TCP/UDP over IPV6 */ >> + NETIF_F_HIGHDMA_BIT, /* Can DMA to high memory. */ >> + NETIF_F_FRAGLIST_BIT, /* Scatter/gather IO. */ >> + NETIF_F_HW_VLAN_TX_BIT, /* Transmit VLAN hw acceleration */ >> + NETIF_F_HW_VLAN_RX_BIT, /* Receive VLAN hw acceleration */ >> + NETIF_F_HW_VLAN_FILTER_BIT, /* Receive filtering on VLAN */ >> + NETIF_F_VLAN_CHALLENGED_BIT, /* Device cannot handle VLAN packets */ >> + NETIF_F_GSO_BIT, /* Enable software GSO. */ >> + NETIF_F_LLTX_BIT, /* LockLess TX - deprecated. Please */ >> + /* do not use LLTX in new drivers */ >> + NETIF_F_NETNS_LOCAL_BIT, /* Does not change network namespaces */ >> + NETIF_F_GRO_BIT, /* Generic receive offload */ >> + NETIF_F_LRO_BIT, /* large receive offload */ >> + /* the GSO_MASK reserves bits 16 through 23 */ >> + RESERVED1_BIT, >> + RESERVED2_BIT, >> + RESERVED3_BIT, >> + RESERVED4_BIT, >> + RESERVED5_BIT, >> + RESERVED6_BIT, >> + RESERVED7_BIT, >> + RESERVED8_BIT, >> + NETIF_F_FCOE_CRC_BIT, /* FCoE CRC32 */ >> + NETIF_F_SCTP_CSUM_BIT, /* SCTP checksum offload */ >> + NETIF_F_FCOE_MTU_BIT, /* Supports max FCoE MTU, 2158 bytes*/ >> + NETIF_F_NTUPLE_BIT, /* N-tuple filters supported */ >> + NETIF_F_RXHASH_BIT, /* Receive hashing offload */ >> + NETIF_F_RXCSUM_BIT, /* Receive checksumming offload */ >> + NETIF_F_NOCACHE_COPY_BIT, /* Use no-cache copyfromuser */ >> +}; >> + > > This should be a separate cleanup patch. And after that, for the > conversion you would add as a last entry: > NETIF_F_NUM_BITS and use it later (see below). > I like the idea of NETIF_F_NUM_BITS and I'll change the #defines accordingly. Couple of bitmaps are defined in this patch and NUM_BITS will be required to define those bitmaps. This is reason why I have defined above enum now rather than waiting for the cleanup phase. Also it should not change radically in that time span. >> /* >> * The DEVICE structure. >> * Actually, this whole structure is a big mistake. It mixes I/O >> @@ -1029,44 +1065,51 @@ struct net_device { >> struct list_head napi_list; >> struct list_head unreg_list; >> >> +#define DEV_FEATURE_WORDS 2 >> +#define DEV_FEATURE_BITS (DEV_FEATURE_WORDS*sizeof(long)*BITS_PER_BYTE) >> +#define LEGACY_FEATURE_WORD 0 >> + > > #define DEV_FEATURE_WORDS BITS_TO_LONGS(NETIF_F_NUM_BITS) > #define DEV_FEATURE_BITS (DEV_FEATURE_WORDS*BITS_PER_LONG) > Yes, this is good! > Though using bitmaps will make a mess for 32 versus 64 bit archs. It > would be better to stick to u32 as the base type instead of long. > Once it's a bitmap; type shouldn't matter and each arch and it's specific macros/inlines should handle them properly, no? (I changed the base type since DECLARE_BITMAP() declares 'unsigned long' and we can make use of readily avaialble set/test/clear_bit macros) > [...] >> @@ -2376,13 +2419,13 @@ static inline void netif_tx_unlock_bh(struct net_device *dev) >> } >> >> #define HARD_TX_LOCK(dev, txq, cpu) { \ >> - if ((dev->features & NETIF_F_LLTX) == 0) { \ >> + if ((dev->legacy_features & NETIF_F_LLTX) == 0) { \ > [...] > > For those type of conversion there is really no point in using the > macro. Changing it to > dev->features[0] instead of dev->legacy_features needs the same effort > but avoids the > cleanup later. Flags in other feature words could have names line > NETIF_F2_xxx so that > it would be clear in which word they belong. > I know! But changing all at once in zillion places is hard. This will let us make changes progressively. I'm expecting the following progress path - (1) (Current patch) + #define legacy_feactures features + #define legacy_vlan_features vlan_features Slowly make all the changes (relatively easy but a lengthy process!). So the places where vlan_features, features fields are used will compile and at the same time updates, where legacy_vlan_features, legacy_features fields are used, will compile too. Once all is changes are in place - (2) Relatively small change - unsigned long features; + DECLARE_BITMAP(feature, DEV_FEATURE_BITS); - unsigned long vlan_features; + DECLARE_BITMAP(vlan_feature, DEV_FEATURE_BITS); - #define legacy_features features + #define legacy_features feature[0] - #define legacy_vlan_features vlan_features + #define legacy_vlan_features vlan_feature[0] At this moment old fields are gone and are replaced by the bitmaps and the legacy usage is indicated by the use "legacy_*" fields. This should eventually be changed to use the (set/test/clear)_bit() macros/inlines. So the above place should look like - #define HARD_TX_LOCK(dev, txq, cpu) { \ - if ((dev->legacy_features & NETIF_F_LLTX) == 0) { \ + if (!test_bit(dev->feature, NETIF_F_LLTX_BIT) { \ Thanks, --mahesh.. ^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCHv2 01/20] net-core: extending (hw_/wanted_/vlan_)features fields to a bitmap. 2011-04-06 0:44 ` [PATCH 01/20] net-core: " Mahesh Bandewar ` (2 preceding siblings ...) 2011-04-06 10:29 ` Michał Mirosław @ 2011-04-07 15:00 ` Mahesh Bandewar 3 siblings, 0 replies; 27+ messages in thread From: Mahesh Bandewar @ 2011-04-07 15:00 UTC (permalink / raw) To: David Miller; +Cc: netdev, Mahesh Bandewar Converting current use of (hw_/wanted_/vlan_)features to legacy_(hw_/wanted_/vlan_)features to differntiate from the proposed usage. Signed-off-by: Mahesh Bandewar <maheshb@google.com> --- Changes since v1: Added NETIF_F_NUM_BITS. include/linux/netdevice.h | 111 +++++++++++++++++++++++++++++++------------- net/core/dev.c | 51 +++++++++++---------- net/core/ethtool.c | 97 ++++++++++++++++++++------------------- net/core/net-sysfs.c | 4 +- net/core/sock.c | 2 +- 5 files changed, 156 insertions(+), 109 deletions(-) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 09d2624..e27daaf 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -980,6 +980,43 @@ struct net_device_ops { u32 features); }; +enum netdev_features { + NETIF_F_SG_BIT, /* Scatter/gather IO. */ + NETIF_F_IP_CSUM_BIT, /* Can checksum TCP/UDP over IPv4. */ + NETIF_F_NO_CSUM_BIT, /* Does not require checksum. F.e. loopack. */ + NETIF_F_HW_CSUM_BIT, /* Can checksum all the packets. */ + NETIF_F_IPV6_CSUM_BIT, /* Can checksum TCP/UDP over IPV6 */ + NETIF_F_HIGHDMA_BIT, /* Can DMA to high memory. */ + NETIF_F_FRAGLIST_BIT, /* Scatter/gather IO. */ + NETIF_F_HW_VLAN_TX_BIT, /* Transmit VLAN hw acceleration */ + NETIF_F_HW_VLAN_RX_BIT, /* Receive VLAN hw acceleration */ + NETIF_F_HW_VLAN_FILTER_BIT, /* Receive filtering on VLAN */ + NETIF_F_VLAN_CHALLENGED_BIT, /* Device cannot handle VLAN packets */ + NETIF_F_GSO_BIT, /* Enable software GSO. */ + NETIF_F_LLTX_BIT, /* LockLess TX - deprecated. Please */ + /* do not use LLTX in new drivers */ + NETIF_F_NETNS_LOCAL_BIT, /* Does not change network namespaces */ + NETIF_F_GRO_BIT, /* Generic receive offload */ + NETIF_F_LRO_BIT, /* large receive offload */ + /* the GSO_MASK reserves bits 16 through 23 */ + RESERVED1_BIT, + RESERVED2_BIT, + RESERVED3_BIT, + RESERVED4_BIT, + RESERVED5_BIT, + RESERVED6_BIT, + RESERVED7_BIT, + RESERVED8_BIT, + NETIF_F_FCOE_CRC_BIT, /* FCoE CRC32 */ + NETIF_F_SCTP_CSUM_BIT, /* SCTP checksum offload */ + NETIF_F_FCOE_MTU_BIT, /* Supports max FCoE MTU, 2158 bytes*/ + NETIF_F_NTUPLE_BIT, /* N-tuple filters supported */ + NETIF_F_RXHASH_BIT, /* Receive hashing offload */ + NETIF_F_RXCSUM_BIT, /* Receive checksumming offload */ + NETIF_F_NOCACHE_COPY_BIT, /* Use no-cache copyfromuser */ + NETIF_F_NUM_BITS, /* (LAST VALUE) Total bits in use */ +}; + /* * The DEVICE structure. * Actually, this whole structure is a big mistake. It mixes I/O @@ -1029,44 +1066,51 @@ struct net_device { struct list_head napi_list; struct list_head unreg_list; +#define DEV_FEATURE_WORDS BITS_TO_LONGS(NETIF_F_NUM_BITS) +#define DEV_FEATURE_BITS (DEV_FEATURE_WORDS*BITS_PER_LONG) +#define LEGACY_FEATURE_WORD 0 + /* currently active device features */ - u32 features; + unsigned long features; /* user-changeable features */ - u32 hw_features; + DECLARE_BITMAP(hw_feature, DEV_FEATURE_BITS); /* user-requested features */ - u32 wanted_features; + DECLARE_BITMAP(wanted_feature, DEV_FEATURE_BITS); /* VLAN feature mask */ - u32 vlan_features; + unsigned long vlan_features; + +#define legacy_features features +#define legacy_hw_features hw_feature[LEGACY_FEATURE_WORD] +#define legacy_wanted_features wanted_feature[LEGACY_FEATURE_WORD] +#define legacy_vlan_features vlan_features /* Net device feature bits; if you change something, * also update netdev_features_strings[] in ethtool.c */ -#define NETIF_F_SG 1 /* Scatter/gather IO. */ -#define NETIF_F_IP_CSUM 2 /* Can checksum TCP/UDP over IPv4. */ -#define NETIF_F_NO_CSUM 4 /* Does not require checksum. F.e. loopack. */ -#define NETIF_F_HW_CSUM 8 /* Can checksum all the packets. */ -#define NETIF_F_IPV6_CSUM 16 /* Can checksum TCP/UDP over IPV6 */ -#define NETIF_F_HIGHDMA 32 /* Can DMA to high memory. */ -#define NETIF_F_FRAGLIST 64 /* Scatter/gather IO. */ -#define NETIF_F_HW_VLAN_TX 128 /* Transmit VLAN hw acceleration */ -#define NETIF_F_HW_VLAN_RX 256 /* Receive VLAN hw acceleration */ -#define NETIF_F_HW_VLAN_FILTER 512 /* Receive filtering on VLAN */ -#define NETIF_F_VLAN_CHALLENGED 1024 /* Device cannot handle VLAN packets */ -#define NETIF_F_GSO 2048 /* Enable software GSO. */ -#define NETIF_F_LLTX 4096 /* LockLess TX - deprecated. Please */ - /* do not use LLTX in new drivers */ -#define NETIF_F_NETNS_LOCAL 8192 /* Does not change network namespaces */ -#define NETIF_F_GRO 16384 /* Generic receive offload */ -#define NETIF_F_LRO 32768 /* large receive offload */ - +#define NETIF_F_SG (1 << NETIF_F_SG_BIT) +#define NETIF_F_IP_CSUM (1 << NETIF_F_IP_CSUM_BIT) +#define NETIF_F_NO_CSUM (1 << NETIF_F_NO_CSUM_BIT) +#define NETIF_F_HW_CSUM (1 << NETIF_F_HW_CSUM_BIT) +#define NETIF_F_IPV6_CSUM (1 << NETIF_F_IPV6_CSUM_BIT) +#define NETIF_F_HIGHDMA (1 << NETIF_F_HIGHDMA_BIT) +#define NETIF_F_FRAGLIST (1 << NETIF_F_FRAGLIST_BIT) +#define NETIF_F_HW_VLAN_TX (1 << NETIF_F_HW_VLAN_TX_BIT) +#define NETIF_F_HW_VLAN_RX (1 << NETIF_F_HW_VLAN_RX_BIT) +#define NETIF_F_HW_VLAN_FILTER (1 << NETIF_F_HW_VLAN_FILTER_BIT) +#define NETIF_F_VLAN_CHALLENGED (1 << NETIF_F_VLAN_CHALLENGED_BIT) +#define NETIF_F_GSO (1 << NETIF_F_GSO_BIT) +#define NETIF_F_LLTX (1 << NETIF_F_LLTX_BIT) +#define NETIF_F_NETNS_LOCAL (1 << NETIF_F_NETNS_LOCAL_BIT) +#define NETIF_F_GRO (1 << NETIF_F_GRO_BIT) +#define NETIF_F_LRO (1 << NETIF_F_LRO_BIT) /* the GSO_MASK reserves bits 16 through 23 */ -#define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */ -#define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */ -#define NETIF_F_FCOE_MTU (1 << 26) /* Supports max FCoE MTU, 2158 bytes*/ -#define NETIF_F_NTUPLE (1 << 27) /* N-tuple filters supported */ -#define NETIF_F_RXHASH (1 << 28) /* Receive hashing offload */ -#define NETIF_F_RXCSUM (1 << 29) /* Receive checksumming offload */ -#define NETIF_F_NOCACHE_COPY (1 << 30) /* Use no-cache copyfromuser */ +#define NETIF_F_FCOE_CRC (1 << NETIF_F_FCOE_CRC_BIT) +#define NETIF_F_SCTP_CSUM (1 << NETIF_F_SCTP_CSUM_BIT) +#define NETIF_F_FCOE_MTU (1 << NETIF_F_FCOE_MTU_BIT) +#define NETIF_F_NTUPLE (1 << NETIF_F_NTUPLE_BIT) +#define NETIF_F_RXHASH (1 << NETIF_F_RXHASH_BIT) +#define NETIF_F_RXCSUM (1 << NETIF_F_RXCSUM_BIT) +#define NETIF_F_NOCACHE_COPY (1 << NETIF_F_NOCACHE_COPY_BIT) /* Segmentation offload features */ #define NETIF_F_GSO_SHIFT 16 @@ -2376,13 +2420,13 @@ static inline void netif_tx_unlock_bh(struct net_device *dev) } #define HARD_TX_LOCK(dev, txq, cpu) { \ - if ((dev->features & NETIF_F_LLTX) == 0) { \ + if ((dev->legacy_features & NETIF_F_LLTX) == 0) { \ __netif_tx_lock(txq, cpu); \ } \ } #define HARD_TX_UNLOCK(dev, txq) { \ - if ((dev->features & NETIF_F_LLTX) == 0) { \ + if ((dev->legacy_features & NETIF_F_LLTX) == 0) { \ __netif_tx_unlock(txq); \ } \ } @@ -2547,7 +2591,8 @@ extern void linkwatch_run_queue(void); static inline u32 netdev_get_wanted_features(struct net_device *dev) { - return (dev->features & ~dev->hw_features) | dev->wanted_features; + return (dev->legacy_features & ~dev->legacy_hw_features) | + dev->legacy_wanted_features; } u32 netdev_increment_features(u32 all, u32 one, u32 mask); u32 netdev_fix_features(struct net_device *dev, u32 features); @@ -2600,7 +2645,7 @@ static inline int dev_ethtool_get_settings(struct net_device *dev, static inline u32 dev_ethtool_get_rx_csum(struct net_device *dev) { - if (dev->features & NETIF_F_RXCSUM) + if (dev->legacy_features & NETIF_F_RXCSUM) return 1; if (!dev->ethtool_ops || !dev->ethtool_ops->get_rx_csum) return 0; diff --git a/net/core/dev.c b/net/core/dev.c index 5d0b4f6..8cad38d 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1315,7 +1315,7 @@ void dev_disable_lro(struct net_device *dev) return; __ethtool_set_flags(dev, flags & ~ETH_FLAG_LRO); - WARN_ON(dev->features & NETIF_F_LRO); + WARN_ON(dev->legacy_features & NETIF_F_LRO); } EXPORT_SYMBOL(dev_disable_lro); @@ -1871,7 +1871,7 @@ struct sk_buff *skb_gso_segment(struct sk_buff *skb, u32 features) dev->ethtool_ops->get_drvinfo(dev, &info); WARN(1, "%s: caps=(0x%lx, 0x%lx) len=%d data_len=%d ip_summed=%d\n", - info.driver, dev ? dev->features : 0L, + info.driver, dev ? dev->legacy_features : 0L, skb->sk ? skb->sk->sk_route_caps : 0L, skb->len, skb->data_len, skb->ip_summed); @@ -1926,7 +1926,7 @@ static int illegal_highdma(struct net_device *dev, struct sk_buff *skb) { #ifdef CONFIG_HIGHMEM int i; - if (!(dev->features & NETIF_F_HIGHDMA)) { + if (!(dev->legacy_features & NETIF_F_HIGHDMA)) { for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) if (PageHighMem(skb_shinfo(skb)->frags[i].page)) return 1; @@ -2043,7 +2043,7 @@ static u32 harmonize_features(struct sk_buff *skb, __be16 protocol, u32 features u32 netif_skb_features(struct sk_buff *skb) { __be16 protocol = skb->protocol; - u32 features = skb->dev->features; + u32 features = skb->dev->legacy_features; if (protocol == htons(ETH_P_8021Q)) { struct vlan_ethhdr *veh = (struct vlan_ethhdr *)skb->data; @@ -2052,7 +2052,7 @@ u32 netif_skb_features(struct sk_buff *skb) return harmonize_features(skb, protocol, features); } - features &= (skb->dev->vlan_features | NETIF_F_HW_VLAN_TX); + features &= (skb->dev->legacy_vlan_features | NETIF_F_HW_VLAN_TX); if (protocol != htons(ETH_P_8021Q)) { return harmonize_features(skb, protocol, features); @@ -2589,7 +2589,7 @@ set_rps_cpu(struct net_device *dev, struct sk_buff *skb, /* Should we steer this flow to a different hardware queue? */ if (!skb_rx_queue_recorded(skb) || !dev->rx_cpu_rmap || - !(dev->features & NETIF_F_NTUPLE)) + !(dev->legacy_features & NETIF_F_NTUPLE)) goto out; rxq_index = cpu_rmap_lookup_index(dev->rx_cpu_rmap, next_cpu); if (rxq_index == skb_get_rx_queue(skb)) @@ -3350,7 +3350,7 @@ enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb) int mac_len; enum gro_result ret; - if (!(skb->dev->features & NETIF_F_GRO) || netpoll_rx_on(skb)) + if (!(skb->dev->legacy_features & NETIF_F_GRO) || netpoll_rx_on(skb)) goto normal; if (skb_is_gso(skb) || skb_has_frag_list(skb)) @@ -5249,11 +5249,11 @@ int __netdev_update_features(struct net_device *dev) /* driver might be less strict about feature dependencies */ features = netdev_fix_features(dev, features); - if (dev->features == features) + if (dev->legacy_features == features) return 0; netdev_info(dev, "Features changed: 0x%08x -> 0x%08x\n", - dev->features, features); + dev->legacy_features, features); if (dev->netdev_ops->ndo_set_features) err = dev->netdev_ops->ndo_set_features(dev, features); @@ -5261,12 +5261,12 @@ int __netdev_update_features(struct net_device *dev) if (unlikely(err < 0)) { netdev_err(dev, "set_features() failed (%d); wanted 0x%08x, left 0x%08x\n", - err, features, dev->features); + err, features, dev->legacy_features); return -1; } if (!err) - dev->features = features; + dev->legacy_features = features; return 1; } @@ -5415,29 +5415,30 @@ int register_netdevice(struct net_device *dev) /* Transfer changeable features to wanted_features and enable * software offloads (GSO and GRO). */ - dev->hw_features |= NETIF_F_SOFT_FEATURES; - dev->features |= NETIF_F_SOFT_FEATURES; - dev->wanted_features = dev->features & dev->hw_features; + dev->legacy_hw_features |= NETIF_F_SOFT_FEATURES; + dev->legacy_features |= NETIF_F_SOFT_FEATURES; + dev->legacy_wanted_features = + dev->legacy_features & dev->legacy_hw_features; /* Avoid warning from netdev_fix_features() for GSO without SG */ - if (!(dev->wanted_features & NETIF_F_SG)) { - dev->wanted_features &= ~NETIF_F_GSO; - dev->features &= ~NETIF_F_GSO; + if (!(dev->legacy_wanted_features & NETIF_F_SG)) { + dev->legacy_wanted_features &= ~NETIF_F_GSO; + dev->legacy_features &= ~NETIF_F_GSO; } /* Turn on no cache copy if HW is doing checksum */ - dev->hw_features |= NETIF_F_NOCACHE_COPY; - if ((dev->features & NETIF_F_ALL_CSUM) && - !(dev->features & NETIF_F_NO_CSUM)) { - dev->wanted_features |= NETIF_F_NOCACHE_COPY; - dev->features |= NETIF_F_NOCACHE_COPY; + dev->legacy_hw_features |= NETIF_F_NOCACHE_COPY; + if ((dev->legacy_features & NETIF_F_ALL_CSUM) && + !(dev->legacy_features & NETIF_F_NO_CSUM)) { + dev->legacy_wanted_features |= NETIF_F_NOCACHE_COPY; + dev->legacy_features |= NETIF_F_NOCACHE_COPY; } /* Enable GRO and NETIF_F_HIGHDMA for vlans by default, * vlan_dev_init() will do the dev->features check, so these features * are enabled only if supported by underlying device. */ - dev->vlan_features |= (NETIF_F_GRO | NETIF_F_HIGHDMA); + dev->legacy_vlan_features |= (NETIF_F_GRO | NETIF_F_HIGHDMA); ret = call_netdevice_notifiers(NETDEV_POST_INIT, dev); ret = notifier_to_errno(ret); @@ -6019,7 +6020,7 @@ int dev_change_net_namespace(struct net_device *dev, struct net *net, const char /* Don't allow namespace local devices to be moved. */ err = -EINVAL; - if (dev->features & NETIF_F_NETNS_LOCAL) + if (dev->legacy_features & NETIF_F_NETNS_LOCAL) goto out; /* Ensure the device has been registrered */ @@ -6352,7 +6353,7 @@ static void __net_exit default_device_exit(struct net *net) char fb_name[IFNAMSIZ]; /* Ignore unmoveable devices (i.e. loopback) */ - if (dev->features & NETIF_F_NETNS_LOCAL) + if (dev->legacy_features & NETIF_F_NETNS_LOCAL) continue; /* Leave virtual devices for the generic cleanup */ diff --git a/net/core/ethtool.c b/net/core/ethtool.c index 719670a..fd03c53 100644 --- a/net/core/ethtool.c +++ b/net/core/ethtool.c @@ -36,16 +36,16 @@ EXPORT_SYMBOL(ethtool_op_get_link); u32 ethtool_op_get_tx_csum(struct net_device *dev) { - return (dev->features & NETIF_F_ALL_CSUM) != 0; + return (dev->legacy_features & NETIF_F_ALL_CSUM) != 0; } EXPORT_SYMBOL(ethtool_op_get_tx_csum); int ethtool_op_set_tx_csum(struct net_device *dev, u32 data) { if (data) - dev->features |= NETIF_F_IP_CSUM; + dev->legacy_features |= NETIF_F_IP_CSUM; else - dev->features &= ~NETIF_F_IP_CSUM; + dev->legacy_features &= ~NETIF_F_IP_CSUM; return 0; } @@ -54,9 +54,9 @@ EXPORT_SYMBOL(ethtool_op_set_tx_csum); int ethtool_op_set_tx_hw_csum(struct net_device *dev, u32 data) { if (data) - dev->features |= NETIF_F_HW_CSUM; + dev->legacy_features |= NETIF_F_HW_CSUM; else - dev->features &= ~NETIF_F_HW_CSUM; + dev->legacy_features &= ~NETIF_F_HW_CSUM; return 0; } @@ -65,9 +65,9 @@ EXPORT_SYMBOL(ethtool_op_set_tx_hw_csum); int ethtool_op_set_tx_ipv6_csum(struct net_device *dev, u32 data) { if (data) - dev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; + dev->legacy_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; else - dev->features &= ~(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM); + dev->legacy_features &= ~(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM); return 0; } @@ -75,16 +75,16 @@ EXPORT_SYMBOL(ethtool_op_set_tx_ipv6_csum); u32 ethtool_op_get_sg(struct net_device *dev) { - return (dev->features & NETIF_F_SG) != 0; + return (dev->legacy_features & NETIF_F_SG) != 0; } EXPORT_SYMBOL(ethtool_op_get_sg); int ethtool_op_set_sg(struct net_device *dev, u32 data) { if (data) - dev->features |= NETIF_F_SG; + dev->legacy_features |= NETIF_F_SG; else - dev->features &= ~NETIF_F_SG; + dev->legacy_features &= ~NETIF_F_SG; return 0; } @@ -92,16 +92,16 @@ EXPORT_SYMBOL(ethtool_op_set_sg); u32 ethtool_op_get_tso(struct net_device *dev) { - return (dev->features & NETIF_F_TSO) != 0; + return (dev->legacy_features & NETIF_F_TSO) != 0; } EXPORT_SYMBOL(ethtool_op_get_tso); int ethtool_op_set_tso(struct net_device *dev, u32 data) { if (data) - dev->features |= NETIF_F_TSO; + dev->legacy_features |= NETIF_F_TSO; else - dev->features &= ~NETIF_F_TSO; + dev->legacy_features &= ~NETIF_F_TSO; return 0; } @@ -109,16 +109,16 @@ EXPORT_SYMBOL(ethtool_op_set_tso); u32 ethtool_op_get_ufo(struct net_device *dev) { - return (dev->features & NETIF_F_UFO) != 0; + return (dev->legacy_features & NETIF_F_UFO) != 0; } EXPORT_SYMBOL(ethtool_op_get_ufo); int ethtool_op_set_ufo(struct net_device *dev, u32 data) { if (data) - dev->features |= NETIF_F_UFO; + dev->legacy_features |= NETIF_F_UFO; else - dev->features &= ~NETIF_F_UFO; + dev->legacy_features &= ~NETIF_F_UFO; return 0; } EXPORT_SYMBOL(ethtool_op_set_ufo); @@ -137,7 +137,7 @@ u32 ethtool_op_get_flags(struct net_device *dev) * by a simple masking operation */ - return dev->features & flags_dup_features; + return dev->legacy_features & flags_dup_features; } EXPORT_SYMBOL(ethtool_op_get_flags); @@ -148,7 +148,7 @@ EXPORT_SYMBOL(ethtool_op_get_flags); */ bool ethtool_invalid_flags(struct net_device *dev, u32 data, u32 supported) { - u32 features = dev->features & flags_dup_features; + u32 features = dev->legacy_features & flags_dup_features; /* "data" can contain only flags_dup_features bits, * see __ethtool_set_flags */ @@ -161,7 +161,7 @@ int ethtool_op_set_flags(struct net_device *dev, u32 data, u32 supported) if (ethtool_invalid_flags(dev, data, supported)) return -EINVAL; - dev->features = ((dev->features & ~flags_dup_features) | + dev->legacy_features = ((dev->legacy_features & ~flags_dup_features) | (data & flags_dup_features)); return 0; } @@ -261,9 +261,9 @@ static int ethtool_get_features(struct net_device *dev, void __user *useraddr) }; struct ethtool_get_features_block features[ETHTOOL_DEV_FEATURE_WORDS] = { { - .available = dev->hw_features, - .requested = dev->wanted_features, - .active = dev->features, + .available = dev->legacy_hw_features, + .requested = dev->legacy_wanted_features, + .active = dev->legacy_features, .never_changed = NETIF_F_NEVER_CHANGE, }, }; @@ -310,16 +310,17 @@ static int ethtool_set_features(struct net_device *dev, void __user *useraddr) if (ethtool_set_features_compat(dev, features)) ret |= ETHTOOL_F_COMPAT; - if (features[0].valid & ~dev->hw_features) { - features[0].valid &= dev->hw_features; + if (features[0].valid & ~dev->legacy_hw_features) { + features[0].valid &= dev->legacy_hw_features; ret |= ETHTOOL_F_UNSUPPORTED; } - dev->wanted_features &= ~features[0].valid; - dev->wanted_features |= features[0].valid & features[0].requested; + dev->legacy_wanted_features &= ~features[0].valid; + dev->legacy_wanted_features |= features[0].valid & features[0].requested; __netdev_update_features(dev); - if ((dev->wanted_features ^ dev->features) & features[0].valid) + if ((dev->legacy_wanted_features ^ dev->legacy_features) + & features[0].valid) ret |= ETHTOOL_F_WISH; return ret; @@ -445,7 +446,7 @@ static void *__ethtool_get_one_feature_actor(struct net_device *dev, u32 ethcmd) static u32 __ethtool_get_rx_csum_oldbug(struct net_device *dev) { - return !!(dev->features & NETIF_F_ALL_CSUM); + return !!(dev->legacy_features & NETIF_F_ALL_CSUM); } static int ethtool_get_one_feature(struct net_device *dev, @@ -454,11 +455,11 @@ static int ethtool_get_one_feature(struct net_device *dev, u32 mask = ethtool_get_feature_mask(ethcmd); struct ethtool_value edata = { .cmd = ethcmd, - .data = !!(dev->features & mask), + .data = !!(dev->legacy_features & mask), }; /* compatibility with discrete get_ ops */ - if (!(dev->hw_features & mask)) { + if (!(dev->legacy_hw_features & mask)) { u32 (*actor)(struct net_device *); actor = __ethtool_get_one_feature_actor(dev, ethcmd); @@ -492,12 +493,12 @@ static int ethtool_set_one_feature(struct net_device *dev, return -EFAULT; mask = ethtool_get_feature_mask(ethcmd); - mask &= dev->hw_features; + mask &= dev->legacy_hw_features; if (mask) { if (edata.data) - dev->wanted_features |= mask; + dev->legacy_wanted_features |= mask; else - dev->wanted_features &= ~mask; + dev->legacy_wanted_features &= ~mask; __netdev_update_features(dev); return 0; @@ -537,19 +538,19 @@ int __ethtool_set_flags(struct net_device *dev, u32 data) /* legacy set_flags() op */ if (dev->ethtool_ops->set_flags) { - if (unlikely(dev->hw_features & flags_dup_features)) + if (unlikely(dev->legacy_hw_features & flags_dup_features)) netdev_warn(dev, "driver BUG: mixed hw_features and set_flags()\n"); return dev->ethtool_ops->set_flags(dev, data); } /* allow changing only bits set in hw_features */ - changed = (data ^ dev->wanted_features) & flags_dup_features; - if (changed & ~dev->hw_features) - return (changed & dev->hw_features) ? -EINVAL : -EOPNOTSUPP; + changed = (data ^ dev->legacy_wanted_features) & flags_dup_features; + if (changed & ~dev->legacy_hw_features) + return (changed & dev->legacy_hw_features) ? -EINVAL : -EOPNOTSUPP; - dev->wanted_features = - (dev->wanted_features & ~changed) | data; + dev->legacy_wanted_features = + (dev->legacy_wanted_features & ~changed) | data; __netdev_update_features(dev); @@ -908,7 +909,7 @@ static noinline_for_stack int ethtool_set_rx_ntuple(struct net_device *dev, struct ethtool_rx_ntuple_flow_spec_container *fsc = NULL; int ret; - if (!(dev->features & NETIF_F_NTUPLE)) + if (!(dev->legacy_features & NETIF_F_NTUPLE)) return -EINVAL; if (copy_from_user(&cmd, useraddr, sizeof(cmd))) @@ -1475,7 +1476,7 @@ static int __ethtool_set_sg(struct net_device *dev, u32 data) if (!dev->ethtool_ops->set_sg) return -EOPNOTSUPP; - if (data && !(dev->features & NETIF_F_ALL_CSUM)) + if (data && !(dev->legacy_features & NETIF_F_ALL_CSUM)) return -EINVAL; if (!data && dev->ethtool_ops->set_tso) { @@ -1514,7 +1515,7 @@ static int __ethtool_set_rx_csum(struct net_device *dev, u32 data) return -EOPNOTSUPP; if (!data) - dev->features &= ~NETIF_F_GRO; + dev->legacy_features &= ~NETIF_F_GRO; return dev->ethtool_ops->set_rx_csum(dev, data); } @@ -1524,7 +1525,7 @@ static int __ethtool_set_tso(struct net_device *dev, u32 data) if (!dev->ethtool_ops->set_tso) return -EOPNOTSUPP; - if (data && !(dev->features & NETIF_F_SG)) + if (data && !(dev->legacy_features & NETIF_F_SG)) return -EINVAL; return dev->ethtool_ops->set_tso(dev, data); @@ -1534,10 +1535,10 @@ static int __ethtool_set_ufo(struct net_device *dev, u32 data) { if (!dev->ethtool_ops->set_ufo) return -EOPNOTSUPP; - if (data && !(dev->features & NETIF_F_SG)) + if (data && !(dev->legacy_features & NETIF_F_SG)) return -EINVAL; - if (data && !((dev->features & NETIF_F_GEN_CSUM) || - (dev->features & (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM)) + if (data && !((dev->legacy_features & NETIF_F_GEN_CSUM) || + (dev->legacy_features & (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM)) == (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) return -EINVAL; return dev->ethtool_ops->set_ufo(dev, data); @@ -1805,7 +1806,7 @@ int dev_ethtool(struct net *net, struct ifreq *ifr) if (rc < 0) return rc; } - old_features = dev->features; + old_features = dev->legacy_features; switch (ethcmd) { case ETHTOOL_GSET: @@ -1960,7 +1961,7 @@ int dev_ethtool(struct net *net, struct ifreq *ifr) if (dev->ethtool_ops->complete) dev->ethtool_ops->complete(dev); - if (old_features != dev->features) + if (old_features != dev->legacy_features) netdev_features_change(dev); return rc; diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index 5ceb257..088a2d4 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -99,7 +99,7 @@ NETDEVICE_SHOW(addr_assign_type, fmt_dec); NETDEVICE_SHOW(addr_len, fmt_dec); NETDEVICE_SHOW(iflink, fmt_dec); NETDEVICE_SHOW(ifindex, fmt_dec); -NETDEVICE_SHOW(features, fmt_hex); +NETDEVICE_SHOW(legacy_features, fmt_hex); NETDEVICE_SHOW(type, fmt_dec); NETDEVICE_SHOW(link_mode, fmt_dec); @@ -316,7 +316,7 @@ static struct device_attribute net_class_attributes[] = { __ATTR(ifalias, S_IRUGO | S_IWUSR, show_ifalias, store_ifalias), __ATTR(iflink, S_IRUGO, show_iflink, NULL), __ATTR(ifindex, S_IRUGO, show_ifindex, NULL), - __ATTR(features, S_IRUGO, show_features, NULL), + __ATTR(legacy_features, S_IRUGO, show_legacy_features, NULL), __ATTR(type, S_IRUGO, show_type, NULL), __ATTR(link_mode, S_IRUGO, show_link_mode, NULL), __ATTR(address, S_IRUGO, show_address, NULL), diff --git a/net/core/sock.c b/net/core/sock.c index 7dfed79..4f067df 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -1301,7 +1301,7 @@ EXPORT_SYMBOL_GPL(sk_clone); void sk_setup_caps(struct sock *sk, struct dst_entry *dst) { __sk_dst_set(sk, dst); - sk->sk_route_caps = dst->dev->features; + sk->sk_route_caps = dst->dev->legacy_features; if (sk->sk_route_caps & NETIF_F_GSO) sk->sk_route_caps |= NETIF_F_GSO_SOFTWARE; sk->sk_route_caps &= ~sk->sk_route_nocaps; -- 1.7.3.1 ^ permalink raw reply related [flat|nested] 27+ messages in thread
end of thread, other threads:[~2011-04-07 15:00 UTC | newest] Thread overview: 27+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-04-06 0:44 [PATCH 00/20] extending (hw_/wanted_/vlan_)features fields to a bitmap Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 01/20] net-core: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 02/20] net-ipv4: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 03/20] net-ipv6: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 04/20] net-vlan: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 05/20] net-bridge: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 06/20] net-decnet: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 07/20] net-dsa: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 08/20] net-l2tp: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 09/20] net-phonet: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 10/20] net-sctp: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 11/20] net-wireless: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 12/20] loopback: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 13/20] veth: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 14/20] jme: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 15/20] sungem: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 16/20] sunhme: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 17/20] usb-smsc75xx: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 18/20] usb-smsc95xx: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 19/20] virtio_net: " Mahesh Bandewar 2011-04-06 0:44 ` [PATCH 20/20] xen: " Mahesh Bandewar 2011-04-06 1:27 ` [PATCH 01/20] net-core: " Ben Hutchings 2011-04-06 1:35 ` Mahesh Bandewar 2011-04-06 1:45 ` Ben Hutchings 2011-04-06 10:29 ` Michał Mirosław 2011-04-06 17:34 ` Mahesh Bandewar 2011-04-07 15:00 ` [PATCHv2 " Mahesh Bandewar
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).