[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <d88696c7-4ea9-445b-82ac-f5379f952bd8@kernel.org>
Date: Tue, 14 Oct 2025 09:17:39 -0600
From: Khalid Aziz <khalid@...nel.org>
To: Ankan Biswas <spyjetfayed@...il.com>, akpm@...ux-foundation.org
Cc: lasse.collin@...aani.org, visitorckw@...il.com,
skhan@...uxfoundation.org, david.hunter.linux@...il.com,
linux-kernel@...r.kernel.org, linux-kernel-mentees@...ts.linux.dev
Subject: Re: [PATCH v3] lib/xz: remove dead IA-64 (Itanium) support code
On 10/13/25 11:24 PM, Ankan Biswas wrote:
> Support for the IA-64 (Itanium) architecture was removed in
> commit cf8e8658100d ("arch: Remove Itanium (IA-64) architecture").
>
> This patch drops the IA-64 specific decompression code from
> lib/xz, which was conditionally compiled with the now-obsolete
> CONFIG_XZ_DEC_IA64 option.
>
> Signed-off-by: Ankan Biswas <spyjetfayed@...il.com>
> Reviewed-by: Kuan-Wei Chiu <visitorckw@...il.com>
> Acked-by: Lasse Collin <lasse.collin@...aani.org>
> ---
> Changes in v3:
> - Removed log about IA-64 support in upstream
>
> Changes in v2:
> - Added second hunk to diff of xz_private.h
>
> lib/xz/xz_dec_bcj.c | 95 ---------------------------------------------
> lib/xz/xz_private.h | 4 --
> 2 files changed, 99 deletions(-)
>
> diff --git a/lib/xz/xz_dec_bcj.c b/lib/xz/xz_dec_bcj.c
> index 8237db17eee3..610d58d947ab 100644
> --- a/lib/xz/xz_dec_bcj.c
> +++ b/lib/xz/xz_dec_bcj.c
> @@ -20,7 +20,6 @@ struct xz_dec_bcj {
> enum {
> BCJ_X86 = 4, /* x86 or x86-64 */
> BCJ_POWERPC = 5, /* Big endian only */
> - BCJ_IA64 = 6, /* Big or little endian */
> BCJ_ARM = 7, /* Little endian only */
> BCJ_ARMTHUMB = 8, /* Little endian only */
> BCJ_SPARC = 9, /* Big or little endian */
> @@ -180,92 +179,6 @@ static size_t bcj_powerpc(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
> }
> #endif
>
> -#ifdef XZ_DEC_IA64
> -static size_t bcj_ia64(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
> -{
> - static const uint8_t branch_table[32] = {
> - 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0,
> - 4, 4, 6, 6, 0, 0, 7, 7,
> - 4, 4, 0, 0, 4, 4, 0, 0
> - };
> -
> - /*
> - * The local variables take a little bit stack space, but it's less
> - * than what LZMA2 decoder takes, so it doesn't make sense to reduce
> - * stack usage here without doing that for the LZMA2 decoder too.
> - */
> -
> - /* Loop counters */
> - size_t i;
> - size_t j;
> -
> - /* Instruction slot (0, 1, or 2) in the 128-bit instruction word */
> - uint32_t slot;
> -
> - /* Bitwise offset of the instruction indicated by slot */
> - uint32_t bit_pos;
> -
> - /* bit_pos split into byte and bit parts */
> - uint32_t byte_pos;
> - uint32_t bit_res;
> -
> - /* Address part of an instruction */
> - uint32_t addr;
> -
> - /* Mask used to detect which instructions to convert */
> - uint32_t mask;
> -
> - /* 41-bit instruction stored somewhere in the lowest 48 bits */
> - uint64_t instr;
> -
> - /* Instruction normalized with bit_res for easier manipulation */
> - uint64_t norm;
> -
> - size &= ~(size_t)15;
> -
> - for (i = 0; i < size; i += 16) {
> - mask = branch_table[buf[i] & 0x1F];
> - for (slot = 0, bit_pos = 5; slot < 3; ++slot, bit_pos += 41) {
> - if (((mask >> slot) & 1) == 0)
> - continue;
> -
> - byte_pos = bit_pos >> 3;
> - bit_res = bit_pos & 7;
> - instr = 0;
> - for (j = 0; j < 6; ++j)
> - instr |= (uint64_t)(buf[i + j + byte_pos])
> - << (8 * j);
> -
> - norm = instr >> bit_res;
> -
> - if (((norm >> 37) & 0x0F) == 0x05
> - && ((norm >> 9) & 0x07) == 0) {
> - addr = (norm >> 13) & 0x0FFFFF;
> - addr |= ((uint32_t)(norm >> 36) & 1) << 20;
> - addr <<= 4;
> - addr -= s->pos + (uint32_t)i;
> - addr >>= 4;
> -
> - norm &= ~((uint64_t)0x8FFFFF << 13);
> - norm |= (uint64_t)(addr & 0x0FFFFF) << 13;
> - norm |= (uint64_t)(addr & 0x100000)
> - << (36 - 20);
> -
> - instr &= (1 << bit_res) - 1;
> - instr |= norm << bit_res;
> -
> - for (j = 0; j < 6; j++)
> - buf[i + j + byte_pos]
> - = (uint8_t)(instr >> (8 * j));
> - }
> - }
> - }
> -
> - return i;
> -}
> -#endif
> -
> #ifdef XZ_DEC_ARM
> static size_t bcj_arm(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
> {
> @@ -509,11 +422,6 @@ static void bcj_apply(struct xz_dec_bcj *s,
> filtered = bcj_powerpc(s, buf, size);
> break;
> #endif
> -#ifdef XZ_DEC_IA64
> - case BCJ_IA64:
> - filtered = bcj_ia64(s, buf, size);
> - break;
> -#endif
> #ifdef XZ_DEC_ARM
> case BCJ_ARM:
> filtered = bcj_arm(s, buf, size);
> @@ -699,9 +607,6 @@ enum xz_ret xz_dec_bcj_reset(struct xz_dec_bcj *s, uint8_t id)
> #ifdef XZ_DEC_POWERPC
> case BCJ_POWERPC:
> #endif
> -#ifdef XZ_DEC_IA64
> - case BCJ_IA64:
> -#endif
> #ifdef XZ_DEC_ARM
> case BCJ_ARM:
> #endif
> diff --git a/lib/xz/xz_private.h b/lib/xz/xz_private.h
> index 8409784b1639..6775078f3cce 100644
> --- a/lib/xz/xz_private.h
> +++ b/lib/xz/xz_private.h
> @@ -24,9 +24,6 @@
> # ifdef CONFIG_XZ_DEC_POWERPC
> # define XZ_DEC_POWERPC
> # endif
> -# ifdef CONFIG_XZ_DEC_IA64
> -# define XZ_DEC_IA64
> -# endif
> # ifdef CONFIG_XZ_DEC_ARM
> # define XZ_DEC_ARM
> # endif
> @@ -103,7 +100,6 @@
> */
> #ifndef XZ_DEC_BCJ
> # if defined(XZ_DEC_X86) || defined(XZ_DEC_POWERPC) \
> - || defined(XZ_DEC_IA64) \
> || defined(XZ_DEC_ARM) || defined(XZ_DEC_ARMTHUMB) \
> || defined(XZ_DEC_SPARC) || defined(XZ_DEC_ARM64) \
> || defined(XZ_DEC_RISCV)
Looks good.
Reviewed-by: Khalid Aziz <khalid@...nel.org>
--
Khalid
Powered by blists - more mailing lists