14 Feb, 2015

1 commit

  • Commit 8f243af42ade ("sections: fix const sections for crc32 table")
    removed the compile-time generated crc32 tables from the RO sections,
    because it conflicts with the definition of __cacheline_aligned which
    puts all such aligned data into .data..cacheline_aligned section
    optimized for wasting less space, and can cause alignment issues when
    used in combination with const with some gcc versions like 4.7.0 due to
    a gcc bug [1].

    Given that most gcc versions should have the fix by now, we can just use
    ____cacheline_aligned, which only aligns the data but doesn't move it
    into specific sections as opposed to __cacheline_aligned. In case of
    gcc versions having the mentioned bug, the alignment attribute will have
    no effect, but the data will still be made RO.

    After patch tables are in RO:

    $ nm -v lib/crc32.o | grep -1 -E "crc32c?table"
    0000000000000000 t arch_local_irq_enable
    0000000000000000 r crc32ctable_le
    0000000000000000 t crc32_exit
    --
    0000000000000960 t test_buf
    0000000000002000 r crc32table_be
    0000000000004000 r crc32table_le
    000000001d1056e5 A __crc_crc32_be

    [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52181

    Signed-off-by: Daniel Borkmann
    Cc: Joe Mario
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Daniel Borkmann
     

06 Oct, 2012

1 commit

  • Fix the const sections for the code generated by crc32 table. There's
    no ro version of the cacheline aligned section, so we cannot put in
    const data without a conflict Just don't make the crc tables const for
    now.

    [ak@linux.intel.com: some fixes and new description]
    [akpm@linux-foundation.org: checkpatch fixes]
    Signed-off-by: Joe Mario
    Signed-off-by: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Joe Mario
     

24 Mar, 2012

4 commits

  • Reuse the existing crc32 code to stamp out a crc32c implementation.

    Signed-off-by: Darrick J. Wong
    Cc: Herbert Xu
    Cc: Bob Pearson
    Cc: Randy Dunlap
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Darrick J. Wong
     
  • Add slicing-by-8 algorithm to the existing slicing-by-4 algorithm. This
    consists of:

    - extend largest BITS size from 32 to 64
    - extend tables from tab[4][256] to up to tab[8][256]
    - Add code for inner loop.

    [djwong@us.ibm.com: Minor changelog tweaks]
    Signed-off-by: Bob Pearson
    Signed-off-by: Darrick J. Wong
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Bob Pearson
     
  • crc32.c provides a choice of one of several algorithms for computing the
    LSB and LSB versions of the CRC32 checksum based on the parameters
    CRC_LE_BITS and CRC_BE_BITS.

    In the original version the values 1, 2, 4 and 8 respectively selected
    versions of the alrogithm that computed the crc 1, 2, 4 and 32 bits as a
    time.

    This patch series adds a new version that computes the CRC 64 bits at a
    time. To make things easier to understand the parameter has been
    reinterpreted to actually stand for the number of bits processed in each
    step of the algorithm so that the old value 8 has been replaced with the
    value 32.

    This also allows us to add in a widely used crc algorithm that computes
    the crc 8 bits at a time called the Sarwate algorithm.

    [djwong@us.ibm.com: Minor changelog tweaks]
    Signed-off-by: Bob Pearson
    Signed-off-by: Darrick J. Wong
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Bob Pearson
     
  • Misc cleanup of lib/crc32.c and related files.

    - remove unnecessary header files.

    - straighten out some convoluted ifdef's

    - rewrite some references to 2 dimensional arrays as 1 dimensional
    arrays to make them correct. I.e. replace tab[i] with tab[0][i].

    - a few trivial whitespace changes

    - fix a warning in gen_crc32tables.c caused by a mismatch in the type of
    the pointer passed to output table. Since the table is only used at
    kernel compile time, it is simpler to make the table big enough to hold
    the largest column size used. One cannot make the column size smaller
    in output_table because it has to be used by both the le and be tables
    and they can have different column sizes.

    [djwong@us.ibm.com: Minor changelog tweaks]
    Signed-off-by: Bob Pearson
    Signed-off-by: Darrick J. Wong
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Bob Pearson
     

25 May, 2010

1 commit

  • Precompute more crc32 values(0xcc00, 0xcc0000 and 0xcc000000) into tables.
    This increases the table size from 1KB to 4KB but the performance benfit
    makes it worth it:

    28% faster on MPC8321, 266 MHz
    2x faster on Core 2 Duo, 3.1GHz

    [akpm@linux-foundation.org: coding-style fixes]
    Signed-off-by: Joakim Tjernlund
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Joakim Tjernlund
     

17 Apr, 2005

1 commit

  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds