From nobody Thu Aug 20 23:17:14 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E91AD44684E for ; Tue, 11 Aug 2026 14:01:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456904; cv=none; b=PhLZw2Iz8sd8R7bIdKJOMnqrIr1I7roGLKvp30oLh4FzPqfUV8h+sm4LRChEema0V7J9RI2LlTFDWK/DMrP2VRHSodaAiXNMSztvevk9HEM2uCgz1EBo8eWilja2YBSPcSiOokeErrJixQ1jQiHHF7Y8RDu6NsDa5ROLrGzanaE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456904; c=relaxed/simple; bh=9mcbvLPAb5mlQfB6wIpqyZfFDQYLKrW6vxszOIeyRIM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ak+zMaWi8hBGQtxzBP2TBKlrTV5NLxsCRudqfopN7gBtxXUfkKJSsXBp/pZ9/5k+rUF+QMILkjDv1do3tFblo09YW+SBW/RCiAEy6VlgVFxk8MvBjRm+AoDv0cZK2QECGlDuHPCaR7JY/MBS0PrfogvVTBM6gQNqqeOrmIti7u8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dnVQBEwS; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dnVQBEwS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 73DBC1F00A3A; Tue, 11 Aug 2026 14:01:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786456902; bh=5ERaMPsjwHcuWRT7KK06+ij6/U9aQH1xxiJrGBBvL1s=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=dnVQBEwSU7ZSnl+Gz3XvYWXW5SbVRLAUDeykXKtv44rNTMDSTQcBpndecLT63MIJV ETtcIGZzDcfAstoCc1M26RCjsuPFYzBC0xqU4pV0BL4u4P87i+YkIrLyDVHzimqAOi 5R9ETWWMCR56SPA33S2K0AfuNZHzRQLj2ExAaWAAnXVdiEMwjVDFiMROdgGX2jf3bP +hqZKIh4AJBrt6ugDJ6KqP6G67uhwtdzTM2hkvlG/1Nhxmc/fUbmgrLDQgptC6X2II iFclhEQASMDmf7ip4Kj31TGG1q1Sa5NdLGJah3FplAU3m8Pc7QfgchSzg7mvbxusod M1fI+VcliCFbw== From: Will Deacon To: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Will Deacon , Arnd Bergmann , Ard Biesheuvel , Eric Biggers , Daniel Borkmann , Catalin Marinas , Alexei Starovoitov , Oliver Upton , Herbert Xu , Marc Zyngier Subject: [PATCH 01/12] selftests/arm64: Remove big-endian support Date: Tue, 11 Aug 2026 15:01:20 +0100 Message-ID: <20260811140132.22778-2-will@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260811140132.22778-1-will@kernel.org> References: <20260811140132.22778-1-will@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Big-endian support on arm64 depends on BROKEN, so the arm64 selftests do not need to worry about testing this configuration any more. Remove the 128-bit byte-swapping helper from the fp-ptrace test and the big-endian definition of RSEQ_SIG_DATA from the rseq test. Signed-off-by: Will Deacon Acked-by: Arnd Bergmann Acked-by: Catalin Marinas Acked-by: Eric Biggers Acked-by: Marc Zyngier --- tools/testing/selftests/arm64/fp/fp-ptrace.c | 19 +------------------ tools/testing/selftests/rseq/rseq-arm64.h | 5 ----- 2 files changed, 1 insertion(+), 23 deletions(-) diff --git a/tools/testing/selftests/arm64/fp/fp-ptrace.c b/tools/testing/s= elftests/arm64/fp/fp-ptrace.c index 22c584b78be5..77d630444996 100644 --- a/tools/testing/selftests/arm64/fp/fp-ptrace.c +++ b/tools/testing/selftests/arm64/fp/fp-ptrace.c @@ -112,23 +112,6 @@ static void handle_alarm(int sig, siginfo_t *info, voi= d *context) got_alarm =3D true; } =20 -#ifdef CONFIG_CPU_BIG_ENDIAN -static __uint128_t arm64_cpu_to_le128(__uint128_t x) -{ - u64 a =3D swab64(x); - u64 b =3D swab64(x >> 64); - - return ((__uint128_t)a << 64) | b; -} -#else -static __uint128_t arm64_cpu_to_le128(__uint128_t x) -{ - return x; -} -#endif - -#define arm64_le128_to_cpu(x) arm64_cpu_to_le128(x) - static bool sve_supported(void) { return getauxval(AT_HWCAP) & HWCAP_SVE; @@ -897,7 +880,7 @@ static void fpsimd_to_sve(__uint128_t *v, char *z, int = vl) =20 for (i =3D 0; i < __SVE_NUM_ZREGS; i++) { p =3D (__uint128_t *)&z[__SVE_ZREG_OFFSET(vq, i)]; - *p =3D arm64_cpu_to_le128(v[i]); + *p =3D v[i]; } } =20 diff --git a/tools/testing/selftests/rseq/rseq-arm64.h b/tools/testing/self= tests/rseq/rseq-arm64.h index 21e1626a7235..f9fecf941bf2 100644 --- a/tools/testing/selftests/rseq/rseq-arm64.h +++ b/tools/testing/selftests/rseq/rseq-arm64.h @@ -12,12 +12,7 @@ * matches code endianness. */ #define RSEQ_SIG_CODE 0xd428bc00 /* BRK #0x45E0. */ - -#ifdef __AARCH64EB__ -#define RSEQ_SIG_DATA 0x00bc28d4 /* BRK #0x45E0. */ -#else #define RSEQ_SIG_DATA RSEQ_SIG_CODE -#endif =20 #define RSEQ_SIG RSEQ_SIG_DATA =20 --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 20 23:17:14 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D5F49448B83 for ; Tue, 11 Aug 2026 14:01:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456906; cv=none; b=nOU1B88dPIew7iUzilWDnkiiaJ661Wv6A9Oo5dzPk/fBixKmKu5WZDhODAPMpqAvMm9EhG41JrG0zCId+gCQOQ++5KH6bpUJhAfuZ6Us3vYiZ4lGS5MUrBbwt+z1ZKtqvvMtRwqEjow1xDXpNm4Q4suqfvN0WFZ1qEO7q+n+/C8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456906; c=relaxed/simple; bh=ObbwZhybPHV+OJQ7Fv4s4sZz1QJjKyvPjRJtAsWVhJU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bxdFlxoRvY0azw0Y8dJaCvRC5NwUshqBzBr1UNSGJKNv4So0wZfG5zDgHC2PCMFspaba36xsYmPBUl+FSUGkOdyszL6CME56MqDm/71W2bOMDU4tuSUIbllKbwa2XER9Zh/pkd0p0XMsX8vXBgknGHy9P5XJ7uiB2i7/ZRdZjFI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZTZG9dqN; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZTZG9dqN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 600DE1F00A3E; Tue, 11 Aug 2026 14:01:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786456905; bh=QAN0l7yaydmlw2Fkf5Tw2odDTeok7Wk3+KXsmI6pBNc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=ZTZG9dqNeXmloyamvDBCjoTZjYp+h4HLwHk3qphnHwHXV7i23kF8ZbQT6BOvovJ7J Zx1DPOnrTuPmbKCGfMYhu4d+VwRrNmmgIHBo37EgVeC+J+05O6InEmetwXNFpKCecy eN6LmOn6BXFzqst6QRJahAbi91lV7MFLWvK7YDHREmt16h8ara+G4lXkelTFpsfDGc usXatHN9zi1NrgdogqlxadKEdkBN9wjMq1W8zNLeUCUMkSOfi8rDxmA3WzE+ctIeeM zHl4da3iOFP++E9ie1luQcF99eKsN4bBuWHbTPFAL5jjU/bmOVjxsAdHZWyrvnNgGZ Gi70FiyNezPhQ== From: Will Deacon To: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Will Deacon , Arnd Bergmann , Ard Biesheuvel , Eric Biggers , Daniel Borkmann , Catalin Marinas , Alexei Starovoitov , Oliver Upton , Herbert Xu , Marc Zyngier Subject: [PATCH 02/12] arm64: bpf: Remove big-endian support from the JIT compiler Date: Tue, 11 Aug 2026 15:01:21 +0100 Message-ID: <20260811140132.22778-3-will@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260811140132.22778-1-will@kernel.org> References: <20260811140132.22778-1-will@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Big-endian support on arm64 depends on BROKEN. In preparation for removing the dead code altogether, remove the big-endian-specific support from the arm64 BPF JIT backend. Signed-off-by: Will Deacon Acked-by: Arnd Bergmann Acked-by: Catalin Marinas Acked-by: Eric Biggers Acked-by: Marc Zyngier --- arch/arm64/net/bpf_jit_comp.c | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/arch/arm64/net/bpf_jit_comp.c b/arch/arm64/net/bpf_jit_comp.c index b0075ece4a6e..044216c4acf6 100644 --- a/arch/arm64/net/bpf_jit_comp.c +++ b/arch/arm64/net/bpf_jit_comp.c @@ -1377,13 +1377,8 @@ static int build_insn(const struct bpf_verifier_env = *env, const struct bpf_insn case BPF_ALU | BPF_END | BPF_FROM_LE: case BPF_ALU | BPF_END | BPF_FROM_BE: case BPF_ALU64 | BPF_END | BPF_FROM_LE: -#ifdef CONFIG_CPU_BIG_ENDIAN - if (BPF_CLASS(code) =3D=3D BPF_ALU && BPF_SRC(code) =3D=3D BPF_FROM_BE) - goto emit_bswap_uxt; -#else /* !CONFIG_CPU_BIG_ENDIAN */ if (BPF_CLASS(code) =3D=3D BPF_ALU && BPF_SRC(code) =3D=3D BPF_FROM_LE) goto emit_bswap_uxt; -#endif switch (imm) { case 16: emit(A64_REV16(is64, dst, dst), ctx); @@ -2478,15 +2473,9 @@ static void clear_garbage(struct jit_ctx *ctx, int r= eg, int effective_bytes) { if (effective_bytes) { int garbage_bits =3D 64 - 8 * effective_bytes; -#ifdef CONFIG_CPU_BIG_ENDIAN - /* garbage bits are at the right end */ - emit(A64_LSR(1, reg, reg, garbage_bits), ctx); - emit(A64_LSL(1, reg, reg, garbage_bits), ctx); -#else /* garbage bits are at the left end */ emit(A64_LSL(1, reg, reg, garbage_bits), ctx); emit(A64_LSR(1, reg, reg, garbage_bits), ctx); -#endif } } =20 --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 20 23:17:14 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0159F448CF4 for ; Tue, 11 Aug 2026 14:01:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456910; cv=none; b=MnNDIby50Yenq8/XCTap7GvOUd3feHqAIfPKwvaIETq6jn3Hh6CVnl9OKCPNt3XLvEPxUIpmeH8QBt59uj6ix7582gewBwThR69JN7WapTkgiw8m6flonpjHtGI3sS3nYOS4vnv9a709F3G/9DYmFzHPndPHQxRBlkJD8L4QEgE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456910; c=relaxed/simple; bh=dXqFQwIfYkpiUQ7XemLsptn8czI+wzeDrc56PxdWZWM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jQZhkJLcc9s1UZYbNvsXyMK+t0CWZpeddN5ufe8szgn/lvB+vjsjFv3PZ2pQ4Qu1exHvMnVobcZnfGvu2aYHK+l38RwGTaG+FOsHs0tIonEXJ8iV06+MXZoe3YdyhJjMAFMEJVs3A+Dbo9xt3Wv3bkZsRmbmNfi4INcS+hmHXuw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DN2Y6ju9; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="DN2Y6ju9" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4E9F51F000E9; Tue, 11 Aug 2026 14:01:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786456908; bh=n9dRmmOuvF3CPO8z7383jINPuZ9NkflcJlXq8mm+S3Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=DN2Y6ju9Mjq5AHx1VMdhsh7UePFooV9VT0RkY20PoWnkbINa61BzJ0Ze7agRymuvF req8t+ejvPx66nM1ugGqXKm+4ddFcUyP3vrXBia9gHygJQEeeHsIvnl3VXOQmOTx8s fi9G07RphYIExpeQu+fRzKK+BabPhiq70AILJlNKMCWfSwT4YmkiP5JFHFEA1bsNVS B6exa9qMRyMdyAwM3Wr3MhGIjhp+ktw+8nZZ0evQqdOvb/fmHd9wpv9/0eqdxStOxo TLg+3qtrnlFgDqe3WmYoqB7V3co12161p0b0+gX63jB5gWlRspt6IoHLIMJFUrpzCH TkS2lDf7AbcGA== From: Will Deacon To: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Will Deacon , Arnd Bergmann , Ard Biesheuvel , Eric Biggers , Daniel Borkmann , Catalin Marinas , Alexei Starovoitov , Oliver Upton , Herbert Xu , Marc Zyngier Subject: [PATCH 03/12] arm64: crypto: Assume a little-endian kernel Date: Tue, 11 Aug 2026 15:01:22 +0100 Message-ID: <20260811140132.22778-4-will@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260811140132.22778-1-will@kernel.org> References: <20260811140132.22778-1-will@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Commit 5276ea17a23c ("lib/crc: arm64: Assume a little-endian kernel") removed all usage of the CPU_LE()/CPU_BE() macros from the arm64 CRC assembly now that big-endian support depends on BROKEN. Do the same for the crypto assembly code. Signed-off-by: Will Deacon Acked-by: Arnd Bergmann Acked-by: Catalin Marinas Acked-by: Eric Biggers Acked-by: Marc Zyngier --- arch/arm64/crypto/aes-ce-ccm-core.S | 4 ++-- arch/arm64/crypto/aes-neonbs-core.S | 4 ++-- arch/arm64/crypto/ghash-ce-core.S | 6 +++--- arch/arm64/crypto/sm4-ce-cipher-core.S | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/arch/arm64/crypto/aes-ce-ccm-core.S b/arch/arm64/crypto/aes-ce= -ccm-core.S index f2624238fd95..c2e8f500da14 100644 --- a/arch/arm64/crypto/aes-ce-ccm-core.S +++ b/arch/arm64/crypto/aes-ce-ccm-core.S @@ -50,7 +50,7 @@ ld1 {v0.16b}, [x5] /* load mac */ cbz x2, ce_aes_ccm_final ldr x8, [x6, #8] /* load lower ctr */ -CPU_LE( rev x8, x8 ) /* keep swabbed ctr in reg */ + rev x8, x8 /* keep swabbed ctr in reg */ 0: /* outer loop */ ld1 {v1.8b}, [x6] /* load upper ctr */ prfm pldl1strm, [x1] @@ -73,7 +73,7 @@ CPU_LE( rev x8, x8 ) /* keep swabbed ctr in reg */ eor v0.16b, v0.16b, v2.16b /* xor mac with pt ^ rk[last] */ st1 {v6.16b}, [x0], #16 /* write output block */ bne 0b -CPU_LE( rev x8, x8 ) + rev x8, x8 str x8, [x6, #8] /* store lsb end of ctr (BE) */ cbnz x7, ce_aes_ccm_final st1 {v0.16b}, [x5] /* store mac */ diff --git a/arch/arm64/crypto/aes-neonbs-core.S b/arch/arm64/crypto/aes-ne= onbs-core.S index baf450717b24..ba1f981a5464 100644 --- a/arch/arm64/crypto/aes-neonbs-core.S +++ b/arch/arm64/crypto/aes-neonbs-core.S @@ -824,8 +824,8 @@ SYM_FUNC_START(aesbs_ctr_encrypt) frame_push 0 ldp x7, x8, [x5] ld1 {v0.16b}, [x5] -CPU_LE( rev x7, x7 ) -CPU_LE( rev x8, x8 ) + rev x7, x7 + rev x8, x8 adds x8, x8, #1 adc x7, x7, xzr =20 diff --git a/arch/arm64/crypto/ghash-ce-core.S b/arch/arm64/crypto/ghash-ce= -core.S index 33772d8fe6b5..ba350d57fc76 100644 --- a/arch/arm64/crypto/ghash-ce-core.S +++ b/arch/arm64/crypto/ghash-ce-core.S @@ -148,7 +148,7 @@ SYM_FUNC_START(pmull_ghash_update_p64) sub w0, w0, #1 =20 3: /* multiply XL by SHASH in GF(2^128) */ -CPU_LE( rev64 T1.16b, T1.16b ) + rev64 T1.16b, T1.16b =20 ext T2.16b, XL.16b, XL.16b, #8 ext IN1.16b, T1.16b, T1.16b, #8 @@ -272,7 +272,7 @@ SYM_FUNC_END(pmull_ghash_update_p64) cbz x0, 3f // tag only? =20 ldr w8, [x5, #12] // load lower counter -CPU_LE( rev w8, w8 ) + rev w8, w8 =20 0: mov w9, #4 // max blocks per round add x10, x0, #0xf @@ -380,7 +380,7 @@ CPU_LE( rev w8, w8 ) ret =20 5: -CPU_LE( rev w8, w8 ) + rev w8, w8 str w8, [x5, #12] // store lower counter st1 {XL.2d}, [x4] b 4b diff --git a/arch/arm64/crypto/sm4-ce-cipher-core.S b/arch/arm64/crypto/sm4= -ce-cipher-core.S index 4ac6cfbc5797..1682d727e097 100644 --- a/arch/arm64/crypto/sm4-ce-cipher-core.S +++ b/arch/arm64/crypto/sm4-ce-cipher-core.S @@ -18,7 +18,7 @@ SYM_FUNC_START(sm4_ce_do_crypt) ld1 {v8.4s}, [x2] ld1 {v0.4s-v3.4s}, [x0], #64 -CPU_LE( rev32 v8.16b, v8.16b ) + rev32 v8.16b, v8.16b ld1 {v4.4s-v7.4s}, [x0] sm4e v8.4s, v0.4s sm4e v8.4s, v1.4s @@ -30,7 +30,7 @@ CPU_LE( rev32 v8.16b, v8.16b ) sm4e v8.4s, v7.4s rev64 v8.4s, v8.4s ext v8.16b, v8.16b, v8.16b, #8 -CPU_LE( rev32 v8.16b, v8.16b ) + rev32 v8.16b, v8.16b st1 {v8.4s}, [x1] ret SYM_FUNC_END(sm4_ce_do_crypt) --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 20 23:17:14 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A96BC446C0C for ; Tue, 11 Aug 2026 14:01:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456913; cv=none; b=q36xeBLVaHcwscYQEaYc/48d0XSI36xs/vnR8xdIwRK+ECkzE7pAMxdLmBx1E51GsgIDpp6XM77MIOhwS3Xln63fK56ZN9AFdpdbfqer33cv5Brc5g6Qu6e7DLidDb+Oph+f/4F4WCUYTWXgDqxPcfuOyTmGpr9NflWMf3fG0xw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456913; c=relaxed/simple; bh=oDo4JwnOlJY83/zn+Y4V1QBTPSL+jHMMug/nXhzbyhk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TGmMkgBeYDgALMkK/5wRZuoeYVXQWftFuZxAUuBeiF/MyNd5tQ6r5hu4ZDruD49Dyde31akUIdZT0gS1VlpnRhxYw7S8aFJbRij63hOiidkeeRui2ECAUJDGbskEVuZb6r8dw0D6+VYziT9sQJ03PUBITICpfSSlbSLMqkBe+dQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=YY0QBNa2; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="YY0QBNa2" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3688A1F00A3E; Tue, 11 Aug 2026 14:01:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786456911; bh=J1Z78TEARAUt28Nj5AzN9ZydcmZVT/uTPf+fmKTQyug=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=YY0QBNa2RGTQCg84BKmW/nQ7TCLnm+59uE1OaKQVJ6/YvJvp17mKSmiNEU4pE5BmX Kk2YgyiRm8VWhJkP0qi4ohxXKFRp0d/X+Z130mMH4J2DWHkToZhnfEJy2gMMhvOAXe 71OeoAkWd3bKMVgF3hJUlsYcQ9DfH/bHimvvVyVxPiv4wrO8ZW8LNmO9TxEP/s0ALA erRE1W6ie8EXR4jltfWOZdswE42sMPC2lbpnPWyV5PdaltllgoIcd4B6fieCXNCMIl XwtDdwRJ088LufEI42ZF2e5zDFjsNWbgCrr1HiRD6ftzllfZ6ssI9hgW5jYb/6l3TK tiBeR3YucwTRw== From: Will Deacon To: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Will Deacon , Arnd Bergmann , Ard Biesheuvel , Eric Biggers , Daniel Borkmann , Catalin Marinas , Alexei Starovoitov , Oliver Upton , Herbert Xu , Marc Zyngier Subject: [PATCH 04/12] arm64: lib: Assume a little-endian kernel in custom library routines Date: Tue, 11 Aug 2026 15:01:23 +0100 Message-ID: <20260811140132.22778-5-will@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260811140132.22778-1-will@kernel.org> References: <20260811140132.22778-1-will@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Commit 5276ea17a23c ("lib/crc: arm64: Assume a little-endian kernel") removed all usage of the CPU_LE()/CPU_BE() macros from the arm64 CRC assembly now that big-endian support depends on BROKEN. Do the same for the rest of the custom arm64 library code, as well as removing all usage of the '__LITTLE_ENDIAN' macro. Signed-off-by: Will Deacon Acked-by: Arnd Bergmann Acked-by: Catalin Marinas Acked-by: Eric Biggers Acked-by: Marc Zyngier --- arch/arm64/lib/csum.c | 17 ----------------- arch/arm64/lib/memchr.S | 2 +- 2 files changed, 1 insertion(+), 18 deletions(-) diff --git a/arch/arm64/lib/csum.c b/arch/arm64/lib/csum.c index 2432683e48a6..75db718e5b6a 100644 --- a/arch/arm64/lib/csum.c +++ b/arch/arm64/lib/csum.c @@ -47,11 +47,7 @@ unsigned int __no_sanitize_address do_csum(const unsigne= d char *buff, int len) */ shift =3D offset * 8; data =3D *ptr++; -#ifdef __LITTLE_ENDIAN data =3D (data >> shift) << shift; -#else - data =3D (data << shift) >> shift; -#endif =20 /* * Body: straightforward aligned loads from here on (the paired loads @@ -94,13 +90,8 @@ unsigned int __no_sanitize_address do_csum(const unsigne= d char *buff, int len) len -=3D 16; ptr +=3D 2; =20 -#ifdef __LITTLE_ENDIAN data =3D tmp >> 64; sum64 =3D accumulate(sum64, tmp); -#else - data =3D tmp; - sum64 =3D accumulate(sum64, tmp >> 64); -#endif } if (len > 0) { sum64 =3D accumulate(sum64, data); @@ -112,11 +103,7 @@ unsigned int __no_sanitize_address do_csum(const unsig= ned char *buff, int len) * preserving odd/even alignment. */ shift =3D len * -8; -#ifdef __LITTLE_ENDIAN data =3D (data << shift) >> shift; -#else - data =3D (data >> shift) << shift; -#endif sum64 =3D accumulate(sum64, data); =20 /* Finally, folding */ @@ -140,11 +127,7 @@ __sum16 csum_ipv6_magic(const struct in6_addr *saddr, dst =3D *(const __uint128_t *)daddr->s6_addr; =20 sum +=3D (__force u32)htonl(len); -#ifdef __LITTLE_ENDIAN sum +=3D (u32)proto << 24; -#else - sum +=3D proto; -#endif src +=3D (src >> 64) | (src << 64); dst +=3D (dst >> 64) | (dst << 64); =20 diff --git a/arch/arm64/lib/memchr.S b/arch/arm64/lib/memchr.S index 37a9f2a4f7f4..b14b27cb8419 100644 --- a/arch/arm64/lib/memchr.S +++ b/arch/arm64/lib/memchr.S @@ -63,7 +63,7 @@ L(byte_loop): sub srcin, srcin, #1 ret L(found_word): -CPU_LE( rev tmp, tmp) + rev tmp, tmp clz tmp, tmp sub tmp, tmp, #64 add result, srcin, tmp, asr #3 --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 20 23:17:14 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 16329449B28 for ; Tue, 11 Aug 2026 14:01:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456916; cv=none; b=CTNZRJ+QOhl2YFIav1jkFZQgLq1R4JnAEWG7sZbHCD9+ZPjufq/srmY9YlOclB8ZZwlaAa1lUMZ57QE2gtDrFt8GYtFSz9PSp/IcohTgCi5sz74y8jJT69xrUJzozFj7flndxmRYMJQqB7xXAb4X4enO4gL7eWUA5mSWlE2m8go= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456916; c=relaxed/simple; bh=xMvd/wPe/Cx0+x65RAq3vm265Eo2A7f6Yp8bPkXsCA8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=K9brrjMqeLbWmodODrFGe/HYd3wqxw7y/gNmUegf+T7yPA9/B6HgON2wqcEdA6ANcWnlpBBAxE9Qwzit+5HrAZrfC3q4JRf1duDjGX2/Q5iYOlhUiOzNgpFkhAd+1f/p5bQOzCXK4VNQQuD/td/s/nM2E/sFoVwi3hHdW1QXupI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=BLuBVQE6; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="BLuBVQE6" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 22B1E1F000E9; Tue, 11 Aug 2026 14:01:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786456914; bh=dAPLA2gyZMmJKtLaawT2NRgSYtkIFiQ0jrrsW/pUmD4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=BLuBVQE6djx5vpkzdr8ju3sDOeCsWzj1C/sY939b4ZV9lpDSO3lnNFyDNe0Axolow hGVKockE9AGVpTbWTyxyexIGINiJZcJg/yLfkGQU/i+rqGsB2O21A+BSU/qA2F2xAa ToZCGB13WqM7o7rki3F7kDOuJfQPcoTQZtP3MijX5j/F2piXAP9VLXLH+ewThWiBCm lpTyPGG+8kz4FGTnIzqfBo5PESzFezdP38RGthIXT+CbKvghSxpe+iWeYAZX4PPjDp Fk62ZOg37VsV4EQSKCGWrqOnfDgoCotfYNBAQfT6oJyNPs4aVwYNEfvsGlp5I/PdxH lYsQgxkAtI6WA== From: Will Deacon To: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Will Deacon , Arnd Bergmann , Ard Biesheuvel , Eric Biggers , Daniel Borkmann , Catalin Marinas , Alexei Starovoitov , Oliver Upton , Herbert Xu , Marc Zyngier Subject: [PATCH 05/12] arm64: lib: Assume a little-endian kernel in optimised string routines Date: Tue, 11 Aug 2026 15:01:24 +0100 Message-ID: <20260811140132.22778-6-will@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260811140132.22778-1-will@kernel.org> References: <20260811140132.22778-1-will@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Big-endian support on arm64 depends on BROKEN. In preparation for removing the dead code altogether, remove the big-endian-specific support from the arm64 optimised string routines. Although these started life as a fork of Arm's "cortex strings" library and later got updated with the "optimized-routines" code, the in-kernel implementation has always been different enough that removing the unused big-endian portion still makes sense. Signed-off-by: Will Deacon Acked-by: Arnd Bergmann Acked-by: Catalin Marinas Acked-by: Eric Biggers Acked-by: Marc Zyngier --- arch/arm64/lib/memcmp.S | 2 - arch/arm64/lib/strcmp.S | 34 +-------------- arch/arm64/lib/strlen.S | 26 ----------- arch/arm64/lib/strncmp.S | 93 +++------------------------------------- arch/arm64/lib/strnlen.S | 16 +------ 5 files changed, 8 insertions(+), 163 deletions(-) diff --git a/arch/arm64/lib/memcmp.S b/arch/arm64/lib/memcmp.S index a5ccf2c55f91..1f528ce046e4 100644 --- a/arch/arm64/lib/memcmp.S +++ b/arch/arm64/lib/memcmp.S @@ -103,10 +103,8 @@ L(last_bytes): =20 /* Compare data bytes and set return value to 0, -1 or 1. */ L(return): -#ifndef __AARCH64EB__ rev data1, data1 rev data2, data2 -#endif cmp data1, data2 L(ret_eq): cset result, ne diff --git a/arch/arm64/lib/strcmp.S b/arch/arm64/lib/strcmp.S index 9b89b4533607..2389b47dca22 100644 --- a/arch/arm64/lib/strcmp.S +++ b/arch/arm64/lib/strcmp.S @@ -38,14 +38,6 @@ #define shift x9 #define off2 x10 =20 -/* On big-endian early bytes are at MSB and on little-endian LSB. - LS_FW means shifting towards early bytes. */ -#ifdef __AARCH64EB__ -# define LS_FW lsl -#else -# define LS_FW lsr -#endif - /* NUL detection works on the principle that (X - 1) & (~X) & 0x80 (=3D> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and can be done in parallel across the entire word. @@ -67,28 +59,17 @@ L(loop_aligned): ldr data2, [src1, off2] ldr data1, [src1], 8 L(start_realigned): -#ifdef __AARCH64EB__ - rev tmp, data1 - sub has_nul, tmp, zeroones - orr tmp, tmp, REP8_7f -#else sub has_nul, data1, zeroones orr tmp, data1, REP8_7f -#endif bics has_nul, has_nul, tmp /* Non-zero if NUL terminator. */ ccmp data1, data2, 0, eq b.eq L(loop_aligned) -#ifdef __AARCH64EB__ - rev has_nul, has_nul -#endif eor diff, data1, data2 orr syndrome, diff, has_nul L(end): -#ifndef __AARCH64EB__ rev syndrome, syndrome rev data1, data1 rev data2, data2 -#endif clz shift, syndrome /* The most-significant-non-zero bit of the syndrome marks either the first bit that is different, or the top bit of the first zero byte. @@ -113,7 +94,7 @@ L(mutual_align): ldr data1, [src1], 8 neg shift, src2, lsl 3 /* Bits to alignment -64. */ mov tmp, -1 - LS_FW tmp, tmp, shift + lsr tmp, tmp, shift orr data1, data1, tmp orr data2, data2, tmp b L(start_realigned) @@ -135,9 +116,6 @@ L(src1_aligned): neg shift, src2, lsl 3 bic src2, src2, 7 ldr data3, [src2], 8 -#ifdef __AARCH64EB__ - rev data3, data3 -#endif lsr tmp, zeroones, shift orr data3, data3, tmp sub has_nul, data3, zeroones @@ -152,9 +130,6 @@ L(src1_aligned): L(loop_unaligned): ldr data3, [src1, off1] ldr data2, [src1, off2] -#ifdef __AARCH64EB__ - rev data3, data3 -#endif sub has_nul, data3, zeroones orr tmp, data3, REP8_7f ldr data1, [src1], 8 @@ -163,9 +138,6 @@ L(loop_unaligned): b.eq L(loop_unaligned) =20 lsl tmp, has_nul, shift -#ifdef __AARCH64EB__ - rev tmp, tmp -#endif eor diff, data1, data2 orr syndrome, diff, tmp cbnz syndrome, L(end) @@ -174,10 +146,6 @@ L(tail): neg shift, shift lsr data2, data3, shift lsr has_nul, has_nul, shift -#ifdef __AARCH64EB__ - rev data2, data2 - rev has_nul, has_nul -#endif eor diff, data1, data2 orr syndrome, diff, has_nul b L(end) diff --git a/arch/arm64/lib/strlen.S b/arch/arm64/lib/strlen.S index 4919fe81ae54..a8c49a3886f6 100644 --- a/arch/arm64/lib/strlen.S +++ b/arch/arm64/lib/strlen.S @@ -85,14 +85,6 @@ SYM_FUNC_START(__pi_strlen) cmp tmp1, MIN_PAGE_SIZE - 16 b.gt L(page_cross) ldp data1, data2, [srcin] -#ifdef __AARCH64EB__ - /* For big-endian, carry propagation (if the final byte in the - string is 0x01) means we cannot use has_nul1/2 directly. - Since we expect strings to be small and early-exit, - byte-swap the data now so has_null1/2 will be correct. */ - rev data1, data1 - rev data2, data2 -#endif sub tmp1, data1, zeroones orr tmp2, data1, REP8_7f sub tmp3, data2, zeroones @@ -144,19 +136,7 @@ L(page_cross_entry): =20 /* Enter with C =3D has_nul1 =3D=3D 0. */ L(tail): -#ifdef __AARCH64EB__ - /* For big-endian, carry propagation (if the final byte in the - string is 0x01) means we cannot use has_nul1/2 directly. The - easiest way to get the correct byte is to byte-swap the data - and calculate the syndrome a second time. */ - csel data1, data1, data2, cc - rev data1, data1 - sub tmp1, data1, zeroones - orr tmp2, data1, REP8_7f - bic has_nul1, tmp1, tmp2 -#else csel has_nul1, has_nul1, has_nul2, cc -#endif sub len, src, srcin rev has_nul1, has_nul1 add tmp2, len, 8 @@ -194,13 +174,7 @@ L(page_cross): ldp data1, data2, [src] lsl tmp1, srcin, 3 mov tmp4, -1 -#ifdef __AARCH64EB__ - /* Big-endian. Early bytes are at MSB. */ - lsr tmp1, tmp4, tmp1 /* Shift (tmp1 & 63). */ -#else - /* Little-endian. Early bytes are at LSB. */ lsl tmp1, tmp4, tmp1 /* Shift (tmp1 & 63). */ -#endif orr tmp1, tmp1, REP8_80 orn data1, data1, tmp1 orn tmp2, data2, tmp1 diff --git a/arch/arm64/lib/strncmp.S b/arch/arm64/lib/strncmp.S index fe7bbc0b42a7..e4fde8586089 100644 --- a/arch/arm64/lib/strncmp.S +++ b/arch/arm64/lib/strncmp.S @@ -45,19 +45,6 @@ #define offset pos #define neg_offset x15 =20 -/* Define endian dependent shift operations. - On big-endian early bytes are at MSB and on little-endian LSB. - LS_FW means shifting towards early bytes. - LS_BK means shifting towards later bytes. - */ -#ifdef __AARCH64EB__ -#define LS_FW lsl -#define LS_BK lsr -#else -#define LS_FW lsr -#define LS_BK lsl -#endif - SYM_FUNC_START(__pi_strncmp) cbz limit, L(ret0) eor tmp1, src1, src2 @@ -86,7 +73,6 @@ L(start_realigned): /* End of main loop */ =20 L(full_check): -#ifndef __AARCH64EB__ orr syndrome, diff, has_nul add limit, limit, 8 /* Rewind limit to before last subs. */ L(syndrome_check): @@ -105,55 +91,6 @@ L(syndrome_check): sub result, data1, data2, lsr #56 csel result, result, xzr, hi ret -#else - /* Not reached the limit, must have found the end or a diff. */ - tbz limit, #63, L(not_limit) - add tmp1, limit, 8 - cbz limit, L(not_limit) - - lsl limit, tmp1, #3 /* Bits -> bytes. */ - mov mask, #~0 - lsr mask, mask, limit - bic data1, data1, mask - bic data2, data2, mask - - /* Make sure that the NUL byte is marked in the syndrome. */ - orr has_nul, has_nul, mask - -L(not_limit): - /* For big-endian we cannot use the trick with the syndrome value - as carry-propagation can corrupt the upper bits if the trailing - bytes in the string contain 0x01. */ - /* However, if there is no NUL byte in the dword, we can generate - the result directly. We can't just subtract the bytes as the - MSB might be significant. */ - cbnz has_nul, 1f - cmp data1, data2 - cset result, ne - cneg result, result, lo - ret -1: - /* Re-compute the NUL-byte detection, using a byte-reversed value. */ - rev tmp3, data1 - sub tmp1, tmp3, zeroones - orr tmp2, tmp3, #REP8_7f - bic has_nul, tmp1, tmp2 - rev has_nul, has_nul - orr syndrome, diff, has_nul - clz pos, syndrome - /* The most-significant-non-zero bit of the syndrome marks either the - first bit that is different, or the top bit of the first zero byte. - Shifting left now will bring the critical information into the - top bits. */ -L(end_quick): - lsl data1, data1, pos - lsl data2, data2, pos - /* But we need to zero-extend (char is unsigned) the value and then - perform a signed 32-bit subtraction. */ - lsr data1, data1, #56 - sub result, data1, data2, lsr #56 - ret -#endif =20 L(mutual_align): /* Sources are mutually aligned, but are not currently at an @@ -167,7 +104,7 @@ L(mutual_align): neg tmp3, count, lsl #3 /* 64 - bits(bytes beyond align). */ ldr data2, [src2], #8 mov tmp2, #~0 - LS_FW tmp2, tmp2, tmp3 /* Shift (count & 63). */ + lsr tmp2, tmp2, tmp3 /* Shift (count & 63). */ /* Adjust the limit and ensure it doesn't overflow. */ adds limit, limit, count csinv limit, limit, xzr, lo @@ -236,15 +173,15 @@ L(src1_aligned): neg neg_offset, offset ldr data1, [src1], #8 ldp tmp1, tmp2, [src2], #16 - LS_BK mask, mask, neg_offset + lsl mask, mask, neg_offset and neg_offset, neg_offset, #63 /* Need actual value for cmp later. */ /* Skip the first compare if data in tmp1 is irrelevant. */ tbnz offset, 6, L(misaligned_mid_loop) =20 L(loop_misaligned): /* STEP_A: Compare full 8 bytes when there is enough data from SRC2.*/ - LS_FW data2, tmp1, offset - LS_BK tmp1, tmp2, neg_offset + lsr data2, tmp1, offset + lsl tmp1, tmp2, neg_offset subs limit, limit, #8 orr data2, data2, tmp1 /* 8 bytes from SRC2 combined from two regs.*/ sub has_nul, data1, zeroones @@ -258,23 +195,12 @@ L(loop_misaligned): ldr data1, [src1], #8 L(misaligned_mid_loop): /* STEP_B: Compare first part of data1 to second part of tmp2. */ - LS_FW data2, tmp2, offset -#ifdef __AARCH64EB__ - /* For big-endian we do a byte reverse to avoid carry-propagation - problem described above. This way we can reuse the has_nul in the - next step and also use syndrome value trick at the end. */ - rev tmp3, data1 - #define data1_fixed tmp3 -#else + lsr data2, tmp2, offset #define data1_fixed data1 -#endif sub has_nul, data1_fixed, zeroones orr tmp3, data1_fixed, #REP8_7f eor diff, data2, data1 /* Non-zero if differences found. */ bic has_nul, has_nul, tmp3 /* Non-zero if NUL terminator. */ -#ifdef __AARCH64EB__ - rev has_nul, has_nul -#endif cmp limit, neg_offset, lsr #3 orr syndrome, diff, has_nul bic syndrome, syndrome, mask /* Ignore later bytes. */ @@ -284,7 +210,7 @@ L(misaligned_mid_loop): /* STEP_C: Compare second part of data1 to first part of tmp1. */ ldp tmp1, tmp2, [src2], #16 cmp limit, #8 - LS_BK data2, tmp1, neg_offset + lsl data2, tmp1, neg_offset eor diff, data2, data1 /* Non-zero if differences found. */ orr syndrome, diff, has_nul and syndrome, syndrome, mask /* Ignore earlier bytes. */ @@ -295,13 +221,6 @@ L(misaligned_mid_loop): sub limit, limit, #8 b L(loop_misaligned) =20 -#ifdef __AARCH64EB__ -L(syndrome_check): - clz pos, syndrome - cmp pos, limit, lsl #3 - b.lo L(end_quick) -#endif - L(ret0): mov result, #0 ret diff --git a/arch/arm64/lib/strnlen.S b/arch/arm64/lib/strnlen.S index d5ac0e10a01d..b20011d559f1 100644 --- a/arch/arm64/lib/strnlen.S +++ b/arch/arm64/lib/strnlen.S @@ -91,22 +91,10 @@ SYM_FUNC_START(__pi_strnlen) */ sub len, src, srcin cbz has_nul1, .Lnul_in_data2 -CPU_BE( mov data2, data1 ) /*perpare data to re-calculate the syndrome*/ =20 sub len, len, #8 mov has_nul2, has_nul1 .Lnul_in_data2: - /* - * For big-endian, carry propagation (if the final byte in the - * string is 0x01) means we cannot use has_nul directly. The - * easiest way to get the correct byte is to byte-swap the data - * and calculate the syndrome a second time. - */ -CPU_BE( rev data2, data2 ) -CPU_BE( sub tmp1, data2, zeroones ) -CPU_BE( orr tmp2, data2, #REP8_7f ) -CPU_BE( bic has_nul2, tmp1, tmp2 ) - sub len, len, #8 rev has_nul2, has_nul2 clz pos, has_nul2 @@ -139,10 +127,8 @@ CPU_BE( bic has_nul2, tmp1, tmp2 ) lsl tmp4, tmp4, #3 /* Bytes beyond alignment -> bits. */ =20 mov tmp2, #~0 - /* Big-endian. Early bytes are at MSB. */ -CPU_BE( lsl tmp2, tmp2, tmp4 ) /* Shift (tmp1 & 63). */ /* Little-endian. Early bytes are at LSB. */ -CPU_LE( lsr tmp2, tmp2, tmp4 ) /* Shift (tmp1 & 63). */ + lsr tmp2, tmp2, tmp4 /* Shift (tmp1 & 63). */ =20 cmp tmp1, #8 =20 --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 20 23:17:14 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DCB2D44AB6A for ; Tue, 11 Aug 2026 14:01:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456919; cv=none; b=k9t8YS3KcoH5+ief+E1pqaZ4Pwe/T8Hq/x0F5M1ynTcDd6UE+F/sqtVyp4EHuA7fCHDo5I/GdSQdHjTgE5UZwYpRVdqtXdpNGkJE1R0YAU0lHzZ8mF4wO1hpya9rF4cOnruCqRk2mYgCRPvY4Ai4IHwjO1jjvjZe7fsPesiCqTo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456919; c=relaxed/simple; bh=eSXN986EAO4f5Fwy6o1NQC5JvuXyuiuMeSjN9li/yuU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KHdFERNfc8ACxTkSWPGg27AhSm7rOjaQvUtyw5Dolj6qBc7HkVVgXFf47ZXMVlWUGWtFGNaKbo+OdXXpb2judy6v2Yjew6eWNx9YakkIkz3dDdSGccgq+qaGGYOFQeTU4aJqZJ1y00wtR5WgANJaaOvEmf2j/d/Y04l9LiPjshk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SpdsE61K; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="SpdsE61K" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 369A01F00A3A; Tue, 11 Aug 2026 14:01:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786456917; bh=OVtoFL/X2Cg8V2fpSt9ioOxaBxnq9YunbAkI7H2qxik=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=SpdsE61K1u0jLCWh6kUs1baLWdTEdZztiAz2wKLlQ00BASOUNsUVApf1NasS+wcra e+9bAYX0iaUPE3tOXc69ijfVRge67ZBEssLsKc01W223y1huZVK8Cdtyu8SHkSIwM+ RyhlgqpnUgsdMHulcDvrVtUh4KS4VEjpO2IHkNf3HAnxBuXeGR3Jv1yU38uVZSR5lO nUM8TWVsBflIBX0dsO3gIyd5uO3PZKlV0uYYmBl+p2jkuqWIy0mKUu8Uq/PPlfccZy iFLeyn8Fwyxql88EK190MjZWqrbPem2af0oCXjXq1HrmfQtgGSNAGw443+m42MAEJC t9jy0+xxQSttg== From: Will Deacon To: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Will Deacon , Arnd Bergmann , Ard Biesheuvel , Eric Biggers , Daniel Borkmann , Catalin Marinas , Alexei Starovoitov , Oliver Upton , Herbert Xu , Marc Zyngier Subject: [PATCH 06/12] arm64: assembler: Remove endianness helper macros Date: Tue, 11 Aug 2026 15:01:25 +0100 Message-ID: <20260811140132.22778-7-will@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260811140132.22778-1-will@kernel.org> References: <20260811140132.22778-1-will@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The CPU_LE()/CPU_BE() helper macros are only used by head.S. Since big-endian support depends on BROKEN, remove the last users along with the macro definitions. The unused regs_to_64() assembly macro, which somewhat bizarrely behaves differently depend on the endianness, is also removed. Signed-off-by: Will Deacon Acked-by: Arnd Bergmann Acked-by: Catalin Marinas Acked-by: Eric Biggers Acked-by: Marc Zyngier --- arch/arm64/include/asm/assembler.h | 31 ------------------------------ arch/arm64/kernel/head.S | 3 +-- 2 files changed, 1 insertion(+), 33 deletions(-) diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/as= sembler.h index effae53e9739..45279e577ff5 100644 --- a/arch/arm64/include/asm/assembler.h +++ b/arch/arm64/include/asm/assembler.h @@ -133,37 +133,6 @@ lr .req x30 // link register b \label .endm =20 -/* - * Select code when configured for BE. - */ -#ifdef CONFIG_CPU_BIG_ENDIAN -#define CPU_BE(code...) code -#else -#define CPU_BE(code...) -#endif - -/* - * Select code when configured for LE. - */ -#ifdef CONFIG_CPU_BIG_ENDIAN -#define CPU_LE(code...) -#else -#define CPU_LE(code...) code -#endif - -/* - * Define a macro that constructs a 64-bit value by concatenating two - * 32-bit registers. Note that on big endian systems the order of the - * registers is swapped. - */ -#ifndef CONFIG_CPU_BIG_ENDIAN - .macro regs_to_64, rd, lbits, hbits -#else - .macro regs_to_64, rd, hbits, lbits -#endif - orr \rd, \lbits, \hbits, lsl #32 - .endm - /* * Pseudo-ops for PC-relative adr/ldr/str , where * is within the range +/- 4 GB of the PC. diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S index 87a822e5c4ca..8951ce693552 100644 --- a/arch/arm64/kernel/head.S +++ b/arch/arm64/kernel/head.S @@ -138,8 +138,7 @@ SYM_CODE_START_LOCAL(record_mmu_state) b.ne 0f mrs x19, sctlr_el2 0: -CPU_LE( tbnz x19, #SCTLR_ELx_EE_SHIFT, 1f ) -CPU_BE( tbz x19, #SCTLR_ELx_EE_SHIFT, 1f ) + tbnz x19, #SCTLR_ELx_EE_SHIFT, 1f tst x19, #SCTLR_ELx_C // Z :=3D (C =3D=3D 0) and x19, x19, #SCTLR_ELx_M // isolate M bit csel x19, xzr, x19, eq // clear x19 if Z --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 20 23:17:14 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9F9E544C4EA for ; Tue, 11 Aug 2026 14:02:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456922; cv=none; b=JIP7aAIo4Cp+vCan3QiJIGNgcSTrtEru/LkpkG0Ivf/QbogoWAFmL3VEdZI94a7/wpp0+VCpITpqPw3RaCvWAlsO/STDVT4Qnnexox2ztLWTN0Ia6uWS4ifp0P+/RU3oyPQdOfsvxHJlLw/wQ3i0lnpm0DemJg+qWqCq4yHgE1g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456922; c=relaxed/simple; bh=ywiXDbiCSPVSXepKUefO/rrB1D0DXvwTz2MmjsUa4l8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=A4LB+VBOP2Gi/41CXN7639MZXzjgXC6/+VYCJ00gRUphW636jsMoeTeiQhapF85DMIVJVE+enjlbUIuDZTGW3Br+ltqf33e5LUXR9vCE8ZGta5YZ6/8VT0mxd7ePwlJFzTWwi1IufVQvkfmnkrqyoE9MtZz93LQUjc69qbNlgrE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=A54poN27; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="A54poN27" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 22AEF1F000E9; Tue, 11 Aug 2026 14:01:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786456920; bh=+oG0eZ9V4Bwd/qY1bBi+2nFmOgXnSQnG8OPQi7dEDnw=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=A54poN27vD0zAP7BbJsRw9L7rjpRNJudut3Z4uf3wKxg2t1Av0zJnWeQUFjkNd8mC DjaJ/NX/UqnxKWKjunyigPq94uSNCW1FQ/vrm08BFjey0VUS9pGDKiQN9ipVsHAtcI vQcju18vW2Q0MTLeM9mExEdZW5U6qbRTMl3N4UgiFtbJ71Z1+RdPYGw7Eqxkzwea1N r60nhbMvZ1GGUCR3+ZMZEilSo7sr4FszKGuwjEMiceFiu+DMftf7qn7JIf54xVLJDd u2Uqatcv0ggEu6C0l5SBpxfkovzV/B3darlLwiy5C7tF2cXGvDM/b973n1/CvBFN7J 4Wb63iSqnivng== From: Will Deacon To: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Will Deacon , Arnd Bergmann , Ard Biesheuvel , Eric Biggers , Daniel Borkmann , Catalin Marinas , Alexei Starovoitov , Oliver Upton , Herbert Xu , Marc Zyngier Subject: [PATCH 07/12] arm64: vdso32: Always build compat vDSO object as little-endian Date: Tue, 11 Aug 2026 15:01:26 +0100 Message-ID: <20260811140132.22778-8-will@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260811140132.22778-1-will@kernel.org> References: <20260811140132.22778-1-will@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Big-endian support on arm64 depends on BROKEN. In preparation for removing the dead code altogether, remove support for building a big-endian 32-bit vDSO. Signed-off-by: Will Deacon Acked-by: Arnd Bergmann Acked-by: Catalin Marinas Acked-by: Eric Biggers Acked-by: Marc Zyngier --- arch/arm64/kernel/vdso32/Makefile | 4 ---- 1 file changed, 4 deletions(-) diff --git a/arch/arm64/kernel/vdso32/Makefile b/arch/arm64/kernel/vdso32/M= akefile index bea3675fa668..00efdc5d2354 100644 --- a/arch/arm64/kernel/vdso32/Makefile +++ b/arch/arm64/kernel/vdso32/Makefile @@ -45,11 +45,7 @@ endif # From arm Makefile VDSO_CAFLAGS +=3D $(call cc32-option,-fno-dwarf2-cfi-asm) VDSO_CAFLAGS +=3D -mabi=3Daapcs-linux -mfloat-abi=3Dsoft -ifeq ($(CONFIG_CPU_BIG_ENDIAN), y) -VDSO_CAFLAGS +=3D -mbig-endian -else VDSO_CAFLAGS +=3D -mlittle-endian -endif =20 # From arm vDSO Makefile VDSO_CAFLAGS +=3D -fPIC -fno-builtin -fno-stack-protector --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 20 23:17:14 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AAD8144838E for ; Tue, 11 Aug 2026 14:02:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456924; cv=none; b=CytOZLVkuMpTodjNOGr0A90l7pjIp+vbUKoypoozG0yl7cPTd27AiCCUJlttNfnyaFtib6ZmZHdE5tQXYmnnHphZ47uzelf4G8QrmMK6OcQBt9l2gLjlNarCmmwCZwRFusvI+AyXCv89HKEZGfiYXGzOdfLb+lDjKH11hjMcmsY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456924; c=relaxed/simple; bh=4JJdxzo0Gu4FvojEkEAmIj/LRGlkFSRYmO+ymZXhvZo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Jg0REjG4MBetKmDMcEh6Wai7h/zGFpB52UvDPQgw1ZkDraM43i9JENLn5PXN6BhhWXQQgRdDkLSfisCY67ZzJPdmRyQVDnAGjAhIZ+NPyb1DFOocX7sTpFua58pQYDyG3yfkVWIIBCB8rVYoWfYrdVXTFoHL8Xw+Xmdvjt1C/08= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=A9qbfdxw; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="A9qbfdxw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1AE2F1F00A3A; Tue, 11 Aug 2026 14:02:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786456923; bh=z0zsKLPuoXfAkZir/h/dqQAL4c+HSViad4xaceBOxj0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=A9qbfdxwWf7yTuyuq/CAO6C8tqhr4rJ7HO685iKkeUmx2RKDm5UJVlCODGNS6bTIn TKv/gwZwn2QQ+Uof/QH19QJGyqerd2LzUUUaewgSJVW8EOQVfZ79K4pGqME80tkTm3 KtN/PcokKYyj3E+D2f0v+6LAG53Y6+BynFPLL+mGivloDvN6hkx+o2xVSY3IMco7Tq fB9FaDY5+YAEJbsFhJ3/JjC0C8oBQyDUp0vrI4BTW40IYn4uIj9q02JGkXMKHUFIO7 nHOxI/T3tEPbnDUOXe57I3MtgJgoI7c/ek3RAWwhM1RY9TRyOmi5B8Hvju8uFY0g3g gbsaLeInXyL9Q== From: Will Deacon To: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Will Deacon , Arnd Bergmann , Ard Biesheuvel , Eric Biggers , Daniel Borkmann , Catalin Marinas , Alexei Starovoitov , Oliver Upton , Herbert Xu , Marc Zyngier Subject: [PATCH 08/12] KVM: arm64: Remove support for a big-endian hypervisor object Date: Tue, 11 Aug 2026 15:01:27 +0100 Message-ID: <20260811140132.22778-9-will@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260811140132.22778-1-will@kernel.org> References: <20260811140132.22778-1-will@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Big-endian support on arm64 depends on BROKEN. In preparation for removing the dead code altogether, remove the support for generating ELF relocations for a big-endian hypervisor object and drop the unused big-endian spinlock definition from nVHE. Signed-off-by: Will Deacon Acked-by: Arnd Bergmann Acked-by: Catalin Marinas Acked-by: Eric Biggers Acked-by: Marc Zyngier --- arch/arm64/kvm/hyp/include/nvhe/spinlock.h | 4 ---- arch/arm64/kvm/hyp/nvhe/gen-hyprel.c | 16 ---------------- 2 files changed, 20 deletions(-) diff --git a/arch/arm64/kvm/hyp/include/nvhe/spinlock.h b/arch/arm64/kvm/hy= p/include/nvhe/spinlock.h index 7c7ea8c55405..b6978f03e86a 100644 --- a/arch/arm64/kvm/hyp/include/nvhe/spinlock.h +++ b/arch/arm64/kvm/hyp/include/nvhe/spinlock.h @@ -20,11 +20,7 @@ typedef union hyp_spinlock { u32 __val; struct { -#ifdef __AARCH64EB__ - u16 next, owner; -#else u16 owner, next; -#endif }; } hyp_spinlock_t; =20 diff --git a/arch/arm64/kvm/hyp/nvhe/gen-hyprel.c b/arch/arm64/kvm/hyp/nvhe= /gen-hyprel.c index b63f4e1c1033..99243e0fefb0 100644 --- a/arch/arm64/kvm/hyp/nvhe/gen-hyprel.c +++ b/arch/arm64/kvm/hyp/nvhe/gen-hyprel.c @@ -139,28 +139,12 @@ static struct { const char *sh_string; } elf; =20 -#if defined(CONFIG_CPU_LITTLE_ENDIAN) - #define elf16toh(x) le16toh(x) #define elf32toh(x) le32toh(x) #define elf64toh(x) le64toh(x) =20 #define ELFENDIAN ELFDATA2LSB =20 -#elif defined(CONFIG_CPU_BIG_ENDIAN) - -#define elf16toh(x) be16toh(x) -#define elf32toh(x) be32toh(x) -#define elf64toh(x) be64toh(x) - -#define ELFENDIAN ELFDATA2MSB - -#else - -#error PDP-endian sadly unsupported... - -#endif - #define fatal_error(fmt, ...) \ ({ \ fprintf(stderr, "error: %s: " fmt "\n", \ --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 20 23:17:14 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8C70644CAD4 for ; Tue, 11 Aug 2026 14:02:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456928; cv=none; b=OzrOCokpUTquDSCIqCPCpkcBjCpP2cNu2lfljahgbAOPOXAP1wjFrm+hoh+2sGmdoca7V15hF1fsB6nMZLbapzsaz3fIYBRMwx+3GwGegoNr0rt/QISB8+oUy+ttsMe2uqyW9HlZRBn2Kbe+l0nDlxu+gApaOgl6cu4jAjaDKMg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456928; c=relaxed/simple; bh=9NruF+VcURqMaDP+SmWiNlh7ItWwPBOd+nLu3vXfry8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HTl3bVISeGxReWuf2wviixmUh4eb1WJ0lSd2rYqN6xGe9zaIr1K5NtV00I5bBz99vq8gU3O5qAB8zSk7D1GE8M9XGmU390UgO2dQJvfJnHgrd19fbgfdYt7Qvw3+88D78idgQMwPsVEkCDuj5FShLYrTQMpTQ8hQNXqmt8tZFfU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZMmO3Amw; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZMmO3Amw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 146541F000E9; Tue, 11 Aug 2026 14:02:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786456926; bh=IOMMTfrI1Im8YLBftOATQW5sMNJc4vDknPj9SCkoCFc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=ZMmO3AmwDvZNHRehGl/JK1pCB+T0/Z6bUozWOk0S6XK9TZ3mbhnjsz2ki9KjObVEu LPQH7KJy6D4TIH1mlT/MgYdphvbfVSZQS3MKhie8jQZldJavprXPAOh5yC29zdDMUm hE7LWVVYwo5CYvQqPprVMijvenvpq2tKLjyqGu2QWnOQ43+GQYCSRVJ2d3Zj9ln9w4 LD7e2GNBDoNwxN9JP6Fv6/W6jpmRbvgIZONsi7Psiv1/esUUd4WmENoL/lYdcnDFL9 KSOvt/O9exQYo6VdxB29JH5foXhu+WEVbaACNg+Rf13v1KdcbI6K4BVz6/U0PiOs9S ssebkQQKd0Wew== From: Will Deacon To: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Will Deacon , Arnd Bergmann , Ard Biesheuvel , Eric Biggers , Daniel Borkmann , Catalin Marinas , Alexei Starovoitov , Oliver Upton , Herbert Xu , Marc Zyngier Subject: [PATCH 09/12] arm64: Remove all usage of CONFIG_CPU_BIG_ENDIAN Date: Tue, 11 Aug 2026 15:01:28 +0100 Message-ID: <20260811140132.22778-10-will@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260811140132.22778-1-will@kernel.org> References: <20260811140132.22778-1-will@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Big-endian support on arm64 depends on BROKEN. In preparation for removing the dead code altogether, remove all usage of CONFIG_CPU_BIG_ENDIAN from the arm64 kernel port. Signed-off-by: Will Deacon Acked-by: Arnd Bergmann Acked-by: Catalin Marinas Acked-by: Eric Biggers Acked-by: Marc Zyngier --- arch/arm64/include/asm/processor.h | 2 -- arch/arm64/include/asm/ptrace.h | 6 ---- arch/arm64/include/asm/sysreg.h | 50 ++++++++-------------------- arch/arm64/include/asm/thread_info.h | 5 --- arch/arm64/kernel/fpsimd.c | 21 ++---------- arch/arm64/kernel/image.h | 18 ++-------- arch/arm64/kernel/kexec_image.c | 5 ++- arch/arm64/kernel/kgdb.c | 3 -- arch/arm64/kernel/ptrace.c | 8 ++--- arch/arm64/kernel/signal32.c | 3 -- arch/arm64/kernel/sys32.c | 5 --- 11 files changed, 22 insertions(+), 104 deletions(-) diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/pr= ocessor.h index c2a627f39314..19a81f8d85a7 100644 --- a/arch/arm64/include/asm/processor.h +++ b/arch/arm64/include/asm/processor.h @@ -351,8 +351,6 @@ static inline void compat_start_thread(struct pt_regs *= regs, unsigned long pc, unsigned long pstate =3D PSR_AA32_MODE_USR; if (pc & 1) pstate |=3D PSR_AA32_T_BIT; - if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)) - pstate |=3D PSR_AA32_E_BIT; =20 start_thread_common(regs, pc, pstate); spectre_v4_enable_task_mitigation(current); diff --git a/arch/arm64/include/asm/ptrace.h b/arch/arm64/include/asm/ptrac= e.h index 39582511ad72..4722201403ea 100644 --- a/arch/arm64/include/asm/ptrace.h +++ b/arch/arm64/include/asm/ptrace.h @@ -68,12 +68,6 @@ #define PSR_AA32_IT_MASK 0x0600fc00 /* If-Then execution state mask */ #define PSR_AA32_GE_MASK 0x000f0000 =20 -#ifdef CONFIG_CPU_BIG_ENDIAN -#define PSR_AA32_ENDSTATE PSR_AA32_E_BIT -#else -#define PSR_AA32_ENDSTATE 0 -#endif - /* AArch32 CPSR bits, as seen in AArch32 */ #define COMPAT_PSR_DIT_BIT 0x00200000 =20 diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysre= g.h index 7aa08d59d494..f97c60b5dfca 100644 --- a/arch/arm64/include/asm/sysreg.h +++ b/arch/arm64/include/asm/sysreg.h @@ -62,19 +62,10 @@ =20 #else /* CONFIG_BROKEN_GAS_INST */ =20 -#ifndef CONFIG_CPU_BIG_ENDIAN -#define __INSTR_BSWAP(x) (x) -#else /* CONFIG_CPU_BIG_ENDIAN */ -#define __INSTR_BSWAP(x) ((((x) << 24) & 0xff000000) | \ - (((x) << 8) & 0x00ff0000) | \ - (((x) >> 8) & 0x0000ff00) | \ - (((x) >> 24) & 0x000000ff)) -#endif /* CONFIG_CPU_BIG_ENDIAN */ - #ifdef __ASSEMBLER__ -#define __emit_inst(x) .long __INSTR_BSWAP(x) +#define __emit_inst(x) .long (x) #else /* __ASSEMBLER__ */ -#define __emit_inst(x) ".long " __stringify(__INSTR_BSWAP(x)) "\n\t" +#define __emit_inst(x) ".long " __stringify(x) "\n\t" #endif /* __ASSEMBLER__ */ =20 #endif /* CONFIG_BROKEN_GAS_INST */ @@ -835,39 +826,26 @@ #define SCTLR_ELx_A (BIT(1)) #define SCTLR_ELx_M (BIT(0)) =20 -#ifdef CONFIG_CPU_BIG_ENDIAN -#define ENDIAN_SET_EL2 SCTLR_ELx_EE -#else -#define ENDIAN_SET_EL2 0 -#endif - #define INIT_SCTLR_EL2_MMU_ON \ (SCTLR_ELx_M | SCTLR_ELx_C | SCTLR_ELx_SA | SCTLR_ELx_I | \ - SCTLR_ELx_IESB | SCTLR_ELx_WXN | ENDIAN_SET_EL2 | \ - SCTLR_ELx_ITFSB | SCTLR_ELx_EIS | SCTLR_ELx_EOS | SCTLR_EL2_RES1) + SCTLR_ELx_IESB | SCTLR_ELx_WXN | SCTLR_ELx_ITFSB | \ + SCTLR_ELx_EIS | SCTLR_ELx_EOS | SCTLR_EL2_RES1) =20 -#define INIT_SCTLR_EL2_MMU_OFF \ - (SCTLR_EL2_RES1 | ENDIAN_SET_EL2) +#define INIT_SCTLR_EL2_MMU_OFF (SCTLR_EL2_RES1) =20 /* SCTLR_EL1 specific flags. */ -#ifdef CONFIG_CPU_BIG_ENDIAN -#define ENDIAN_SET_EL1 (SCTLR_EL1_E0E | SCTLR_ELx_EE) -#else -#define ENDIAN_SET_EL1 0 -#endif - #define INIT_SCTLR_EL1_MMU_OFF \ - (ENDIAN_SET_EL1 | SCTLR_EL1_LSMAOE | SCTLR_EL1_nTLSMD | \ - SCTLR_EL1_EIS | SCTLR_EL1_TSCXT | SCTLR_EL1_EOS) + (SCTLR_EL1_LSMAOE | SCTLR_EL1_nTLSMD | SCTLR_EL1_EIS | \ + SCTLR_EL1_TSCXT | SCTLR_EL1_EOS) =20 #define INIT_SCTLR_EL1_MMU_ON \ - (SCTLR_ELx_M | SCTLR_ELx_C | SCTLR_ELx_SA | \ - SCTLR_EL1_SA0 | SCTLR_EL1_SED | SCTLR_ELx_I | \ - SCTLR_EL1_DZE | SCTLR_EL1_UCT | SCTLR_EL1_nTWE | \ - SCTLR_ELx_IESB | SCTLR_EL1_SPAN | SCTLR_ELx_ITFSB | \ - ENDIAN_SET_EL1 | SCTLR_EL1_UCI | SCTLR_EL1_EPAN | \ - SCTLR_EL1_LSMAOE | SCTLR_EL1_nTLSMD | SCTLR_EL1_EIS | \ - SCTLR_EL1_TSCXT | SCTLR_EL1_EOS) + (SCTLR_ELx_M | SCTLR_ELx_C | SCTLR_ELx_SA | \ + SCTLR_EL1_SA0 | SCTLR_EL1_SED | SCTLR_ELx_I | \ + SCTLR_EL1_DZE | SCTLR_EL1_UCT | SCTLR_EL1_nTWE | \ + SCTLR_ELx_IESB | SCTLR_EL1_SPAN | SCTLR_ELx_ITFSB | \ + SCTLR_EL1_UCI | SCTLR_EL1_EPAN | SCTLR_EL1_LSMAOE | \ + SCTLR_EL1_nTLSMD | SCTLR_EL1_EIS | SCTLR_EL1_TSCXT | \ + SCTLR_EL1_EOS) =20 /* MAIR_ELx memory attributes (used by Linux) */ #define MAIR_ATTR_DEVICE_nGnRnE UL(0x00) diff --git a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/= thread_info.h index 5d7fe3e153c8..161b91762e93 100644 --- a/arch/arm64/include/asm/thread_info.h +++ b/arch/arm64/include/asm/thread_info.h @@ -29,13 +29,8 @@ struct thread_info { union { u64 preempt_count; /* 0 =3D> preemptible, <0 =3D> bug */ struct { -#ifdef CONFIG_CPU_BIG_ENDIAN - u32 need_resched; - u32 count; -#else u32 count; u32 need_resched; -#endif } preempt; }; #ifdef CONFIG_SHADOW_CALL_STACK diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c index e7f1682a3059..65e7147067aa 100644 --- a/arch/arm64/kernel/fpsimd.c +++ b/arch/arm64/kernel/fpsimd.c @@ -621,23 +621,6 @@ static int __init sme_sysctl_init(void) { return 0; } #define ZREG(sve_state, vq, n) ((char *)(sve_state) + \ (SVE_SIG_ZREG_OFFSET(vq, n) - SVE_SIG_REGS_OFFSET)) =20 -#ifdef CONFIG_CPU_BIG_ENDIAN -static __uint128_t arm64_cpu_to_le128(__uint128_t x) -{ - u64 a =3D swab64(x); - u64 b =3D swab64(x >> 64); - - return ((__uint128_t)a << 64) | b; -} -#else -static __uint128_t arm64_cpu_to_le128(__uint128_t x) -{ - return x; -} -#endif - -#define arm64_le128_to_cpu(x) arm64_cpu_to_le128(x) - static void __fpsimd_to_sve(struct arm64_sve_state *sst, struct user_fpsimd_state const *fst, unsigned int vq) @@ -647,7 +630,7 @@ static void __fpsimd_to_sve(struct arm64_sve_state *sst, =20 for (i =3D 0; i < SVE_NUM_ZREGS; ++i) { p =3D (__uint128_t *)ZREG(sst, vq, i); - *p =3D arm64_cpu_to_le128(fst->vregs[i]); + *p =3D fst->vregs[i]; } } =20 @@ -702,7 +685,7 @@ static inline void sve_to_fpsimd(struct task_struct *ta= sk) vq =3D sve_vq_from_vl(vl); for (i =3D 0; i < SVE_NUM_ZREGS; ++i) { p =3D (__uint128_t const *)ZREG(sst, vq, i); - fst->vregs[i] =3D arm64_le128_to_cpu(*p); + fst->vregs[i] =3D *p; } } =20 diff --git a/arch/arm64/kernel/image.h b/arch/arm64/kernel/image.h index 7bc3ba897901..5c10ca773363 100644 --- a/arch/arm64/kernel/image.h +++ b/arch/arm64/kernel/image.h @@ -24,28 +24,14 @@ * when PIE is in effect. So we need to split them up in 32-bit high and l= ow * words. */ -#ifdef CONFIG_CPU_BIG_ENDIAN -#define DATA_LE32(data) \ - ((((data) & 0x000000ff) << 24) | \ - (((data) & 0x0000ff00) << 8) | \ - (((data) & 0x00ff0000) >> 8) | \ - (((data) & 0xff000000) >> 24)) -#else -#define DATA_LE32(data) ((data) & 0xffffffff) -#endif - #define DEFINE_IMAGE_LE64(sym, data) \ - sym##_lo32 =3D DATA_LE32((data) & 0xffffffff); \ - sym##_hi32 =3D DATA_LE32((data) >> 32) + sym##_lo32 =3D (data) & 0xffffffff; \ + sym##_hi32 =3D (data) >> 32 =20 #define __HEAD_FLAG(field) (__HEAD_FLAG_##field << \ ARM64_IMAGE_FLAG_##field##_SHIFT) =20 -#ifdef CONFIG_CPU_BIG_ENDIAN -#define __HEAD_FLAG_BE ARM64_IMAGE_FLAG_BE -#else #define __HEAD_FLAG_BE ARM64_IMAGE_FLAG_LE -#endif =20 #define __HEAD_FLAG_PAGE_SIZE ((PAGE_SHIFT - 10) / 2) =20 diff --git a/arch/arm64/kernel/kexec_image.c b/arch/arm64/kernel/kexec_imag= e.c index b70f4df15a1a..b8d0fb0a9daf 100644 --- a/arch/arm64/kernel/kexec_image.c +++ b/arch/arm64/kernel/kexec_image.c @@ -40,7 +40,7 @@ static void *image_load(struct kimage *image, { struct arm64_image_header *h; u64 flags, value; - bool be_image, be_kernel; + bool be_image; struct kexec_buf kbuf =3D {}; unsigned long text_offset, kernel_segment_number; struct kexec_segment *kernel_segment; @@ -58,8 +58,7 @@ static void *image_load(struct kimage *image, /* Check cpu features */ flags =3D le64_to_cpu(h->flags); be_image =3D arm64_image_flag_field(flags, ARM64_IMAGE_FLAG_BE); - be_kernel =3D IS_ENABLED(CONFIG_CPU_BIG_ENDIAN); - if ((be_image !=3D be_kernel) && !system_supports_mixed_endian()) + if (be_image && !system_supports_mixed_endian()) return ERR_PTR(-EINVAL); =20 value =3D arm64_image_flag_field(flags, ARM64_IMAGE_FLAG_PAGE_SIZE); diff --git a/arch/arm64/kernel/kgdb.c b/arch/arm64/kernel/kgdb.c index 968324a79a89..41eb34c50721 100644 --- a/arch/arm64/kernel/kgdb.c +++ b/arch/arm64/kernel/kgdb.c @@ -61,9 +61,6 @@ struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] =3D { * detail. */ { "pstate", 4, offsetof(struct pt_regs, pstate) -#ifdef CONFIG_CPU_BIG_ENDIAN - + 4 -#endif }, { "v0", 16, -1 }, { "v1", 16, -1 }, diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c index 4d08598e2891..2f8663038c22 100644 --- a/arch/arm64/kernel/ptrace.c +++ b/arch/arm64/kernel/ptrace.c @@ -2467,12 +2467,8 @@ static int valid_compat_regs(struct user_pt_regs *re= gs) { regs->pstate &=3D ~SPSR_EL1_AARCH32_RES0_BITS; =20 - if (!system_supports_mixed_endian_el0()) { - if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)) - regs->pstate |=3D PSR_AA32_E_BIT; - else - regs->pstate &=3D ~PSR_AA32_E_BIT; - } + if (!system_supports_mixed_endian_el0()) + regs->pstate &=3D ~PSR_AA32_E_BIT; =20 if (user_mode(regs) && (regs->pstate & PSR_MODE32_BIT) && (regs->pstate & PSR_AA32_A_BIT) =3D=3D 0 && diff --git a/arch/arm64/kernel/signal32.c b/arch/arm64/kernel/signal32.c index bb3b526ff43f..5edcab50f753 100644 --- a/arch/arm64/kernel/signal32.c +++ b/arch/arm64/kernel/signal32.c @@ -334,9 +334,6 @@ static void compat_setup_return(struct pt_regs *regs, s= truct k_sigaction *ka, /* The IT state must be cleared for both ARM and Thumb-2 */ spsr &=3D ~PSR_AA32_IT_MASK; =20 - /* Restore the original endianness */ - spsr |=3D PSR_AA32_ENDSTATE; - if (ka->sa.sa_flags & SA_RESTORER) { retcode =3D ptr_to_compat(ka->sa.sa_restorer); } else { diff --git a/arch/arm64/kernel/sys32.c b/arch/arm64/kernel/sys32.c index 12a948f3a504..8ac07aeb018d 100644 --- a/arch/arm64/kernel/sys32.c +++ b/arch/arm64/kernel/sys32.c @@ -59,12 +59,7 @@ COMPAT_SYSCALL_DEFINE6(aarch32_mmap2, unsigned long, add= r, unsigned long, len, return ksys_mmap_pgoff(addr, len, prot, flags, fd, off_4k); } =20 -#ifdef CONFIG_CPU_BIG_ENDIAN -#define arg_u32p(name) u32, name##_hi, u32, name##_lo -#else #define arg_u32p(name) u32, name##_lo, u32, name##_hi -#endif - #define arg_u64(name) (((u64)name##_hi << 32) | name##_lo) =20 COMPAT_SYSCALL_DEFINE6(aarch32_pread64, unsigned int, fd, char __user *, b= uf, --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 20 23:17:14 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DC418447800 for ; Tue, 11 Aug 2026 14:02:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456932; cv=none; b=rl292QQZ4VcdoMreGvAptSotdckLJploAXf0re0BKTzHHK2iLpLDEfSm6tDMW69yyBN7747tjuNdeZ93YXfFTGgvpVYnKqdGf70rFZ3T9cZ4iceqXTLLNibXxT5RJLkG8FnPnKXSGxguonylSPoe7jWqySDtockpMZ5kRyhxGNE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456932; c=relaxed/simple; bh=8P5k7ezMuZcstaq4vnB+JMBUAwIEnPzxK/axugisRRc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iEsf2Sek2BaegbH7NdcSAoZhNrDdKHN+c2TJuGUeJCLkHpjO440HgeLJ0KEmXbRah8Rz1yeSXzPl/R5Wx6ioL0BC7pLYsxGZHv1dpez5yUVZPv1BvwhpHR/cT43U8vdMH/JlxBs/yIPlf+fjSGrU4WcMQCZQHDNTd02rw4EcZDw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=e5keyLbv; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="e5keyLbv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EE0591F00A3A; Tue, 11 Aug 2026 14:02:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786456929; bh=TCTcqojh3jvi7qhN4/FwCwW56W3/kVP2/X7El3hYsr0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=e5keyLbvriw9Y97mg90iEPdMiMwyRuSf1WHXjuWRu8/mLLPgyAyGkBhwJBxCAamjT eexZfoGXO+0tYTE5orEDoozwta09CkOImUC9V2iD4RqUeYX6fXIHzZYw8qnmcCV2/N 4xJxpZScLdboWAbFvLNT8f/5p43zt5KRDDgdKCwLLdMSJdLr0It7zyeDGp82TLqRW5 xxuAJeIhzQrehb8Wj0O4qfVPt8dLVv+F87/EbVIaVZFLoTyoUbD5I/iN+8x3pZhObP XOEOJJhRmVZdbBzuZQSYeN8zF5nmFQGhmKfe8cJ8RaVwSFWlce42yNTHeT7qDJDooJ GJyXp7pv72cbg== From: Will Deacon To: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Will Deacon , Arnd Bergmann , Ard Biesheuvel , Eric Biggers , Daniel Borkmann , Catalin Marinas , Alexei Starovoitov , Oliver Upton , Herbert Xu , Marc Zyngier Subject: [PATCH 10/12] arm64: Remove all usage of __AARCH64EB__ Date: Tue, 11 Aug 2026 15:01:29 +0100 Message-ID: <20260811140132.22778-11-will@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260811140132.22778-1-will@kernel.org> References: <20260811140132.22778-1-will@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Big-endian support on arm64 depends on BROKEN. In preparation for removing the dead code altogether, remove all usage of __AARCH64EB__ from the arm64 kernel port. Signed-off-by: Will Deacon Acked-by: Arnd Bergmann Acked-by: Catalin Marinas Acked-by: Eric Biggers Acked-by: Marc Zyngier --- arch/arm64/include/asm/compat.h | 14 -------------- arch/arm64/include/asm/elf.h | 12 ------------ arch/arm64/include/asm/word-at-a-time.h | 6 ------ arch/arm64/include/uapi/asm/byteorder.h | 4 ---- arch/arm64/kernel/signal32.c | 10 ---------- arch/arm64/mm/extable.c | 5 ----- 6 files changed, 51 deletions(-) diff --git a/arch/arm64/include/asm/compat.h b/arch/arm64/include/asm/compa= t.h index ae904a1ad529..5e4cc4d2f872 100644 --- a/arch/arm64/include/asm/compat.h +++ b/arch/arm64/include/asm/compat.h @@ -28,34 +28,20 @@ typedef u16 compat_ipc_pid_t; #include #include =20 -#ifdef __AARCH64EB__ -#define COMPAT_UTS_MACHINE "armv8b\0\0" -#else #define COMPAT_UTS_MACHINE "armv8l\0\0" -#endif =20 typedef u16 __compat_uid16_t; typedef u16 __compat_gid16_t; typedef s32 compat_nlink_t; =20 struct compat_stat { -#ifdef __AARCH64EB__ - short st_dev; - short __pad1; -#else compat_dev_t st_dev; -#endif compat_ino_t st_ino; compat_mode_t st_mode; compat_ushort_t st_nlink; __compat_uid16_t st_uid; __compat_gid16_t st_gid; -#ifdef __AARCH64EB__ - short st_rdev; - short __pad2; -#else compat_dev_t st_rdev; -#endif compat_off_t st_size; compat_off_t st_blksize; compat_off_t st_blocks; diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h index d2779d604c7b..5a0bd3d38b1a 100644 --- a/arch/arm64/include/asm/elf.h +++ b/arch/arm64/include/asm/elf.h @@ -72,11 +72,7 @@ * These are used to set parameters in the core dumps. */ #define ELF_CLASS ELFCLASS64 -#ifdef __AARCH64EB__ -#define ELF_DATA ELFDATA2MSB -#else #define ELF_DATA ELFDATA2LSB -#endif #define ELF_ARCH EM_AARCH64 =20 /* @@ -85,11 +81,7 @@ * intent than poking at uname or /proc/cpuinfo. */ #define ELF_PLATFORM_SIZE 16 -#ifdef __AARCH64EB__ -#define ELF_PLATFORM ("aarch64_be") -#else #define ELF_PLATFORM ("aarch64") -#endif =20 /* * This is used to ensure we don't load something for the wrong architectu= re. @@ -195,11 +187,7 @@ extern int arch_setup_additional_pages(struct linux_bi= nprm *bprm, #define STACK_RND_MASK (0x3ffff >> (PAGE_SHIFT - 12)) #endif =20 -#ifdef __AARCH64EB__ -#define COMPAT_ELF_PLATFORM ("v8b") -#else #define COMPAT_ELF_PLATFORM ("v8l") -#endif =20 /* AArch32 registers. */ #define COMPAT_ELF_NGREG 18 diff --git a/arch/arm64/include/asm/word-at-a-time.h b/arch/arm64/include/a= sm/word-at-a-time.h index 824ca6987a51..d7a3b69dc8c6 100644 --- a/arch/arm64/include/asm/word-at-a-time.h +++ b/arch/arm64/include/asm/word-at-a-time.h @@ -7,8 +7,6 @@ =20 #include =20 -#ifndef __AARCH64EB__ - #include #include =20 @@ -36,10 +34,6 @@ static inline unsigned long zero_bytemask(unsigned long = bits) return bits >> 7; } =20 -#else /* __AARCH64EB__ */ -#include -#endif - /* * Load an unaligned word from kernel space. * diff --git a/arch/arm64/include/uapi/asm/byteorder.h b/arch/arm64/include/u= api/asm/byteorder.h index ca9cfdab33fc..b078e60f0506 100644 --- a/arch/arm64/include/uapi/asm/byteorder.h +++ b/arch/arm64/include/uapi/asm/byteorder.h @@ -17,10 +17,6 @@ #ifndef __ASM_BYTEORDER_H #define __ASM_BYTEORDER_H =20 -#ifdef __AARCH64EB__ -#include -#else #include -#endif =20 #endif /* __ASM_BYTEORDER_H */ diff --git a/arch/arm64/kernel/signal32.c b/arch/arm64/kernel/signal32.c index 5edcab50f753..3e1ce0b00a68 100644 --- a/arch/arm64/kernel/signal32.c +++ b/arch/arm64/kernel/signal32.c @@ -70,22 +70,12 @@ static inline int get_sigset_t(sigset_t *set, =20 /* * VFP save/restore code. - * - * We have to be careful with endianness, since the fpsimd context-switch - * code operates on 128-bit (Q) register values whereas the compat ABI - * uses an array of 64-bit (D) registers. Consequently, we need to swap - * the two halves of each Q register when running on a big-endian CPU. */ union __fpsimd_vreg { __uint128_t raw; struct { -#ifdef __AARCH64EB__ - u64 hi; - u64 lo; -#else u64 lo; u64 hi; -#endif }; }; =20 diff --git a/arch/arm64/mm/extable.c b/arch/arm64/mm/extable.c index 6e0528831cd3..299a244f68e6 100644 --- a/arch/arm64/mm/extable.c +++ b/arch/arm64/mm/extable.c @@ -79,12 +79,7 @@ ex_handler_load_unaligned_zeropad(const struct exception= _table_entry *ex, addr &=3D ~0x7UL; =20 data =3D *(unsigned long*)addr; - -#ifndef __AARCH64EB__ data >>=3D 8 * offset; -#else - data <<=3D 8 * offset; -#endif =20 pt_regs_write_reg(regs, reg_data, data); =20 --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 20 23:17:14 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C3EF244C66A for ; Tue, 11 Aug 2026 14:02:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456934; cv=none; b=NWo6VzuwfJ6g9mB6PHHpYx0U8jH+UzFlZ/oRy9iAR7AZBOSY9SKau0rXWuschvN+2F9lCAzfgH+TJAg2ntt/CkY/if91SBepAFKUXuLhcxxmTKT1vJjbmzfXD9MgoD6uOU+v5IZ0Q+x/fXHeLR0uXKjQwo7a9cJKpGkI05Q7ZtI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456934; c=relaxed/simple; bh=ioJZhY+NaJRpOeBuUiLo6CQB1ZHthFPG9fV3xk8bFeE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GjWzxFkz7DrARmr/wh/rVV4cD8Ap0F0z+h4pd1NYKPgfMqX+LIgsVgk/U/GJJMKORaRwRdcwA8fwBYBw24NLCDPV9UXQbsgHG4KI80u6Rgg3ewO3x5V7E5+QKyFrdOcwbe2fsTV5r4VhAXEEEtlNcJ0UbWMxc75RSyLWTLRbYrc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=C8e9PWNP; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="C8e9PWNP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D38A11F00A3E; Tue, 11 Aug 2026 14:02:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786456932; bh=onpTqTBmXiqGXmTMVV6/RDQ2iBB2lu9k9fuTRvKjlDY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=C8e9PWNP5oKxdZ7Ic5tSUjOzX+rUytL1bm3B3sbQQlna2jgz3u4gsXb/ImrXY9jxj kM/NziwVbrf9tJ9qQaV61ttVe6YLr/jS8sqY8h4yydG3xhSgppdk6/EW6wxKKtmrIa uEpgnn+Y7IWzsz/Iiq4L8sVL41xOUbTz+3uIqcMJ7k/i3zTKumb4TMa42J1uRLyi5P aCCXT20tVvHeJ4Ma3I4xJUaNNVlI0vSb6jd6q/dxVbaJlHLUIHOlKk5mQCeyiqFTnV qyq8m92jAkitQPUIE/MoupvpPkdso4xM0e7ltndjsPv5KUAOJN9yJsCkcux6pyLkDP fvybetvm8932A== From: Will Deacon To: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Will Deacon , Arnd Bergmann , Ard Biesheuvel , Eric Biggers , Daniel Borkmann , Catalin Marinas , Alexei Starovoitov , Oliver Upton , Herbert Xu , Marc Zyngier Subject: [PATCH 11/12] arm64: image: Remove endianness handling for generating image header Date: Tue, 11 Aug 2026 15:01:30 +0100 Message-ID: <20260811140132.22778-12-will@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260811140132.22778-1-will@kernel.org> References: <20260811140132.22778-1-will@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Since big-endian support for arm64 depends on BROKEN, we don't need to bother jumping through hoops to generate a little-endian kernel image header for a big-endian target. We can just ignore the possibility instead. Signed-off-by: Will Deacon Acked-by: Arnd Bergmann Acked-by: Catalin Marinas Acked-by: Eric Biggers Acked-by: Marc Zyngier --- arch/arm64/include/asm/assembler.h | 11 ----------- arch/arm64/kernel/head.S | 4 ++-- arch/arm64/kernel/image.h | 24 ++---------------------- 3 files changed, 4 insertions(+), 35 deletions(-) diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/as= sembler.h index 45279e577ff5..d3ce96c7b8ec 100644 --- a/arch/arm64/include/asm/assembler.h +++ b/arch/arm64/include/asm/assembler.h @@ -525,17 +525,6 @@ alternative_else_nop_endif #define EXPORT_SYMBOL_NOKASAN(name) EXPORT_SYMBOL(name) #endif =20 - /* - * Emit a 64-bit absolute little endian symbol reference in a way that - * ensures that it will be resolved at build time, even when building a - * PIE binary. This requires cooperation from the linker script, which - * must emit the lo32/hi32 halves individually. - */ - .macro le64sym, sym - .long \sym\()_lo32 - .long \sym\()_hi32 - .endm - /* * mov_q - move an immediate constant into a 64-bit register using * between 2 and 4 movz/movk instructions (depending on the diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S index 8951ce693552..684896390258 100644 --- a/arch/arm64/kernel/head.S +++ b/arch/arm64/kernel/head.S @@ -61,8 +61,8 @@ efi_signature_nop // special NOP to identity as PE/COFF executable b primary_entry // branch to kernel start, magic .quad 0 // Image load offset from start of RAM, little-endian - le64sym _kernel_size_le // Effective size of kernel image, little-endian - le64sym _kernel_flags_le // Informative flags, little-endian + .quad _kernel_size_le // Effective size of kernel image, little-endian + .quad _kernel_flags_le // Informative flags, little-endian .quad 0 // reserved .quad 0 // reserved .quad 0 // reserved diff --git a/arch/arm64/kernel/image.h b/arch/arm64/kernel/image.h index 5c10ca773363..208843f96b4d 100644 --- a/arch/arm64/kernel/image.h +++ b/arch/arm64/kernel/image.h @@ -13,21 +13,6 @@ =20 #include =20 -/* - * There aren't any ELF relocations we can use to endian-swap values known= only - * at link time (e.g. the subtraction of two symbol addresses), so we must= get - * the linker to endian-swap certain values before emitting them. - * - * Note that, in order for this to work when building the ELF64 PIE execut= able - * (for KASLR), these values should not be referenced via R_AARCH64_ABS64 - * relocations, since these are fixed up at runtime rather than at build t= ime - * when PIE is in effect. So we need to split them up in 32-bit high and l= ow - * words. - */ -#define DEFINE_IMAGE_LE64(sym, data) \ - sym##_lo32 =3D (data) & 0xffffffff; \ - sym##_hi32 =3D (data) >> 32 - #define __HEAD_FLAG(field) (__HEAD_FLAG_##field << \ ARM64_IMAGE_FLAG_##field##_SHIFT) =20 @@ -41,13 +26,8 @@ __HEAD_FLAG(PAGE_SIZE) | \ __HEAD_FLAG(PHYS_BASE)) =20 -/* - * These will output as part of the Image header, which should be little-e= ndian - * regardless of the endianness of the kernel. While constant values could= be - * endian swapped in head.S, all are done here for consistency. - */ #define HEAD_SYMBOLS \ - DEFINE_IMAGE_LE64(_kernel_size_le, _end - _text); \ - DEFINE_IMAGE_LE64(_kernel_flags_le, __HEAD_FLAGS); + _kernel_size_le =3D _end - _text; \ + _kernel_flags_le =3D __HEAD_FLAGS; =20 #endif /* __ARM64_KERNEL_IMAGE_H */ --=20 2.55.0.679.g6767b8d81c-goog From nobody Thu Aug 20 23:17:14 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3E9AA44E04C for ; Tue, 11 Aug 2026 14:02:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456936; cv=none; b=fvJKDAwsXuuCEGC/fYVgkWYAxevVNQirS/M6pZsxudmj4LMBRbYL5vzBanNu67bKqocxzH4V/+4IEnn307Psqp/NpgT53hA/dNvlY/8rOHrVwexUBLugZjcTyUiGyMJ81GakcAe53j3T+uO04zRkGVenFtdieNoW9LtIX85kRu4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786456936; c=relaxed/simple; bh=HuG8FSNfVkny5wtzqwShw21tr/btEXqEmd8f5C6wBd0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ROd8dn3xcDzX3bFE7X3QLXeq62kigTTJFqo2XE1d/Bc+oh4gI39lctB4CNXuEiIME2/D2PMQDHTAwgt1+UlwY//mOrGiTXkOGqtg1Pb65xQR+dNNp6hE3NLqBDs6aj/ha9rPszNLSqqReKZQWIuOZPX14/SX/gCkdQasOOjSfbU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=BxoUlsKl; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="BxoUlsKl" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BEFB81F00A3A; Tue, 11 Aug 2026 14:02:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786456935; bh=YU9FiiOOoo487BSZG02G7hwJSOW9m0RKnWb9zznl0MQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=BxoUlsKlyf/vU0w7o07D5edKXov2Qygn4lwPIvQIweyImiolYPayUlZ70zfIL1fKw syZpS8G85DxmLPPhlxP1ZodfYyHUs7+uX+CiKcvmPK14ImkX9OpEMF2gk91wtAguGB 8g+TNeZH4FTDEt7MkACD3xIQ+8IfMPJXt9OYh6MqpV9qKbk5t8IllSf/XIY6J6dy7Q jZqXR1l/+xdFeCtcVifWo0Nyku7ljNNF/yYUt3OWnvAgiw7nDvF6l2NwJ0EhVoDIvf DnG3b8G2pnilQsZWQE4bhq1wVDcnB5DPMJ9/kAqQNbcEAf1KXxVU0Ug4Z2gBAKkzoq bxMnEpLAgzFCw== From: Will Deacon To: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, Will Deacon , Arnd Bergmann , Ard Biesheuvel , Eric Biggers , Daniel Borkmann , Catalin Marinas , Alexei Starovoitov , Oliver Upton , Herbert Xu , Marc Zyngier Subject: [PATCH 12/12] arm64: Kbuild: Remove vestigial big-endian support Date: Tue, 11 Aug 2026 15:01:31 +0100 Message-ID: <20260811140132.22778-13-will@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260811140132.22778-1-will@kernel.org> References: <20260811140132.22778-1-will@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Since 1cf89b6bf660 ("arm64: Kconfig: Make CPU_BIG_ENDIAN depend on BROKEN"), CONFIG_CPU_BIG_ENDIAN has depended on BROKEN for arm64. Remove the last traces of its existence and unconditionally force a little-endian kernel build. Signed-off-by: Will Deacon Acked-by: Arnd Bergmann Acked-by: Catalin Marinas Acked-by: Eric Biggers Acked-by: Marc Zyngier --- arch/arm64/Kconfig | 35 ++++------------------------------- arch/arm64/Makefile | 12 ++---------- 2 files changed, 6 insertions(+), 41 deletions(-) diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index b3afe0688919..84cf009c0021 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -73,7 +73,7 @@ config ARM64 select ARCH_SUPPORTS_HUGETLBFS select ARCH_SUPPORTS_MEMORY_FAILURE select ARCH_SUPPORTS_SHADOW_CALL_STACK if CC_HAVE_SHADOW_CALL_STACK - select ARCH_SUPPORTS_LTO_CLANG if CPU_LITTLE_ENDIAN + select ARCH_SUPPORTS_LTO_CLANG select ARCH_SUPPORTS_LTO_CLANG_THIN select ARCH_SUPPORTS_CFI select ARCH_SUPPORTS_ATOMIC_RMW @@ -223,7 +223,7 @@ config ARM64 select HAVE_FUNCTION_ARG_ACCESS_API select MMU_GATHER_RCU_TABLE_FREE select HAVE_RSEQ - select HAVE_RUST if RUSTC_SUPPORTS_ARM64 + select HAVE_RUST select HAVE_STACKPROTECTOR select HAVE_STATIC_CALL if CFI select HAVE_SYSCALL_TRACEPOINTS @@ -262,10 +262,6 @@ config ARM64 help ARM 64-bit (AArch64) Linux support. =20 -config RUSTC_SUPPORTS_ARM64 - def_bool y - depends on CPU_LITTLE_ENDIAN - config CLANG_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS def_bool CC_IS_CLANG # https://github.com/ClangBuiltLinux/linux/issues/1507 @@ -1542,28 +1538,6 @@ config ARM64_LPA2 def_bool y depends on ARM64_PA_BITS_52 && !ARM64_64K_PAGES =20 -choice - prompt "Endianness" - default CPU_LITTLE_ENDIAN - help - Select the endianness of data accesses performed by the CPU. Userspace - applications will need to be compiled and linked for the endianness - that is selected here. - -config CPU_BIG_ENDIAN - bool "Build big-endian kernel" - depends on BROKEN - help - Say Y if you plan on running a kernel with a big-endian userspace. - -config CPU_LITTLE_ENDIAN - bool "Build little-endian kernel" - help - Say Y if you plan on running a kernel with a little-endian userspace. - This is usually the case for distributions targeting arm64. - -endchoice - config NR_CPUS int "Maximum number of CPUs (2-4096)" range 2 4096 @@ -1801,7 +1775,6 @@ config KUSER_HELPERS =20 config COMPAT_VDSO bool "Enable vDSO for 32-bit applications" - depends on !CPU_BIG_ENDIAN depends on (CC_IS_CLANG && LD_IS_LLD) || "$(CROSS_COMPILE_COMPAT)" !=3D "" default y help @@ -2263,7 +2236,7 @@ menu "ARMv9.6 architectural features" config ARM64_LSUI bool "Support Unprivileged Load Store Instructions (LSUI)" default y - depends on AS_HAS_LSUI && !CPU_BIG_ENDIAN + depends on AS_HAS_LSUI help The Unprivileged Load Store Instructions (LSUI) provides variants load/store instructions that access user-space memory @@ -2468,7 +2441,7 @@ config EFI_STUB =20 config EFI bool "UEFI runtime support" - depends on OF && !CPU_BIG_ENDIAN + depends on OF depends on KERNEL_MODE_NEON select ARCH_SUPPORTS_ACPI select LIBFDT diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile index 6b005c8fef70..04e1a0d12f8f 100644 --- a/arch/arm64/Makefile +++ b/arch/arm64/Makefile @@ -119,20 +119,12 @@ KBUILD_CFLAGS +=3D -ffixed-x18 KBUILD_RUSTFLAGS +=3D -Zfixed-x18 endif =20 -ifeq ($(CONFIG_CPU_BIG_ENDIAN), y) -KBUILD_CPPFLAGS +=3D -mbig-endian -CHECKFLAGS +=3D -D__AARCH64EB__ -# Prefer the baremetal ELF build target, but not all toolchains include -# it so fall back to the standard linux version if needed. -KBUILD_LDFLAGS +=3D -EB $(call ld-option, -maarch64elfb, -maarch64linuxb -= z norelro) -UTS_MACHINE :=3D aarch64_be -else KBUILD_CPPFLAGS +=3D -mlittle-endian CHECKFLAGS +=3D -D__AARCH64EL__ -# Same as above, prefer ELF but fall back to linux target if needed. +# Prefer the baremetal ELF build target, but not all toolchains include +# it so fall back to the standard linux version if needed. KBUILD_LDFLAGS +=3D -EL $(call ld-option, -maarch64elf, -maarch64linux -z = norelro) UTS_MACHINE :=3D aarch64 -endif =20 ifeq ($(CONFIG_LD_IS_LLD), y) KBUILD_LDFLAGS +=3D -z norelro --=20 2.55.0.679.g6767b8d81c-goog