[PATCH] lib/xz: remove dead IA-64 (Itanium) support code

Ankan Biswas posted 1 patch 3 months, 3 weeks ago
There is a newer version of this series
lib/xz/xz_dec_bcj.c | 95 ---------------------------------------------
lib/xz/xz_private.h |  3 --
2 files changed, 98 deletions(-)
[PATCH] lib/xz: remove dead IA-64 (Itanium) support code
Posted by Ankan Biswas 3 months, 3 weeks ago
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@gmail.com>
---
 lib/xz/xz_dec_bcj.c | 95 ---------------------------------------------
 lib/xz/xz_private.h |  3 --
 2 files changed, 98 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..a51da0a30d0d 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
-- 
2.51.0
Re: [PATCH] lib/xz: remove dead IA-64 (Itanium) support code
Posted by Ankan Biswas 3 months, 3 weeks ago
Hey all,

Correcting the mailing-list again,  from linux-kernel-mentees@kernel.org 
to linux-kernel-mentees@lists.linux.dev.

Really sorry about this.


Thanks,
Ankan
Re: [PATCH] lib/xz: remove dead IA-64 (Itanium) support code
Posted by Lasse Collin 3 months, 3 weeks ago
On 2025-10-13 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.

The commit cf8e8658100d ("arch: Remove Itanium (IA-64) architecture")
unconditionally disabled the IA-64 filter, which effectively dropped
support for mounting Squashfs file systems that use XZ with the IA-64
filter. I wasn't Cc'ed when it was committed because I wasn't in
MAINTAINERS back then. If I had been, I might have commented that the
commits [1] and [2] and the discussion [3] showed that keeping filters
available for non-native archs can be desirable. But now that time has
passed and no one has complained about the lack of IA-64 filter, it
seems fine to remove it completely from Linux.

I won't remove the IA-64 filter from the upstream version of
xz_dec_bcj.c, so this change will make those files diverge a little
more. That's unfortunate, but they already differ by a tiny amount
anyway.

xz_private.h line 106 checks if XZ_DEC_IA64 is defined. That line
should be removed too. With that change:

    Acked-by: Lasse Collin <lasse.collin@tukaani.org>

[1] 5dc49c75a26b ("decompressors: make the default XZ_DEC_* config
    match the selected architecture")
[2] bf4d064d89ae ("lib/xz: enable all filters by default in Kconfig")
[3] https://lore.kernel.org/lkml/20140228230017.GE14970@merlin.infradead.org/T/

-- 
Lasse Collin
Re: [PATCH] lib/xz: remove dead IA-64 (Itanium) support code
Posted by Ankan Biswas 3 months, 3 weeks ago
On 10/13/25 9:08 PM, Lasse Collin wrote:
> On 2025-10-13 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.
> 
> The commit cf8e8658100d ("arch: Remove Itanium (IA-64) architecture")
> unconditionally disabled the IA-64 filter, which effectively dropped
> support for mounting Squashfs file systems that use XZ with the IA-64
> filter. I wasn't Cc'ed when it was committed because I wasn't in
> MAINTAINERS back then. If I had been, I might have commented that the
> commits [1] and [2] and the discussion [3] showed that keeping filters
> available for non-native archs can be desirable. But now that time has
> passed and no one has complained about the lack of IA-64 filter, it
> seems fine to remove it completely from Linux.
> 
> I won't remove the IA-64 filter from the upstream version of
> xz_dec_bcj.c, so this change will make those files diverge a little
> more. That's unfortunate, but they already differ by a tiny amount
> anyway.
> 
> xz_private.h line 106 checks if XZ_DEC_IA64 is defined. That line
> should be removed too. With that change:
> 
>      Acked-by: Lasse Collin <lasse.collin@tukaani.org>
> 
> [1] 5dc49c75a26b ("decompressors: make the default XZ_DEC_* config
>      match the selected architecture")
> [2] bf4d064d89ae ("lib/xz: enable all filters by default in Kconfig")
> [3] https://lore.kernel.org/lkml/20140228230017.GE14970@merlin.infradead.org/T/
>

Hi Lasse,

I have sent a v2 of the patch with the required changes.
Sorry about having to make your work a little more difficult.

And thanks for retaining support in the upstream for IA-64.


Regards,
Ankan Biswas