From: "Yu, Zhang" <yu.c.zhang@linux.intel.com>
To: Tim Deegan <tim@xen.org>
Cc: kevin.tian@intel.com, keir@xen.org, ian.campbell@citrix.com,
stefano.stabellini@eu.citrix.com, ian.jackson@eu.citrix.com,
donald.d.dugger@intel.com, Xen-devel@lists.xen.org,
Paul.Durrant@citrix.com, zhiyuan.lv@intel.com,
Jan Beulich <JBeulich@suse.com>,
yang.z.zhang@intel.com
Subject: Re: [PATCH v4] x86: add p2m_mmio_write_dm
Date: Thu, 04 Dec 2014 17:01:18 +0800 [thread overview]
Message-ID: <548022DE.3090906@linux.intel.com> (raw)
In-Reply-To: <20141202114016.GD69236@deinos.phlegethon.org>
On 12/2/2014 7:40 PM, Tim Deegan wrote:
> At 15:38 +0800 on 02 Dec (1417531126), Yu, Zhang wrote:
>> On 12/1/2014 8:13 PM, Tim Deegan wrote:
>>> At 11:17 +0000 on 01 Dec (1417429027), Jan Beulich wrote:
>>>>>>> On 01.12.14 at 11:30, <tim@xen.org> wrote:
>>>>> During this bit of archaeology I realised that either this new type
>>>>> should _not_ be made part of P2M_RO_TYPES, or, better, we need a new
>>>>> class of P2M types (P2M_DISCARD_WRITE_TYPES, say) that should be used
>>>>> for these paths in emulate_gva_to_mfn() and __hvm_copy(), containing
>>>>> just p2m_ram_ro and p2m_grant_map_ro.
>>>>
>>>> And I suppose in that latter case the new type could be made part
>>>> of P2M_RO_TYPES()?
>>>
>>> Yes indeed, as P2M_RO_TYPES is defined as "must have the _PAGE_RW bit
>>> clear in their PTEs".
>>>
>>
>> Thanks Tim.
>> Following are my understanding of the P2M_RO_TYPES and your comments.
>> Not sure if I get it right. Please correct me if anything wrong:
>> 1> The P2M_RO_TYPES now bears 2 meanings: one is "w bit is clear in the
>> pte"; and another being to discard the write operations;
>> 2> We better define another class to bear the second meaning.
>
> Yes, that's what I meant.
>
> Answering your other questions in reverse order:
>
>> 2> p2m_grant_map_ro is also supposed to be discarded? Will handling of
>> this type of pages goes into __hvm_copy()/__hvm_clear(), or should?
>
> I think so, yes. At the moment we inject #GP when the guest writes to
> a read-only grant, which is OK: the guest really ought to know better.
> But I think we'll probably end up with neater code if we handle
> read-only grants the same way as p2m_ram_ro.
>
> Anyone else have an opinion on the right thing to do here?
>
>> Also some questions for the new p2m class, say P2M_DISCARD_WRITE_TYPES,
>> and the new predicates, say p2m_is_discard_write:
>> 1> You mentioned emulate_gva_to_mfn() and __hvm_copy() should discard
>> the write ops, yet I also noticed many other places using the
>> p2m_is_readonly, or only the "p2mt == p2m_ram_ro" judgement(in
>> __hvm_copy/__hvm_clear). Among all these other places, is there any ones
>> also supposed to use the p2m_is_discard_write?
>
> I've just had a look through them all, and I can see exactly four
> places that should be using the new p2m_is_discard_write() test:
>
> - emulate_gva_to_mfn() (Though in fact it's a no-op as shadow-mode
> guests never have p2m_ram_shared or p2m_ram_logdirty mappings.)
> - __hvm_copy()
> - __hvm_clear() and
> - hvm_hap_nested_page_fault() (where you should also remove the
> explicit handling of p2m_grant_map_ro below.)
>
> Looking through that turned up a few other oddities, which I'm
> listing here to remind myself to look at them later (i.e. you don't
> need to worry about them for this patch):
>
> - nsvm_get_nvmcb_page() and nestedhap_walk_L0_p2m() need to handle
> p2m_ram_logdirty or they might spuriously fail duiring live
> migration.
> - __hvm_copy() and __hvm_clear are probably over-strict in their
> failure to handle grant types.
Hi Tim. Sorry to bother you. :)
I just noticed that in __hvm_copy()/__hvm_clear(), the grant types are
handled before the p2m_ram_ro - will return HVMCOPY_unhandleable. So if
p2m_is_discard_write() is supposed to replace the handling of
p2m_ram_ro, handling of p2m_grant_map_ro will still return
HVMCOPY_unhandleable, before the p2m_is_discard_write() predicate.
Even we move the testing of p2m_is_discard_write() before the handling
of grant types, it seems not quite clean.
By "over-strict in their failure to handle grant types.", do you also
mean this?
Thanks
Yu
> - P2M_UNMAP_TYPES in vmce.c is a mess. It's not the right place to
> define this, since it definitely won't be seen my anyone
> adding a new type, and it already has an 'XXX' comment that says
> it doesn't cover a lot of cases. :(
>
> I'll have a look at those another time.
>
> Cheers,
>
> Tim.
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
>
>
next prev parent reply other threads:[~2014-12-04 9:01 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-28 7:59 [PATCH v4] x86: add p2m_mmio_write_dm Yu Zhang
2014-11-28 9:57 ` Jan Beulich
2014-12-01 8:49 ` Yu, Zhang
2014-12-01 9:32 ` Jan Beulich
2014-12-01 10:30 ` Tim Deegan
2014-12-01 11:17 ` Jan Beulich
2014-12-01 12:13 ` Tim Deegan
2014-12-01 12:31 ` Jan Beulich
2014-12-02 7:48 ` Yu, Zhang
2014-12-02 9:39 ` Jan Beulich
2014-12-02 10:37 ` Tim Deegan
2014-12-02 11:03 ` Jan Beulich
2014-12-02 7:38 ` Yu, Zhang
2014-12-02 11:40 ` Tim Deegan
2014-12-02 11:52 ` Jan Beulich
2014-12-03 6:58 ` Yu, Zhang
2014-12-04 9:01 ` Yu, Zhang [this message]
2014-12-04 9:36 ` Tim Deegan
2014-12-04 9:42 ` Yu, Zhang
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=548022DE.3090906@linux.intel.com \
--to=yu.c.zhang@linux.intel.com \
--cc=JBeulich@suse.com \
--cc=Paul.Durrant@citrix.com \
--cc=Xen-devel@lists.xen.org \
--cc=donald.d.dugger@intel.com \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=keir@xen.org \
--cc=kevin.tian@intel.com \
--cc=stefano.stabellini@eu.citrix.com \
--cc=tim@xen.org \
--cc=yang.z.zhang@intel.com \
--cc=zhiyuan.lv@intel.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.