[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] Paging and memory sharing for HVM guests
>>> Grzegorz Milos <gm281@xxxxxxxxx> 17.12.09 00:14 >>> >--- a/xen/include/public/domctl.h Tue Dec 15 10:47:36 2009 -0800 >+++ b/xen/include/public/domctl.h Tue Dec 15 10:47:42 2009 -0800 >@@ -691,6 +691,31 @@ > > }; > >+/* >+ * Memory event operations >+ */ >+ >+#define XEN_DOMCTL_mem_event_op 56 >+ >+/* Add and remove memory handlers */ >+#define XEN_DOMCTL_MEM_EVENT_OP_ENABLE 0 >+#define XEN_DOMCTL_MEM_EVENT_OP_DISABLE 1 >+ >+struct xen_domctl_mem_event_op { >+ uint32_t op; /* XEN_DOMCTL_MEM_EVENT_OP_* */ >+ uint32_t mode; /* XEN_DOMCTL_MEM_EVENT_ENABLE_* */ >+ >+ /* OP_ENABLE */ >+ unsigned long shared_addr; /* IN: Virtual address of shared page */ >+ unsigned long ring_addr; /* IN: Virtual address of ring page */ >+ >+ /* Other OPs */ >+ unsigned long gfn; /* IN: gfn of page being operated on */ >+}; >+typedef struct xen_domctl_mem_event_op xen_domctl_mem_event_op_t; >+DEFINE_XEN_GUEST_HANDLE(xen_domctl_mem_event_op_t); >+ >+ > struct xen_domctl { > uint32_t cmd; > uint32_t interface_version; /* XEN_DOMCTL_INTERFACE_VERSION */ The use of (unsigned) long in domctl.h and sysctl.h is invalid, as it breaks 32-bit dom0 on 64-bit hv. >--- a/xen/include/public/domctl.h Tue Dec 15 13:05:35 2009 -0800 >+++ b/xen/include/public/domctl.h Tue Dec 15 13:05:38 2009 -0800 >... >@@ -103,6 +104,7 @@ > uint32_t flags; /* XEN_DOMINF_* */ > uint64_aligned_t tot_pages; > uint64_aligned_t max_pages; >+ uint64_aligned_t shr_pages; > uint64_aligned_t shared_info_frame; /* GMFN of shared_info struct */ > uint64_aligned_t cpu_time; > uint32_t nr_online_vcpus; /* Number of VCPUs currently online. */ This change is not valid without changing XEN_DOMCTL_INTERFACE_VERSION, since tools outside the Xen tree (namely, libvirt, which is currently broken because of this) rely on knowing all (valid) (version, structure-layout) pairs. >@@ -727,6 +729,52 @@ > typedef struct xen_domctl_mem_event_op xen_domctl_mem_event_op_t; > DEFINE_XEN_GUEST_HANDLE(xen_domctl_mem_event_op_t); > >+/* >+ * Memory sharing operations >+ */ >+#define XEN_DOMCTL_mem_sharing_op 58 >+ >+#define XEN_DOMCTL_MEM_SHARING_OP_CONTROL 0 >+#define XEN_DOMCTL_MEM_SHARING_OP_NOMINATE_GFN 1 >+#define XEN_DOMCTL_MEM_SHARING_OP_NOMINATE_GREF 2 >+#define XEN_DOMCTL_MEM_SHARING_OP_SHARE 3 >+#define XEN_DOMCTL_MEM_SHARING_OP_RESUME 4 >+#define XEN_DOMCTL_MEM_SHARING_OP_DEBUG_GFN 5 >+#define XEN_DOMCTL_MEM_SHARING_OP_DEBUG_MFN 6 >+#define XEN_DOMCTL_MEM_SHARING_OP_DEBUG_GREF 7 >+ >+#define XEN_DOMCTL_MEM_SHARING_S_HANDLE_INVALID (-10) >+#define XEN_DOMCTL_MEM_SHARING_C_HANDLE_INVALID (-9) >+ >+struct xen_domctl_mem_sharing_op { >+ uint8_t op; /* XEN_DOMCTL_MEM_EVENT_OP_* */ >+ >+ union { >+ int enable; /* for OP_CONTROL */ >+ >+ struct mem_sharing_op_nominate { /* for OP_NOMINATE */ >+ union { >+ unsigned long gfn; /* IN: gfn to nominate */ >+ uint32_t grant_ref; /* IN: grant ref to nominate */ >+ }; >+ uint64_t handle; /* OUT: the handle */ >+ } nominate; >+ struct mem_sharing_op_share { >+ uint64_t source_handle; /* IN: handle to the source page */ >+ uint64_t client_handle; /* IN: handle to the client page */ >+ } share; >+ struct mem_sharing_op_debug { >+ union { >+ unsigned long gfn; /* IN: gfn to debug */ >+ unsigned long mfn; /* IN: mfn to debug */ >+ grant_ref_t gref; /* IN: gref to debug */ >+ }; >+ } debug; >+ }; >+}; >+typedef struct xen_domctl_mem_sharing_op xen_domctl_mem_sharing_op_t; >+DEFINE_XEN_GUEST_HANDLE(xen_domctl_mem_sharing_op_t); >+ > > struct xen_domctl { > uint32_t cmd; Like above, using unsigned long here is invalid. Using int doesn't seem to be too good an idea either, for portability reasons. I think fixed-size integer types should be used everywhere. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |