diff options
author | Alexander Duyck <alexander.h.duyck@redhat.com> | 2015-05-04 14:33:48 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-05-05 19:24:42 -0400 |
commit | 2c7a88c252bf3381958cf716f31b6b2e0f2f3fa7 (patch) | |
tree | 8c242beda53e88b084af505aaa4039f1c1f3f2e6 /net/ethernet/eth.c | |
parent | 784b58a327ad16967ab64bbfa558df81980d31e9 (diff) | |
download | linux-2c7a88c252bf3381958cf716f31b6b2e0f2f3fa7.tar.gz linux-2c7a88c252bf3381958cf716f31b6b2e0f2f3fa7.tar.bz2 linux-2c7a88c252bf3381958cf716f31b6b2e0f2f3fa7.zip |
etherdev: Fix sparse error, make test usable by other functions
This change does two things. First it fixes a sparse error for the fact
that the __be16 degrades to an integer. Since that is actually what I am
kind of doing I am simply working around that by forcing both sides of the
comparison to u16.
Also I realized on some compilers I was generating another instruction for
big endian systems such as PowerPC since it was masking the value before
doing the comparison. So to resolve that I have simply pulled the mask out
and wrapped it in an #ifndef __BIG_ENDIAN.
Lastly I pulled this all out into its own function. I notices there are
similar checks in a number of other places so this function can be reused
there to help reduce overhead in these paths as well.
Signed-off-by: Alexander Duyck <alexander.h.duyck@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ethernet/eth.c')
-rw-r--r-- | net/ethernet/eth.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c index 314e4c5a5a5e..9045e2a1108f 100644 --- a/net/ethernet/eth.c +++ b/net/ethernet/eth.c @@ -179,7 +179,7 @@ __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev) if (unlikely(netdev_uses_dsa(dev))) return htons(ETH_P_XDSA); - if (likely((eth->h_proto & htons(0xFF00)) >= htons(ETH_P_802_3_MIN))) + if (likely(eth_proto_is_802_3(eth->h_proto))) return eth->h_proto; /* |