arch/arm64/kvm/arm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
From: Markus Elfring <elfring@users.sourceforge.net>
Date: Thu, 30 Oct 2025 18:01:41 +0100
A pointer was assigned to a variable. The same pointer was used for
the destination parameter of a memcpy() call.
This function is documented in the way that the same value is returned.
Thus convert two separate statements into a direct variable assignment for
the return value from a memory copy action.
The source code was transformed by using the Coccinelle software.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
arch/arm64/kvm/arm.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c
index 870953b4a8a7..feab88c31703 100644
--- a/arch/arm64/kvm/arm.c
+++ b/arch/arm64/kvm/arm.c
@@ -2600,8 +2600,8 @@ static int __init init_hyp_mode(void)
goto out_err;
}
- page_addr = page_address(page);
- memcpy(page_addr, CHOOSE_NVHE_SYM(__per_cpu_start), nvhe_percpu_size());
+ page_addr = memcpy(page_address(page), CHOOSE_NVHE_SYM(__per_cpu_start),
+ nvhe_percpu_size());
kvm_nvhe_sym(kvm_arm_hyp_percpu_base)[cpu] = (unsigned long)page_addr;
}
--
2.51.1
On Thu, Oct 30, 2025 at 06:11:03PM +0100, Markus Elfring wrote: > From: Markus Elfring <elfring@users.sourceforge.net> > Date: Thu, 30 Oct 2025 18:01:41 +0100 > > A pointer was assigned to a variable. The same pointer was used for > the destination parameter of a memcpy() call. > This function is documented in the way that the same value is returned. > Thus convert two separate statements into a direct variable assignment for > the return value from a memory copy action. > > The source code was transformed by using the Coccinelle software. > > Signed-off-by: Markus Elfring <elfring@users.sourceforge.net> > --- > arch/arm64/kvm/arm.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c > index 870953b4a8a7..feab88c31703 100644 > --- a/arch/arm64/kvm/arm.c > +++ b/arch/arm64/kvm/arm.c > @@ -2600,8 +2600,8 @@ static int __init init_hyp_mode(void) > goto out_err; > } > > - page_addr = page_address(page); > - memcpy(page_addr, CHOOSE_NVHE_SYM(__per_cpu_start), nvhe_percpu_size()); > + page_addr = memcpy(page_address(page), CHOOSE_NVHE_SYM(__per_cpu_start), > + nvhe_percpu_size()); This change makes the code harder to read, and harder to modify. It saves no space. As Dan said [1]: | No one will thank you for making these changes... :( Please don't do | it. [1] https://lore.kernel.org/lkml/aQNsecHJSO2U68Fc@stanley.mountain/ Mark.
On Thu, 30 Oct 2025 17:49:51 +0000
Mark Rutland <mark.rutland@arm.com> wrote:
> On Thu, Oct 30, 2025 at 06:11:03PM +0100, Markus Elfring wrote:
> > From: Markus Elfring <elfring@users.sourceforge.net>
> > Date: Thu, 30 Oct 2025 18:01:41 +0100
> >
> > A pointer was assigned to a variable. The same pointer was used for
> > the destination parameter of a memcpy() call.
> > This function is documented in the way that the same value is returned.
> > Thus convert two separate statements into a direct variable assignment for
> > the return value from a memory copy action.
> >
> > The source code was transformed by using the Coccinelle software.
> >
> > Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
> > ---
> > arch/arm64/kvm/arm.c | 4 ++--
> > 1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c
> > index 870953b4a8a7..feab88c31703 100644
> > --- a/arch/arm64/kvm/arm.c
> > +++ b/arch/arm64/kvm/arm.c
> > @@ -2600,8 +2600,8 @@ static int __init init_hyp_mode(void)
> > goto out_err;
> > }
> >
> > - page_addr = page_address(page);
> > - memcpy(page_addr, CHOOSE_NVHE_SYM(__per_cpu_start), nvhe_percpu_size());
> > + page_addr = memcpy(page_address(page), CHOOSE_NVHE_SYM(__per_cpu_start),
> > + nvhe_percpu_size());
>
> This change makes the code harder to read, and harder to modify. It
> saves no space.
It might save a register spill - but really isn't worth the effort.
memcpy() is really best treated as being 'void'.
Indeed most implementations would be better if it were 'void'.
Although you could define:
#define memcpy(d, s, l) ({ auto _d = d; void_memcpy(_d, s, l); _d})
so that the compiler would optimise away the save that memcpy() typically
has to do.
I even suspect that memcpy() is an old enough function that the return
value is 'what the implementation happened to leave in r0'.
David
>
> As Dan said [1]:
>
> | No one will thank you for making these changes... :( Please don't do
> | it.
>
> [1] https://lore.kernel.org/lkml/aQNsecHJSO2U68Fc@stanley.mountain/
>
> Mark.
>
© 2016 - 2026 Red Hat, Inc.