From: Paolo Bonzini <pbonzini@redhat.com>
To: Arthur Chunqi Li <yzt356@gmail.com>
Cc: "kvm@vger.kernel.org" <kvm@vger.kernel.org>
Subject: Re: EPT page fault procedure
Date: Mon, 04 Nov 2013 13:20:42 +0100 [thread overview]
Message-ID: <5277911A.3000707@redhat.com> (raw)
In-Reply-To: <CABpY8MJnHA8hO8+y-Ddf-+rP4PLg3uJ_wWME=cz=qL6Wmikoqw@mail.gmail.com>
Il 04/11/2013 02:05, Arthur Chunqi Li ha scritto:
>> > Do you mean HVA to PFN? If so, you can look at function hva_to_pfn. :)
> I mean in this procedure, how is physical memory actually allocated?
> When qemu firstly initialized the mapping of its userspace memory
> region to VM, the physical memory corresponding to this region are not
> actually allocated. So I think KVM should do this allocation
> somewhere.
>> >
>>> >> table. What is the point in tdp_page_fault() handling such mapping
>>> >> from PVA to PFA?
>> >
>> > The EPT page table entry is created in __direct_map using the pfn
>> > returned by try_async_pf. try_async_pf itself gets the pfn from
>> > gfn_to_pfn_async and gfn_to_pfn_prot. Both of them call __gfn_to_pfn
>> > with different arguments. __gfn_to_pfn first goes from GFN to HVA using
>> > the memslots (gfn_to_memslot and, in __gfn_to_pfn_memslot,
>> > __gfn_to_hva_many), then it calls hva_to_pfn.
>> >
>> > Ultimately, hva_to_pfn_fast and hva_to_pfn_slow is where KVM calls
>> > functions from the kernel's get_user_page family.
> What will KVM do if get_user_page() returns a page not really exists
> in physical memory?
In non-atomic context, hva_to_pfn_slow will swap that page in before
returning (or start the swap-in and return immediately if the guest
supports asynchronous page faults). In atomic context, hva_to_pfn would
fail, but that only happens in debugging code (arch/x86/kvm/mmu_audit.c).
Paolo
prev parent reply other threads:[~2013-11-04 12:20 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CABpY8MKRSX+RLmqNAAp8pDG6vEGHOwa0AmdH5DHf7gAdeN4nRQ@mail.gmail.com>
2013-10-31 10:54 ` EPT page fault procedure Paolo Bonzini
2013-11-04 1:05 ` Arthur Chunqi Li
2013-11-04 12:20 ` Paolo Bonzini [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=5277911A.3000707@redhat.com \
--to=pbonzini@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=yzt356@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 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.