From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ed White Subject: Re: [PATCH v2 09/12] x86/altp2m: add remaining support routines. Date: Thu, 25 Jun 2015 13:27:54 -0700 Message-ID: <558C644A.7080300@intel.com> References: <1434999372-3688-1-git-send-email-edmund.h.white@intel.com> <1434999372-3688-10-git-send-email-edmund.h.white@intel.com> <558C2CD8.1030108@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: "Lengyel, Tamas" Cc: Ravi Sahita , Wei Liu , Ian Jackson , Tim Deegan , Xen-devel , Jan Beulich , Andrew Cooper , Daniel De Graaf List-Id: xen-devel@lists.xenproject.org On 06/25/2015 10:42 AM, Lengyel, Tamas wrote: > On Thu, Jun 25, 2015 at 12:31 PM, Ed White wrote: > >> On 06/24/2015 07:44 PM, Lengyel, Tamas wrote: >>>> + if ( altp2m_active ) >>>> + { >>>> + if ( altp2mhvm_hap_nested_page_fault(v, gpa, gla, npfec, &p2m) >> == >>>> 1 ) >>>> + { >>>> + /* entry was lazily copied from host -- retry */ >>>> >>> >>> So I'm not fully following this logic here. I can see that the altp2m >> entry >>> got copied from the host. Why is there a need for the retry, why not just >>> continue? >> >> At this point the EPT's that the hardware is using have been made valid >> by software, but the hardware has already failed the access so you have >> to restart the operation. This isn't in any way specific to altp2m, >> it's how page fault logic works generally. >> >> Ed >> > > Oh I see, you are working with the assumption that the fault was triggered > by the entry not being present in the altp2m EPT, thus it's enough to copy > it to resolve the fault. However, if the hostp2m permissions are > restricted, there will be a follow-up fault again. Would it maybe make > sense to check for that condition and save having to hit two faults? It's not an assumption, it's a fact because the altp2m nested page fault handler returns 1 IFF it has copied from the host p2m. Once again this is standard page fault handling. Preemptively checking for a condition that would cause another fault shortens the path for cases that would re-fault, but lengthens it for all the cases that would not. In a typical scenario (which your current experiments are not) you expect most cases not to re-fault. The cases that do re-fault are much more expensive anyway. There are other reasons not to preemptively check, but that's the most straightforward one. Ed