|
@@ -88,8 +88,11 @@ static inline __wsum
|
|
csum_block_add(__wsum csum, __wsum csum2, int offset)
|
|
csum_block_add(__wsum csum, __wsum csum2, int offset)
|
|
{
|
|
{
|
|
u32 sum = (__force u32)csum2;
|
|
u32 sum = (__force u32)csum2;
|
|
- if (offset&1)
|
|
|
|
- sum = ((sum&0xFF00FF)<<8)+((sum>>8)&0xFF00FF);
|
|
|
|
|
|
+
|
|
|
|
+ /* rotate sum to align it with a 16b boundary */
|
|
|
|
+ if (offset & 1)
|
|
|
|
+ sum = ror32(sum, 8);
|
|
|
|
+
|
|
return csum_add(csum, (__force __wsum)sum);
|
|
return csum_add(csum, (__force __wsum)sum);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -102,10 +105,7 @@ csum_block_add_ext(__wsum csum, __wsum csum2, int offset, int len)
|
|
static inline __wsum
|
|
static inline __wsum
|
|
csum_block_sub(__wsum csum, __wsum csum2, int offset)
|
|
csum_block_sub(__wsum csum, __wsum csum2, int offset)
|
|
{
|
|
{
|
|
- u32 sum = (__force u32)csum2;
|
|
|
|
- if (offset&1)
|
|
|
|
- sum = ((sum&0xFF00FF)<<8)+((sum>>8)&0xFF00FF);
|
|
|
|
- return csum_sub(csum, (__force __wsum)sum);
|
|
|
|
|
|
+ return csum_block_add(csum, ~csum2, offset);
|
|
}
|
|
}
|
|
|
|
|
|
static inline __wsum csum_unfold(__sum16 n)
|
|
static inline __wsum csum_unfold(__sum16 n)
|