diff options
author | Jeff Layton <jlayton@primarydata.com> | 2014-07-16 06:55:46 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-07-17 02:31:38 -0400 |
commit | 1373a7739e886cda3ed4848293dc9c46bc5d0d6a (patch) | |
tree | c9e8912f840fac1073339f670f039743d9717616 | |
parent | e18a44590a363b6785f12f87167d46be4421ed5b (diff) |
net: clean up some sparse endianness warnings in ipv6.h
sparse is throwing warnings when building sunrpc modules due to some
endianness shenanigans in ipv6.h. Specifically:
CHECK net/sunrpc/addr.c
include/net/ipv6.h:573:17: warning: restricted __be64 degrades to integer
include/net/ipv6.h:577:34: warning: restricted __be32 degrades to integer
include/net/ipv6.h:573:17: warning: restricted __be64 degrades to integer
include/net/ipv6.h:577:34: warning: restricted __be32 degrades to integer
Sprinkle some endianness fixups to silence them. These should all get
fixed up at compile time, so I don't think this will add any extra work
to be done at runtime.
Signed-off-by: Jeff Layton <jlayton@primarydata.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | include/net/ipv6.h | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index b9ac2357e7db..a25017247457 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h | |||
@@ -558,24 +558,29 @@ static inline u32 __ipv6_addr_jhash(const struct in6_addr *a, const u32 initval) | |||
558 | static inline bool ipv6_addr_loopback(const struct in6_addr *a) | 558 | static inline bool ipv6_addr_loopback(const struct in6_addr *a) |
559 | { | 559 | { |
560 | #if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) && BITS_PER_LONG == 64 | 560 | #if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) && BITS_PER_LONG == 64 |
561 | const unsigned long *ul = (const unsigned long *)a; | 561 | const __be64 *be = (const __be64 *)a; |
562 | 562 | ||
563 | return (ul[0] | (ul[1] ^ cpu_to_be64(1))) == 0UL; | 563 | return (be[0] | (be[1] ^ cpu_to_be64(1))) == 0UL; |
564 | #else | 564 | #else |
565 | return (a->s6_addr32[0] | a->s6_addr32[1] | | 565 | return (a->s6_addr32[0] | a->s6_addr32[1] | |
566 | a->s6_addr32[2] | (a->s6_addr32[3] ^ htonl(1))) == 0; | 566 | a->s6_addr32[2] | (a->s6_addr32[3] ^ cpu_to_be32(1))) == 0; |
567 | #endif | 567 | #endif |
568 | } | 568 | } |
569 | 569 | ||
570 | /* | ||
571 | * Note that we must __force cast these to unsigned long to make sparse happy, | ||
572 | * since all of the endian-annotated types are fixed size regardless of arch. | ||
573 | */ | ||
570 | static inline bool ipv6_addr_v4mapped(const struct in6_addr *a) | 574 | static inline bool ipv6_addr_v4mapped(const struct in6_addr *a) |
571 | { | 575 | { |
572 | return ( | 576 | return ( |
573 | #if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) && BITS_PER_LONG == 64 | 577 | #if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) && BITS_PER_LONG == 64 |
574 | *(__be64 *)a | | 578 | *(unsigned long *)a | |
575 | #else | 579 | #else |
576 | (a->s6_addr32[0] | a->s6_addr32[1]) | | 580 | (__force unsigned long)(a->s6_addr32[0] | a->s6_addr32[1]) | |
577 | #endif | 581 | #endif |
578 | (a->s6_addr32[2] ^ htonl(0x0000ffff))) == 0UL; | 582 | (__force unsigned long)(a->s6_addr32[2] ^ |
583 | cpu_to_be32(0x0000ffff))) == 0UL; | ||
579 | } | 584 | } |
580 | 585 | ||
581 | /* | 586 | /* |