04 Jan, 2014

1 commit


03 Mar, 2013

1 commit

  • Pull MTD update from David Woodhouse:
    "Fairly unexciting MTD merge for 3.9:

    - misc clean-ups in the MTD command-line partitioning parser
    (cmdlinepart)
    - add flash locking support for STmicro chips serial flash chips, as
    well as for CFI command set 2 chips.
    - new driver for the ELM error correction HW module found in various
    TI chips, enable the OMAP NAND driver to use the ELM HW error
    correction
    - added number of new serial flash IDs
    - various fixes and improvements in the gpmi NAND driver
    - bcm47xx NAND driver improvements
    - make the mtdpart module actually removable"

    * tag 'for-linus-20130301' of git://git.infradead.org/linux-mtd: (45 commits)
    mtd: map: BUG() in non handled cases
    mtd: bcm47xxnflash: use pr_fmt for module prefix in messages
    mtd: davinci_nand: Use managed resources
    mtd: mtd_torturetest can cause stack overflows
    mtd: physmap_of: Convert device allocation to managed devm_kzalloc()
    mtd: at91: atmel_nand: for PMECC, add code to check the ONFI parameter ECC requirement.
    mtd: atmel_nand: make pmecc-cap, pmecc-sector-size in dts is optional.
    mtd: atmel_nand: avoid to report an error when lookup table offset is 0.
    mtd: bcm47xxsflash: adjust names of bus-specific functions
    mtd: bcm47xxpart: improve probing of nvram partition
    mtd: bcm47xxpart: add support for other erase sizes
    mtd: bcm47xxnflash: register this as normal driver
    mtd: bcm47xxnflash: fix message
    mtd: bcm47xxsflash: register this as normal driver
    mtd: bcm47xxsflash: write number of written bytes
    mtd: gpmi: add sanity check for the ECC
    mtd: gpmi: set the Golois Field bit for mx6q's BCH
    mtd: devices: elm: Removes literals in elm DT node
    mtd: gpmi: fix a dereferencing freed memory error
    mtd: fix the wrong timeo for panic_nand_wait()
    ...

    Linus Torvalds
     

28 Feb, 2013

1 commit

  • Using prandom_bytes() is enough. Because this data is only used
    for testing, not used for cryptographic use.

    Signed-off-by: Akinobu Mita
    Cc: Artem Bityutskiy
    Cc: David Woodhouse
    Cc: "Theodore Ts'o"
    Cc: Adrian Hunter
    Cc: David Laight
    Cc: Eilon Greenstein
    Cc: Michel Lespinasse
    Cc: Robert Love
    Cc: Valdis Kletnieks
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Akinobu Mita
     

04 Feb, 2013

1 commit


15 Nov, 2012

1 commit


29 Sep, 2012

11 commits

  • This adds the double bit error detection test cases listed below:

    * Prepare data block with double bit error and ECC data without
    corruption, and verify that the uncorrectable error is detected by
    __nand_correct_data().

    * Prepare data block with single bit error and ECC data with single bit
    error, and verify that the uncorrectable error is detected.

    * Prepare data block without corruption and ECC data with double bit
    error, and verify that the uncorrectable error is detected.

    Signed-off-by: Akinobu Mita
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Akinobu Mita
     
  • This adds the single bit error correction test case listed below:

    Prepare data block without corruption and ECC data with single bit error,
    and verify that the data block is preserved by __nand_correct_data().

    Signed-off-by: Akinobu Mita
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Akinobu Mita
     
  • This adds no corruptin test case listed below:

    Prepare data block and ECC data with no corruption, and verify that
    the data block is preserved by __nand_correct_data()

    Signed-off-by: Akinobu Mita
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Akinobu Mita
     
  • This rewrites the entire test routine in order to make it easy to add more
    tests by later changes and minimize duplication of each tests as much as
    possible.

    Now that each test is described by the members of struct nand_ecc_test:
    - name: descriptive testname
    - prepare: function to prepare data block and ecc with artifical corruption
    - verify: function to verify the result of correcting data block

    Signed-off-by: Akinobu Mita
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Akinobu Mita
     
  • Currently inject_single_bit_error() is used to inject single bit error
    into randomly selected bit position of the 256 or 512 bytes data block.

    Later change will add tests which inject bit errors into the ecc code.
    Unfortunately, inject_single_bit_error() doesn't work for the ecc code
    which is not a multiple of sizeof(unsigned long).

    Because bit fliping at random position is done by __change_bit().
    For example, flipping bit position 0 by __change_bit(0, addr) modifies
    3rd byte (32bit) or 7th byte (64bit) on big-endian systems.

    Using little-endian version of bitops can fix this issue. But
    little-endian version of __change_bit is not yet available.
    So this defines __change_bit_le() locally in a similar fashion to
    asm-generic/bitops/le.h and use it.

    Signed-off-by: Akinobu Mita
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Akinobu Mita
     
  • Currently the data blocks which is used to test single bit error
    correction is allocated statically and injecting single bit error is
    implemented by using __change_bit() which must operate on the memory
    aligned to the size of an "unsigned long". But there is no such
    guarantee for statically allocated array.

    This fix the issue by allocating the data block dynamically by
    kmalloc(). It also allocate the ecc code dynamically instead of
    allocating statically on stack.

    The reason to allocate the ecc code dynamically is that later change
    will add tests which inject bit errors into the ecc code by bitops.

    Signed-off-by: Akinobu Mita
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Akinobu Mita
     
  • This includes the message related changes:

    - Use pr_* instead of printk
    - Print hexdump of ECC code if test fails
    - Change log level for hexdump of data from KERN_DEBUG to KERN_INFO
    - Factor out the hexdump code into a separate function

    Signed-off-by: Akinobu Mita
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Akinobu Mita
     
  • Return -EINVAL instead of -1 (-EPERM) when test fails.

    Signed-off-by: Akinobu Mita
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Akinobu Mita
     
  • Including linux/jiffies.h was required for calling srandom32(jiffies)
    that has already been removed.

    Signed-off-by: Akinobu Mita
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Akinobu Mita
     
  • Return an error code if test fails in order to detect a test case failure
    by invoking tests repeatedly like this:

    while sudo modprobe mtd_nandecctest; do
    sudo modprobe -r mtd_nandecctest
    done

    Signed-off-by: Akinobu Mita
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Akinobu Mita
     
  • It is unnecessary for this driver to call srandom32() in module_init.

    Signed-off-by: Akinobu Mita
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Akinobu Mita
     

30 Mar, 2010

1 commit

  • …it slab.h inclusion from percpu.h

    percpu.h is included by sched.h and module.h and thus ends up being
    included when building most .c files. percpu.h includes slab.h which
    in turn includes gfp.h making everything defined by the two files
    universally available and complicating inclusion dependencies.

    percpu.h -> slab.h dependency is about to be removed. Prepare for
    this change by updating users of gfp and slab facilities include those
    headers directly instead of assuming availability. As this conversion
    needs to touch large number of source files, the following script is
    used as the basis of conversion.

    http://userweb.kernel.org/~tj/misc/slabh-sweep.py

    The script does the followings.

    * Scan files for gfp and slab usages and update includes such that
    only the necessary includes are there. ie. if only gfp is used,
    gfp.h, if slab is used, slab.h.

    * When the script inserts a new include, it looks at the include
    blocks and try to put the new include such that its order conforms
    to its surrounding. It's put in the include block which contains
    core kernel includes, in the same order that the rest are ordered -
    alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
    doesn't seem to be any matching order.

    * If the script can't find a place to put a new include (mostly
    because the file doesn't have fitting include block), it prints out
    an error message indicating which .h file needs to be added to the
    file.

    The conversion was done in the following steps.

    1. The initial automatic conversion of all .c files updated slightly
    over 4000 files, deleting around 700 includes and adding ~480 gfp.h
    and ~3000 slab.h inclusions. The script emitted errors for ~400
    files.

    2. Each error was manually checked. Some didn't need the inclusion,
    some needed manual addition while adding it to implementation .h or
    embedding .c file was more appropriate for others. This step added
    inclusions to around 150 files.

    3. The script was run again and the output was compared to the edits
    from #2 to make sure no file was left behind.

    4. Several build tests were done and a couple of problems were fixed.
    e.g. lib/decompress_*.c used malloc/free() wrappers around slab
    APIs requiring slab.h to be added manually.

    5. The script was run on all .h files but without automatically
    editing them as sprinkling gfp.h and slab.h inclusions around .h
    files could easily lead to inclusion dependency hell. Most gfp.h
    inclusion directives were ignored as stuff from gfp.h was usually
    wildly available and often used in preprocessor macros. Each
    slab.h inclusion directive was examined and added manually as
    necessary.

    6. percpu.h was updated not to include slab.h.

    7. Build test were done on the following configurations and failures
    were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my
    distributed build env didn't work with gcov compiles) and a few
    more options had to be turned off depending on archs to make things
    build (like ipr on powerpc/64 which failed due to missing writeq).

    * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
    * powerpc and powerpc64 SMP allmodconfig
    * sparc and sparc64 SMP allmodconfig
    * ia64 SMP allmodconfig
    * s390 SMP allmodconfig
    * alpha SMP allmodconfig
    * um on x86_64 SMP allmodconfig

    8. percpu.h modifications were reverted so that it could be applied as
    a separate patch and serve as bisection point.

    Given the fact that I had only a couple of failures from tests on step
    6, I'm fairly confident about the coverage of this conversion patch.
    If there is a breakage, it's likely to be something in one of the arch
    headers which should be easily discoverable easily on most builds of
    the specific arch.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>

    Tejun Heo
     

30 Nov, 2009

1 commit

  • This module tests NAND ECC functions.

    The test is simple.

    1. Create a 256 or 512 bytes block of data filled with random bytes (data)
    2. Duplicate the data block and inject single bit error (error_data)
    3. Try to correct error_data
    4. Compare data and error_data

    Signed-off-by: Akinobu Mita
    Acked-by: Vimal Singh
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Akinobu Mita