|
@@ -1914,7 +1914,8 @@ EXPORT_SYMBOL(skb_checksum_help);
|
|
|
* It may return NULL if the skb requires no segmentation. This is
|
|
|
* only possible when GSO is used for verifying header integrity.
|
|
|
*/
|
|
|
-struct sk_buff *skb_gso_segment(struct sk_buff *skb, u32 features)
|
|
|
+struct sk_buff *skb_gso_segment(struct sk_buff *skb,
|
|
|
+ netdev_features_t features)
|
|
|
{
|
|
|
struct sk_buff *segs = ERR_PTR(-EPROTONOSUPPORT);
|
|
|
struct packet_type *ptype;
|
|
@@ -1944,9 +1945,9 @@ struct sk_buff *skb_gso_segment(struct sk_buff *skb, u32 features)
|
|
|
if (dev && dev->ethtool_ops && dev->ethtool_ops->get_drvinfo)
|
|
|
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,
|
|
|
- skb->sk ? skb->sk->sk_route_caps : 0L,
|
|
|
+ WARN(1, "%s: caps=(%pNF, %pNF) len=%d data_len=%d ip_summed=%d\n",
|
|
|
+ info.driver, dev ? &dev->features : NULL,
|
|
|
+ skb->sk ? &skb->sk->sk_route_caps : NULL,
|
|
|
skb->len, skb->data_len, skb->ip_summed);
|
|
|
|
|
|
if (skb_header_cloned(skb) &&
|
|
@@ -2055,7 +2056,7 @@ static void dev_gso_skb_destructor(struct sk_buff *skb)
|
|
|
* This function segments the given skb and stores the list of segments
|
|
|
* in skb->next.
|
|
|
*/
|
|
|
-static int dev_gso_segment(struct sk_buff *skb, int features)
|
|
|
+static int dev_gso_segment(struct sk_buff *skb, netdev_features_t features)
|
|
|
{
|
|
|
struct sk_buff *segs;
|
|
|
|
|
@@ -2094,7 +2095,7 @@ static inline void skb_orphan_try(struct sk_buff *skb)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static bool can_checksum_protocol(unsigned long features, __be16 protocol)
|
|
|
+static bool can_checksum_protocol(netdev_features_t features, __be16 protocol)
|
|
|
{
|
|
|
return ((features & NETIF_F_GEN_CSUM) ||
|
|
|
((features & NETIF_F_V4_CSUM) &&
|
|
@@ -2105,7 +2106,8 @@ static bool can_checksum_protocol(unsigned long features, __be16 protocol)
|
|
|
protocol == htons(ETH_P_FCOE)));
|
|
|
}
|
|
|
|
|
|
-static u32 harmonize_features(struct sk_buff *skb, __be16 protocol, u32 features)
|
|
|
+static netdev_features_t harmonize_features(struct sk_buff *skb,
|
|
|
+ __be16 protocol, netdev_features_t features)
|
|
|
{
|
|
|
if (!can_checksum_protocol(features, protocol)) {
|
|
|
features &= ~NETIF_F_ALL_CSUM;
|
|
@@ -2117,10 +2119,10 @@ static u32 harmonize_features(struct sk_buff *skb, __be16 protocol, u32 features
|
|
|
return features;
|
|
|
}
|
|
|
|
|
|
-u32 netif_skb_features(struct sk_buff *skb)
|
|
|
+netdev_features_t netif_skb_features(struct sk_buff *skb)
|
|
|
{
|
|
|
__be16 protocol = skb->protocol;
|
|
|
- u32 features = skb->dev->features;
|
|
|
+ netdev_features_t features = skb->dev->features;
|
|
|
|
|
|
if (protocol == htons(ETH_P_8021Q)) {
|
|
|
struct vlan_ethhdr *veh = (struct vlan_ethhdr *)skb->data;
|
|
@@ -2166,7 +2168,7 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
|
|
|
unsigned int skb_len;
|
|
|
|
|
|
if (likely(!skb->next)) {
|
|
|
- u32 features;
|
|
|
+ netdev_features_t features;
|
|
|
|
|
|
/*
|
|
|
* If device doesn't need skb->dst, release it right now while
|
|
@@ -5350,7 +5352,8 @@ static void rollback_registered(struct net_device *dev)
|
|
|
list_del(&single);
|
|
|
}
|
|
|
|
|
|
-static u32 netdev_fix_features(struct net_device *dev, u32 features)
|
|
|
+static netdev_features_t netdev_fix_features(struct net_device *dev,
|
|
|
+ netdev_features_t features)
|
|
|
{
|
|
|
/* Fix illegal checksum combinations */
|
|
|
if ((features & NETIF_F_HW_CSUM) &&
|
|
@@ -5412,7 +5415,7 @@ static u32 netdev_fix_features(struct net_device *dev, u32 features)
|
|
|
|
|
|
int __netdev_update_features(struct net_device *dev)
|
|
|
{
|
|
|
- u32 features;
|
|
|
+ netdev_features_t features;
|
|
|
int err = 0;
|
|
|
|
|
|
ASSERT_RTNL();
|
|
@@ -5428,16 +5431,16 @@ int __netdev_update_features(struct net_device *dev)
|
|
|
if (dev->features == features)
|
|
|
return 0;
|
|
|
|
|
|
- netdev_dbg(dev, "Features changed: 0x%08x -> 0x%08x\n",
|
|
|
- dev->features, features);
|
|
|
+ netdev_dbg(dev, "Features changed: %pNF -> %pNF\n",
|
|
|
+ &dev->features, &features);
|
|
|
|
|
|
if (dev->netdev_ops->ndo_set_features)
|
|
|
err = dev->netdev_ops->ndo_set_features(dev, features);
|
|
|
|
|
|
if (unlikely(err < 0)) {
|
|
|
netdev_err(dev,
|
|
|
- "set_features() failed (%d); wanted 0x%08x, left 0x%08x\n",
|
|
|
- err, features, dev->features);
|
|
|
+ "set_features() failed (%d); wanted %pNF, left %pNF\n",
|
|
|
+ err, &features, &dev->features);
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
@@ -6361,7 +6364,8 @@ static int dev_cpu_callback(struct notifier_block *nfb,
|
|
|
* @one to the master device with current feature set @all. Will not
|
|
|
* enable anything that is off in @mask. Returns the new feature set.
|
|
|
*/
|
|
|
-u32 netdev_increment_features(u32 all, u32 one, u32 mask)
|
|
|
+netdev_features_t netdev_increment_features(netdev_features_t all,
|
|
|
+ netdev_features_t one, netdev_features_t mask)
|
|
|
{
|
|
|
if (mask & NETIF_F_GEN_CSUM)
|
|
|
mask |= NETIF_F_ALL_CSUM;
|