ipv6: Optimize ipv6_addr_is_solict_mult().
Subsystems (3)
PATCH 3/5 ipv6: Optimize ipv6_addr_is_solict_mult().
Signed-off-by YOSHIFUJI Hideaki <[email protected]>
--- include/net/addrconf.h | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-)
include/net/addrconf.h +11 -4
@@ -307,10 +307,17 @@ static inline bool ipv6_addr_is_isatap(const struct in6_addr *addr)static inline bool ipv6_addr_is_solict_mult (const struct in6_addr *addr) { -return (addr->s6_addr32[0 ] ==htonl (0xff020000 ) && - addr->s6_addr32[1 ] ==htonl (0x00000000 ) && - addr->s6_addr32[2 ] ==htonl (0x00000001 ) && - addr->s6_addr[12 ] ==0xff ); +#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS ) &&BITS_PER_LONG ==64 +__u64 *p = (__u64 *)addr; +return ((p[0 ] ^cpu_to_be64 (0xff02000000000000UL )) | + ((p[1 ] ^cpu_to_be64 (0x00000001ff000000UL )) & +cpu_to_be64 (0xffffffffff000000UL ))) ==0UL ; +#else +return ((addr->s6_addr32[0 ] ^htonl (0xff020000 )) | + addr->s6_addr32[1 ] | + (addr->s6_addr32[2 ] ^htonl (0x00000001 )) | + (addr->s6_addr[12 ] ^0xff )) ==0 ; +#endif }#ifdef CONFIG_PROC_FS
Signature · 1 line
1.7.9.5