Commit 1e940829 authored by Alexander Duyck's avatar Alexander Duyck Committed by David S. Miller

ipv6: Pass proto to csum_ipv6_magic as __u8 instead of unsigned short

This patch updates csum_ipv6_magic so that it correctly recognizes that
protocol is a unsigned 8 bit value.

This will allow us to better understand what limitations may or may not be
present in how we handle the data.  For example there are a number of
places that call htonl on the protocol value.  This is likely not necessary
and can be replaced with a multiplication by ntohl(1) which will be
converted to a shift by the compiler.
Signed-off-by: default avatarAlexander Duyck <aduyck@mirantis.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 01cfbad7
...@@ -67,6 +67,5 @@ static inline __sum16 csum_fold(__wsum csum) ...@@ -67,6 +67,5 @@ static inline __sum16 csum_fold(__wsum csum)
#define _HAVE_ARCH_IPV6_CSUM #define _HAVE_ARCH_IPV6_CSUM
extern __sum16 csum_ipv6_magic(const struct in6_addr *saddr, extern __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
const struct in6_addr *daddr, const struct in6_addr *daddr,
__u32 len, unsigned short proto, __u32 len, __u8 proto, __wsum sum);
__wsum sum);
#endif #endif
...@@ -144,8 +144,8 @@ __csum_ipv6_magic(const struct in6_addr *saddr, const struct in6_addr *daddr, __ ...@@ -144,8 +144,8 @@ __csum_ipv6_magic(const struct in6_addr *saddr, const struct in6_addr *daddr, __
__be32 proto, __wsum sum); __be32 proto, __wsum sum);
static inline __sum16 static inline __sum16
csum_ipv6_magic(const struct in6_addr *saddr, const struct in6_addr *daddr, __u32 len, csum_ipv6_magic(const struct in6_addr *saddr, const struct in6_addr *daddr,
unsigned short proto, __wsum sum) __u32 len, __u8 proto, __wsum sum)
{ {
return csum_fold(__csum_ipv6_magic(saddr, daddr, htonl(len), return csum_fold(__csum_ipv6_magic(saddr, daddr, htonl(len),
htonl(proto), sum)); htonl(proto), sum));
......
...@@ -135,7 +135,7 @@ extern __sum16 ip_compute_csum(const void *buff, int len); ...@@ -135,7 +135,7 @@ extern __sum16 ip_compute_csum(const void *buff, int len);
#define _HAVE_ARCH_IPV6_CSUM #define _HAVE_ARCH_IPV6_CSUM
static inline __sum16 static inline __sum16
csum_ipv6_magic(const struct in6_addr *saddr, const struct in6_addr *daddr, csum_ipv6_magic(const struct in6_addr *saddr, const struct in6_addr *daddr,
__u32 len, unsigned short proto, __wsum sum) __u32 len, __u8 proto, __wsum sum)
{ {
unsigned long tmp, tmp2; unsigned long tmp, tmp2;
......
...@@ -69,7 +69,7 @@ static inline __sum16 csum_fold(__wsum csum) ...@@ -69,7 +69,7 @@ static inline __sum16 csum_fold(__wsum csum)
#define _HAVE_ARCH_IPV6_CSUM 1 #define _HAVE_ARCH_IPV6_CSUM 1
struct in6_addr; struct in6_addr;
extern __sum16 csum_ipv6_magic(const struct in6_addr *saddr, extern __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
const struct in6_addr *daddr, __u32 len, unsigned short proto, const struct in6_addr *daddr,
__wsum csum); __u32 len, __u8 proto, __wsum csum);
#endif /* _ASM_IA64_CHECKSUM_H */ #endif /* _ASM_IA64_CHECKSUM_H */
...@@ -117,7 +117,7 @@ static inline __sum16 ip_compute_csum(const void *buff, int len) ...@@ -117,7 +117,7 @@ static inline __sum16 ip_compute_csum(const void *buff, int len)
#define _HAVE_ARCH_IPV6_CSUM #define _HAVE_ARCH_IPV6_CSUM
static __inline__ __sum16 static __inline__ __sum16
csum_ipv6_magic(const struct in6_addr *saddr, const struct in6_addr *daddr, csum_ipv6_magic(const struct in6_addr *saddr, const struct in6_addr *daddr,
__u32 len, unsigned short proto, __wsum sum) __u32 len, __u8 proto, __wsum sum)
{ {
register unsigned long tmp; register unsigned long tmp;
__asm__("addl %2@,%0\n\t" __asm__("addl %2@,%0\n\t"
......
...@@ -215,7 +215,7 @@ static inline __sum16 ip_compute_csum(const void *buff, int len) ...@@ -215,7 +215,7 @@ static inline __sum16 ip_compute_csum(const void *buff, int len)
#define _HAVE_ARCH_IPV6_CSUM #define _HAVE_ARCH_IPV6_CSUM
static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr, static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
const struct in6_addr *daddr, const struct in6_addr *daddr,
__u32 len, unsigned short proto, __u32 len, __u8 proto,
__wsum sum) __wsum sum)
{ {
__wsum tmp; __wsum tmp;
......
...@@ -122,7 +122,7 @@ static inline __sum16 ip_compute_csum(const void *buf, int len) ...@@ -122,7 +122,7 @@ static inline __sum16 ip_compute_csum(const void *buf, int len)
#define _HAVE_ARCH_IPV6_CSUM #define _HAVE_ARCH_IPV6_CSUM
static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr, static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
const struct in6_addr *daddr, const struct in6_addr *daddr,
__u32 len, unsigned short proto, __u32 len, __u8 proto,
__wsum sum) __wsum sum)
{ {
__asm__ __volatile__ ( __asm__ __volatile__ (
......
...@@ -179,9 +179,8 @@ static inline unsigned short ip_compute_csum(const void *buff, int len) ...@@ -179,9 +179,8 @@ static inline unsigned short ip_compute_csum(const void *buff, int len)
#define _HAVE_ARCH_IPV6_CSUM #define _HAVE_ARCH_IPV6_CSUM
static inline __sum16 csum_ipv6_magic(const struct in6_addr *saddr, static inline __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
const struct in6_addr *daddr, const struct in6_addr *daddr,
__u32 len, unsigned short proto, __u32 len, __u8 proto, __wsum sum)
__wsum sum)
{ {
__asm__ __volatile__( __asm__ __volatile__(
".set\tvolatile\t\t\t# csum_ipv6_magic\n\t" ".set\tvolatile\t\t\t# csum_ipv6_magic\n\t"
......
...@@ -159,8 +159,7 @@ static inline __sum16 ip_compute_csum(const void *buff, int len) ...@@ -159,8 +159,7 @@ static inline __sum16 ip_compute_csum(const void *buff, int len)
#define _HAVE_ARCH_IPV6_CSUM #define _HAVE_ARCH_IPV6_CSUM
static inline __sum16 csum_ipv6_magic(const struct in6_addr *saddr, static inline __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
const struct in6_addr *daddr, const struct in6_addr *daddr,
__u32 len, unsigned short proto, __u32 len, __u8 proto, __wsum sum)
__wsum sum)
{ {
unsigned int __dummy; unsigned int __dummy;
__asm__("clrt\n\t" __asm__("clrt\n\t"
......
...@@ -199,8 +199,7 @@ static inline __sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr, ...@@ -199,8 +199,7 @@ static inline __sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr,
static inline __sum16 csum_ipv6_magic(const struct in6_addr *saddr, static inline __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
const struct in6_addr *daddr, const struct in6_addr *daddr,
__u32 len, unsigned short proto, __u32 len, __u8 proto, __wsum sum)
__wsum sum)
{ {
__asm__ __volatile__ ( __asm__ __volatile__ (
"addcc %3, %4, %%g4\n\t" "addcc %3, %4, %%g4\n\t"
......
...@@ -125,8 +125,7 @@ static inline __sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr, ...@@ -125,8 +125,7 @@ static inline __sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr,
static inline __sum16 csum_ipv6_magic(const struct in6_addr *saddr, static inline __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
const struct in6_addr *daddr, const struct in6_addr *daddr,
__u32 len, unsigned short proto, __u32 len, __u8 proto, __wsum sum)
__wsum sum)
{ {
__asm__ __volatile__ ( __asm__ __volatile__ (
" addcc %3, %4, %%g7\n" " addcc %3, %4, %%g7\n"
......
...@@ -149,8 +149,7 @@ static inline __sum16 ip_compute_csum(const void *buff, int len) ...@@ -149,8 +149,7 @@ static inline __sum16 ip_compute_csum(const void *buff, int len)
#define _HAVE_ARCH_IPV6_CSUM #define _HAVE_ARCH_IPV6_CSUM
static inline __sum16 csum_ipv6_magic(const struct in6_addr *saddr, static inline __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
const struct in6_addr *daddr, const struct in6_addr *daddr,
__u32 len, unsigned short proto, __u32 len, __u8 proto, __wsum sum)
__wsum sum)
{ {
asm("addl 0(%1), %0 ;\n" asm("addl 0(%1), %0 ;\n"
"adcl 4(%1), %0 ;\n" "adcl 4(%1), %0 ;\n"
......
...@@ -177,7 +177,7 @@ struct in6_addr; ...@@ -177,7 +177,7 @@ struct in6_addr;
#define _HAVE_ARCH_IPV6_CSUM 1 #define _HAVE_ARCH_IPV6_CSUM 1
extern __sum16 extern __sum16
csum_ipv6_magic(const struct in6_addr *saddr, const struct in6_addr *daddr, csum_ipv6_magic(const struct in6_addr *saddr, const struct in6_addr *daddr,
__u32 len, unsigned short proto, __wsum sum); __u32 len, __u8 proto, __wsum sum);
static inline unsigned add32_with_carry(unsigned a, unsigned b) static inline unsigned add32_with_carry(unsigned a, unsigned b)
{ {
......
...@@ -135,7 +135,7 @@ EXPORT_SYMBOL(csum_partial_copy_nocheck); ...@@ -135,7 +135,7 @@ EXPORT_SYMBOL(csum_partial_copy_nocheck);
__sum16 csum_ipv6_magic(const struct in6_addr *saddr, __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
const struct in6_addr *daddr, const struct in6_addr *daddr,
__u32 len, unsigned short proto, __wsum sum) __u32 len, __u8 proto, __wsum sum)
{ {
__u64 rest, sum64; __u64 rest, sum64;
......
...@@ -13,7 +13,7 @@ static inline __sum16 ip_compute_csum(const void *buff, int len) ...@@ -13,7 +13,7 @@ static inline __sum16 ip_compute_csum(const void *buff, int len)
#define _HAVE_ARCH_IPV6_CSUM #define _HAVE_ARCH_IPV6_CSUM
static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr, static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
const struct in6_addr *daddr, const struct in6_addr *daddr,
__u32 len, unsigned short proto, __u32 len, __u8 proto,
__wsum sum) __wsum sum)
{ {
__asm__( __asm__(
......
...@@ -175,7 +175,7 @@ static __inline__ __sum16 ip_compute_csum(const void *buff, int len) ...@@ -175,7 +175,7 @@ static __inline__ __sum16 ip_compute_csum(const void *buff, int len)
#define _HAVE_ARCH_IPV6_CSUM #define _HAVE_ARCH_IPV6_CSUM
static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr, static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
const struct in6_addr *daddr, const struct in6_addr *daddr,
__u32 len, unsigned short proto, __u32 len, __u8 proto,
__wsum sum) __wsum sum)
{ {
unsigned int __dummy; unsigned int __dummy;
......
...@@ -37,8 +37,7 @@ ...@@ -37,8 +37,7 @@
#ifndef _HAVE_ARCH_IPV6_CSUM #ifndef _HAVE_ARCH_IPV6_CSUM
__sum16 csum_ipv6_magic(const struct in6_addr *saddr, __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
const struct in6_addr *daddr, const struct in6_addr *daddr,
__u32 len, unsigned short proto, __u32 len, __u8 proto, __wsum csum);
__wsum csum);
#endif #endif
static inline __wsum ip6_compute_pseudo(struct sk_buff *skb, int proto) static inline __wsum ip6_compute_pseudo(struct sk_buff *skb, int proto)
......
...@@ -6,8 +6,7 @@ ...@@ -6,8 +6,7 @@
#ifndef _HAVE_ARCH_IPV6_CSUM #ifndef _HAVE_ARCH_IPV6_CSUM
__sum16 csum_ipv6_magic(const struct in6_addr *saddr, __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
const struct in6_addr *daddr, const struct in6_addr *daddr,
__u32 len, unsigned short proto, __u32 len, __u8 proto, __wsum csum)
__wsum csum)
{ {
int carry; int carry;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment