Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 148603
b: refs/heads/master
c: 732703a
h: refs/heads/master
i:
  148601: 01048f6
  148599: 317f487
v: v3
  • Loading branch information
Arnd Bergmann authored and Michal Simek committed May 21, 2009
1 parent ad79afa commit e483fed
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 18 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 838d2406ee62595c1b40d1d03b48bc9a2102258b
refs/heads/master: 732703af9c3478c3f935dd5ae80140b9b12bda09
14 changes: 8 additions & 6 deletions trunk/arch/microblaze/include/asm/checksum.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,16 +51,17 @@ extern __wsum csum_partial(const void *buff, int len, __wsum sum);
* here even more important to align src and dst on a 32-bit (or even
* better 64-bit) boundary
*/
extern __wsum csum_partial_copy(const char *src, char *dst, int len, int sum);
extern __wsum csum_partial_copy(const void *src, void *dst, int len,
__wsum sum);

/*
* the same as csum_partial_copy, but copies from user space.
*
* here even more important to align src and dst on a 32-bit (or even
* better 64-bit) boundary
*/
extern __wsum csum_partial_copy_from_user(const char *src, char *dst,
int len, int sum, int *csum_err);
extern __wsum csum_partial_copy_from_user(const void __user *src, void *dst,
int len, __wsum sum, int *csum_err);

#define csum_partial_copy_nocheck(src, dst, len, sum) \
csum_partial_copy((src), (dst), (len), (sum))
Expand All @@ -75,11 +76,12 @@ extern __sum16 ip_fast_csum(const void *iph, unsigned int ihl);
/*
* Fold a partial checksum
*/
static inline __sum16 csum_fold(unsigned int sum)
static inline __sum16 csum_fold(__wsum csum)
{
u32 sum = (__force u32)csum;
sum = (sum & 0xffff) + (sum >> 16);
sum = (sum & 0xffff) + (sum >> 16);
return ~sum;
return (__force __sum16)~sum;
}

static inline __sum16
Expand All @@ -93,6 +95,6 @@ csum_tcpudp_magic(__be32 saddr, __be32 daddr, unsigned short len,
* this routine is used for miscellaneous IP-like checksums, mainly
* in icmp.c
*/
extern __sum16 ip_compute_csum(const unsigned char *buff, int len);
extern __sum16 ip_compute_csum(const void *buff, int len);

#endif /* _ASM_MICROBLAZE_CHECKSUM_H */
31 changes: 20 additions & 11 deletions trunk/arch/microblaze/lib/checksum.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,10 @@
/* Revised by Kenneth Albanowski for m68knommu. Basic problem: unaligned access
kills, so most of the assembly has to go. */

#include <net/checksum.h>
#include <asm/checksum.h>
#include <linux/module.h>
#include <net/checksum.h>

#include <asm/byteorder.h>

static inline unsigned short from32to16(unsigned long x)
{
Expand Down Expand Up @@ -102,6 +103,7 @@ __sum16 ip_fast_csum(const void *iph, unsigned int ihl)
{
return (__force __sum16)~do_csum(iph, ihl*4);
}
EXPORT_SYMBOL(ip_fast_csum);

/*
* computes the checksum of a memory block at buff, length len,
Expand All @@ -115,38 +117,45 @@ __sum16 ip_fast_csum(const void *iph, unsigned int ihl)
*
* it's best to have buff aligned on a 32-bit boundary
*/
__wsum csum_partial(const void *buff, int len, __wsum sum)
__wsum csum_partial(const void *buff, int len, __wsum wsum)
{
unsigned int sum = (__force unsigned int)wsum;
unsigned int result = do_csum(buff, len);

/* add in old sum, and carry.. */
result += sum;
if (sum > result)
result += 1;
return result;
return (__force __wsum)result;
}
EXPORT_SYMBOL(csum_partial);

/*
* this routine is used for miscellaneous IP-like checksums, mainly
* in icmp.c
*/
__sum16 ip_compute_csum(const unsigned char *buff, int len)
__sum16 ip_compute_csum(const void *buff, int len)
{
return ~do_csum(buff, len);
return (__force __sum16)~do_csum(buff, len);
}
EXPORT_SYMBOL(ip_compute_csum);

/*
* copy from fs while checksumming, otherwise like csum_partial
*/
__wsum
csum_partial_copy_from_user(const char __user *src, char *dst, int len,
int sum, int *csum_err)
csum_partial_copy_from_user(const void __user *src, void *dst, int len,
__wsum sum, int *csum_err)
{
if (csum_err)
int missing;

missing = __copy_from_user(dst, src, len);
if (missing) {
memset(dst + len - missing, 0, missing);
*csum_err = -EFAULT;
} else
*csum_err = 0;
memcpy(dst, src, len);

return csum_partial(dst, len, sum);
}
EXPORT_SYMBOL(csum_partial_copy_from_user);
Expand All @@ -155,7 +164,7 @@ EXPORT_SYMBOL(csum_partial_copy_from_user);
* copy from ds while checksumming, otherwise like csum_partial
*/
__wsum
csum_partial_copy(const char *src, char *dst, int len, int sum)
csum_partial_copy(const void *src, void *dst, int len, __wsum sum)
{
memcpy(dst, src, len);
return csum_partial(dst, len, sum);
Expand Down

0 comments on commit e483fed

Please sign in to comment.