[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH V2 4/9] xentrace: Support for ARM platform
Moved get_pg_owner() and put_pg_owner() from the arch specific mm.c source files into the common page_alloc.c source. This was done as theses functions are now needed by both architectures to support xentrace on the ARM platform. Forward declarations were added to mm.h. One conditional compilation check was added in get_pg_owner() for the is_pvh_domain(curr) check which is only valid to perform on X86 platforms. Signed-off-by: Benjamin Sanda <ben.sanda@xxxxxxxxxxxxxxx> --- xen/common/page_alloc.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c index 98e30e5..8fe9c03 100644 --- a/xen/common/page_alloc.c +++ b/xen/common/page_alloc.c @@ -145,6 +145,7 @@ #ifdef CONFIG_X86 #include <asm/p2m.h> #include <asm/setup.h> /* for highmem_start only */ +#include <asm/paging.h> #else #define p2m_pod_offline_or_broken_hit(pg) 0 #define p2m_pod_offline_or_broken_replace(pg) BUG_ON(pg != NULL) @@ -1996,6 +1997,56 @@ static __init int register_heap_trigger(void) } __initcall(register_heap_trigger); +struct domain *get_pg_owner(domid_t domid) +{ + struct domain *pg_owner = NULL, *curr = current->domain; + + if ( likely(domid == DOMID_SELF) ) + { + pg_owner = rcu_lock_current_domain(); + goto out; + } + + if ( unlikely(domid == curr->domain_id) ) + { + gdprintk(XENLOG_WARNING,"Cannot specify itself as foreign domain"); + goto out; + } + +#ifdef CONFIG_X86 + if ( !is_pvh_domain(curr) && unlikely(paging_mode_translate(curr)) ) + { + gdprintk(XENLOG_WARNING,"Cannot mix foreign mappings with translated domains"); + goto out; + } +#endif + + switch ( domid ) + { + case DOMID_IO: + pg_owner = rcu_lock_domain(dom_io); + break; + case DOMID_XEN: + pg_owner = rcu_lock_domain(dom_xen); + break; + default: + if ( (pg_owner = rcu_lock_domain_by_id(domid)) == NULL ) + { + gdprintk(XENLOG_WARNING,"Unknown domain '%u'", domid); + break; + } + break; + } + + out: + return pg_owner; +} + +void put_pg_owner(struct domain *pg_owner) +{ + rcu_unlock_domain(pg_owner); +} + /* * Local variables: * mode: C -- 2.5.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |