From: Brian Murphy <brm@murphy.dk>
To: linux-kernel@vger.kernel.org
Subject: [PATCH 2.5] explicit CRC32 (early) initialization
Date: Tue, 08 Oct 2002 20:00:43 +0200 [thread overview]
Message-ID: <E17yyew-0000s7-00@brian.localnet> (raw)
Here is a patch to the crc32 library routine to allow explicit
initialization of the tables used by the routines.
I need this to be able to use the crc routines in the early
start up code for my platform which saves crc protected
information (clock speed, machine type) in an eeprom.
The option CONFIG_CRC32_EXPLICIT is defined for the platforms
which need it in the config.in file.
I have removed dynamic allocation of memory because the
memory subsystem is also not initialised at the stage where I
need the crc functions.
/Brian
--- include/linux/crc32.h 5 Jul 2002 05:05:27 -0000 1.2
+++ include/linux/crc32.h 8 Oct 2002 17:46:39 -0000
@@ -6,6 +6,11 @@
#define _LINUX_CRC32_H
#include <linux/types.h>
+#include <linux/config.h>
+
+#ifdef CONFIG_CRC32_EXPLICIT
+extern int init_crc32(void);
+#endif
extern u32 crc32_le(u32 crc, unsigned char const *p, size_t len);
extern u32 crc32_be(u32 crc, unsigned char const *p, size_t len);
--- lib/crc32.c 9 Jul 2002 15:23:04 -0000 1.3
+++ lib/crc32.c 8 Oct 2002 17:46:40 -0000
@@ -68,7 +68,6 @@
* simplified by inlining the table in ?: form.
*/
#define crc32init_le()
-#define crc32cleanup_le()
/**
* crc32_le() - Calculate bitwise little-endian Ethernet AUTODIN II CRC32
* @crc - seed value for computation. ~0 for Ethernet, sometimes 0 for
@@ -89,7 +88,7 @@
}
#else /* Table-based approach */
-static u32 *crc32table_le;
+static u32 crc32table_le[1 << CRC_LE_BITS];
/**
* crc32init_le() - allocate and initialize LE table data
*
@@ -102,10 +101,6 @@
unsigned i, j;
u32 crc = 1;
- crc32table_le =
- kmalloc((1 << CRC_LE_BITS) * sizeof(u32), GFP_KERNEL);
- if (!crc32table_le)
- return 1;
crc32table_le[0] = 0;
for (i = 1 << (CRC_LE_BITS - 1); i; i >>= 1) {
@@ -117,15 +112,6 @@
}
/**
- * crc32cleanup_le(): free LE table data
- */
-static void __exit crc32cleanup_le(void)
-{
- if (crc32table_le) kfree(crc32table_le);
- crc32table_le = NULL;
-}
-
-/**
* crc32_le() - Calculate bitwise little-endian Ethernet AUTODIN II CRC32
* @crc - seed value for computation. ~0 for Ethernet, sometimes 0 for
* other uses, or the previous crc32 value if computing incrementally.
@@ -168,7 +154,6 @@
* simplified by inlining the table in ?: form.
*/
#define crc32init_be()
-#define crc32cleanup_be()
/**
* crc32_be() - Calculate bitwise big-endian Ethernet AUTODIN II CRC32
@@ -192,7 +177,7 @@
}
#else /* Table-based approach */
-static u32 *crc32table_be;
+static u32 crc32table_be[1 << CRC_BE_BITS];
/**
* crc32init_be() - allocate and initialize BE table data
@@ -202,10 +187,6 @@
unsigned i, j;
u32 crc = 0x80000000;
- crc32table_be =
- kmalloc((1 << CRC_BE_BITS) * sizeof(u32), GFP_KERNEL);
- if (!crc32table_be)
- return 1;
crc32table_be[0] = 0;
for (i = 1; i < 1 << CRC_BE_BITS; i <<= 1) {
@@ -217,16 +198,6 @@
}
/**
- * crc32cleanup_be(): free BE table data
- */
-static void __exit crc32cleanup_be(void)
-{
- if (crc32table_be) kfree(crc32table_be);
- crc32table_be = NULL;
-}
-
-
-/**
* crc32_be() - Calculate bitwise big-endian Ethernet AUTODIN II CRC32
* @crc - seed value for computation. ~0 for Ethernet, sometimes 0 for
* other uses, or the previous crc32 value if computing incrementally.
@@ -545,7 +516,10 @@
* Since crc32.o is a library module, there's no requirement
* that the user can unload it.
*/
-static int __init init_crc32(void)
+#ifndef CONFIG_CRC32_EXPLICIT
+static
+#endif
+int __init init_crc32(void)
{
int rc1, rc2, rc;
rc1 = crc32init_le();
@@ -555,17 +529,9 @@
return rc;
}
-/**
- * cleanup_crc32(): frees crc32 data when no longer needed
- */
-static void __exit cleanup_crc32(void)
-{
- crc32cleanup_le();
- crc32cleanup_be();
-}
-
-fs_initcall(init_crc32);
-module_exit(cleanup_crc32);
+#ifndef CONFIG_CRC32_EXPLICIT
+core_initcall(init_crc32);
+#endif
EXPORT_SYMBOL(crc32_le);
EXPORT_SYMBOL(crc32_be);
reply other threads:[~2002-10-08 17:55 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=E17yyew-0000s7-00@brian.localnet \
--to=brm@murphy.dk \
--cc=linux-kernel@vger.kernel.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
all inboxes | Powered by JetHome®