On 07/24/2017 05:00 PM, Michal Hocko wrote:
On Wed 19-07-17 20:01:18, Wei Wang wrote:
On 07/19/2017 04:13 PM, Michal Hocko wrote:
[...
All you should need is the check for the page reference count, no? I
assume you do some sort of pfn walk and so you should be able to get an
access to the struct page.
Not necessarily - the guest struct page is not seen by the hypervisor. The
hypervisor only gets those guest pfns which are hinted as unused. From the
hypervisor (host) point of view, a guest physical address corresponds to a
virtual address of a host process. So, once the hypervisor knows a guest
physical page is unsued, it knows that the corresponding virtual memory of
the process doesn't need to be transferred in the 1st round.
I am sorry, but I do not understand. Why cannot _guest_ simply check the
struct page ref count and send them to the hypervisor?
Were you suggesting the following?
1) get a free page block from the page list using the API;
2) if page->ref_count == 0, send it to the hypervisor
Btw, ref_count may also change at any time.
Is there any
documentation which describes the workflow or code which would use your
new API?
It's used in the balloon driver (patch 8). We don't have any docs yet, but
I think the high level workflow is the two steps above.
Best,
Wei