|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86/shadow: Alter sh_put_ref() and shadow destroy functions to take a domain
commit 157a9690b7ec60a729950d24ec18480559b06f63
Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Mon Feb 2 01:46:12 2015 +0000
Commit: Tim Deegan <tim@xxxxxxx>
CommitDate: Fri Feb 20 14:47:33 2015 +0000
x86/shadow: Alter sh_put_ref() and shadow destroy functions to take a domain
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Reviewed-by: Tim Deegan <tim@xxxxxxx>
---
xen/arch/x86/mm/shadow/common.c | 19 +++++++++----------
xen/arch/x86/mm/shadow/multi.c | 30 +++++++++++++-----------------
xen/arch/x86/mm/shadow/multi.h | 8 ++++----
xen/arch/x86/mm/shadow/private.h | 9 ++++-----
4 files changed, 30 insertions(+), 36 deletions(-)
diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c
index c6b8e6f..e2ea6cb 100644
--- a/xen/arch/x86/mm/shadow/common.c
+++ b/xen/arch/x86/mm/shadow/common.c
@@ -2052,9 +2052,8 @@ static void hash_vcpu_foreach(struct vcpu *v, unsigned
int callback_mask,
* which will decrement refcounts appropriately and return memory to the
* free pool. */
-void sh_destroy_shadow(struct vcpu *v, mfn_t smfn)
+void sh_destroy_shadow(struct domain *d, mfn_t smfn)
{
- struct domain *d = v->domain;
struct page_info *sp = mfn_to_page(smfn);
unsigned int t = sp->u.sh.type;
@@ -2076,36 +2075,36 @@ void sh_destroy_shadow(struct vcpu *v, mfn_t smfn)
{
case SH_type_l1_32_shadow:
case SH_type_fl1_32_shadow:
- SHADOW_INTERNAL_NAME(sh_destroy_l1_shadow, 2)(v, smfn);
+ SHADOW_INTERNAL_NAME(sh_destroy_l1_shadow, 2)(d, smfn);
break;
case SH_type_l2_32_shadow:
- SHADOW_INTERNAL_NAME(sh_destroy_l2_shadow, 2)(v, smfn);
+ SHADOW_INTERNAL_NAME(sh_destroy_l2_shadow, 2)(d, smfn);
break;
case SH_type_l1_pae_shadow:
case SH_type_fl1_pae_shadow:
- SHADOW_INTERNAL_NAME(sh_destroy_l1_shadow, 3)(v, smfn);
+ SHADOW_INTERNAL_NAME(sh_destroy_l1_shadow, 3)(d, smfn);
break;
case SH_type_l2_pae_shadow:
case SH_type_l2h_pae_shadow:
- SHADOW_INTERNAL_NAME(sh_destroy_l2_shadow, 3)(v, smfn);
+ SHADOW_INTERNAL_NAME(sh_destroy_l2_shadow, 3)(d, smfn);
break;
case SH_type_l1_64_shadow:
case SH_type_fl1_64_shadow:
- SHADOW_INTERNAL_NAME(sh_destroy_l1_shadow, 4)(v, smfn);
+ SHADOW_INTERNAL_NAME(sh_destroy_l1_shadow, 4)(d, smfn);
break;
case SH_type_l2h_64_shadow:
ASSERT(is_pv_32on64_domain(d));
/* Fall through... */
case SH_type_l2_64_shadow:
- SHADOW_INTERNAL_NAME(sh_destroy_l2_shadow, 4)(v, smfn);
+ SHADOW_INTERNAL_NAME(sh_destroy_l2_shadow, 4)(d, smfn);
break;
case SH_type_l3_64_shadow:
- SHADOW_INTERNAL_NAME(sh_destroy_l3_shadow, 4)(v, smfn);
+ SHADOW_INTERNAL_NAME(sh_destroy_l3_shadow, 4)(d, smfn);
break;
case SH_type_l4_64_shadow:
- SHADOW_INTERNAL_NAME(sh_destroy_l4_shadow, 4)(v, smfn);
+ SHADOW_INTERNAL_NAME(sh_destroy_l4_shadow, 4)(d, smfn);
break;
default:
diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c
index f2dea16..7d82d90 100644
--- a/xen/arch/x86/mm/shadow/multi.c
+++ b/xen/arch/x86/mm/shadow/multi.c
@@ -931,7 +931,7 @@ static int shadow_set_l4e(struct vcpu *v,
{
flags |= SHADOW_SET_FLUSH;
}
- sh_put_ref(v, osl3mfn, paddr);
+ sh_put_ref(d, osl3mfn, paddr);
}
return flags;
}
@@ -977,7 +977,7 @@ static int shadow_set_l3e(struct vcpu *v,
{
flags |= SHADOW_SET_FLUSH;
}
- sh_put_ref(v, osl2mfn, paddr);
+ sh_put_ref(d, osl2mfn, paddr);
}
return flags;
}
@@ -1063,7 +1063,7 @@ static int shadow_set_l2e(struct vcpu *v,
{
flags |= SHADOW_SET_FLUSH;
}
- sh_put_ref(v, osl1mfn, paddr);
+ sh_put_ref(d, osl1mfn, paddr);
}
return flags;
}
@@ -1882,9 +1882,8 @@ static shadow_l1e_t * shadow_get_and_create_l1e(struct
vcpu *v,
*/
#if GUEST_PAGING_LEVELS >= 4
-void sh_destroy_l4_shadow(struct vcpu *v, mfn_t smfn)
+void sh_destroy_l4_shadow(struct domain *d, mfn_t smfn)
{
- struct domain *d = v->domain;
shadow_l4e_t *sl4e;
struct page_info *sp = mfn_to_page(smfn);
u32 t = sp->u.sh.type;
@@ -1904,7 +1903,7 @@ void sh_destroy_l4_shadow(struct vcpu *v, mfn_t smfn)
SHADOW_FOREACH_L4E(sl4mfn, sl4e, 0, 0, d, {
if ( shadow_l4e_get_flags(*sl4e) & _PAGE_PRESENT )
{
- sh_put_ref(v, shadow_l4e_get_mfn(*sl4e),
+ sh_put_ref(d, shadow_l4e_get_mfn(*sl4e),
(((paddr_t)mfn_x(sl4mfn)) << PAGE_SHIFT)
| ((unsigned long)sl4e & ~PAGE_MASK));
}
@@ -1914,9 +1913,8 @@ void sh_destroy_l4_shadow(struct vcpu *v, mfn_t smfn)
shadow_free(d, smfn);
}
-void sh_destroy_l3_shadow(struct vcpu *v, mfn_t smfn)
+void sh_destroy_l3_shadow(struct domain *d, mfn_t smfn)
{
- struct domain *d = v->domain;
shadow_l3e_t *sl3e;
struct page_info *sp = mfn_to_page(smfn);
u32 t = sp->u.sh.type;
@@ -1936,7 +1934,7 @@ void sh_destroy_l3_shadow(struct vcpu *v, mfn_t smfn)
sl3mfn = smfn;
SHADOW_FOREACH_L3E(sl3mfn, sl3e, 0, 0, {
if ( shadow_l3e_get_flags(*sl3e) & _PAGE_PRESENT )
- sh_put_ref(v, shadow_l3e_get_mfn(*sl3e),
+ sh_put_ref(d, shadow_l3e_get_mfn(*sl3e),
(((paddr_t)mfn_x(sl3mfn)) << PAGE_SHIFT)
| ((unsigned long)sl3e & ~PAGE_MASK));
});
@@ -1947,9 +1945,8 @@ void sh_destroy_l3_shadow(struct vcpu *v, mfn_t smfn)
#endif /* GUEST_PAGING_LEVELS >= 4 */
-void sh_destroy_l2_shadow(struct vcpu *v, mfn_t smfn)
+void sh_destroy_l2_shadow(struct domain *d, mfn_t smfn)
{
- struct domain *d = v->domain;
shadow_l2e_t *sl2e;
struct page_info *sp = mfn_to_page(smfn);
u32 t = sp->u.sh.type;
@@ -1974,7 +1971,7 @@ void sh_destroy_l2_shadow(struct vcpu *v, mfn_t smfn)
sl2mfn = smfn;
SHADOW_FOREACH_L2E(sl2mfn, sl2e, 0, 0, d, {
if ( shadow_l2e_get_flags(*sl2e) & _PAGE_PRESENT )
- sh_put_ref(v, shadow_l2e_get_mfn(*sl2e),
+ sh_put_ref(d, shadow_l2e_get_mfn(*sl2e),
(((paddr_t)mfn_x(sl2mfn)) << PAGE_SHIFT)
| ((unsigned long)sl2e & ~PAGE_MASK));
});
@@ -1983,9 +1980,8 @@ void sh_destroy_l2_shadow(struct vcpu *v, mfn_t smfn)
shadow_free(d, smfn);
}
-void sh_destroy_l1_shadow(struct vcpu *v, mfn_t smfn)
+void sh_destroy_l1_shadow(struct domain *d, mfn_t smfn)
{
- struct domain *d = v->domain;
shadow_l1e_t *sl1e;
struct page_info *sp = mfn_to_page(smfn);
u32 t = sp->u.sh.type;
@@ -3799,6 +3795,7 @@ sh_update_linear_entries(struct vcpu *v)
static void
sh_detach_old_tables(struct vcpu *v)
{
+ struct domain *d = v->domain;
mfn_t smfn;
int i = 0;
@@ -3812,7 +3809,6 @@ sh_detach_old_tables(struct vcpu *v)
#else
if ( v->arch.paging.shadow.guest_vtable )
{
- struct domain *d = v->domain;
if ( shadow_mode_external(d) || shadow_mode_translate(d) )
sh_unmap_domain_page_global(v->arch.paging.shadow.guest_vtable);
v->arch.paging.shadow.guest_vtable = NULL;
@@ -3831,7 +3827,7 @@ sh_detach_old_tables(struct vcpu *v)
{
smfn = pagetable_get_mfn(v->arch.shadow_table[i]);
if ( mfn_x(smfn) )
- sh_put_ref(v, smfn, 0);
+ sh_put_ref(d, smfn, 0);
v->arch.shadow_table[i] = pagetable_null();
}
}
@@ -3904,7 +3900,7 @@ sh_set_toplevel_shadow(struct vcpu *v,
SHADOW_ERROR("can't re-pin %#lx\n", mfn_x(old_smfn));
domain_crash(d);
}
- sh_put_ref(v, old_smfn, 0);
+ sh_put_ref(d, old_smfn, 0);
}
}
diff --git a/xen/arch/x86/mm/shadow/multi.h b/xen/arch/x86/mm/shadow/multi.h
index 7f829fd..614103d 100644
--- a/xen/arch/x86/mm/shadow/multi.h
+++ b/xen/arch/x86/mm/shadow/multi.h
@@ -39,16 +39,16 @@ SHADOW_INTERNAL_NAME(sh_map_and_validate_gl4e,
GUEST_LEVELS)(
extern void
SHADOW_INTERNAL_NAME(sh_destroy_l1_shadow, GUEST_LEVELS)(
- struct vcpu *v, mfn_t smfn);
+ struct domain *d, mfn_t smfn);
extern void
SHADOW_INTERNAL_NAME(sh_destroy_l2_shadow, GUEST_LEVELS)(
- struct vcpu *v, mfn_t smfn);
+ struct domain *d, mfn_t smfn);
extern void
SHADOW_INTERNAL_NAME(sh_destroy_l3_shadow, GUEST_LEVELS)(
- struct vcpu *v, mfn_t smfn);
+ struct domain *d, mfn_t smfn);
extern void
SHADOW_INTERNAL_NAME(sh_destroy_l4_shadow, GUEST_LEVELS)(
- struct vcpu *v, mfn_t smfn);
+ struct domain *d, mfn_t smfn);
extern void
SHADOW_INTERNAL_NAME(sh_unhook_32b_mappings, GUEST_LEVELS)
diff --git a/xen/arch/x86/mm/shadow/private.h b/xen/arch/x86/mm/shadow/private.h
index 3820d9e..a848c94 100644
--- a/xen/arch/x86/mm/shadow/private.h
+++ b/xen/arch/x86/mm/shadow/private.h
@@ -532,7 +532,7 @@ sh_unmap_domain_page_global(void *p)
/**************************************************************************/
/* Shadow-page refcounting. */
-void sh_destroy_shadow(struct vcpu *v, mfn_t smfn);
+void sh_destroy_shadow(struct domain *d, mfn_t smfn);
/* Increase the refcount of a shadow page. Arguments are the mfn to refcount,
* and the physical address of the shadow entry that holds the ref (or zero
@@ -572,9 +572,8 @@ static inline int sh_get_ref(struct vcpu *v, mfn_t smfn,
paddr_t entry_pa)
/* Decrease the refcount of a shadow page. As for get_ref, takes the
* physical address of the shadow entry that held this reference. */
-static inline void sh_put_ref(struct vcpu *v, mfn_t smfn, paddr_t entry_pa)
+static inline void sh_put_ref(struct domain *d, mfn_t smfn, paddr_t entry_pa)
{
- struct domain *d = v->domain;
u32 x, nx;
struct page_info *sp = mfn_to_page(smfn);
@@ -602,7 +601,7 @@ static inline void sh_put_ref(struct vcpu *v, mfn_t smfn,
paddr_t entry_pa)
sp->u.sh.count = nx;
if ( unlikely(nx == 0) )
- sh_destroy_shadow(v, smfn);
+ sh_destroy_shadow(d, smfn);
}
@@ -728,7 +727,7 @@ static inline void sh_unpin(struct vcpu *v, mfn_t smfn)
}
sh_terminate_list(&tmp_list);
- sh_put_ref(v, smfn, 0);
+ sh_put_ref(d, smfn, 0);
}
--
generated by git-patchbot for /home/xen/git/xen.git#master
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |