aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin LI <delphij@FreeBSD.org>2019-06-17 19:49:08 +0000
committerXin LI <delphij@FreeBSD.org>2019-06-17 19:49:08 +0000
commitf89d2072795407d7c3afff865b988e021c1451a2 (patch)
treefc7552224ad2e9653cf440ba79eb8f3a5ea6129a
parent2d4a74d7a0a6295ec462a3a2e5f2588bd21eb36a (diff)
downloadsrc-f89d2072795407d7c3afff865b988e021c1451a2.tar.gz
src-f89d2072795407d7c3afff865b988e021c1451a2.zip
Separate kernel crc32() implementation to its own header (gsb_crc32.h) and
rename the source to gsb_crc32.c. This is a prerequisite of unifying kernel zlib instances. PR: 229763 Submitted by: Yoshihiro Ota <ota at j.email.ne.jp> Differential Revision: https://reviews.freebsd.org/D20193
Notes
Notes: svn path=/head/; revision=349151
-rw-r--r--lib/libufs/Makefile3
-rw-r--r--stand/libsa/crc32_libkern.c2
-rw-r--r--sys/conf/files2
-rw-r--r--sys/dev/iscsi/icl_soft.c1
-rw-r--r--sys/dev/iscsi_initiator/isc_subr.c1
-rw-r--r--sys/dev/liquidio/lio_bsd.h1
-rw-r--r--sys/dev/usb/net/if_cdce.c2
-rw-r--r--sys/fs/ext2fs/ext2_csum.c1
-rw-r--r--sys/fs/nandfs/nandfs_segment.c1
-rw-r--r--sys/fs/nandfs/nandfs_subr.c1
-rw-r--r--sys/fs/nandfs/nandfs_vfsops.c1
-rw-r--r--sys/geom/part/g_part_bsd64.c1
-rw-r--r--sys/geom/part/g_part_gpt.c1
-rw-r--r--sys/geom/raid/md_ddf.c1
-rw-r--r--sys/kern/subr_compressor.c1
-rw-r--r--sys/libkern/gsb_crc32.c (renamed from sys/libkern/crc32.c)1
-rw-r--r--sys/libkern/x86/crc32_sse42.c9
-rw-r--r--sys/netinet/libalias/alias_sctp.c1
-rw-r--r--sys/netinet/sctp_crc32.c1
-rw-r--r--sys/netpfil/pf/pf.c1
-rw-r--r--sys/sys/gsb_crc32.h47
-rw-r--r--sys/sys/libkern.h33
-rw-r--r--sys/sys/param.h2
-rw-r--r--sys/ufs/ffs/ffs_alloc.c1
-rw-r--r--sys/ufs/ffs/ffs_snapshot.c1
-rw-r--r--sys/ufs/ffs/ffs_subr.c1
-rw-r--r--sys/ufs/ffs/ffs_vfsops.c1
-rw-r--r--tests/sys/kern/Makefile1
-rw-r--r--tests/sys/kern/libkern_crc32.c7
29 files changed, 77 insertions, 50 deletions
diff --git a/lib/libufs/Makefile b/lib/libufs/Makefile
index 2685f7318ac1..a3f4cb3991ed 100644
--- a/lib/libufs/Makefile
+++ b/lib/libufs/Makefile
@@ -5,7 +5,8 @@ LIB= ufs
SHLIBDIR?= /lib
SHLIB_MAJOR= 7
-SRCS= block.c cgroup.c crc32.c inode.c sblock.c type.c ffs_subr.c ffs_tables.c
+SRCS= block.c cgroup.c gsb_crc32.c inode.c sblock.c type.c ffs_subr.c
+SRCS+= ffs_tables.c
INCS= libufs.h
MAN= bread.3 cgread.3 getinode.3 libufs.3 sbread.3 ufs_disk_close.3
diff --git a/stand/libsa/crc32_libkern.c b/stand/libsa/crc32_libkern.c
index 995815294d58..d2bd738d4c20 100644
--- a/stand/libsa/crc32_libkern.c
+++ b/stand/libsa/crc32_libkern.c
@@ -1,3 +1,3 @@
/* $FreeBSD$ */
-#include "../../sys/libkern/crc32.c"
+#include "../../sys/libkern/gsb_crc32.c"
diff --git a/sys/conf/files b/sys/conf/files
index 3c5146977747..b449a90febc4 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -3982,9 +3982,9 @@ crypto/chacha20/chacha.c standard
libkern/asprintf.c standard
libkern/bcd.c standard
libkern/bsearch.c standard
-libkern/crc32.c standard
libkern/explicit_bzero.c standard
libkern/fnmatch.c standard
+libkern/gsb_crc32.c standard
libkern/iconv.c optional libiconv
libkern/iconv_converter_if.m optional libiconv
libkern/iconv_ucs.c optional libiconv
diff --git a/sys/dev/iscsi/icl_soft.c b/sys/dev/iscsi/icl_soft.c
index 66df484f4308..0b4f4f64c720 100644
--- a/sys/dev/iscsi/icl_soft.c
+++ b/sys/dev/iscsi/icl_soft.c
@@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$");
#include <sys/capsicum.h>
#include <sys/condvar.h>
#include <sys/conf.h>
+#include <sys/gsb_crc32.h>
#include <sys/file.h>
#include <sys/kernel.h>
#include <sys/kthread.h>
diff --git a/sys/dev/iscsi_initiator/isc_subr.c b/sys/dev/iscsi_initiator/isc_subr.c
index f3dfcb715e2f..9c27c7313d85 100644
--- a/sys/dev/iscsi_initiator/isc_subr.c
+++ b/sys/dev/iscsi_initiator/isc_subr.c
@@ -39,6 +39,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/conf.h>
+#include <sys/gsb_crc32.h>
#include <sys/systm.h>
#include <sys/malloc.h>
#include <sys/ctype.h>
diff --git a/sys/dev/liquidio/lio_bsd.h b/sys/dev/liquidio/lio_bsd.h
index ac170c9c654f..fd6402ea2297 100644
--- a/sys/dev/liquidio/lio_bsd.h
+++ b/sys/dev/liquidio/lio_bsd.h
@@ -36,6 +36,7 @@
#define __LIO_BSD_H__
#include <sys/param.h>
+#include <sys/gsb_crc32.h>
#include <sys/eventhandler.h>
#include <sys/socket.h>
#include <sys/kernel.h>
diff --git a/sys/dev/usb/net/if_cdce.c b/sys/dev/usb/net/if_cdce.c
index c5d0233c0258..d63539da7e89 100644
--- a/sys/dev/usb/net/if_cdce.c
+++ b/sys/dev/usb/net/if_cdce.c
@@ -50,7 +50,7 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#include <sys/param.h>
+#include <sys/gsb_crc32.h>
#include <sys/eventhandler.h>
#include <sys/stdint.h>
#include <sys/stddef.h>
diff --git a/sys/fs/ext2fs/ext2_csum.c b/sys/fs/ext2fs/ext2_csum.c
index de8f8019f4bc..0ca258f12f72 100644
--- a/sys/fs/ext2fs/ext2_csum.c
+++ b/sys/fs/ext2fs/ext2_csum.c
@@ -40,6 +40,7 @@
#include <sys/buf.h>
#include <sys/endian.h>
#include <sys/conf.h>
+#include <sys/gsb_crc32.h>
#include <sys/mount.h>
#include <fs/ext2fs/fs.h>
diff --git a/sys/fs/nandfs/nandfs_segment.c b/sys/fs/nandfs/nandfs_segment.c
index c6c5885891ef..36efc89af409 100644
--- a/sys/fs/nandfs/nandfs_segment.c
+++ b/sys/fs/nandfs/nandfs_segment.c
@@ -34,6 +34,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/conf.h>
+#include <sys/gsb_crc32.h>
#include <sys/kernel.h>
#include <sys/lock.h>
#include <sys/malloc.h>
diff --git a/sys/fs/nandfs/nandfs_subr.c b/sys/fs/nandfs/nandfs_subr.c
index 1f0521b69152..0a3f65a50543 100644
--- a/sys/fs/nandfs/nandfs_subr.c
+++ b/sys/fs/nandfs/nandfs_subr.c
@@ -33,6 +33,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/systm.h>
+#include <sys/gsb_crc32.h>
#include <sys/namei.h>
#include <sys/resourcevar.h>
#include <sys/kernel.h>
diff --git a/sys/fs/nandfs/nandfs_vfsops.c b/sys/fs/nandfs/nandfs_vfsops.c
index c8d6daa9a3cd..f703044728ef 100644
--- a/sys/fs/nandfs/nandfs_vfsops.c
+++ b/sys/fs/nandfs/nandfs_vfsops.c
@@ -34,6 +34,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/fcntl.h>
+#include <sys/gsb_crc32.h>
#include <sys/kernel.h>
#include <sys/lock.h>
#include <sys/malloc.h>
diff --git a/sys/geom/part/g_part_bsd64.c b/sys/geom/part/g_part_bsd64.c
index ff5d7ef6d054..6332a38096fd 100644
--- a/sys/geom/part/g_part_bsd64.c
+++ b/sys/geom/part/g_part_bsd64.c
@@ -29,6 +29,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/bio.h>
+#include <sys/gsb_crc32.h>
#include <sys/disklabel.h>
#include <sys/endian.h>
#include <sys/gpt.h>
diff --git a/sys/geom/part/g_part_gpt.c b/sys/geom/part/g_part_gpt.c
index e1bea703a154..dca10c9534cb 100644
--- a/sys/geom/part/g_part_gpt.c
+++ b/sys/geom/part/g_part_gpt.c
@@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/bio.h>
#include <sys/diskmbr.h>
+#include <sys/gsb_crc32.h>
#include <sys/endian.h>
#include <sys/gpt.h>
#include <sys/kernel.h>
diff --git a/sys/geom/raid/md_ddf.c b/sys/geom/raid/md_ddf.c
index 3ac13bded073..a731da89d8ea 100644
--- a/sys/geom/raid/md_ddf.c
+++ b/sys/geom/raid/md_ddf.c
@@ -31,6 +31,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/bio.h>
+#include <sys/gsb_crc32.h>
#include <sys/endian.h>
#include <sys/kernel.h>
#include <sys/kobj.h>
diff --git a/sys/kern/subr_compressor.c b/sys/kern/subr_compressor.c
index 62c818439271..03dd295388ad 100644
--- a/sys/kern/subr_compressor.c
+++ b/sys/kern/subr_compressor.c
@@ -66,6 +66,7 @@ SET_DECLARE(compressors, struct compressor_methods);
#ifdef GZIO
+#include <sys/gsb_crc32.h>
#include <sys/zutil.h>
struct gz_stream {
diff --git a/sys/libkern/crc32.c b/sys/libkern/gsb_crc32.c
index 149de3de6dee..46d6517f7940 100644
--- a/sys/libkern/crc32.c
+++ b/sys/libkern/gsb_crc32.c
@@ -50,6 +50,7 @@ __FBSDID("$FreeBSD$");
#ifdef _KERNEL
#include <sys/libkern.h>
#include <sys/systm.h>
+#include <sys/gsb_crc32.h>
#if defined(__amd64__) || defined(__i386__)
#include <machine/md_var.h>
diff --git a/sys/libkern/x86/crc32_sse42.c b/sys/libkern/x86/crc32_sse42.c
index 50e457410ad9..712b21cda46e 100644
--- a/sys/libkern/x86/crc32_sse42.c
+++ b/sys/libkern/x86/crc32_sse42.c
@@ -29,14 +29,14 @@ __FBSDID("$FreeBSD$");
/*
* This file is compiled in userspace in order to run ATF unit tests.
*/
-#ifdef USERSPACE_TESTING
+#ifndef _KERNEL
#include <stdint.h>
#include <stdlib.h>
#else
#include <sys/param.h>
-#include <sys/systm.h>
#include <sys/kernel.h>
#endif
+#include <sys/gsb_crc32.h>
static __inline uint32_t
_mm_crc32_u8(uint32_t x, uint8_t y)
@@ -199,7 +199,7 @@ crc32c_shift(uint32_t zeros[][256], uint32_t crc)
/* Initialize tables for shifting crcs. */
static void
-#ifdef USERSPACE_TESTING
+#ifndef _KERNEL
__attribute__((__constructor__))
#endif
crc32c_init_hw(void)
@@ -214,9 +214,6 @@ SYSINIT(crc32c_sse42, SI_SUB_LOCK, SI_ORDER_ANY, crc32c_init_hw, NULL);
#endif
/* Compute CRC-32C using the Intel hardware instruction. */
-#ifdef USERSPACE_TESTING
-uint32_t sse42_crc32c(uint32_t, const unsigned char *, unsigned);
-#endif
uint32_t
sse42_crc32c(uint32_t crc, const unsigned char *buf, unsigned len)
{
diff --git a/sys/netinet/libalias/alias_sctp.c b/sys/netinet/libalias/alias_sctp.c
index dd9b97b57475..da2dd8c5b8ac 100644
--- a/sys/netinet/libalias/alias_sctp.c
+++ b/sys/netinet/libalias/alias_sctp.c
@@ -75,6 +75,7 @@
#ifdef _KERNEL
#include <machine/stdarg.h>
#include <sys/param.h>
+#include <sys/gsb_crc32.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/module.h>
diff --git a/sys/netinet/sctp_crc32.c b/sys/netinet/sctp_crc32.c
index da5df194b8b3..1c3421a15585 100644
--- a/sys/netinet/sctp_crc32.c
+++ b/sys/netinet/sctp_crc32.c
@@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$");
#include "opt_sctp.h"
+#include <sys/gsb_crc32.h>
#ifdef SCTP
#include <netinet/sctp_os.h>
#include <netinet/sctp.h>
diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c
index 97c826f77911..a3a1e512d8cd 100644
--- a/sys/netpfil/pf/pf.c
+++ b/sys/netpfil/pf/pf.c
@@ -48,6 +48,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/bus.h>
#include <sys/endian.h>
+#include <sys/gsb_crc32.h>
#include <sys/hash.h>
#include <sys/interrupt.h>
#include <sys/kernel.h>
diff --git a/sys/sys/gsb_crc32.h b/sys/sys/gsb_crc32.h
new file mode 100644
index 000000000000..c5a42d3d3152
--- /dev/null
+++ b/sys/sys/gsb_crc32.h
@@ -0,0 +1,47 @@
+/*-
+ * COPYRIGHT (C) 1986 Gary S. Brown. You may use this program, or
+ * code or tables extracted from it, as desired without restriction.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _SYS_GSB_CRC32_H_
+#define _SYS_GSB_CRC32_H_
+
+#include <sys/types.h>
+
+#ifdef _KERNEL
+
+extern const uint32_t crc32_tab[];
+
+static __inline uint32_t
+crc32_raw(const void *buf, size_t size, uint32_t crc)
+{
+ const uint8_t *p = (const uint8_t *)buf;
+
+ while (size--)
+ crc = crc32_tab[(crc ^ *p++) & 0xFF] ^ (crc >> 8);
+ return (crc);
+}
+
+static __inline uint32_t
+crc32(const void *buf, size_t size)
+{
+ uint32_t crc;
+
+ crc = crc32_raw(buf, size, ~0U);
+ return (crc ^ ~0U);
+}
+
+uint32_t calculate_crc32c(uint32_t crc32c, const unsigned char *buffer,
+ unsigned int length);
+#endif
+
+#if defined(__amd64__) || defined(__i386__)
+uint32_t sse42_crc32c(uint32_t, const unsigned char *, unsigned);
+#endif
+#if defined(__aarch64__)
+uint32_t armv8_crc32c(uint32_t, const unsigned char *, unsigned int);
+#endif
+
+#endif /* !_SYS_GSB_CRC32_H_ */
diff --git a/sys/sys/libkern.h b/sys/sys/libkern.h
index 123f6eeda3f3..1e343f31bcaa 100644
--- a/sys/sys/libkern.h
+++ b/sys/sys/libkern.h
@@ -190,39 +190,6 @@ size_t strspn(const char *, const char *);
char *strstr(const char *, const char *);
int strvalid(const char *, size_t);
-extern const uint32_t crc32_tab[];
-
-static __inline uint32_t
-crc32_raw(const void *buf, size_t size, uint32_t crc)
-{
- const uint8_t *p = (const uint8_t *)buf;
-
- while (size--)
- crc = crc32_tab[(crc ^ *p++) & 0xFF] ^ (crc >> 8);
- return (crc);
-}
-
-static __inline uint32_t
-crc32(const void *buf, size_t size)
-{
- uint32_t crc;
-
- crc = crc32_raw(buf, size, ~0U);
- return (crc ^ ~0U);
-}
-
-uint32_t
-calculate_crc32c(uint32_t crc32c, const unsigned char *buffer,
- unsigned int length);
-#ifdef _KERNEL
-#if defined(__amd64__) || defined(__i386__)
-uint32_t sse42_crc32c(uint32_t, const unsigned char *, unsigned);
-#endif
-#if defined(__aarch64__)
-uint32_t armv8_crc32c(uint32_t, const unsigned char *, unsigned int);
-#endif
-#endif
-
static __inline char *
index(const char *p, int ch)
{
diff --git a/sys/sys/param.h b/sys/sys/param.h
index bf1c73c26406..2534537558c5 100644
--- a/sys/sys/param.h
+++ b/sys/sys/param.h
@@ -60,7 +60,7 @@
* in the range 5 to 9.
*/
#undef __FreeBSD_version
-#define __FreeBSD_version 1300031 /* Master, propagated to newvers */
+#define __FreeBSD_version 1300032 /* Master, propagated to newvers */
/*
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
diff --git a/sys/ufs/ffs/ffs_alloc.c b/sys/ufs/ffs/ffs_alloc.c
index e0062cc73c6e..9ebdec0c88c4 100644
--- a/sys/ufs/ffs/ffs_alloc.c
+++ b/sys/ufs/ffs/ffs_alloc.c
@@ -68,6 +68,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/capsicum.h>
+#include <sys/gsb_crc32.h>
#include <sys/systm.h>
#include <sys/bio.h>
#include <sys/buf.h>
diff --git a/sys/ufs/ffs/ffs_snapshot.c b/sys/ufs/ffs/ffs_snapshot.c
index 36449e9cb2cf..bc279e27269f 100644
--- a/sys/ufs/ffs/ffs_snapshot.c
+++ b/sys/ufs/ffs/ffs_snapshot.c
@@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$");
#include <sys/kernel.h>
#include <sys/systm.h>
#include <sys/conf.h>
+#include <sys/gsb_crc32.h>
#include <sys/bio.h>
#include <sys/buf.h>
#include <sys/fcntl.h>
diff --git a/sys/ufs/ffs/ffs_subr.c b/sys/ufs/ffs/ffs_subr.c
index b284cbf41f6b..fccccb7ce4b3 100644
--- a/sys/ufs/ffs/ffs_subr.c
+++ b/sys/ufs/ffs/ffs_subr.c
@@ -59,6 +59,7 @@ struct malloc_type;
#else /* _KERNEL */
#include <sys/systm.h>
+#include <sys/gsb_crc32.h>
#include <sys/lock.h>
#include <sys/malloc.h>
#include <sys/mount.h>
diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c
index a3bec1a39dc7..3174dc4de129 100644
--- a/sys/ufs/ffs/ffs_vfsops.c
+++ b/sys/ufs/ffs/ffs_vfsops.c
@@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$");
#include "opt_ddb.h"
#include <sys/param.h>
+#include <sys/gsb_crc32.h>
#include <sys/systm.h>
#include <sys/namei.h>
#include <sys/priv.h>
diff --git a/tests/sys/kern/Makefile b/tests/sys/kern/Makefile
index cf2d04706a1c..180734f4d242 100644
--- a/tests/sys/kern/Makefile
+++ b/tests/sys/kern/Makefile
@@ -46,7 +46,6 @@ LIBADD.mqueue_test+= rt
${MACHINE_ARCH} == "i386" || \
${MACHINE_ARCH} == "aarch64"
ATF_TESTS_C+= libkern_crc32
-CFLAGS.libkern_crc32+= -DUSERSPACE_TESTING
.if ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "i386"
LDADD.libkern_crc32+= ${SRCTOP}/sys/libkern/x86/crc32_sse42.c
.else
diff --git a/tests/sys/kern/libkern_crc32.c b/tests/sys/kern/libkern_crc32.c
index 03d023124346..39cb8ca5aeeb 100644
--- a/tests/sys/kern/libkern_crc32.c
+++ b/tests/sys/kern/libkern_crc32.c
@@ -27,16 +27,13 @@
*/
#include <sys/param.h>
+#include <sys/gsb_crc32.h>
#include <stdint.h>
#include <atf-c.h>
-#if defined(__amd64__) || defined(__i386__)
-extern uint32_t sse42_crc32c(uint32_t, const unsigned char *, unsigned);
-#elif defined(__aarch64__)
-extern uint32_t armv8_crc32c(uint32_t, const unsigned char *, unsigned);
-#else
+#if !defined(__amd64__) && !defined(__i386__) && !defined(__aarch64__)
#error These tests are not supported on this platform
#endif