[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] Base domain structure and public interface to support memory events.
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1261031275 0 # Node ID 49ad2a499edba92874590ecf72a7c7d216576099 # Parent ba42d74c9adc0bb73f06236d15e241e55777fe96 Base domain structure and public interface to support memory events. Signed-off-by: Patrick Colp <Patrick.Colp@xxxxxxxxxx> --- xen/include/public/mem_event.h | 67 +++++++++++++++++++++++++++++++++++++++++ xen/include/public/xen.h | 1 xen/include/xen/sched.h | 30 ++++++++++++++++++ 3 files changed, 98 insertions(+) diff -r ba42d74c9adc -r 49ad2a499edb xen/include/public/mem_event.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xen/include/public/mem_event.h Thu Dec 17 06:27:55 2009 +0000 @@ -0,0 +1,67 @@ +/****************************************************************************** + * mem_event.h + * + * Memory event common structures. + * + * Copyright (c) 2009 by Citrix (R&D) Ltd. (Patrick Colp) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef _XEN_PUBLIC_MEM_EVENT_H +#define _XEN_PUBLIC_MEM_EVENT_H + + +#include "xen.h" +#include "io/ring.h" + + +/* Memory event notification modes */ +#define MEM_EVENT_MODE_ASYNC 0 +#define MEM_EVENT_MODE_SYNC (1 << 0) +#define MEM_EVENT_MODE_SYNC_ALL (1 << 1) + +/* Memory event flags */ +#define MEM_EVENT_FLAG_PAUSED (1 << 0) + + +typedef struct mem_event_shared_page { + int port; +} mem_event_shared_page_t; + +typedef struct mem_event_st { + unsigned long gfn; + unsigned long offset; + unsigned long p2mt; + int vcpu_id; + uint64_t flags; +} mem_event_request_t, mem_event_response_t; + + +DEFINE_RING_TYPES(mem_event, mem_event_request_t, mem_event_response_t); + + +#endif + + +/* + * Local variables: + * mode: C + * c-set-style: "BSD" + * c-basic-offset: 4 + * tab-width: 4 + * indent-tabs-mode: nil + * End: + */ diff -r ba42d74c9adc -r 49ad2a499edb xen/include/public/xen.h --- a/xen/include/public/xen.h Thu Dec 17 06:27:55 2009 +0000 +++ b/xen/include/public/xen.h Thu Dec 17 06:27:55 2009 +0000 @@ -146,6 +146,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_pfn_t); #define VIRQ_XENOPROF 7 /* V. XenOprofile interrupt: new sample available */ #define VIRQ_CON_RING 8 /* G. (DOM0) Bytes received on console */ #define VIRQ_PCPU_STATE 9 /* G. (DOM0) PCPU state changed */ +#define VIRQ_MEM_EVENT 10 /* G. (DOM0) A memory event has occured */ /* Architecture-specific VIRQ definitions. */ #define VIRQ_ARCH_0 16 diff -r ba42d74c9adc -r 49ad2a499edb xen/include/xen/sched.h --- a/xen/include/xen/sched.h Thu Dec 17 06:27:55 2009 +0000 +++ b/xen/include/xen/sched.h Thu Dec 17 06:27:55 2009 +0000 @@ -20,6 +20,7 @@ #include <xen/rcupdate.h> #include <xen/irq.h> #include <xen/mm.h> +#include <public/mem_event.h> #ifdef CONFIG_COMPAT #include <compat/vcpu.h> @@ -161,6 +162,32 @@ struct vcpu #define domain_unlock(d) spin_unlock_recursive(&(d)->domain_lock) #define domain_is_locked(d) spin_is_locked(&(d)->domain_lock) +/* Memory event */ +struct mem_event_domain +{ + /* ring lock */ + spinlock_t ring_lock; + /* shared page */ + mem_event_shared_page_t *shared_page; + /* shared ring page */ + void *ring_page; + /* front-end ring */ + mem_event_front_ring_t front_ring; + /* if domain has been paused due to ring contention */ + bool_t paused; + int paused_vcpus[MAX_VIRT_CPUS]; + /* the memory event mode */ + unsigned long mode; + /* domain to receive memory events */ + struct domain *domain; + /* enabled? */ + bool_t enabled; + /* event channel port (vcpu0 only) */ + int xen_port; + /* tasklet */ + struct tasklet tasklet; +}; + struct domain { domid_t domain_id; @@ -277,6 +304,9 @@ struct domain /* Non-migratable and non-restoreable? */ bool_t disable_migrate; + + /* Memory paging support */ + struct mem_event_domain mem_event; }; struct domain_setup_info _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |