From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xinxin Jin <xinxinjin89@gmail.com>
Cc: "Xen-devel@lists.xen.org" <Xen-devel@lists.xen.org>
Subject: Re: How the pv guest responds hypercall_create_continuation ?
Date: Thu, 23 May 2013 09:49:47 +0100 [thread overview]
Message-ID: <519DD82B.3080208@citrix.com> (raw)
In-Reply-To: <CAJJWZcyH3gVw6cRkk2fYb73zTVUnKKr8P3A1Ojen4ceUiS0Lqw@mail.gmail.com>
[-- Attachment #1.1: Type: text/plain, Size: 1576 bytes --]
On 23/05/13 01:03, Xinxin Jin wrote:
> Hi all,
>
> In Xen's hypercall handler, sometimes when -EAGAIN error happens, Xen
> will call a function hypercall_create_continuation(), which writes the
> arguments of this hypercall to guest user registers. I guess the
> purpose of this function is to indicate guest to try the failed
> hypercall again, right ? Then I looked at guest Linux's code and try
> to find the interface:
>
> A typical guest hypercall calling routine is (take
> HYPERVISOR_mmu_update for example):
>
> static inline int
> HYPERVISOR_mmu_update(
> mmu_update_t *req, int count, int *success_count, domid_t domid)
> {
> return _hypercall4(int, mmu_update, req, count, success_count, domid);
> }
>
> Then _hypercall4 will call corresponding code in hypercall_page and
> return. But where is the interface with
> hypercall_create_continuation()? How the guest knows it needs to try
> the hypercall again?
>
> Thanks a lot,
>
>
> Xinxin
The whole point of hypercall continuations is to reduce the time spent
in the hypervisor without processing softirqs/events etc.
Therefore, long running hypercall operations create continuations,
allowing a small chunk of work to be done now, and the next chunk of
work to be done when the VCPU is next scheduled, which might be right
afterwards but might be in a long times time.
The mechanism for creating a continuation is to store the intermediate
state in the guest registers and subtract 2 from the guests EIP, causing
it to re-execute the int 0x82/sysenter/syscall instruction when next
scheduled.
~Andrew
[-- Attachment #1.2: Type: text/html, Size: 3009 bytes --]
[-- Attachment #2: Type: text/plain, Size: 126 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
prev parent reply other threads:[~2013-05-23 8:49 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-23 0:03 How the pv guest responds hypercall_create_continuation ? Xinxin Jin
2013-05-23 1:39 ` Matthew Daley
2013-05-23 8:49 ` Andrew Cooper [this message]
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=519DD82B.3080208@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=Xen-devel@lists.xen.org \
--cc=xinxinjin89@gmail.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).