[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] How the pv guest responds hypercall_create_continuation ?

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
  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,


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.

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.