}
else if ( (pfn = paging_gva_to_gfn(curr, addr, &pfec)) == INVALID_GFN )
{
- if ( pfec == PFEC_page_paged || pfec == PFEC_page_shared )
+ if ( pfec & (PFEC_page_paged | PFEC_page_shared) )
return X86EMUL_RETRY;
hvm_inject_page_fault(pfec, addr);
return X86EMUL_EXCEPTION;
/* Is it contiguous with the preceding PFNs? If not then we're done. */
if ( (npfn == INVALID_GFN) || (npfn != (pfn + (reverse ? -i : i))) )
{
- if ( pfec == PFEC_page_paged || pfec == PFEC_page_shared )
+ if ( pfec & (PFEC_page_paged | PFEC_page_shared) )
return X86EMUL_RETRY;
done /= bytes_per_rep;
if ( done == 0 )
*/
pfec = PFEC_page_present;
gfn = paging_gva_to_gfn(current, va, &pfec);
- if ( (pfec == PFEC_page_paged) || (pfec == PFEC_page_shared) )
+ if ( pfec & (PFEC_page_paged | PFEC_page_shared) )
goto fail;
v = hvm_map_guest_frame_rw(gfn, 0, writable);
gfn = paging_gva_to_gfn(curr, addr, &pfec);
if ( gfn == INVALID_GFN )
{
- if ( pfec == PFEC_page_paged )
+ if ( pfec & PFEC_page_paged )
return HVMCOPY_gfn_paged_out;
- if ( pfec == PFEC_page_shared )
+ if ( pfec & PFEC_page_shared )
return HVMCOPY_gfn_shared;
if ( flags & HVMCOPY_fault )
hvm_inject_page_fault(pfec, addr);
gfn = paging_gva_to_gfn(curr, addr, &pfec);
if ( gfn == INVALID_GFN )
{
- if ( pfec == PFEC_page_paged )
+ if ( pfec & PFEC_page_paged )
return HVMCOPY_gfn_paged_out;
- if ( pfec == PFEC_page_shared )
+ if ( pfec & PFEC_page_shared )
return HVMCOPY_gfn_shared;
return HVMCOPY_bad_gva_to_gfn;
}
#define PFEC_user_mode (1U<<2)
#define PFEC_reserved_bit (1U<<3)
#define PFEC_insn_fetch (1U<<4)
-#define PFEC_page_paged (1U<<5)
-#define PFEC_page_shared (1U<<6)
+#define PFEC_prot_key (1U<<5)
+/* Internally used only flags. */
+#define PFEC_page_paged (1U<<16)
+#define PFEC_page_shared (1U<<17)
/* Other exception error code values. */
#define X86_XEC_EXT (_AC(1,U) << 0)