[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <d080a2d6-9ec7-1c86-4cf4-536400221f68@gmail.com>
Date: Mon, 24 Feb 2025 16:24:14 +0100
From: Uros Bizjak <ubizjak@...il.com>
To: Kuan-Wei Chiu <visitorckw@...il.com>, tglx@...utronix.de,
Ingo Molnar <mingo@...hat.com>, bp@...en8.de, dave.hansen@...ux.intel.com,
x86@...nel.org, jk@...abs.org, joel@....id.au, eajames@...ux.ibm.com,
andrzej.hajda@...el.com, neil.armstrong@...aro.org, rfoss@...nel.org,
maarten.lankhorst@...ux.intel.com, mripard@...nel.org, tzimmermann@...e.de,
airlied@...il.com, simona@...ll.ch, dmitry.torokhov@...il.com,
mchehab@...nel.org, awalls@...metrocast.net, hverkuil@...all.nl,
miquel.raynal@...tlin.com, richard@....at, vigneshr@...com,
louis.peens@...igine.com, andrew+netdev@...n.ch, davem@...emloft.net,
edumazet@...gle.com, pabeni@...hat.com, parthiban.veerasooran@...rochip.com,
arend.vanspriel@...adcom.com, johannes@...solutions.net,
gregkh@...uxfoundation.org, jirislaby@...nel.org, yury.norov@...il.com,
akpm@...ux-foundation.org, mingo@...nel.org
Cc: hpa@...or.com, alistair@...ple.id.au, linux@...musvillemoes.dk,
Laurent.pinchart@...asonboard.com, jonas@...boo.se,
jernej.skrabec@...il.com, kuba@...nel.org, linux-kernel@...r.kernel.org,
linux-fsi@...ts.ozlabs.org, dri-devel@...ts.freedesktop.org,
linux-input@...r.kernel.org, linux-media@...r.kernel.org,
linux-mtd@...ts.infradead.org, oss-drivers@...igine.com,
netdev@...r.kernel.org, linux-wireless@...r.kernel.org,
brcm80211@...ts.linux.dev, brcm80211-dev-list.pdl@...adcom.com,
linux-serial@...r.kernel.org, bpf@...r.kernel.org, jserv@...s.ncku.edu.tw,
Yu-Chun Lin <eleanor15x@...il.com>
Subject: Re: [PATCH 03/17] x86: Replace open-coded parity calculation with
parity8()
On 23. 02. 25 17:42, Kuan-Wei Chiu wrote:
> Refactor parity calculations to use the standard parity8() helper. This
> change eliminates redundant implementations and improves code
> efficiency.
The patch improves parity assembly code in bootflag.o from:
58: 89 de mov %ebx,%esi
5a: b9 08 00 00 00 mov $0x8,%ecx
5f: 31 d2 xor %edx,%edx
61: 89 f0 mov %esi,%eax
63: 89 d7 mov %edx,%edi
65: 40 d0 ee shr %sil
68: 83 e0 01 and $0x1,%eax
6b: 31 c2 xor %eax,%edx
6d: 83 e9 01 sub $0x1,%ecx
70: 75 ef jne 61 <sbf_init+0x51>
72: 39 c7 cmp %eax,%edi
74: 74 7f je f5 <sbf_init+0xe5>
76:
to:
54: 89 d8 mov %ebx,%eax
56: ba 96 69 00 00 mov $0x6996,%edx
5b: c0 e8 04 shr $0x4,%al
5e: 31 d8 xor %ebx,%eax
60: 83 e0 0f and $0xf,%eax
63: 0f a3 c2 bt %eax,%edx
66: 73 64 jae cc <sbf_init+0xbc>
68:
which is faster and smaller (-10 bytes) code.
Reviewed-by: Uros Bizjak <ubizjak@...il.com>
Thanks,
Uros.
>
> Co-developed-by: Yu-Chun Lin <eleanor15x@...il.com>
> Signed-off-by: Yu-Chun Lin <eleanor15x@...il.com>
> Signed-off-by: Kuan-Wei Chiu <visitorckw@...il.com>
> ---
> arch/x86/kernel/bootflag.c | 18 +++---------------
> 1 file changed, 3 insertions(+), 15 deletions(-)
>
> diff --git a/arch/x86/kernel/bootflag.c b/arch/x86/kernel/bootflag.c
> index 3fed7ae58b60..314ff0e84900 100644
> --- a/arch/x86/kernel/bootflag.c
> +++ b/arch/x86/kernel/bootflag.c
> @@ -8,6 +8,7 @@
> #include <linux/string.h>
> #include <linux/spinlock.h>
> #include <linux/acpi.h>
> +#include <linux/bitops.h>
> #include <asm/io.h>
>
> #include <linux/mc146818rtc.h>
> @@ -20,26 +21,13 @@
>
> int sbf_port __initdata = -1; /* set via acpi_boot_init() */
>
> -static int __init parity(u8 v)
> -{
> - int x = 0;
> - int i;
> -
> - for (i = 0; i < 8; i++) {
> - x ^= (v & 1);
> - v >>= 1;
> - }
> -
> - return x;
> -}
> -
> static void __init sbf_write(u8 v)
> {
> unsigned long flags;
>
> if (sbf_port != -1) {
> v &= ~SBF_PARITY;
> - if (!parity(v))
> + if (!parity8(v))
> v |= SBF_PARITY;
>
> printk(KERN_INFO "Simple Boot Flag at 0x%x set to 0x%x\n",
> @@ -70,7 +58,7 @@ static int __init sbf_value_valid(u8 v)
> {
> if (v & SBF_RESERVED) /* Reserved bits */
> return 0;
> - if (!parity(v))
> + if (!parity8(v))
> return 0;
>
> return 1;
Powered by blists - more mailing lists