On Wed, 7 Dec 2022 at 14:30, Dan Carpenter <error27@xxxxxxxxx> wrote: > > The bit_reverse() function is clearly supposed to be able to handle > 64 bit values, but the types for "(1 << i)" and "bit << (width - i - 1)" > are not enough to handle more than 32 bits. It seems from the surrounding code that this function is only called for width of up to a byte (but correct me if I'm wrong). There are fast implementations of bit-reverse in include/linux/bitrev.h. It's better to just remove this function entirely and call bitrev8, which is just a precalc-table lookup. While at it, also sort includes. Signed-off-by: Uladzislau Koshchanka <koshchanka@xxxxxxxxx> lib/packing.c | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/lib/packing.c b/lib/packing.c index 9a72f4bbf0e2..47ea47c1198a 100644 --- a/lib/packing.c +++ b/lib/packing.c @@ -2,10 +2,11 @@ /* Copyright 2016-2018 NXP * Copyright (c) 2018-2019, Vladimir Oltean <olteanv@xxxxxxxxx> */ -#include <linux/packing.h> -#include <linux/module.h> #include <linux/bitops.h> +#include <linux/bitrev.h> #include <linux/errno.h> +#include <linux/module.h> +#include <linux/packing.h> #include <linux/types.h> static int get_le_offset(int offset) @@ -29,19 +30,6 @@ static int get_reverse_lsw32_offset(int offset, size_t len) return word_index * 4 + offset; } -static u64 bit_reverse(u64 val, unsigned int width) -{ - u64 new_val = 0; - unsigned int bit; - unsigned int i; - - for (i = 0; i < width; i++) { - bit = (val & (1 << i)) != 0; - new_val |= (bit << (width - i - 1)); - } - return new_val; -} - static void adjust_for_msb_right_quirk(u64 *to_write, int *box_start_bit, int *box_end_bit, u8 *box_mask) { @@ -49,7 +37,7 @@ static void adjust_for_msb_right_quirk(u64 *to_write, int *box_start_bit, int new_box_start_bit, new_box_end_bit; *to_write >>= *box_end_bit; - *to_write = bit_reverse(*to_write, box_bit_width); + *to_write = bitrev8(*to_write) >> (8 - box_bit_width); *to_write <<= *box_end_bit; new_box_end_bit = box_bit_width - *box_start_bit - 1;