staging: gdm724x: modify icmp6_checksum for returning a correct data type.
The icmp6_checksum was returning an invalid data type as the expected type is __sum16. For returning such data type, icmp6_checksum, now, is using the kernel functions for computing the checksum. Here, the sparse message: drivers/staging/gdm724x/gdm_lte.c:311:39: warning: incorrect type in assignment (different base types) drivers/staging/gdm724x/gdm_lte.c:311:39: expected restricted __sum16 [addressable] [assigned] [usertype] icmp6_cksum drivers/staging/gdm724x/gdm_lte.c:311:39: got int Signed-off-by: Javier Rodriguez <jrodbar@yahoo.es> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
607b6cd3d0
commit
efe96779e5
|
@ -178,10 +178,10 @@ static int gdm_lte_emulate_arp(struct sk_buff *skb_in, u32 nic_type)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int icmp6_checksum(struct ipv6hdr *ipv6, u16 *ptr, int len)
|
||||
static __sum16 icmp6_checksum(struct ipv6hdr *ipv6, u16 *ptr, int len)
|
||||
{
|
||||
unsigned short *w = ptr;
|
||||
int sum = 0;
|
||||
__wsum sum = 0;
|
||||
int i;
|
||||
|
||||
union {
|
||||
|
@ -203,19 +203,16 @@ static int icmp6_checksum(struct ipv6hdr *ipv6, u16 *ptr, int len)
|
|||
|
||||
w = (u16 *)&pseudo_header;
|
||||
for (i = 0; i < ARRAY_SIZE(pseudo_header.pa); i++)
|
||||
sum += pseudo_header.pa[i];
|
||||
sum = csum_add(sum, csum_unfold(
|
||||
(__force __sum16)pseudo_header.pa[i]));
|
||||
|
||||
w = ptr;
|
||||
while (len > 1) {
|
||||
sum += *w++;
|
||||
sum = csum_add(sum, csum_unfold((__force __sum16)*w++));
|
||||
len -= 2;
|
||||
}
|
||||
|
||||
sum = (sum >> 16) + (sum & 0xFFFF);
|
||||
sum += (sum >> 16);
|
||||
sum = ~sum & 0xffff;
|
||||
|
||||
return sum;
|
||||
return csum_fold(sum);
|
||||
}
|
||||
|
||||
static int gdm_lte_emulate_ndp(struct sk_buff *skb_in, u32 nic_type)
|
||||
|
|
Loading…
Reference in New Issue