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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox