net: introduce and use netdev_features_t for device features sets
v2: add couple missing conversions in drivers split unexporting netdev_fix_features() implemented %pNF convert sock::sk_route_(no?)caps Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
a59e2ecb85
commit
c8f44affb7
@@ -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;
|
||||
|
Reference in New Issue
Block a user