crc32: misc-cleanup.diff
PATCH v3 3/7 crc32: misc-cleanup.diff
Misc cleanup of lib/crc32.c
- removed unnecessary header files. If it passes sparse without it I took it out.
- straightened out some convoluted ifdef's
- code incorrectly referenced 2D crc32table_le table as crc32table_l(b)e[x] instead of crc32table_l(b)e[0][x] for BITS = 2 & 4. This failed sparse.
- a few trivial whitespace changes
Signed-off-by Bob Pearson <[email protected]>
--- lib/crc32.c | 104 ++++++++++++++++++++---------------------------------------- 1 file changed, 36 insertions(+), 68 deletions(-)
lib/crc32.c +36 -68
@@ -21,13 +21,10 @@*/ #include <linux/crc32.h> -#include <linux/kernel.h> #include <linux/module.h> -#include <linux/compiler.h> #include <linux/types.h> -#include <linux/init.h> -#include <asm/atomic.h> #include "crc32defs.h" +#if CRC_LE_BITS ==8 # define tole (x) __constant_cpu_to_le32(x)#else
@@ -39,6 +36,7 @@#else # define tobe (x) (x)#endif +#include "crc32table.h" MODULE_AUTHOR ("Matt Domsch <[email protected]>" );
@@ -93,6 +91,7 @@ crc32_body(u32 crc, unsigned char const#undef DO_CRC4 }#endif +/** * crc32_le() - Calculate bitwise little-endian Ethernet AUTODIN II CRC32 * @crc: seed value for computation. ~0 for Ethernet, sometimes 0 for
@@ -100,53 +99,39 @@ crc32_body(u32 crc, unsigned char const* @p: pointer to buffer over which CRC is run * @len: length of buffer @p */ -u32 __pure crc32_le (u32 crc,unsigned char const *p,size_t len); - -#if CRC_LE_BITS ==1 -/* -* In fact, the table-based code will work in this case, but it can be -* simplified by inlining the table in ?: form. -*/ -u32 __pure crc32_le (u32 crc,unsigned char const *p,size_t len) { +#if CRC_LE_BITS ==1 int i;while (len--) { crc ^= *p++;for (i =0 ; i <8 ; i++) crc = (crc >>1 ) ^ ((crc &1 ) ?CRCPOLY_LE :0 ); } -return crc; -} -#else /* Table-based approach */ - -u32 __pure crc32_le (u32 crc,unsigned char const *p,size_t len) -{ -# if CRC_LE_BITS ==8 -const u32 (*tab)[] = crc32table_le; - - crc =__cpu_to_le32 (crc); - crc =crc32_body (crc, p, len, tab); -return __le32_to_cpu (crc); -# elif CRC_LE_BITS ==4 +# elif CRC_LE_BITS ==2 while (len--) { crc ^= *p++; - crc = (crc >>4 ) ^ crc32table_le[crc &15 ]; - crc = (crc >>4 ) ^ crc32table_le[crc &15 ]; + crc = (crc >>2 ) ^ crc32table_le[0 ][crc &3 ]; + crc = (crc >>2 ) ^ crc32table_le[0 ][crc &3 ]; + crc = (crc >>2 ) ^ crc32table_le[0 ][crc &3 ]; + crc = (crc >>2 ) ^ crc32table_le[0 ][crc &3 ]; } -return crc; -# elif CRC_LE_BITS ==2 +# elif CRC_LE_BITS ==4 while (len--) { crc ^= *p++; - crc = (crc >>2 ) ^ crc32table_le[crc &3 ]; - crc = (crc >>2 ) ^ crc32table_le[crc &3 ]; - crc = (crc >>2 ) ^ crc32table_le[crc &3 ]; - crc = (crc >>2 ) ^ crc32table_le[crc &3 ]; + crc = (crc >>4 ) ^ crc32table_le[0 ][crc &15 ]; + crc = (crc >>4 ) ^ crc32table_le[0 ][crc &15 ]; } +# elif CRC_LE_BITS ==8 +const u32 (*tab)[] = crc32table_le; + + crc =__cpu_to_le32 (crc); + crc =crc32_body (crc, p, len, tab); + crc =__le32_to_cpu (crc); +#endif return crc; -# endif } -#endif +EXPORT_SYMBOL (crc32_le);/** * crc32_be() - Calculate bitwise big-endian Ethernet AUTODIN II CRC32
@@ -155,16 +140,9 @@ u32 __pure crc32_le(u32 crc, unsigned ch* @p: pointer to buffer over which CRC is run * @len: length of buffer @p */ -u32 __pure crc32_be (u32 crc,unsigned char const *p,size_t len); - -#if CRC_BE_BITS ==1 -/* -* In fact, the table-based code will work in this case, but it can be -* simplified by inlining the table in ?: form. -*/ -u32 __pure crc32_be (u32 crc,unsigned char const *p,size_t len) { +#if CRC_BE_BITS ==1 int i;while (len--) { crc ^= *p++ <<24 ;
@@ -173,39 +151,29 @@ u32 __pure crc32_be(u32 crc, unsigned ch (crc <<1 ) ^ ((crc &0x80000000 ) ?CRCPOLY_BE :0 ); } -return crc; -} - -#else /* Table-based approach */ -u32 __pure crc32_be (u32 crc,unsigned char const *p,size_t len) -{ -# if CRC_BE_BITS ==8 -const u32 (*tab)[] = crc32table_be; - - crc =__cpu_to_be32 (crc); - crc =crc32_body (crc, p, len, tab); -return __be32_to_cpu (crc); -# elif CRC_BE_BITS ==4 +# elif CRC_BE_BITS ==2 while (len--) { crc ^= *p++ <<24 ; - crc = (crc <<4 ) ^ crc32table_be[crc >>28 ]; - crc = (crc <<4 ) ^ crc32table_be[crc >>28 ]; + crc = (crc <<2 ) ^ crc32table_be[0 ][crc >>30 ]; + crc = (crc <<2 ) ^ crc32table_be[0 ][crc >>30 ]; + crc = (crc <<2 ) ^ crc32table_be[0 ][crc >>30 ]; + crc = (crc <<2 ) ^ crc32table_be[0 ][crc >>30 ]; } -return crc; -# elif CRC_BE_BITS ==2 +# elif CRC_BE_BITS ==4 while (len--) { crc ^= *p++ <<24 ; - crc = (crc <<2 ) ^ crc32table_be[crc >>30 ]; - crc = (crc <<2 ) ^ crc32table_be[crc >>30 ]; - crc = (crc <<2 ) ^ crc32table_be[crc >>30 ]; - crc = (crc <<2 ) ^ crc32table_be[crc >>30 ]; + crc = (crc <<4 ) ^ crc32table_be[0 ][crc >>28 ]; + crc = (crc <<4 ) ^ crc32table_be[0 ][crc >>28 ]; } -return crc; +# elif CRC_BE_BITS ==8 +const u32 (*tab)[] = crc32table_be; + + crc =__cpu_to_be32 (crc); + crc =crc32_body (crc, p, len, tab); + crc =__be32_to_cpu (crc);# endif +return crc; } -#endif - -EXPORT_SYMBOL (crc32_le);EXPORT_SYMBOL (crc32_be);#ifdef CONFIG_CRC32_SELFTEST