|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 10/10] p2m/ept: Enable PML in p2m-ept for log-dirty.
At 10:35 +0800 on 27 Mar (1427452554), Kai Huang wrote:
> @@ -118,6 +119,12 @@ static void ept_p2m_type_to_flags(ept_entry_t *entry,
> p2m_type_t type, p2m_acces
> break;
> case p2m_ram_rw:
> entry->r = entry->w = entry->x = 1;
> + /*
> + * This is about to avoid unnecessary GPA logging in PML buffer,
> + * such as normal memory in partial log-dirty
> + */
> + if ( vmx_domain_pml_enabled(p2m->domain) )
> + entry->d = 1;
I think that both A and D should be set here, even when PML is not
supported, to avoid the MMU having to write them later. And indeed
not just for ram_rw, but for every present leaf type.
You will still need to check whether the CPU supports the A/D bits,
since AIUI those are reserved bits otherwise.
> break;
> case p2m_mmio_direct:
> entry->r = entry->x = 1;
> @@ -125,6 +132,26 @@ static void ept_p2m_type_to_flags(ept_entry_t *entry,
> p2m_type_t type, p2m_acces
> entry->mfn);
> break;
> case p2m_ram_logdirty:
> + entry->r = entry->x = 1;
> + if ( vmx_domain_pml_enabled(p2m->domain) )
> + {
> + /*
> + * In case of PML, we don't have to write protect 4K page,
> but
> + * only need to clear D-bit for it. Note we still need to
> write
> + * protect super page in order to split it to 4K pages in EPT
> + * violation.
> + */
> + if ( !is_epte_superpage(entry) )
> + {
> + entry->w = 1;
> + entry->d = 0;
> + }
> + else
> + entry->w = 0;
> + }
> + else
> + entry->w = 0;
> + break;
This can be folded into a neater form:
if ( vmx_domain_pml_enabled(p2m->domain)
&& !is_epte_superpage(entry) )
{
/*
* In case of PML, we don't have to write protect 4K page, but
* only need to clear D-bit for it. Note we still need to write
* protect super page in order to split it to 4K pages in EPT
* violation.
*/
entry->w = 1;
entry->d = 0;
}
else
entry->w = 0;
Cheers,
Tim.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |