Commit 5cde7656d0dd222170eb0250bd1f70c9018fd438

Authored by Darrick J. Wong
Committed by Linus Torvalds
1 parent 577eba9e22

crc32: select an algorithm via Kconfig

Allow the kernel builder to choose a crc32* algorithm for the kernel.

Signed-off-by: Darrick J. Wong <djwong@us.ibm.com>
Cc: Bob Pearson <rpearson@systemfabricworks.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 2 changed files with 61 additions and 0 deletions Side-by-side Diff

... ... @@ -80,6 +80,49 @@
80 80 and crc32_be over byte strings with random alignment and length
81 81 and computes the total elapsed time and number of bytes processed.
82 82  
  83 +choice
  84 + prompt "CRC32 implementation"
  85 + depends on CRC32
  86 + default CRC32_SLICEBY8
  87 +
  88 +config CRC32_SLICEBY8
  89 + bool "Slice by 8 bytes"
  90 + help
  91 + Calculate checksum 8 bytes at a time with a clever slicing algorithm.
  92 + This is the fastest algorithm, but comes with a 8KiB lookup table.
  93 + Most modern processors have enough cache to hold this table without
  94 + thrashing the cache.
  95 +
  96 + This is the default implementation choice. Choose this one unless
  97 + you have a good reason not to.
  98 +
  99 +config CRC32_SLICEBY4
  100 + bool "Slice by 4 bytes"
  101 + help
  102 + Calculate checksum 4 bytes at a time with a clever slicing algorithm.
  103 + This is a bit slower than slice by 8, but has a smaller 4KiB lookup
  104 + table.
  105 +
  106 + Only choose this option if you know what you are doing.
  107 +
  108 +config CRC32_SARWATE
  109 + bool "Sarwate's Algorithm (one byte at a time)"
  110 + help
  111 + Calculate checksum a byte at a time using Sarwate's algorithm. This
  112 + is not particularly fast, but has a small 256 byte lookup table.
  113 +
  114 + Only choose this option if you know what you are doing.
  115 +
  116 +config CRC32_BIT
  117 + bool "Classic Algorithm (one bit at a time)"
  118 + help
  119 + Calculate checksum one bit at a time. This is VERY slow, but has
  120 + no lookup table. This is provided as a debugging option.
  121 +
  122 + Only choose this option if you are debugging crc32.
  123 +
  124 +endchoice
  125 +
83 126 config CRC7
84 127 tristate "CRC7 functions"
85 128 help
... ... @@ -13,6 +13,24 @@
13 13 */
14 14 #define CRC32C_POLY_LE 0x82F63B78
15 15  
  16 +/* Try to choose an implementation variant via Kconfig */
  17 +#ifdef CONFIG_CRC32_SLICEBY8
  18 +# define CRC_LE_BITS 64
  19 +# define CRC_BE_BITS 64
  20 +#endif
  21 +#ifdef CONFIG_CRC32_SLICEBY4
  22 +# define CRC_LE_BITS 32
  23 +# define CRC_BE_BITS 32
  24 +#endif
  25 +#ifdef CONFIG_CRC32_SARWATE
  26 +# define CRC_LE_BITS 8
  27 +# define CRC_BE_BITS 8
  28 +#endif
  29 +#ifdef CONFIG_CRC32_BIT
  30 +# define CRC_LE_BITS 1
  31 +# define CRC_BE_BITS 1
  32 +#endif
  33 +
16 34 /*
17 35 * How many bits at a time to use. Valid values are 1, 2, 4, 8, 32 and 64.
18 36 * For less performance-sensitive, use 4 or 8 to save table size.