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