|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] domain: use unsigned loop induction variable in complete_domain_destroy()
On Thu, Feb 26, 2026 at 10:01:45AM +0100, Jan Beulich wrote:
> Using plain (signed) int variables as array indexes can be unhelpful on at
> least x86, where the compiler may see the need to insert sign-extension
> insns (strictly speaking it should be able to avoid that when the loop
> continuation condition says >= 0, but that's not generally the case even
> with gcc15).
>
> Observed effects with gcc15 (will of course vary with compiler version and
> level of optimization):
> - on x86, one less preserved register in use, yet due to sub-optimal
> choice of register variables still a small code size increase (%r12
> isn't a good choice when it's used for base-without-index addressing, as
> it requires a SIB byte which other registers wouldn't require),
> - on Arm64 code size decreases, albeit that's eaten up by padding which is
> being inserted ahead of a few labels,
> - on Arm32 code size increases for a reason I didn't fully understand (my
> ability to read Arm assembly is still somewhat limited).
>
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
>
> --- a/xen/common/domain.c
> +++ b/xen/common/domain.c
> @@ -1475,7 +1475,7 @@ static void cf_check complete_domain_des
> {
> struct domain *d = container_of(head, struct domain, rcu);
> struct vcpu *v;
> - int i;
> + unsigned int i;
>
> /*
> * Flush all state for the vCPU previously having run on the current CPU.
> @@ -1485,7 +1485,7 @@ static void cf_check complete_domain_des
> */
> sync_local_execstate();
>
> - for ( i = d->max_vcpus - 1; i >= 0; i-- )
> + for ( i = d->max_vcpus; i-- > 0; )
Is there any reason we need to do those loops backwards?
I would rather do:
for ( i = 0; i < d->max_vcpus; i++ )
?
Thanks, Roger.
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |