23 May, 2015

1 commit


22 May, 2015

1 commit

  • Multitheaded tests showed that the icv buffer in the current ghash
    implementation is not handled correctly. A move of this working ghash
    buffer value to the descriptor context fixed this. Code is tested and
    verified with an multithreaded application via af_alg interface.

    Cc: stable@vger.kernel.org
    Signed-off-by: Harald Freudenberger
    Signed-off-by: Gerald Schaefer
    Reported-by: Herbert Xu
    Signed-off-by: Herbert Xu

    Harald Freudenberger
     

13 May, 2015

1 commit

  • The store-clock-fast loop in generate_entropy() mixes (exors)
    only the first 64 bytes of the initial page before doing the
    first SHA256. Fix the loop to mix the store-clock-fast values
    all over the page.

    Signed-off-by: Harald Freudenberger
    Reported-by: David Binderman
    Signed-off-by: Martin Schwidefsky

    Harald Freudenberger
     

23 Apr, 2015

1 commit


25 Mar, 2015

1 commit


08 Jan, 2015

1 commit

  • In aes_encrypt() and aes_decrypt(), need let 'sctx->key' be modified,
    so remove 'const' for it. The related warnings:

    CC [M] arch/s390/crypto/aes_s390.o
    arch/s390/crypto/aes_s390.c: In function 'aes_encrypt':
    arch/s390/crypto/aes_s390.c:146:37: warning: passing argument 2 of 'crypt_s390_km' discards 'const' qualifier from pointer target type [-Wdiscarded-array-qualifiers]
    crypt_s390_km(KM_AES_128_ENCRYPT, &sctx->key, out, in,
    ^
    ...

    In file included from arch/s390/crypto/aes_s390.c:29:0:
    arch/s390/crypto/crypt_s390.h:154:19: note: expected 'void *' but argument is of type 'const u8 (*)[32] {aka const unsigned char (*)[32]}'
    static inline int crypt_s390_km(long func, void *param,
    ^

    Signed-off-by: Chen Gang
    Signed-off-by: Heiko Carstens
    Signed-off-by: Martin Schwidefsky

    Chen Gang
     

24 Nov, 2014

1 commit


08 May, 2014

1 commit


30 Jan, 2014

3 commits

  • In s390 des and 3des ctr mode there is one preallocated page
    used to speed up the en/decryption. This page is not protected
    against concurrent usage and thus there is a potential of data
    corruption with multiple threads.

    The fix introduces locking/unlocking the ctr page and a slower
    fallback solution at concurrency situations.

    Cc: stable@vger.kernel.org
    Signed-off-by: Harald Freudenberger
    Signed-off-by: Herbert Xu

    Harald Freudenberger
     
  • In s390 des and des3_ede cbc mode the iv value is not protected
    against concurrency access and modifications from another running
    en/decrypt operation which is using the very same tfm struct
    instance. This fix copies the iv to the local stack before
    the crypto operation and stores the value back when done.

    Cc: stable@vger.kernel.org
    Signed-off-by: Harald Freudenberger
    Signed-off-by: Herbert Xu

    Harald Freudenberger
     
  • The aes-ctr mode uses one preallocated page without any concurrency
    protection. When multiple threads run aes-ctr encryption or decryption
    this can lead to data corruption.

    The patch introduces locking for the page and a fallback solution with
    slower en/decryption performance in concurrency situations.

    Cc: stable@vger.kernel.org
    Signed-off-by: Harald Freudenberger
    Signed-off-by: Herbert Xu

    Harald Freudenberger
     

20 Dec, 2013

1 commit

  • Replace remaining occurences (just as we did in crypto/) under arch/*/crypto/
    that make use of memcmp() for comparing keys or authentication tags for
    usage with crypto_memneq(). It can simply be used as a drop-in replacement
    for the normal memcmp().

    Signed-off-by: Daniel Borkmann
    Cc: James Yonan
    Signed-off-by: Herbert Xu

    Daniel Borkmann
     

28 Nov, 2013

1 commit

  • Some s390 crypto algorithms incorrectly use the crypto_tfm structure to
    store private data. As the tfm can be shared among multiple threads, this
    can result in data corruption.

    This patch fixes aes-xts by moving the xts and pcc parameter blocks from
    the tfm onto the stack (48 + 96 bytes).

    Cc: stable@vger.kernel.org
    Signed-off-by: Gerald Schaefer
    Signed-off-by: Herbert Xu

    Gerald Schaefer
     

24 Nov, 2013

1 commit

  • Pull crypto update from Herbert Xu:
    - Made x86 ablk_helper generic for ARM
    - Phase out chainiv in favour of eseqiv (affects IPsec)
    - Fixed aes-cbc IV corruption on s390
    - Added constant-time crypto_memneq which replaces memcmp
    - Fixed aes-ctr in omap-aes
    - Added OMAP3 ROM RNG support
    - Add PRNG support for MSM SoC's
    - Add and use Job Ring API in caam
    - Misc fixes

    [ NOTE! This pull request was sent within the merge window, but Herbert
    has some questionable email sending setup that makes him public enemy
    #1 as far as gmail is concerned. So most of his emails seem to be
    trapped by gmail as spam, resulting in me not seeing them. - Linus ]

    * git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (49 commits)
    crypto: s390 - Fix aes-cbc IV corruption
    crypto: omap-aes - Fix CTR mode counter length
    crypto: omap-sham - Add missing modalias
    padata: make the sequence counter an atomic_t
    crypto: caam - Modify the interface layers to use JR API's
    crypto: caam - Add API's to allocate/free Job Rings
    crypto: caam - Add Platform driver for Job Ring
    hwrng: msm - Add PRNG support for MSM SoC's
    ARM: DT: msm: Add Qualcomm's PRNG driver binding document
    crypto: skcipher - Use eseqiv even on UP machines
    crypto: talitos - Simplify key parsing
    crypto: picoxcell - Simplify and harden key parsing
    crypto: ixp4xx - Simplify and harden key parsing
    crypto: authencesn - Simplify key parsing
    crypto: authenc - Export key parsing helper function
    crypto: mv_cesa: remove deprecated IRQF_DISABLED
    hwrng: OMAP3 ROM Random Number Generator support
    crypto: sha256_ssse3 - also test for BMI2
    crypto: mv_cesa - Remove redundant of_match_ptr
    crypto: sahara - Remove redundant of_match_ptr
    ...

    Linus Torvalds
     

05 Nov, 2013

1 commit

  • The cbc-aes-s390 algorithm incorrectly places the IV in the tfm
    data structure. As the tfm is shared between multiple threads,
    this introduces a possibility of data corruption.

    This patch fixes this by moving the parameter block containing
    the IV and key onto the stack (the block is 48 bytes long).

    The same bug exists elsewhere in the s390 crypto system and they
    will be fixed in subsequent patches.

    Cc: stable@vger.kernel.org
    Signed-off-by: Herbert Xu

    Herbert Xu
     

24 Oct, 2013

1 commit

  • If a machine has no hardware support for the xts-aes or ctr-aes algorithms
    they are not registered in aes_s390_init. But aes_s390_fini unconditionally
    unregisters the algorithms which causes crypto_remove_alg to crash.
    Add two flag variables to remember if xts-aes and ctr-aes have been added.

    Signed-off-by: Ingo Tuchscherer
    Signed-off-by: Martin Schwidefsky

    Ingo Tuchscherer
     

23 Nov, 2012

1 commit


01 Aug, 2012

1 commit

  • Initialization of cra_list is currently mixed, most ciphers initialize this
    field and most shashes do not. Initialization however is not needed at all
    since cra_list is initialized/overwritten in __crypto_register_alg() with
    list_add(). Therefore perform cleanup to remove all unneeded initializations
    of this field in 'arch/s390/crypto/'

    Cc: Gerald Schaefer
    Cc: linux-s390@vger.kernel.org
    Signed-off-by: Jussi Kivilinna
    Signed-off-by: Jan Glauber
    Signed-off-by: Herbert Xu

    Jussi Kivilinna
     

27 Jul, 2012

1 commit

  • Pull crypto updates from Herbert Xu:

    - Fixed algorithm construction hang when self-test fails.
    - Added SHA variants to talitos AEAD list.
    - New driver for Exynos random number generator.
    - Performance enhancements for arc4.
    - Added hwrng support to caam.
    - Added ahash support to caam.
    - Fixed bad kfree in aesni-intel.
    - Allow aesni-intel in FIPS mode.
    - Added atmel driver with support for AES/3DES/SHA.
    - Bug fixes for mv_cesa.
    - CRC hardware driver for BF60x family processors.

    * git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (66 commits)
    crypto: twofish-avx - remove useless instruction
    crypto: testmgr - add aead cbc aes hmac sha1,256,512 test vectors
    crypto: talitos - add sha224, sha384 and sha512 to existing AEAD algorithms
    crypto: talitos - export the talitos_submit function
    crypto: talitos - move talitos structures to header file
    crypto: atmel - add new tests to tcrypt
    crypto: atmel - add Atmel SHA1/SHA256 driver
    crypto: atmel - add Atmel DES/TDES driver
    crypto: atmel - add Atmel AES driver
    ARM: AT91SAM9G45: add crypto peripherals
    crypto: testmgr - allow aesni-intel and ghash_clmulni-intel in fips mode
    hwrng: exynos - Add support for Exynos random number generator
    crypto: aesni-intel - fix wrong kfree pointer
    crypto: caam - ERA retrieval and printing for SEC device
    crypto: caam - Using alloc_coherent for caam job rings
    crypto: algapi - Fix hang on crypto allocation
    crypto: arc4 - now arc needs blockcipher support
    crypto: caam - one tasklet per job ring
    crypto: caam - consolidate memory barriers from job ring en/dequeue
    crypto: caam - only query h/w in job ring dequeue path
    ...

    Linus Torvalds
     

20 Jul, 2012

1 commit

  • Remove the file name from the comment at top of many files. In most
    cases the file name was wrong anyway, so it's rather pointless.

    Also unify the IBM copyright statement. We did have a lot of sightly
    different statements and wanted to change them one after another
    whenever a file gets touched. However that never happened. Instead
    people start to take the old/"wrong" statements to use as a template
    for new files.
    So unify all of them in one go.

    Signed-off-by: Heiko Carstens

    Heiko Carstens
     

14 Jun, 2012

1 commit

  • Commit 98971f8439b1bb9a61682fe24a865ddd25167a6b ("crypto: s390 - cleanup
    DES code") should have also removed crypto_des.h. That file is unused
    and unneeded since that commit. So let's clean up that file too.

    Signed-off-by: Paul Bolle
    Acked-by: Jan Glauber
    Signed-off-by: Herbert Xu

    Paul Bolle
     

29 Mar, 2012

1 commit


14 Nov, 2011

1 commit


01 Nov, 2011

1 commit

  • Fix several compile errors on s390 caused by splitting module.h.

    Some include additions [e.g. qdio_setup.c, zfcp_qdio.c] are in
    anticipation of pending changes queued for s390 that increase
    the modular use footprint.

    [PG: added additional obvious changes since Heiko's original patch]

    Signed-off-by: Heiko Carstens
    Signed-off-by: Paul Gortmaker

    Heiko Carstens
     

04 Jul, 2011

1 commit


21 May, 2011

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (45 commits)
    crypto: caam - add support for sha512 variants of existing AEAD algorithms
    crypto: caam - remove unused authkeylen from caam_ctx
    crypto: caam - fix decryption shared vs. non-shared key setting
    crypto: caam - platform_bus_type migration
    crypto: aesni-intel - fix aesni build on i386
    crypto: aesni-intel - Merge with fpu.ko
    crypto: mv_cesa - make count_sgs() null-pointer proof
    crypto: mv_cesa - copy remaining bytes to SRAM only when needed
    crypto: mv_cesa - move digest state initialisation to a better place
    crypto: mv_cesa - fill inner/outer IV fields only in HMAC case
    crypto: mv_cesa - refactor copy_src_to_buf()
    crypto: mv_cesa - no need to save digest state after the last chunk
    crypto: mv_cesa - print a warning when registration of AES algos fail
    crypto: mv_cesa - drop this call to mv_hash_final from mv_hash_finup
    crypto: mv_cesa - the descriptor pointer register needs to be set just once
    crypto: mv_cesa - use ablkcipher_request_cast instead of the manual container_of
    crypto: caam - fix printk recursion for long error texts
    crypto: caam - remove unused keylen from session context
    hwrng: amd - enable AMD hw rnd driver for Maple PPC boards
    hwrng: amd - manage resource allocation
    ...

    Linus Torvalds
     

04 May, 2011

5 commits


27 Apr, 2011

1 commit

  • The git commit c708c57e247775928b9a6bce7b4d8d14883bf39b fixed the
    access beyond the end of the stack in prng_seed but the pointer
    arithmetic is still incorrect. The calculation has been off by
    a factor of 64, now it is only off by a factor of 8. prng_seed
    is called with a maximum of 16 for nbytes, small enough that
    the incorrect calculation stays insides the limits of the stack.
    Place parentheses for correct pointer arithmetic.

    Signed-off-by: Martin Schwidefsky

    Martin Schwidefsky
     

20 Apr, 2011

1 commit

  • While initializing the state of the prng only the first 8 bytes of
    random data where used, the second 8 bytes were read from the memory
    after the stack. If only 64 bytes of the kernel stack are used and
    CONFIG_DEBUG_PAGEALLOC is enabled a kernel panic may occur because of
    the invalid page access. Use the correct multiplicator to stay within
    the random data buffer.

    Signed-off-by: Jan Glauber
    Signed-off-by: Martin Schwidefsky

    Jan Glauber
     

07 Feb, 2011

1 commit

  • The partial block handling in sha-s390 is broken when we get a
    partial block that is followed by an update which fills it with
    bytes left-over. Instead of storing the newly left-over bytes
    at the start of the buffer, it will be stored immediately after
    the previous partial block.

    This patch fixes this by resetting the index pointer.

    Signed-off-by: Herbert Xu

    Herbert Xu
     

25 Oct, 2010

1 commit


15 Oct, 2010

1 commit

  • All file_operations should get a .llseek operation so we can make
    nonseekable_open the default for future file operations without a
    .llseek pointer.

    The three cases that we can automatically detect are no_llseek, seq_lseek
    and default_llseek. For cases where we can we can automatically prove that
    the file offset is always ignored, we use noop_llseek, which maintains
    the current behavior of not returning an error from a seek.

    New drivers should normally not use noop_llseek but instead use no_llseek
    and call nonseekable_open at open time. Existing drivers can be converted
    to do the same when the maintainer knows for certain that no user code
    relies on calling seek on the device file.

    The generated code is often incorrectly indented and right now contains
    comments that clarify for each added line why a specific variant was
    chosen. In the version that gets submitted upstream, the comments will
    be gone and I will manually fix the indentation, because there does not
    seem to be a way to do that using coccinelle.

    Some amount of new code is currently sitting in linux-next that should get
    the same modifications, which I will do at the end of the merge window.

    Many thanks to Julia Lawall for helping me learn to write a semantic
    patch that does all this.

    ===== begin semantic patch =====
    // This adds an llseek= method to all file operations,
    // as a preparation for making no_llseek the default.
    //
    // The rules are
    // - use no_llseek explicitly if we do nonseekable_open
    // - use seq_lseek for sequential files
    // - use default_llseek if we know we access f_pos
    // - use noop_llseek if we know we don't access f_pos,
    // but we still want to allow users to call lseek
    //
    @ open1 exists @
    identifier nested_open;
    @@
    nested_open(...)
    {

    }

    @ open exists@
    identifier open_f;
    identifier i, f;
    identifier open1.nested_open;
    @@
    int open_f(struct inode *i, struct file *f)
    {

    }

    @ read disable optional_qualifier exists @
    identifier read_f;
    identifier f, p, s, off;
    type ssize_t, size_t, loff_t;
    expression E;
    identifier func;
    @@
    ssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)
    {

    }

    @ read_no_fpos disable optional_qualifier exists @
    identifier read_f;
    identifier f, p, s, off;
    type ssize_t, size_t, loff_t;
    @@
    ssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)
    {
    ... when != off
    }

    @ write @
    identifier write_f;
    identifier f, p, s, off;
    type ssize_t, size_t, loff_t;
    expression E;
    identifier func;
    @@
    ssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)
    {

    }

    @ write_no_fpos @
    identifier write_f;
    identifier f, p, s, off;
    type ssize_t, size_t, loff_t;
    @@
    ssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)
    {
    ... when != off
    }

    @ fops0 @
    identifier fops;
    @@
    struct file_operations fops = {
    ...
    };

    @ has_llseek depends on fops0 @
    identifier fops0.fops;
    identifier llseek_f;
    @@
    struct file_operations fops = {
    ...
    .llseek = llseek_f,
    ...
    };

    @ has_read depends on fops0 @
    identifier fops0.fops;
    identifier read_f;
    @@
    struct file_operations fops = {
    ...
    .read = read_f,
    ...
    };

    @ has_write depends on fops0 @
    identifier fops0.fops;
    identifier write_f;
    @@
    struct file_operations fops = {
    ...
    .write = write_f,
    ...
    };

    @ has_open depends on fops0 @
    identifier fops0.fops;
    identifier open_f;
    @@
    struct file_operations fops = {
    ...
    .open = open_f,
    ...
    };

    // use no_llseek if we call nonseekable_open
    ////////////////////////////////////////////
    @ nonseekable1 depends on !has_llseek && has_open @
    identifier fops0.fops;
    identifier nso ~= "nonseekable_open";
    @@
    struct file_operations fops = {
    ... .open = nso, ...
    +.llseek = no_llseek, /* nonseekable */
    };

    @ nonseekable2 depends on !has_llseek @
    identifier fops0.fops;
    identifier open.open_f;
    @@
    struct file_operations fops = {
    ... .open = open_f, ...
    +.llseek = no_llseek, /* open uses nonseekable */
    };

    // use seq_lseek for sequential files
    /////////////////////////////////////
    @ seq depends on !has_llseek @
    identifier fops0.fops;
    identifier sr ~= "seq_read";
    @@
    struct file_operations fops = {
    ... .read = sr, ...
    +.llseek = seq_lseek, /* we have seq_read */
    };

    // use default_llseek if there is a readdir
    ///////////////////////////////////////////
    @ fops1 depends on !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier readdir_e;
    @@
    // any other fop is used that changes pos
    struct file_operations fops = {
    ... .readdir = readdir_e, ...
    +.llseek = default_llseek, /* readdir is present */
    };

    // use default_llseek if at least one of read/write touches f_pos
    /////////////////////////////////////////////////////////////////
    @ fops2 depends on !fops1 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier read.read_f;
    @@
    // read fops use offset
    struct file_operations fops = {
    ... .read = read_f, ...
    +.llseek = default_llseek, /* read accesses f_pos */
    };

    @ fops3 depends on !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier write.write_f;
    @@
    // write fops use offset
    struct file_operations fops = {
    ... .write = write_f, ...
    + .llseek = default_llseek, /* write accesses f_pos */
    };

    // Use noop_llseek if neither read nor write accesses f_pos
    ///////////////////////////////////////////////////////////

    @ fops4 depends on !fops1 && !fops2 && !fops3 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier read_no_fpos.read_f;
    identifier write_no_fpos.write_f;
    @@
    // write fops use offset
    struct file_operations fops = {
    ...
    .write = write_f,
    .read = read_f,
    ...
    +.llseek = noop_llseek, /* read and write both use no f_pos */
    };

    @ depends on has_write && !has_read && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier write_no_fpos.write_f;
    @@
    struct file_operations fops = {
    ... .write = write_f, ...
    +.llseek = noop_llseek, /* write uses no f_pos */
    };

    @ depends on has_read && !has_write && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier read_no_fpos.read_f;
    @@
    struct file_operations fops = {
    ... .read = read_f, ...
    +.llseek = noop_llseek, /* read uses no f_pos */
    };

    @ depends on !has_read && !has_write && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    @@
    struct file_operations fops = {
    ...
    +.llseek = noop_llseek, /* no read or write fn */
    };
    ===== End semantic patch =====

    Signed-off-by: Arnd Bergmann
    Cc: Julia Lawall
    Cc: Christoph Hellwig

    Arnd Bergmann
     

26 May, 2010

1 commit


21 May, 2010

2 commits

  • Get rid of the des_s390 specific key check module and use the generic DES
    weak key check instead. Also use the generic DES header and remove the
    weak key check in 3DES mode, as RFC2451 mentions that the DES weak keys
    are not relevant for 3DES.

    Signed-off-by: Jan Glauber
    Signed-off-by: Herbert Xu

    Jan Glauber
     
  • des_s390 implements support for 3DES with a 128 bit key. This mode is probably
    not used anywhere, less secure than 3DES with a 192 bit key and not
    implemented in the generic des version. Removing this mode seems to be low risk
    and will ease maintenance of the code.

    Signed-off-by: Jan Glauber
    Signed-off-by: Herbert Xu

    Jan Glauber
     

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