cregit-Linux how code gets into the kernel

Release 4.14 arch/ia64/lib/checksum.c

Directory: arch/ia64/lib
// SPDX-License-Identifier: GPL-2.0
/*
 * Network checksum routines
 *
 * Copyright (C) 1999, 2003 Hewlett-Packard Co
 *      Stephane Eranian <eranian@hpl.hp.com>
 *
 * Most of the code coming from arch/alpha/lib/checksum.c
 *
 * This file contains network checksum routines that are better done
 * in an architecture-specific manner due to speed..
 */

#include <linux/module.h>
#include <linux/string.h>

#include <asm/byteorder.h>


static inline unsigned short from64to16 (unsigned long x) { /* add up 32-bit words for 33 bits */ x = (x & 0xffffffff) + (x >> 32); /* add up 16-bit and 17-bit words for 17+c bits */ x = (x & 0xffff) + (x >> 16); /* add up 16-bit and 2-bit for 16+c bit */ x = (x & 0xffff) + (x >> 16); /* add up carry.. */ x = (x & 0xffff) + (x >> 16); return x; }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)75100.00%1100.00%
Total75100.00%1100.00%

/* * computes the checksum of the TCP/UDP pseudo-header * returns a 16-bit checksum, already complemented. */
__sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr, __u32 len, __u8 proto, __wsum sum) { return (__force __sum16)~from64to16( (__force u64)saddr + (__force u64)daddr + (__force u64)sum + ((len + proto) << 8)); }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)3459.65%133.33%
Al Viro2136.84%133.33%
Alexander Duyck23.51%133.33%
Total57100.00%3100.00%

EXPORT_SYMBOL(csum_tcpudp_magic);
__wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr, __u32 len, __u8 proto, __wsum sum) { unsigned long result; result = (__force u64)saddr + (__force u64)daddr + (__force u64)sum + ((len + proto) << 8); /* Fold down to 32-bits so we don't lose in the typedef-less network stack. */ /* 64 to 33 */ result = (result & 0xffffffff) + (result >> 32); /* 33 to 32 */ result = (result & 0xffffffff) + (result >> 32); return (__force __wsum)result; }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)6975.00%125.00%
Al Viro2021.74%125.00%
Alexander Duyck22.17%125.00%
Steven Cole11.09%125.00%
Total92100.00%4100.00%

EXPORT_SYMBOL(csum_tcpudp_nofold); extern unsigned long do_csum (const unsigned char *, long); /* * computes the checksum of a memory block at buff, length len, * and adds in "sum" (32-bit) * * returns a 32-bit number suitable for feeding into itself * or csum_tcpudp_magic * * this function must be called with even lengths, except * for the last fragment, which may be odd * * it's best to have buff aligned on a 32-bit boundary */
__wsum csum_partial(const void *buff, int len, __wsum sum) { u64 result = do_csum(buff, len); /* add in old sum, and carry.. */ result += (__force u32)sum; /* 32+c bits -> 32 bits */ result = (result & 0xffffffff) + (result >> 32); return (__force __wsum)result; }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)4578.95%150.00%
Al Viro1221.05%150.00%
Total57100.00%2100.00%

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

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)1973.08%150.00%
Al Viro726.92%150.00%
Total26100.00%2100.00%

EXPORT_SYMBOL(ip_compute_csum);

Overall Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)26474.58%114.29%
Al Viro6518.36%228.57%
David Mosberger-Tang195.37%114.29%
Alexander Duyck41.13%114.29%
Greg Kroah-Hartman10.28%114.29%
Steven Cole10.28%114.29%
Total354100.00%7100.00%
Directory: arch/ia64/lib
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.