Linux cryptographic layer development
 help / color / mirror / Atom feed
* [PATCH 0/2] lib/crc16: unexport crc16_table and crc16_byte()
@ 2025-05-13  2:21 Eric Biggers
  2025-05-13  2:21 ` [PATCH 1/2] w1: ds2406: use crc16() instead of crc16_byte() loop Eric Biggers
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Eric Biggers @ 2025-05-13  2:21 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-crypto, Ard Biesheuvel, Krzysztof Kozlowski

This series removes the only caller of crc16_byte() outside lib/crc16.c,
then folds crc16_table and crc16_byte() into lib/crc16.c.  I'm planning
to apply this to the crc tree.

Eric Biggers (2):
  w1: ds2406: use crc16() instead of crc16_byte() loop
  lib/crc16: unexport crc16_table and crc16_byte()

 drivers/w1/slaves/w1_ds2406.c | 12 ++----------
 include/linux/crc16.h         |  9 +--------
 lib/crc16.c                   |  9 ++++-----
 3 files changed, 7 insertions(+), 23 deletions(-)


base-commit: e8d72b766adcde14188e68968f3cd05f4321691d
-- 
2.49.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/2] w1: ds2406: use crc16() instead of crc16_byte() loop
  2025-05-13  2:21 [PATCH 0/2] lib/crc16: unexport crc16_table and crc16_byte() Eric Biggers
@ 2025-05-13  2:21 ` Eric Biggers
  2025-05-13  7:52   ` Krzysztof Kozlowski
  2025-05-13  2:21 ` [PATCH 2/2] lib/crc16: unexport crc16_table and crc16_byte() Eric Biggers
  2025-05-13  9:42 ` [PATCH 0/2] " Ard Biesheuvel
  2 siblings, 1 reply; 5+ messages in thread
From: Eric Biggers @ 2025-05-13  2:21 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-crypto, Ard Biesheuvel, Krzysztof Kozlowski

From: Eric Biggers <ebiggers@google.com>

Instead of looping through each byte and calling crc16_byte(), instead
just call crc16() on the whole buffer.  No functional change.

Signed-off-by: Eric Biggers <ebiggers@google.com>
---
 drivers/w1/slaves/w1_ds2406.c | 12 ++----------
 1 file changed, 2 insertions(+), 10 deletions(-)

diff --git a/drivers/w1/slaves/w1_ds2406.c b/drivers/w1/slaves/w1_ds2406.c
index 1cae9b243ff8..76026d615111 100644
--- a/drivers/w1/slaves/w1_ds2406.c
+++ b/drivers/w1/slaves/w1_ds2406.c
@@ -27,12 +27,10 @@ static ssize_t w1_f12_read_state(
 	const struct bin_attribute *bin_attr,
 	char *buf, loff_t off, size_t count)
 {
 	u8 w1_buf[6] = {W1_F12_FUNC_READ_STATUS, 7, 0, 0, 0, 0};
 	struct w1_slave *sl = kobj_to_w1_slave(kobj);
-	u16 crc = 0;
-	int i;
 	ssize_t rtnval = 1;
 
 	if (off != 0)
 		return 0;
 	if (!buf)
@@ -45,13 +43,11 @@ static ssize_t w1_f12_read_state(
 		return -EIO;
 	}
 
 	w1_write_block(sl->master, w1_buf, 3);
 	w1_read_block(sl->master, w1_buf+3, 3);
-	for (i = 0; i < 6; i++)
-		crc = crc16_byte(crc, w1_buf[i]);
-	if (crc == 0xb001) /* good read? */
+	if (crc16(0, w1_buf, sizeof(w1_buf)) == 0xb001) /* good read? */
 		*buf = ((w1_buf[3]>>5)&3)|0x30;
 	else
 		rtnval = -EIO;
 
 	mutex_unlock(&sl->master->bus_mutex);
@@ -64,12 +60,10 @@ static ssize_t w1_f12_write_output(
 	const struct bin_attribute *bin_attr,
 	char *buf, loff_t off, size_t count)
 {
 	struct w1_slave *sl = kobj_to_w1_slave(kobj);
 	u8 w1_buf[6] = {W1_F12_FUNC_WRITE_STATUS, 7, 0, 0, 0, 0};
-	u16 crc = 0;
-	int i;
 	ssize_t rtnval = 1;
 
 	if (count != 1 || off != 0)
 		return -EFAULT;
 
@@ -81,13 +75,11 @@ static ssize_t w1_f12_write_output(
 	}
 
 	w1_buf[3] = (((*buf)&3)<<5)|0x1F;
 	w1_write_block(sl->master, w1_buf, 4);
 	w1_read_block(sl->master, w1_buf+4, 2);
-	for (i = 0; i < 6; i++)
-		crc = crc16_byte(crc, w1_buf[i]);
-	if (crc == 0xb001) /* good read? */
+	if (crc16(0, w1_buf, sizeof(w1_buf)) == 0xb001) /* good read? */
 		w1_write_8(sl->master, 0xFF);
 	else
 		rtnval = -EIO;
 
 	mutex_unlock(&sl->master->bus_mutex);
-- 
2.49.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/2] lib/crc16: unexport crc16_table and crc16_byte()
  2025-05-13  2:21 [PATCH 0/2] lib/crc16: unexport crc16_table and crc16_byte() Eric Biggers
  2025-05-13  2:21 ` [PATCH 1/2] w1: ds2406: use crc16() instead of crc16_byte() loop Eric Biggers
@ 2025-05-13  2:21 ` Eric Biggers
  2025-05-13  9:42 ` [PATCH 0/2] " Ard Biesheuvel
  2 siblings, 0 replies; 5+ messages in thread
From: Eric Biggers @ 2025-05-13  2:21 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-crypto, Ard Biesheuvel, Krzysztof Kozlowski

From: Eric Biggers <ebiggers@google.com>

Now that neither crc16_table nor crc16_byte() is used outside
lib/crc16.c, fold them into lib/crc16.c.

Signed-off-by: Eric Biggers <ebiggers@google.com>
---
 include/linux/crc16.h | 9 +--------
 lib/crc16.c           | 9 ++++-----
 2 files changed, 5 insertions(+), 13 deletions(-)

diff --git a/include/linux/crc16.h b/include/linux/crc16.h
index 9fa74529b317..b861d969b161 100644
--- a/include/linux/crc16.h
+++ b/include/linux/crc16.h
@@ -13,16 +13,9 @@
 #ifndef __CRC16_H
 #define __CRC16_H
 
 #include <linux/types.h>
 
-extern u16 const crc16_table[256];
-
-extern u16 crc16(u16 crc, const u8 *buffer, size_t len);
-
-static inline u16 crc16_byte(u16 crc, const u8 data)
-{
-	return (crc >> 8) ^ crc16_table[(crc ^ data) & 0xff];
-}
+u16 crc16(u16 crc, const u8 *p, size_t len);
 
 #endif /* __CRC16_H */
 
diff --git a/lib/crc16.c b/lib/crc16.c
index 5c3a803c01e0..9c71eda9bf4b 100644
--- a/lib/crc16.c
+++ b/lib/crc16.c
@@ -6,11 +6,11 @@
 #include <linux/types.h>
 #include <linux/module.h>
 #include <linux/crc16.h>
 
 /** CRC table for the CRC-16. The poly is 0x8005 (x^16 + x^15 + x^2 + 1) */
-u16 const crc16_table[256] = {
+static const u16 crc16_table[256] = {
 	0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
 	0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,
 	0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,
 	0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,
 	0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,
@@ -40,24 +40,23 @@ u16 const crc16_table[256] = {
 	0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,
 	0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,
 	0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
 	0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040
 };
-EXPORT_SYMBOL(crc16_table);
 
 /**
  * crc16 - compute the CRC-16 for the data buffer
  * @crc:	previous CRC value
- * @buffer:	data pointer
+ * @p:		data pointer
  * @len:	number of bytes in the buffer
  *
  * Returns the updated CRC value.
  */
-u16 crc16(u16 crc, u8 const *buffer, size_t len)
+u16 crc16(u16 crc, const u8 *p, size_t len)
 {
 	while (len--)
-		crc = crc16_byte(crc, *buffer++);
+		crc = (crc >> 8) ^ crc16_table[(crc & 0xff) ^ *p++];
 	return crc;
 }
 EXPORT_SYMBOL(crc16);
 
 MODULE_DESCRIPTION("CRC16 calculations");
-- 
2.49.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] w1: ds2406: use crc16() instead of crc16_byte() loop
  2025-05-13  2:21 ` [PATCH 1/2] w1: ds2406: use crc16() instead of crc16_byte() loop Eric Biggers
@ 2025-05-13  7:52   ` Krzysztof Kozlowski
  0 siblings, 0 replies; 5+ messages in thread
From: Krzysztof Kozlowski @ 2025-05-13  7:52 UTC (permalink / raw)
  To: Eric Biggers, linux-kernel; +Cc: linux-crypto, Ard Biesheuvel

On 13/05/2025 04:21, Eric Biggers wrote:
> From: Eric Biggers <ebiggers@google.com>
> 
> Instead of looping through each byte and calling crc16_byte(), instead
> just call crc16() on the whole buffer.  No functional change.
> 
> Signed-off-by: Eric Biggers <ebiggers@google.com>
> ---
>  drivers/w1/slaves/w1_ds2406.c | 12 ++----------
>  1 file changed, 2 insertions(+), 10 deletions(-)

Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 0/2] lib/crc16: unexport crc16_table and crc16_byte()
  2025-05-13  2:21 [PATCH 0/2] lib/crc16: unexport crc16_table and crc16_byte() Eric Biggers
  2025-05-13  2:21 ` [PATCH 1/2] w1: ds2406: use crc16() instead of crc16_byte() loop Eric Biggers
  2025-05-13  2:21 ` [PATCH 2/2] lib/crc16: unexport crc16_table and crc16_byte() Eric Biggers
@ 2025-05-13  9:42 ` Ard Biesheuvel
  2 siblings, 0 replies; 5+ messages in thread
From: Ard Biesheuvel @ 2025-05-13  9:42 UTC (permalink / raw)
  To: Eric Biggers; +Cc: linux-kernel, linux-crypto, Krzysztof Kozlowski

On Tue, 13 May 2025 at 03:22, Eric Biggers <ebiggers@kernel.org> wrote:
>
> This series removes the only caller of crc16_byte() outside lib/crc16.c,
> then folds crc16_table and crc16_byte() into lib/crc16.c.  I'm planning
> to apply this to the crc tree.
>
> Eric Biggers (2):
>   w1: ds2406: use crc16() instead of crc16_byte() loop
>   lib/crc16: unexport crc16_table and crc16_byte()
>
>  drivers/w1/slaves/w1_ds2406.c | 12 ++----------
>  include/linux/crc16.h         |  9 +--------
>  lib/crc16.c                   |  9 ++++-----
>  3 files changed, 7 insertions(+), 23 deletions(-)
>

Acked-by: Ard Biesheuvel <ardb@kernel.org>

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2025-05-13  9:42 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-13  2:21 [PATCH 0/2] lib/crc16: unexport crc16_table and crc16_byte() Eric Biggers
2025-05-13  2:21 ` [PATCH 1/2] w1: ds2406: use crc16() instead of crc16_byte() loop Eric Biggers
2025-05-13  7:52   ` Krzysztof Kozlowski
2025-05-13  2:21 ` [PATCH 2/2] lib/crc16: unexport crc16_table and crc16_byte() Eric Biggers
2025-05-13  9:42 ` [PATCH 0/2] " Ard Biesheuvel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox