Explicitly check whether altp2m is on for domain when getting altp2m index.
If explicit call to altp2m_active() always returns false, DCE will remove
call to altp2m_vcpu_idx().
p2m_get_mem_access() expects 0 as altp2m_idx parameter when altp2m not active
or not supported, so 0 is a fallback value then.
The purpose of that is later to be able to disable altp2m support and
exclude its code from the build completely, when not supported by target
platform (as of now it's supported for VT-x only).
Also all other calls to altp2m_vcpu_idx() are guarded by altp2m_active(), so
this change puts usage of this routine in line with the rest of code.
Signed-off-by: Sergiy Kibrik <Sergiy_Kibrik@epam.com>
Acked-by: Tamas K Lengyel <tamas@tklengyel.com>
struct vcpu *curr = current;
vm_event_request_t req = {};
paddr_t gpa = (gfn_to_gaddr(gfn) | (gla & ~PAGE_MASK));
+ unsigned int altp2m_idx = altp2m_active(curr->domain) ?
+ altp2m_vcpu_idx(curr) : 0;
int rc;
ASSERT(curr->arch.vm_event->send_event);
* p2m_get_mem_access() can fail from a invalid MFN and return -ESRCH
* in which case access must be restricted.
*/
- rc = p2m_get_mem_access(curr->domain, gfn, &access, altp2m_vcpu_idx(curr));
+ rc = p2m_get_mem_access(curr->domain, gfn, &access, altp2m_idx);
if ( rc == -ESRCH )
access = XENMEM_access_n;