From: Eric Biggers <ebiggers3@gmail.com>
To: Coly Li <colyli@suse.de>
Cc: linux-kernel@vger.kernel.org, linux-bcache@vger.kernel.org,
linux-block@vger.kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Michael Lyle <mlyle@lyle.org>,
Kent Overstreet <kent.overstreet@gmail.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>,
Kate Stewart <kstewart@linuxfoundation.org>
Subject: Re: [PATCH v3 1/3] lib: add crc64 calculation routines
Date: Tue, 17 Jul 2018 09:31:16 -0700 [thread overview]
Message-ID: <20180717163116.GA75957@gmail.com> (raw)
In-Reply-To: <20180717145525.50852-2-colyli@suse.de>
Hi Coly,
On Tue, Jul 17, 2018 at 10:55:23PM +0800, Coly Li wrote:
> This patch adds the re-write crc64 calculation routines for Linux kernel.
> The CRC64 polynomical arithmetic follows ECMA-182 specification, inspired
> by CRC paper of Dr. Ross N. Williams
> (see http://www.ross.net/crc/download/crc_v3.txt) and other public domain
> implementations.
Please also mention who is planned to use this CRC-64 code. Again, if it's just
one user then there's no need for this patchset yet. If bcachefs is planned to
be another user (separate from bcache) then you need to say so.
>
> All the changes work in this way,
> - When Linux kernel is built, host program lib/gen_crc64table.c will be
> compiled to lib/gen_crc64table and executed.
> - The output of gen_crc64table execution is an array called as lookup
> table (a.k.a POLY 0x42f0e1eba9ea369) which contain 256 64bits-long
> numbers, this talbe is dumped into header file lib/crc64table.h.
> - Then the header file is included by lib/crc64.c for normal 64bit crc
> calculation.
> - Function declaration of the crc64 calculation routines is placed in
> include/linux/crc64.h
>
> Changelog:
> v3: More fixes for review comments of v2
> By review comments from Eric Biggers, current functions naming with
> 'le' is misleading. Remove 'le' from the crc function names, and use
> u64 to replace __le64 in parameters and return values.
> v2: Fix reivew comments of v1
> v1: Initial version.
>
> Signed-off-by: Coly Li <colyli@suse.de>
> Co-developed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Reviewed-by: Hannes Reinecke <hare@suse.de>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Cc: Michael Lyle <mlyle@lyle.org>
> Cc: Kent Overstreet <kent.overstreet@gmail.com>
> Cc: Linus Torvalds <torvalds@linux-foundation.org>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Kate Stewart <kstewart@linuxfoundation.org>
> Cc: Eric Biggers <ebiggers3@gmail.com>
> ---
> include/linux/crc64.h | 13 ++++++++
> lib/.gitignore | 2 ++
> lib/Kconfig | 8 +++++
> lib/Makefile | 11 +++++++
> lib/crc64.c | 71 +++++++++++++++++++++++++++++++++++++++++++
> lib/gen_crc64table.c | 69 +++++++++++++++++++++++++++++++++++++++++
> 6 files changed, 174 insertions(+)
> create mode 100644 include/linux/crc64.h
> create mode 100644 lib/crc64.c
> create mode 100644 lib/gen_crc64table.c
>
> diff --git a/include/linux/crc64.h b/include/linux/crc64.h
> new file mode 100644
> index 000000000000..3e87b61cd54f
> --- /dev/null
> +++ b/include/linux/crc64.h
> @@ -0,0 +1,13 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +/*
> + * See lib/crc64.c for the related specification and polynomical arithmetic.
> + */
> +#ifndef _LINUX_CRC64_H
> +#define _LINUX_CRC64_H
> +
> +#include <linux/types.h>
> +
> +u64 __pure crc64_update(u64 crc, const void *_p, size_t len);
> +u64 __pure crc64(const void *p, size_t len);
> +u64 __pure crc64_bch(const void *p, size_t len);
> +#endif /* _LINUX_CRC64_H */
I still think you should make the API consistent with lib/crc32.c by replacing
the three functions with just:
u64 __pure crc64_be(u64 crc, const void *p, size_t len);
Your API maps to it as follows:
crc64_update(crc, p, len) == crc64_be(crc, p, len)
crc64(p, len) == crc64_be(0, p, len)
crc64_bch(p, len) == ~crc64_be(~0, p, len)
The "_be" suffix clarifies that it's not using the bit-reversed convention. We
don't want to have to rename everything when someone needs to do CRC-64 using
the other convention. The CRC-64 in the .xz file format, for example, uses the
bit-reversed convention.
The other problem with your API (besides it being inconsistent with lib/crc32.c)
is that as soon as the caller needs to do something nontrivial, like passing the
data in multiple chunks or using different conventions for the initial and final
values, then they actually have to use only "crc64_update()" anyway, which is
confusing as it makes it sound like there should be a "crc64_init()" and
"crc64_final()" to go along with "crc64_update()".
Also, naming CRC conventions after a specific user ("bch") isn't appropriate.
Thanks,
- Eric
next prev parent reply other threads:[~2018-07-17 16:31 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-17 14:55 [PATCH v3 0/3] add crc64 calculation as kernel library Coly Li
2018-07-17 14:55 ` [PATCH v3 1/3] lib: add crc64 calculation routines Coly Li
2018-07-17 15:43 ` Andy Shevchenko
2018-07-18 13:58 ` Coly Li
2018-07-17 16:31 ` Eric Biggers [this message]
2018-07-18 14:02 ` Coly Li
2018-07-24 13:33 ` David Laight
2018-07-17 14:55 ` [PATCH v3 2/3] bcache: use routines from lib/crc64.c for CRC64 calculation Coly Li
2018-07-17 15:44 ` Andy Shevchenko
2018-07-17 14:55 ` [PATCH v3 3/3] lib/test_crc: Add test cases for crc calculation Coly Li
2018-07-17 16:57 ` Randy Dunlap
2018-07-18 14:53 ` Coly Li
2018-07-17 17:11 ` Andy Shevchenko
2018-07-18 15:28 ` Coly Li
2018-07-17 18:51 ` Noah Massey
2018-07-17 20:59 ` Andy Shevchenko
2018-07-18 18:30 ` Noah Massey
2018-07-18 15:28 ` Coly Li
2018-07-17 15:46 ` [PATCH v3 0/3] add crc64 calculation as kernel library Andy Shevchenko
2018-07-19 2:45 ` Coly Li
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180717163116.GA75957@gmail.com \
--to=ebiggers3@gmail.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=colyli@suse.de \
--cc=gregkh@linuxfoundation.org \
--cc=kent.overstreet@gmail.com \
--cc=kstewart@linuxfoundation.org \
--cc=linux-bcache@vger.kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mlyle@lyle.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).