* we indeed found a conflicting mem_access setting.
*/
static struct page_info*
-p2m_mem_access_check_and_get_page(vaddr_t gva, unsigned long flag)
+p2m_mem_access_check_and_get_page(vaddr_t gva, unsigned long flag,
+ const struct vcpu *v)
{
long rc;
paddr_t ipa;
xenmem_access_t xma;
p2m_type_t t;
struct page_info *page = NULL;
- struct p2m_domain *p2m = ¤t->domain->arch.p2m;
+ struct p2m_domain *p2m = &v->domain->arch.p2m;
rc = gva_to_ipa(gva, &ipa, flag);
if ( rc < 0 )
* We do this first as this is faster in the default case when no
* permission is set on the page.
*/
- rc = __p2m_get_mem_access(current->domain, gfn, &xma);
+ rc = __p2m_get_mem_access(v->domain, gfn, &xma);
if ( rc < 0 )
goto err;
page = mfn_to_page(mfn_x(mfn));
- if ( unlikely(!get_page(page, current->domain)) )
+ if ( unlikely(!get_page(page, v->domain)) )
page = NULL;
err:
err:
if ( !page && p2m->mem_access_enabled )
- page = p2m_mem_access_check_and_get_page(va, flags);
+ page = p2m_mem_access_check_and_get_page(va, flags, v);
p2m_read_unlock(p2m);