From: Jan Beulich <jbeulich@suse.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: "Roger Pau Monné" <roger.pau@citrix.com>, "Wei Liu" <wl@xen.org>,
"Stefano Stabellini" <sstabellini@kernel.org>,
"Julien Grall" <julien@xen.org>,
"Volodymyr Babchuk" <Volodymyr_Babchuk@epam.com>,
"Bertrand Marquis" <bertrand.marquis@arm.com>,
Xen-devel <xen-devel@lists.xenproject.org>
Subject: Re: [PATCH 1/5] xen/domain: Remove function pointers from domain pause helpers
Date: Fri, 12 Nov 2021 10:57:50 +0100 [thread overview]
Message-ID: <6306ecd3-011b-51ee-65d3-107099b6dfa1@suse.com> (raw)
In-Reply-To: <20211111175740.23480-2-andrew.cooper3@citrix.com>
On 11.11.2021 18:57, Andrew Cooper wrote:
> Retpolines are expensive, and all these do are select between the sync and
> nosync helpers. Pass a boolean instead, and use direct calls everywhere.
>
> Pause/unpause operations on behalf of dom0 are not fastpaths, so avoid
> exposing the __domain_pause_by_systemcontroller() internal.
>
> This actually compiles smaller than before:
>
> $ ../scripts/bloat-o-meter xen-syms-before xen-syms-after
> add/remove: 3/1 grow/shrink: 0/5 up/down: 250/-273 (-23)
> Function old new delta
> _domain_pause - 115 +115
> domain_pause_by_systemcontroller - 69 +69
> domain_pause_by_systemcontroller_nosync - 66 +66
> domain_kill 426 398 -28
> domain_resume 246 214 -32
> domain_pause_except_self 189 141 -48
> domain_pause 59 10 -49
> domain_pause_nosync 59 7 -52
> __domain_pause_by_systemcontroller 64 - -64
>
> despite GCC's best efforts. The new _domain_pause_by_systemcontroller()
> really should not be inlined, considering that the difference is only the
> setup of the sync boolean to pass to _domain_pause(), and there are plenty of
> registers to spare.
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
albeit without meaning to override Julien's concerns in any way.
Also a question:
> --- a/xen/common/domain.c
> +++ b/xen/common/domain.c
> @@ -1234,15 +1234,18 @@ int vcpu_unpause_by_systemcontroller(struct vcpu *v)
> return 0;
> }
>
> -static void do_domain_pause(struct domain *d,
> - void (*sleep_fn)(struct vcpu *v))
> +static void _domain_pause(struct domain *d, bool sync /* or nosync */)
> {
> struct vcpu *v;
>
> atomic_inc(&d->pause_count);
>
> - for_each_vcpu( d, v )
> - sleep_fn(v);
> + if ( sync )
> + for_each_vcpu ( d, v )
> + vcpu_sleep_sync(v);
> + else
> + for_each_vcpu ( d, v )
> + vcpu_sleep_nosync(v);
Is this really better (for whichever reason) than
for_each_vcpu ( d, v )
{
if ( sync )
vcpu_sleep_sync(v);
else
vcpu_sleep_nosync(v);
}
?
Jan
next prev parent reply other threads:[~2021-11-12 9:58 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-11 17:57 [PATCH 0/5] xen: various function pointer cleanups Andrew Cooper
2021-11-11 17:57 ` [PATCH 1/5] xen/domain: Remove function pointers from domain pause helpers Andrew Cooper
2021-11-12 9:36 ` Julien Grall
2021-11-18 1:47 ` Andrew Cooper
2021-11-18 9:28 ` Julien Grall
2021-11-12 9:57 ` Jan Beulich [this message]
2021-11-17 23:31 ` Andrew Cooper
2021-11-15 10:13 ` Bertrand Marquis
2021-11-15 10:20 ` Jan Beulich
2021-11-15 10:23 ` Bertrand Marquis
2021-11-15 10:55 ` Jan Beulich
2021-11-15 11:23 ` Bertrand Marquis
2021-11-15 14:11 ` Julien Grall
2021-11-15 14:45 ` Bertrand Marquis
2021-11-16 0:41 ` Stefano Stabellini
2021-11-16 7:15 ` Jan Beulich
2021-11-11 17:57 ` [PATCH 2/5] xen/domain: Improve pirq handling Andrew Cooper
2021-11-12 10:16 ` Jan Beulich
2021-11-11 17:57 ` [PATCH 3/5] xen/sort: Switch to an extern inline implementation Andrew Cooper
2021-11-11 18:15 ` Julien Grall
2021-11-16 0:36 ` Stefano Stabellini
2021-11-16 0:41 ` Andrew Cooper
2021-12-17 15:56 ` Andrew Cooper
2021-12-17 16:15 ` Julien Grall
2021-11-12 9:39 ` Julien Grall
2021-11-12 10:25 ` Jan Beulich
2021-11-11 17:57 ` [PATCH 4/5] xen/wait: Remove indirect jump Andrew Cooper
2021-11-12 10:35 ` Jan Beulich
2021-11-11 17:57 ` [PATCH 5/5] x86/ioapic: Drop function pointers from __ioapic_{read,write}_entry() Andrew Cooper
2021-11-12 10:43 ` Jan Beulich
2021-11-18 0:32 ` Andrew Cooper
2021-11-18 9:06 ` Jan Beulich
2021-11-18 9:07 ` Jan Beulich
2021-11-18 17:33 ` Andrew Cooper
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6306ecd3-011b-51ee-65d3-107099b6dfa1@suse.com \
--to=jbeulich@suse.com \
--cc=Volodymyr_Babchuk@epam.com \
--cc=andrew.cooper3@citrix.com \
--cc=bertrand.marquis@arm.com \
--cc=julien@xen.org \
--cc=roger.pau@citrix.com \
--cc=sstabellini@kernel.org \
--cc=wl@xen.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.