}
-mfn_t shadow_hash_lookup(struct vcpu *v, unsigned long n, unsigned int t)
+mfn_t shadow_hash_lookup(struct domain *d, unsigned long n, unsigned int t)
/* Find an entry in the hash table. Returns the MFN of the shadow,
* or INVALID_MFN if it doesn't exist */
{
- struct domain *d = v->domain;
struct page_info *sp, *prev;
key_t key;
return _mfn(INVALID_MFN);
}
-void shadow_hash_insert(struct vcpu *v, unsigned long n, unsigned int t,
+void shadow_hash_insert(struct domain *d, unsigned long n, unsigned int t,
mfn_t smfn)
/* Put a mapping (n,t)->smfn into the hash table */
{
- struct domain *d = v->domain;
struct page_info *sp;
key_t key;
sh_hash_audit_bucket(d, key);
}
-void shadow_hash_delete(struct vcpu *v, unsigned long n, unsigned int t,
+void shadow_hash_delete(struct domain *d, unsigned long n, unsigned int t,
mfn_t smfn)
/* Excise the mapping (n,t)->smfn from the hash table */
{
- struct domain *d = v->domain;
struct page_info *sp, *x;
key_t key;
if( !(pg->count_info & PGC_page_table) \
|| !(pg->shadow_flags & (1 << t)) ) \
break; \
- smfn = shadow_hash_lookup(v, mfn_x(gmfn), t); \
+ smfn = shadow_hash_lookup(d, mfn_x(gmfn), t); \
if ( unlikely(!mfn_valid(smfn)) ) \
{ \
SHADOW_ERROR(": gmfn %#lx has flags %#"PRIx32 \
get_fl1_shadow_status(struct vcpu *v, gfn_t gfn)
/* Look for FL1 shadows in the hash table */
{
- mfn_t smfn = shadow_hash_lookup(v, gfn_x(gfn), SH_type_fl1_shadow);
+ struct domain *d = v->domain;
+ mfn_t smfn = shadow_hash_lookup(d, gfn_x(gfn), SH_type_fl1_shadow);
ASSERT(!mfn_valid(smfn) || mfn_to_page(smfn)->u.sh.head);
return smfn;
}
get_shadow_status(struct vcpu *v, mfn_t gmfn, u32 shadow_type)
/* Look for shadows in the hash table */
{
- mfn_t smfn = shadow_hash_lookup(v, mfn_x(gmfn), shadow_type);
+ struct domain *d = v->domain;
+ mfn_t smfn = shadow_hash_lookup(d, mfn_x(gmfn), shadow_type);
ASSERT(!mfn_valid(smfn) || mfn_to_page(smfn)->u.sh.head);
perfc_incr(shadow_get_shadow_status);
return smfn;
set_fl1_shadow_status(struct vcpu *v, gfn_t gfn, mfn_t smfn)
/* Put an FL1 shadow into the hash table */
{
+ struct domain *d = v->domain;
SHADOW_PRINTK("gfn=%"SH_PRI_gfn", type=%08x, smfn=%05lx\n",
gfn_x(gfn), SH_type_fl1_shadow, mfn_x(smfn));
ASSERT(mfn_to_page(smfn)->u.sh.head);
- shadow_hash_insert(v, gfn_x(gfn), SH_type_fl1_shadow, smfn);
+ shadow_hash_insert(d, gfn_x(gfn), SH_type_fl1_shadow, smfn);
}
static inline void
ASSERT(res == 1);
}
- shadow_hash_insert(v, mfn_x(gmfn), shadow_type, smfn);
+ shadow_hash_insert(d, mfn_x(gmfn), shadow_type, smfn);
}
static inline void
delete_fl1_shadow_status(struct vcpu *v, gfn_t gfn, mfn_t smfn)
/* Remove a shadow from the hash table */
{
+ struct domain *d = v->domain;
SHADOW_PRINTK("gfn=%"SH_PRI_gfn", type=%08x, smfn=%05lx\n",
gfn_x(gfn), SH_type_fl1_shadow, mfn_x(smfn));
ASSERT(mfn_to_page(smfn)->u.sh.head);
- shadow_hash_delete(v, gfn_x(gfn), SH_type_fl1_shadow, smfn);
+ shadow_hash_delete(d, gfn_x(gfn), SH_type_fl1_shadow, smfn);
}
static inline void
d->domain_id, v->vcpu_id,
mfn_x(gmfn), shadow_type, mfn_x(smfn));
ASSERT(mfn_to_page(smfn)->u.sh.head);
- shadow_hash_delete(v, mfn_x(gmfn), shadow_type, smfn);
+ shadow_hash_delete(d, mfn_x(gmfn), shadow_type, smfn);
/* 32-on-64 PV guests don't own their l4 pages; see set_shadow_status */
if ( !is_pv_32on64_domain(d) || shadow_type != SH_type_l4_64_shadow )
put_page(mfn_to_page(gmfn));
gl2a = guest_l3e_get_paddr(gl3e[i]);
gfn = gl2a >> PAGE_SHIFT;
gmfn = get_gfn_query_unlocked(d, gfn, &p2mt);
- smfn = shadow_hash_lookup(v, mfn_x(gmfn), SH_type_l2_pae_shadow);
+ smfn = shadow_hash_lookup(d, mfn_x(gmfn), SH_type_l2_pae_shadow);
}
if ( mfn_valid(smfn) )
paging_lock(d);
#if GUEST_PAGING_LEVELS == 2
- smfn = shadow_hash_lookup(v, mfn_x(gmfn), SH_type_l2_32_shadow);
+ smfn = shadow_hash_lookup(d, mfn_x(gmfn), SH_type_l2_32_shadow);
#else
- smfn = shadow_hash_lookup(v, mfn_x(gmfn), SH_type_l4_64_shadow);
+ smfn = shadow_hash_lookup(d, mfn_x(gmfn), SH_type_l4_64_shadow);
#endif
if ( mfn_valid(smfn) )