Ivan Djelic
437aa565e2
lib: add shared BCH ECC library
...
This is a new software BCH encoding/decoding library, similar to the shared
Reed-Solomon library.
Binary BCH (Bose-Chaudhuri-Hocquenghem) codes are widely used to correct
errors in NAND flash devices requiring more than 1-bit ecc correction; they
are generally better suited for NAND flash than RS codes because NAND bit
errors do not occur in bursts. Latest SLC NAND devices typically require at
least 4-bit ecc protection per 512 bytes block.
This library provides software encoding/decoding, but may also be used with
ASIC/SoC hardware BCH engines to perform error correction. It is being
currently used for this purpose on an OMAP3630 board (4bit/8bit HW BCH). It
has also been used to decode raw dumps of NAND devices with on-die BCH ecc
engines (e.g. Micron 4bit ecc SLC devices).
Latest NAND devices (including SLC) can exhibit high error rates (typically
a dozen or more bitflips per hour during stress tests); in order to
minimize the performance impact of error correction, this library
implements recently developed algorithms for fast polynomial root finding
(see bch.c header for details) instead of the traditional exhaustive Chien
root search; a few performance figures are provided below:
Platform: arm926ejs @ 468 MHz, 32 KiB icache, 16 KiB dcache
BCH ecc : 4-bit per 512 bytes
Encoding average throughput: 250 Mbits/s
Error correction time (compared with Chien search):
average worst average (Chien) worst (Chien)
----------------------------------------------------------
1 bit 8.5 µs 11 µs 200 µs 383 µs
2 bit 9.7 µs 12.5 µs 477 µs 728 µs
3 bit 18.1 µs 20.6 µs 758 µs 1010 µs
4 bit 19.5 µs 23 µs 1028 µs 1280 µs
In the above figures, "worst" is meant in terms of error pattern, not in
terms of cache miss / page faults effects (not taken into account here).
The library has been extensively tested on the following platforms: x86,
x86_64, arm926ejs, omap3630, qemu-ppc64, qemu-mips.
Signed-off-by: Ivan Djelic <ivan.djelic@parrot.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
2011-03-11 14:25:50 +00:00
..
lzo
lib: add support for LZO-compressed kernels
2010-01-11 09:34:04 -08:00
raid6
Move .gitignore from drivers/md to lib/raid6
2010-08-30 17:35:52 +10:00
reed_solomon
xz
kconfig: rename CONFIG_EMBEDDED to CONFIG_EXPERT
2011-01-20 17:02:05 -08:00
zlib_deflate
trivial: fix typo "to to" in multiple files
2009-09-21 15:14:55 +02:00
zlib_inflate
inflate_fast: sout is already a short so ptr arith was off by one.
2010-03-12 15:52:44 -08:00
.gitignore
argv_split.c
tree-wide: convert open calls to remove spaces to skip_spaces() lib function
2009-12-15 08:53:32 -08:00
atomic64.c
lib: Fix atomic64_add_unless return value convention
2010-03-01 11:38:46 -08:00
atomic64_test.c
ARM: 6213/1: atomic64_test: add ARM as supported architecture
2010-07-27 10:43:46 +01:00
audit.c
average.c
lib: Improve EWMA efficiency by using bitshifts
2010-12-06 15:58:43 -05:00
bcd.c
bch.c
lib: add shared BCH ECC library
2011-03-11 14:25:50 +00:00
bitmap.c
lib/bitmap.c: use hex_to_bin()
2010-10-26 16:52:18 -07:00
bitrev.c
btree.c
lib/btree: fix possible NULL pointer dereference
2010-05-15 12:48:10 -07:00
bug.c
modules: Fix module_bug_list list corruption race
2010-10-05 11:29:27 -07:00
bust_spinlocks.c
check_signature.c
checksum.c
lib/checksum: fix one more thinko
2009-11-03 16:06:53 +01:00
cmdline.c
cpu-notifier-error-inject.c
fault-injection: add CPU notifier error injection module
2010-05-27 09:12:48 -07:00
cpumask.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
crc-ccitt.c
crc-itu-t.c
crc-t10dif.c
crc7.c
crc16.c
crc32.c
revert "crc32: use __BYTE_ORDER macro for endian detection"
2010-05-26 08:19:23 -07:00
crc32defs.h
ctype.c
ctype: constify read-only _ctype string
2009-12-15 08:53:32 -08:00
debug_locks.c
Revert "debug_locks: set oops_in_progress if we will log messages."
2010-11-29 15:18:28 -08:00
debugobjects.c
Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
2010-05-18 08:17:58 -07:00
dec_and_lock.c
atomic: only take lock when the counter drops to zero on UP as well
2009-06-16 19:47:47 -07:00
decompress.c
decompressors: add boot-time XZ support
2011-01-13 08:03:25 -08:00
decompress_bunzip2.c
Decompressors: include <linux/slab.h> in <linux/decompress/mm.h>
2011-01-13 08:03:23 -08:00
decompress_inflate.c
decompressors: check input size in decompress_inflate.c
2011-01-13 08:03:25 -08:00
decompress_unlzma.c
Decompressors: validate match distance in decompress_unlzma.c
2011-01-13 08:03:24 -08:00
decompress_unlzo.c
Decompressors: fix callback-to-callback mode in decompress_unlzo.c
2011-01-13 08:03:24 -08:00
decompress_unxz.c
decompressors: add boot-time XZ support
2011-01-13 08:03:25 -08:00
devres.c
lib/devres.c: fix comment typo
2010-07-11 22:16:32 +02:00
div64.c
div64_u64(): improve precision on 32bit platforms
2010-10-26 16:52:19 -07:00
dma-debug.c
llseek: automatically add .llseek fop
2010-10-15 15:53:27 +02:00
dump_stack.c
dynamic_debug.c
dynamic debug: Fix build issue with older gcc
2011-01-07 23:36:59 -05:00
extable.c
module: trim exception table on init free.
2009-06-12 21:47:04 +09:30
fault-inject.c
headers: remove sched.h from interrupt.h
2009-10-11 11:20:58 -07:00
find_last_bit.c
find_next_bit.c
flex_array.c
flex_array: export symbols to modules
2011-01-13 08:03:11 -08:00
gcd.c
lib: add lib/gcd.c
2009-06-18 13:04:05 -07:00
gen_crc32table.c
crc32: major optimization
2010-05-25 08:07:06 -07:00
genalloc.c
genalloc: fix allocation from end of pool
2010-06-29 15:29:30 -07:00
halfmd4.c
hexdump.c
include/linux/printk.h lib/hexdump.c: neatening and add CONFIG_PRINTK guard
2011-01-13 08:03:10 -08:00
hweight.c
x86: Add optimized popcnt variants
2010-04-06 15:52:11 -07:00
idr.c
docbook: add idr/ida to kernel-api docbook
2010-10-26 17:40:56 -07:00
inflate.c
MN10300: Don't try and #include <linux/slab.h> in lib/inflate.c from bootloader
2010-08-12 09:51:35 -07:00
int_sqrt.c
iomap.c
iomap_copy.c
iommu-helper.c
iommu: inline iommu_num_pages
2010-08-09 20:45:05 -07:00
ioremap.c
ACPI, APEI, Generic Hardware Error Source POLL/IRQ/NMI notification type support
2011-01-12 03:06:19 -05:00
irq_regs.c
is_single_threaded.c
kernel: is_current_single_threaded: don't use ->mmap_sem
2009-07-17 09:11:31 +10:00
kasprintf.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
Kconfig
lib: add shared BCH ECC library
2011-03-11 14:25:50 +00:00
Kconfig.debug
kconfig: rename CONFIG_EMBEDDED to CONFIG_EXPERT
2011-01-20 17:02:05 -08:00
Kconfig.kgdb
mips,kgdb: kdb low level trap catch and stack trace
2010-05-20 21:04:26 -05:00
Kconfig.kmemcheck
kmemcheck: depend on HAVE_ARCH_KMEMCHECK
2009-07-01 22:28:44 +02:00
kernel_lock.c
bkl: Fixup core_lock fallout
2009-12-14 23:55:33 +01:00
klist.c
kobject.c
kobject: Introduce kset_find_obj_hinted.
2010-10-22 10:16:44 -07:00
kobject_uevent.c
kobject_uevent: fix typo in comments
2010-08-23 18:12:46 -07:00
kref.c
kref: Add a kref_sub function
2010-11-22 13:25:13 +10:00
lcm.c
block: Fix overrun in lcm() and move it to lib
2010-03-15 12:47:59 +01:00
libcrc32c.c
list_debug.c
list debugging: warn when deleting a deleted entry
2010-08-09 20:45:08 -07:00
list_sort.c
lib/list_sort: test: check element addresses
2010-10-26 16:52:19 -07:00
locking-selftest-hardirq.h
locking-selftest-mutex.h
locking-selftest-rlock-hardirq.h
locking-selftest-rlock-softirq.h
locking-selftest-rlock.h
locking-selftest-rsem.h
locking-selftest-softirq.h
locking-selftest-spin-hardirq.h
locking-selftest-spin-softirq.h
locking-selftest-spin.h
locking-selftest-wlock-hardirq.h
locking-selftest-wlock-softirq.h
locking-selftest-wlock.h
locking-selftest-wsem.h
locking-selftest.c
lru_cache.c
The DRBD driver
2009-10-01 21:17:49 +02:00
Makefile
lib: add shared BCH ECC library
2011-03-11 14:25:50 +00:00
nlattr.c
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
2011-01-13 10:05:56 -08:00
parser.c
lib/parser: cleanup match_number()
2010-10-26 16:52:19 -07:00
percpu_counter.c
percpucounter: Optimize __percpu_counter_add a bit through the use of this_cpu() options.
2010-12-17 15:07:18 +01:00
plist.c
plist: Make plist debugging raw_spinlock aware
2009-12-14 23:55:33 +01:00
prio_heap.c
prio_tree.c
proportions.c
radix-tree.c
radix-tree: fix RCU bug
2010-11-12 07:55:32 -08:00
random32.c
Merge branch 'master' into for-next
2010-06-16 18:08:13 +02:00
ratelimit.c
ratelimit: fix the return value when __ratelimit() fails to acquire the lock
2010-04-07 08:38:04 -07:00
rational.c
lib/rational.c needs module.h
2010-01-11 09:34:05 -08:00
rbtree.c
rbtree: Undo augmented trees performance damage and regression
2010-07-05 14:43:50 +02:00
reciprocal_div.c
rwsem-spinlock.c
rwsem generic spinlock: use IRQ save/restore spinlocks
2010-04-07 16:15:05 -07:00
rwsem.c
rwsem: smaller wrappers around rwsem_down_failed_common
2010-08-09 20:45:11 -07:00
scatterlist.c
scatterlist: prevent invalid free when alloc fails
2010-08-30 19:55:09 +02:00
sha1.c
show_mem.c
mm: use the same log level for show_mem()
2010-03-06 11:26:27 -08:00
smp_processor_id.c
sort.c
spinlock_debug.c
locking: Further name space cleanups
2009-12-14 23:55:33 +01:00
string.c
lib/string.c: simplify strnstr()
2010-03-06 11:26:35 -08:00
string_helpers.c
swiotlb.c
tree-wide: fix comment/printk typos
2010-11-01 15:38:34 -04:00
syscall.c
textsearch.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
timerqueue.c
timerqueue: Make timerqueue_getnext() static inline
2010-12-11 12:34:34 +01:00
ts_bm.c
ts_fsm.c
ts_kmp.c
uuid.c
Unified UUID/GUID definition
2010-05-19 22:40:47 -04:00
vsprintf.c
lib/vsprintf.c: fix vscnprintf() if @size is == 0
2011-01-13 08:03:10 -08:00