These two functions are really simple, to the point that inlining them yields less code than calling them: with GCC 4.9 on i386, this change reduces the code generated for packet_csum_pseudoheader() from 112 bytes to 100 bytes.
Signed-off-by: Ben Pfaff <b...@ovn.org> --- lib/csum.c | 22 +--------------------- lib/csum.h | 27 ++++++++++++++++++++++++--- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/lib/csum.c b/lib/csum.c index c87c8dd..a0e9967 100644 --- a/lib/csum.c +++ b/lib/csum.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010, 2011, 2013 Nicira, Inc. + * Copyright (c) 2008, 2009, 2010, 2011, 2013, 2015 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,7 +19,6 @@ #include "unaligned.h" #ifndef __CHECKER__ - /* Returns the IP checksum of the 'n' bytes in 'data'. * * The return value has the same endianness as the data. That is, if 'data' @@ -32,25 +31,6 @@ csum(const void *data, size_t n) return csum_finish(csum_continue(0, data, n)); } -/* Adds the 16 bits in 'new' to the partial IP checksum 'partial' and returns - * the updated checksum. (To start a new checksum, pass 0 for 'partial'. To - * obtain the finished checksum, pass the return value to csum_finish().) */ -uint32_t -csum_add16(uint32_t partial, ovs_be16 new) -{ - return partial + new; -} - -/* Adds the 32 bits in 'new' to the partial IP checksum 'partial' and returns - * the updated checksum. (To start a new checksum, pass 0 for 'partial'. To - * obtain the finished checksum, pass the return value to csum_finish().) */ -uint32_t -csum_add32(uint32_t partial, ovs_be32 new) -{ - return partial + (new >> 16) + (new & 0xffff); -} - - /* Adds the 'n' bytes in 'data' to the partial IP checksum 'partial' and * returns the updated checksum. (To start a new checksum, pass 0 for * 'partial'. To obtain the finished checksum, pass the return value to diff --git a/lib/csum.h b/lib/csum.h index 293339d..fc52086 100644 --- a/lib/csum.h +++ b/lib/csum.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011 Nicira, Inc. + * Copyright (c) 2008, 2011, 2015 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,8 +22,6 @@ #include "openvswitch/types.h" ovs_be16 csum(const void *, size_t); -uint32_t csum_add16(uint32_t partial, ovs_be16); -uint32_t csum_add32(uint32_t partial, ovs_be32); uint32_t csum_continue(uint32_t partial, const void *, size_t); ovs_be16 csum_finish(uint32_t partial); ovs_be16 recalc_csum16(ovs_be16 old_csum, ovs_be16 old_u16, ovs_be16 new_u16); @@ -33,4 +31,27 @@ ovs_be16 recalc_csum48(ovs_be16 old_csum, const struct eth_addr old_mac, ovs_be16 recalc_csum128(ovs_be16 old_csum, ovs_16aligned_be32 old_u32[4], const ovs_be32 new_u32[4]); +#ifndef __CHECKER__ +/* Adds the 16 bits in 'new' to the partial IP checksum 'partial' and returns + * the updated checksum. (To start a new checksum, pass 0 for 'partial'. To + * obtain the finished checksum, pass the return value to csum_finish().) */ +static inline uint32_t +csum_add16(uint32_t partial, ovs_be16 new) +{ + return partial + new; +} + +/* Adds the 32 bits in 'new' to the partial IP checksum 'partial' and returns + * the updated checksum. (To start a new checksum, pass 0 for 'partial'. To + * obtain the finished checksum, pass the return value to csum_finish().) */ +static inline uint32_t +csum_add32(uint32_t partial, ovs_be32 new) +{ + return partial + (new >> 16) + (new & 0xffff); +} +#else +uint32_t csum_add16(uint32_t partial, ovs_be16); +uint32_t csum_add32(uint32_t partial, ovs_be32); +#endif + #endif /* csum.h */ -- 2.1.3 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev