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

Ankan Biswas posted 1 patch 2 months ago
There is a newer version of this series
lib/xz/xz_dec_bcj.c | 95 ---------------------------------------------
lib/xz/xz_private.h |  4 --
2 files changed, 99 deletions(-)
[PATCH v2] lib/xz: remove dead IA-64 (Itanium) support code
Posted by Ankan Biswas 2 months 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.

Note that the upstream version of xz_dec_bcj.c still retains support
for the IA-64 BCJ filter.

Signed-off-by: Ankan Biswas <spyjetfayed@gmail.com>
Acked-by: Lasse Collin <lasse.collin@tukaani.org>
---
 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)
-- 
2.51.0
Re: [PATCH v2] lib/xz: remove dead IA-64 (Itanium) support code
Posted by Kuan-Wei Chiu 2 months ago
On Mon, Oct 13, 2025 at 11:01:58PM +0530, 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.
> 
> Note that the upstream version of xz_dec_bcj.c still retains support
> for the IA-64 BCJ filter.

Not sure if it's necessary to mention this, but I guess it's fine.

> 
> Signed-off-by: Ankan Biswas <spyjetfayed@gmail.com>
> Acked-by: Lasse Collin <lasse.collin@tukaani.org>
> ---

I'm not quite sure what you changed in v2 compared to v1.
Usually, you should describe the changes below the --- line [1].

[1]: https://www.kernel.org/doc/html/v6.17/process/submitting-patches.html#commentary

However, the change itself LGTM, so FWIW:

Reviewed-by: Kuan-Wei Chiu <visitorckw@gmail.com>

Lasse,
Since this change is located under lib/, I assume it will be routed
through Andrew's tree?
If that's the case, then perhaps we should also Cc Andrew.

Regards,
Kuan-Wei
Re: [PATCH v2] lib/xz: remove dead IA-64 (Itanium) support code
Posted by Lasse Collin 2 months ago
On 2025-10-14 Kuan-Wei Chiu wrote:
> On Mon, Oct 13, 2025 at 11:01:58PM +0530, Ankan Biswas wrote:
> > Note that the upstream version of xz_dec_bcj.c still retains support
> > for the IA-64 BCJ filter.  
> 
> Not sure if it's necessary to mention this, but I guess it's fine.

Information about upstream version isn't needed in Linux commit log, so
that sentence could be omitted.

> I'm not quite sure what you changed in v2 compared to v1.

It added the second hunk to the diff of xz_private.h.

> Lasse,
> Since this change is located under lib/, I assume it will be routed
> through Andrew's tree?
> If that's the case, then perhaps we should also Cc Andrew.

Yes, putting him into the To field and others as Cc should make the
patch go forward. Sorry that I didn't notice and comment this myself
earlier.

-- 
Lasse Collin
Re: [PATCH v2] lib/xz: remove dead IA-64 (Itanium) support code
Posted by Ankan Biswas 2 months ago
On 10/14/25 2:14 AM, Lasse Collin wrote:
> On 2025-10-14 Kuan-Wei Chiu wrote:
>> On Mon, Oct 13, 2025 at 11:01:58PM +0530, Ankan Biswas wrote:
>>> Note that the upstream version of xz_dec_bcj.c still retains support
>>> for the IA-64 BCJ filter.
>>
>> Not sure if it's necessary to mention this, but I guess it's fine.
> 
> Information about upstream version isn't needed in Linux commit log, so
> that sentence could be omitted.
>

It felt like a good idea to put this info, but since it is not directly
related to the kernel I would remove it for v3.
>> I'm not quite sure what you changed in v2 compared to v1.
> 
> It added the second hunk to the diff of xz_private.h.
> 
>> Lasse,
>> Since this change is located under lib/, I assume it will be routed
>> through Andrew's tree?
>> If that's the case, then perhaps we should also Cc Andrew.
> 
> Yes, putting him into the To field and others as Cc should make the
> patch go forward. Sorry that I didn't notice and comment this myself
> earlier.
> 

I will add Andrew Morton for v3 in To, and the rest in Cc and add the 
changelog part.


Hi Kuan-Wei and Lasse,

Thank you for your feedback, it was very helpful.

Regards,
Ankan Biswas